optparseとは
optparseはrubyのスクリプトファイルを実行する際に、Unix系OSのようにオプションを指定することができるようにするRubyのライブラリです。
公式
使い方
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になります。