hiro_env

モダンな技術スタックを扱う会社のエンジニアになるまでの学習記録

Ruby optparseの使い方(基礎)

optparseとは

optparseはrubyスクリプトファイルを実行する際に、Unix系OSのようにオプションを指定することができるようにするRubyのライブラリです。

公式

docs.ruby-lang.org

使い方

Rubyに組み込まれている標準ライブラリのため、gemをインストールする必要はありません。
require 'optparse' で使用することができます。

基礎構文:

require 'optparse'

opt = OptionParser.new
opt.on('-オプション名 ヘルプの際に表示されるパラメータの内容', オプションに渡すパラメータの型, 'オプションの説明') do |渡されるパラメータ|
  行う処理
end
opt.parse!

opt = OptionParser.newインスタンス化を行いopt変数に格納します。
opt.on()の引数の中でオプションの設定を行い、do~endのブロックの中で実際にオプションで渡されるパラメータを使う処理を書きます。
最後にopt変数のparse!メソッドを使い、解析を行います。

解析とは

Rubyスクリプト言語のため、実行した際に処理が行われます。
Rubyが実行される際、ARGVというグローバル配列に実行時のオプションが配列で記録されます。

例(-mで月を指定できるようにするカレンダーのスクリプトのオプションの場合):

require 'optparse'

# オプションがなければ現在の月を指定する
options = { month: Date.today.month }

# calendar.rb内のオプションの処理 (-m で指定された月をoptions[:month]に代入する)
opt = OptionParser.new
opt.on('-m Month', Integer, '1~12の数字で月を指定してください') { |month| options[:month] = month }
opt.parse!


# 実行する際 (コードの中ではなくターミナルなどのCLIから実行)
ruby calendar.rb -m 8 

この例文を実行する際には、ARGVに["-m", "8"]が格納されます。
解析とは、ARGV配列からオプションを読み取り、処理を実行することを指します。

.parse!は自動でARGVの配列が渡るようになっていますが、
あえて冗長に書くなら.parse!(ARGV)のようにこの配列を引数に渡すこともできます。

このようにruby ファイル名 -m 8 を実行した際、インスタンス化したオプションの設定が入っているopt変数を最後にparse!で解析することで、オプションの機能を実現しています。

補足

  • ARGVにはString型で全てのオプション、及びそのパラメータが格納されていますが、パラメータはopt.onで指定した型に自動的に変換されます。
    指定しない場合、デフォルトのStringとして文字列で受け取ります。(処理の際必要に応じて型変換が必要になります)

  • オプション名以外は全て省略することもできます。

  • オプションにパラメータを指定しない場合、ブロックパラメータはtrueかfalseになります。