【Ruby】optparseについて

optparseとは

optparseは、コマンドラインのオプションを取り扱うためのライブラリです。
コマンドを実行するとき、”-a”(任意の文字)のようにオプションを指定することができる。
また、Ruby標準ライブラリの一部のため、インストールなどは不要で簡単に利用できます。

基本的な使用例

1 optpaseをrequireする

require 'optparse'

2 OptionParserオブジェクトoptを生成する

opt = OptionParser.new

3 オプションを取り扱うブロックをoptに登録する

opt.on('-a') {|v| p v }

onメソッドはオプションを定義し、引数が指定されたときの処理をブロックで記述する。
ブロックの引数にはオプションが指定されたことを示す true が渡される。
onメソッドが呼ばれた時点ではブロックは実行されず、登録のみが行われる。

4 opt.parse(ARGV) でコマンドラインを実際にparseする

opt.parse!(ARGV)

parseメソッドが呼ばれた際に、コマンドラインにオプションが指定されていればブロックが実行される。

require 'optparse'
opt = OptionParser.new

opt.on('-a') {|v| p v }
opt.on('-b') {|v| p v }

opt.parse!(ARGV)
p ARGV


$ ruby sample.rb -a foo bar -b baz
# => true
     true
     ["foo", "bar", "baz"]

オプション

OptionParser自体は、どのオプションが指定されたかを記憶しないため、その後の処理でオプションによる条件を使用する場合は、別にコンテナ格納する必要がある。

require 'optparse'

# OptionParser インスタンスの生成
opt = OptionParser.new

# オプションに対するパラメータを格納するハッシュ
params = {}

# -a オプションの処理
opt.on('-a') { |v| params[:a] = v }

# -b オプションの処理
opt.on('-b') { |v| params[:b] = v }

# コマンドライン引数の解析
opt.parse!(ARGV)

# 解析結果の表示
p ARGV
p params


$ ruby sample.rb -a foo bar -b baz
# => ["foo", "bar", "baz"]
     {:a=>true, :b=>true}

ロングオプション

ショートオプションの他にロングオプションも定義できる。 onメソッドでオプション定義するときにショートオプションと一緒にロングオプションとして渡したい値を指定する。

require 'optparse'
opt = OptionParser.new

opt.on('-a', '--foo') {|v| p v }
opt.on('--bar') {|v| p v }

opt.parse!(ARGV)
p ARGV

$ ruby sample.rb -a foo bar --bar baz
# => true
     true
     ["foo", "bar", "baz"]