Rubyのoptparseライブラリの使い方

はじめに

Rubyを扱う機会があり、その際optparseというライブラリを使用したので、その使い方についてまとめます。

optparseとは

optparseとは、コマンドラインのオプションを取り扱うためのライブラリです。

例えばrubyで、sample.rbのプログラムがあるとします。
そのプログラムをコマンドラインで実行する際、-a {valueA} -b {valueB}のような形で、オプションとその引数値を取り扱いたい場合に使用するライブラリです。

optparseの基本的な使い方

下記は、optparseの基本的な使い方の流れです。

  1. OptionParserオブジェクトを作成する
  2. オプションを取り扱うブロックを、1で作成したオブジェクトに登録する
  3. コマンドラインを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)の解析を行います。
ARGVRubyスクリプトに与えられた引数を表す配列です。

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ライブラリの使い方をまとめました。 参考になれば幸いです!

参考