Rubyのoptparseライブラリの使い方
はじめに
Rubyを扱う機会があり、その際optparseというライブラリを使用したので、その使い方についてまとめます。
optparseとは
optparseとは、コマンドラインのオプションを取り扱うためのライブラリです。
例えばrubyで、sample.rbのプログラムがあるとします。
そのプログラムをコマンドラインで実行する際、-a {valueA} -b {valueB}
のような形で、オプションとその引数値を取り扱いたい場合に使用するライブラリです。
optparseの基本的な使い方
下記は、optparseの基本的な使い方の流れです。
- OptionParserオブジェクトを作成する
- オプションを取り扱うブロックを、1で作成したオブジェクトに登録する
- コマンドラインをparseする
ソースコード例
sample.rbのプログラムで、-aと-bのオプションを受け付けるコマンドを作成する例を示します。
require 'optparse' opt = OptionParser.new # 1. OptionParserオブジェクトを作成する opt.on('-a') {|v| p v } # 2. オプションを取り扱うブロックを、1で作成したオブジェクトに登録する opt.on('-b') {|v| p v } # 2. オプションを取り扱うブロックを、1で作成したオブジェクトに登録する opt.parse!(ARGV) # 3. コマンドラインをparseする p ARGV
実行結果
$ ruby sample.rb -a valuA -b valueB true true ["valuA", "valueB"]
OptionParser#onメソッドの引数でオプションを定義し、引数が指定された時の処理をブロックで記述します。
このとき、ブロックの引数にはオプションが指定されたとして、true
が渡されます。
OptionParser#parse!メソッドにより、コマンドライン(ARGV)の解析を行います。
ARGV
はRubyスクリプトに与えられた引数を表す配列です。
OptionParser#parse!メソッドでは、ARGVからオプション(ex: -a、
-b`)が取り除かれます。
オプションに指定された値を受け付ける
OptionParser#onメソッドのオプション定義で末尾に任意の記述をすると、そのオプションは引数を受け付けることを指定します。
ソースコード例
require 'optparse' opt = OptionParser.new opt.on('-a VAL') {|v| p v } # VALを追加 opt.on('-b') {|v| p v } opt.parse!(ARGV) p ARGV
実行結果
$ ruby sample.rb -a valuA -b valueB "valuA" true ["valueB"]
もし、オプションの引数を必須としたくない場合は、任意の記述に[]
を付加します。
require 'optparse' opt = OptionParser.new opt.on('-a [VAL]') {|v| p v } # VALを追加 opt.on('-b') {|v| p v } opt.parse!(ARGV) p ARGV
オプションの引数をハッシュに格納
受け付けたオプションの引数値を、ハッシュに格納して、以降の処理でも使用できるようにするには、下記のように記述をします。
require 'optparse' params = {} opt = OptionParser.new opt.on('-a [VAL]') {|v| params[:a] = v } opt.on('-b [VAL]') {|v| params[:b] = v } opt.parse!(ARGV) p ARGV p params
上記の実行結果は下記となります。
$ ruby sample.rb -a valuA -b valueB [] {:a=>"valuA", :b=>"valueB"} // <= paramsにオプションの引数値が格納されたので、以降の処理で利用可能
OptionParser#parse!
メソッドについて
ソースコード例を実行していく中で、opt.parse!(ARGV)
の記述をうっかりと消してしまって、params
ハッシュに値が格納できないことがありました。
opt.parse!(ARGV)
メソッドはコマンドライン引数(ARGV
配列)を解析し、選択したオプションに応じて、対応するブロックを実行します。
このメソッドが呼び出されない限り、オプションの解析が行われず、params
ハッシュに値が格納されないので注意が必要です。
まとめ
今回必要となった使用方法を中心に、optparseライブラリの使い方をまとめました。 参考になれば幸いです!