RubyやPythonでコマンド作成

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【5/21開催】Azure OpenAI ServiceによるRAG実装ガイドを公開しました
生成AIを活用したユースケースで最も一番熱いと言われているRAGの実装ガイドを公開しました。そのガイドの紹介をおこなうイベントです!!
https://tech-lab.connpass.com/event/315703/

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

前置き

以前は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

まとめ

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

アバター画像
About 有村 悠希 5 Articles
認証基盤、ID管理システムのサポートエンジニア。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる