RubyやPythonでコマンド作成

こんにちは、サイオステクノロジーの有村です。

前置き

以前はRubyで、今はPython(3)で、小粒の仕事をこなすコマンドを作ることがあります。例えばサクッとテスト用の秘密鍵とCSRを作るとか、サクッと指定した文字数のランダムな文字列をたくさん出力するとかそういう仕事です。それぞれ、とりあえず動くところまでコマンドを作るまでの流れについてまとめて見ました。

Ruby

まずは何はともあれ /usr/local/bin/ に移動して仕事の名前を与えてあげます。

$ cd /usr/local/bin/
$ sudo vi mkcsr

コマンドとして使うので拡張子は不要です。

#!/usr/bin/env ruby

冒頭にこのファイルを ruby で実行するよう宣言します。
こちらは ruby の実際のパスを問わず env のある多くのOSで動作する記述になります。
この行を shebang と呼びます。
shebang を記述したら :w でファイルを保存し、 :e でファイルを開き直してください。
拡張子はありませんが、shebang を読んで vim もファイルを ruby として再解釈し、1行目が色付けされます。
「色つかないな」というときは適当に :w :e しましょう。

#! /usr/bin/env ruby

require 'optparse'
require 'openssl'

def main
  # option
  params = ARGV.getopts("", "dry-run")
  p params

  # initialize random seed
  OpenSSL::Random.seed(File.read("/dev/random", 16))

  # key pair generate
  rsa = OpenSSL::PKey::RSA.generate(2048)
  p rsa

  # private key
  passphrase = "secret"
  File.open("private_key.pem", 'w') do |f|
    f.write(rsa.export(OpenSSL::Cipher.new("aes256"), passphrase))
  end
end

main

:wq
とりあえず途中まで書きました。
optparse はオプション指定やヘルプが作れて便利なので、こういうライトコマンド作成の際はよく使います。
library optparse (Ruby 2.6.0)

$ sudo chmod 755 mkcsr

権限を修正します。

$ which mkcsr
/usr/local/bin/mkcsr

コマンドが認識されていることを確認しましょう。

$ cd /tmp
$ mkcsr --help
Usage: mkcsr [options]
        --dry-run
$ mkcsr
{"dry-run"=>false}
#<OpenSSL::PKey::RSA:0x00007fffcaf42b90>

$ ls private_key.pem
private_key.pem

$ cat private_key.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
(略)

作ったところまで動作確認できました。

$ sudo vim /usr/local/bin/mkcsr

ちょくちょく動作確認しながら続きを作っていきましょう。

Python3

Rubyと同じ流れなのでいろいろと省略しました。

# cd /usr/local/bin/
# sudo vi randomstr
#!/usr/bin/env python3

:w :e

#!/usr/bin/env python3

import argparse
import random
import string

def main():
    parser = argparse.ArgumentParser(description='Output random string')
    parser.add_argument('--dry-run')
    args = parser.parse_args()
    print("random")
    print(randomstr(16))

def randomstr(n):
    return ''.join(random.choices(string.ascii_letters + string.digits, k=n))

if __name__ == "__main__":
    main()

:wq

Argparse チュートリアル ― Python 3.7.3 ドキュメント

$ sudo chmod 755 randomstr
$ which randomstr
/usr/local/bin/randomstr
$ randomstr -h
usage: randomstr [-h] [--dry-run DRY_RUN]

Output random string

optional arguments:
  -h, --help         show this help message and exit
  --dry-run DRY_RUN
$ randomstr
random
GzS0RywsDsmy0knX

$ sudo vi randomstr

まとめ

それぞれのスクリプト言語でコマンド利用を想定したライブラリがあるので、それらを利用しつつ、細かい仕事を便利にしてみましょう。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

2人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です