Rubyのoptparseについて書いてみた

※詳しくは、以下の公式ドキュメントを参照

docs.ruby-lang.org

はじめに

RubyにはARGVを使用してコマンドライン引数を取り出す機能があります。

# sample.rb
com0 = ARGV[0]
com1 = ARGV[1]
com2 = ARGV[2]
com3 = ARGV[3]
p com0, com1, com2, com3

$ ruby sample.rb -a 'test1' -b 'test2'
# -a
# test1
# -b
# test2

optparseを使う

optparseを使うことでオプションを受け付けることができるようになります。 先ほどの例にoptparseを入れて確認してみましょう。

# sample.rb
require 'optparse'
opt = OptionParser.new

opt.on('-a')
opt.on('-b')

# parse!()の場合、ARGVが変更される
opt.parse!(ARGV)
p ARGV

$ ruby sample.rb -a 'test1' -b 'test2'
# ["test1", "test2"]

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

このように、aオプションとbオプションを作成することができました。

オプションの引数

-aオプションの引数の指定を必須にする場合は、-a VALと指定します。必須ではない場合は-a [VAL]とします。

# sample.rb
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 foo bar -b baz
# "foo"
# true
# ["bar", "baz"]

$ ruby sample.rb -a
#/usr/local/lib/ruby/1.9/optparse.rb:455:in `parse': missing argument: -a (OptionParser::MissingArgument)