こんにちは!
今回はRubyのoptparseの使い方についてまとめます。
optparseとは
- コマンドラインのオプションを取り扱うライブラリ
- opt -> オプション
- parse -> 解析
使用例
require 'optparse' # optparseの読み込み opt = OptionParse.new # OptionParserオブジェクトを生成 opt.on('-a') # オプション -a を受け付ける opt.parse!(ARGV) # オプションの解析
parse!/parseメソッド
- ARGVの解析を行う
- onメソッドにブロックが指定されている場合、parse!/parseが呼ばれたときに実行される
parse!とparseの違い
- 例:
ruby sample.rb -a foo bar
parse!の場合
parse!
はARGVから-a
などのオプションを削除する- ARGV自体を書き換える
p ARGV # => ["-a", "foo", "bar"] opt.parse!(ARGV) p ARGV # => ["foo", "bar"]
parseの場合
parse
はオプションを残す
p ARGV # => ["-a", "foo", "bar"] opt.parse(ARGV) p ARGV # => ["-a", "foo", "bar"]
どのオプションが呼ばれたか記憶する
- 例:
ruby sample.rb -a foo bar -b baz
方法1
params = {} opt.on('-a') { |v| params[:a] = v } opt.on('-b') { |v| params[:b] = v } opt.parse!(ARGV) p ARGV # => ["foo", "bar", "baz"] p params #=> {:a=>true, :b=>true}
- ブロックパラメータ
v
には、オプションが存在するかどうかの真偽値が入る
方法2
params = {} opt.on('-a') { |v| v } opt.on('-b') { |v| v } opt.parse!(ARGV, into: params) p ARGV # => ["foo", "bar", "baz"] p params # => {:a=>true, :b=>true}
引数を受け取る
方法1
- 例:
ruby sample.rb -a foo bar -b baz
params = {} opt.on('-a VAL') { |v| v } opt.on('-b VAL') { |v| v } opt.parse!(ARGV, into: params) p ARGV # => ["bar"] p params # => {:a=>"foo", :b=>"baz"}
- onメソッドのオプション定義の末尾に文字列を書くと、そのオプションが引数を受け取ることの指定になる
- 文字列はなんでもよい
- ヘルプの見栄えが良くなるように書く
- 引数を省略すると例外が発生する
- オプションが必須でないときは
on('-a [VAL]')
と[ ]をつける
- オプションが必須でないときは
- 文字列はなんでもよい
方法2
params = ARGV.getopts("a:b:") p params # => {:a=>"foo", :b=>"baz"}
- optparseをrequireすると、ARGV.getoptsが使えるようになる
- 引数を受け取る場合は
文字列:
- 引数を受け取らない場合は
文字列
- 引数を受け取る場合は
おわりに
今回はRubyのoptparseの使い方についてまとめました。リファレンスマニュアルにはほかにも詳細な指定方法などが乗っていますが、細かい指定が必要ない場合はgetoptsを使うのがお手軽ですね。
100/100