はじめに
Rubyの学習としてカレンダーを作成した際に、オプションで月を指定できるようにするためにoptparse
ライブラリを使用したので、使い方をまとめました。
optparseとは
optparse
は、Rubyファイル実行時にオプションを指定できるようにするライブラリです。
使い方
基本パターン
- optparseをrequireする
- OptionParserオブジェクトを生成する
- onメソッドを用いて、オプションを指定するためのブロックを作成する
- parseメソッドを用いて、与えられたARGVをparseする
sample.rb
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
#=> []
$ ruby sample.rb -a foo -b bar
#=> true
#=> true
#=> ["-a", "foo", "-b", "baz"]
オプションに引数をつける
onメソッドのオプション定義の末尾に文字列を追加することで、オプションに引数を指定できるようになります。[]で囲った文字列を追加した場合は、引数は任意指定となり、文字列のみを追加した場合、引数は必須指定となります。
sumple.rb
require 'optparse'
opt = OptionParser.new
#引数を任意指定にする場合(引数として"[VAL]"を追加)
opt.on('-a [VAL]') {|v| p v }
#引数を必須指定にする場合(引数として"VAL"を追加)
opt.on('-b VAL') {|v| p v }
opt.parse(ARGV)
p ARGV
実行結果
$ ruby sample.rb -a foo
#=> "foo"
#=> ["-a", "foo"]
$ ruby sample.rb -a
#=> nil
#=> ["-a"]
$ ruby sample.rb -b bar
#=> "bar"
#=> ["-b", "bar"]
$ ruby sample.rb -b
sample.rb:9:in `<main>': missing argument: -b (OptionParser::MissingArgument)
ARGVの機能
optparse
をrequireするとARGVにOptionParser::Arguable
の機能が加わり、getoptsメソッドを使用して以下のような書き方もできます。
sample.rb
require 'optparse'
params = ARGV.getopts("a:b:")
p params
実行結果
$ ruby sample.rb -a foo -b bar
#=> {"a"=>"foo", "b"=>"bar"}
参考文献