見出し画像

[Ruby]コマンドライン引数とオプション処理

ややこしいのでまとめた。

optparseライブラリ

コマンドライン引数を扱うライブラリ。(標準添付ライブラリ)

ライブラリ一覧 > optparseライブラリ

基本的には以下の流れになる。

1. OptionParserオブジェクトoptを生成する
2. オプションを取り扱うブロックをoptに登録する
3. opt.parse(ARGV)でコマンドラインを実際にparseする

例:オプション -a, -b を受け付けるコマンドを作成する

require 'optparse'
opt = OptionParser.new
opt.on('-a') {|v| p v }
opt.on('-b') {|v| p v }
opt.parse!(ARGV)
p ARGV

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

OptionParser#onメソッドの引数でオプションを定義し、引数が指定された時の処理をブロックで記述する。ブロックの引数にはオプションが指定されたことを示すtrueが渡される。OptionParser#onメソッドが呼ばれた時点では、eachメソッドなどと違いブロックは実行されず、あくまで登録されるだけである。OptionParser#parseが呼ばれた時に、コマンドラインにオプションが指定されていれば実行される。

引数の処理

引数はoptparseを使わなくても定数ARGVから取得できる。

ライブラリ一覧 > 組み込みライブラリ > Objectクラス > ARGV (private)

puts ARGV

ruby ls_opt.rb foo bar
#=> foo
# bar
puts ARGV[0]
puts ARGV[1]

ruby ls_opt.rb foo bar baz
#=> foo
# bar

ショートネームオプションの処理

ARGV.getoptsを使う。

ライブラリ一覧 > optparseライブラリ > OptionParser::Arguableモジュール > getopts

require 'optparse'
options = ARGV.getopts('a')
puts options

ruby ls_opt.rb -a         
#=> {"a"=>true}

引数付きショートネームオプションの処理

require 'optparse'
options = ARGV.getopts('a:')
puts options

ruby ls_opt.rb -a 123
#=> {"a"=>"123"}

ロングネームオプションの処理

require 'optparse'
options = ARGV.getopts('', 'abc')
puts options

ruby ls_opt.rb --abc
#=> {"abc"=>true}

引数付きロングネームオプションの処理

require 'optparse'
options = ARGV.getopts('', 'abc:')
puts options

ruby ls_opt.rb --abc 567
#=> {"abc"=>"567"}

色々オプションの処理

require 'optparse'
options = ARGV.getopts('ab:', 'bar', 'buz:')
puts options

ruby ls_opt.rb -a -b 1 --bar --buz 333
#=> {"a"=>true, "b"=>"1", "bar"=>true, "buz"=>"333"}


いいなと思ったら応援しよう!