脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

[Ruby]オプションの使い方・取得の仕方(OptionParser)

Rubyのoptionを扱うOptionParserの使い方を簡単に書きます。

OptionParser

コマンドラインのオプションを取り扱うためのクラスです。
class OptionParser (Ruby 2.1.0)

使い方

公式ドキュメントにも書いてありますが、使い方の流れは以下になります。
1. OptionParser オブジェクト opt を生成する。
2. オプションを取り扱うブロックを opt に登録する。
3. opt.parse(ARGV) でコマンドラインを実際に parse する。

各項目を詳しく

1. OptionParser オブジェクト opt を生成する。

require 'optparse'
opt = OptionParser.new
  • オブジェクトの生成は普通にoptparseをrequireしてnew()でインスタンス化するだけです。

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

基本文法

opt.on("short option" ,"long option", "Explanation") {|v| options[:value] = v}
  # short option => 一文字の場合のオプション(-p, -d等)
  # long option  => 複数文字の場合のオプション(--process, --daemon等)
  # Explanation  => オプションの説明(-hで表示される)

実際の設定

options = {}
  
opt.on("-f" ,"--foo", "引数なしだよ") {|v| options[:f] = v}
opt.on("-b", "--bar <param>", "引数ありだよ") {|v| options[:bar] = v}
  • 1行目で各オプションの引数を格納するHashを作成します
  • 2行目以降で各オプションの実際の設定をします

オプションバナーとヘルプオプションの設定

opts.banner="usage:#{File.basename($0)} -f --bar [value]"
opts.on("-h", "--help", "Show this message") { puts opts; exit }
  • #{File.basename($0)}はこのファイルのファイル名を取得しています

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

opt.parse!(ARGV)

2までで作成したoptの設定に従って、実際の引数(ARGV)を読み込みます。

確認

実際のソースコード(opt.rb)

require 'optparse'

opt = OptionParser.new

options = {}
opt.on("-f" ,"--foo", "引数なしだよ"){|v| options[:f] = v}
opt.on("-b", "--bar <param>", "引数ありだよ") {|v| options[:bar] = v}

opt.banner="usage:#{File.basename($0)} -f --bar [value]"
opt.on("-h", "--help", "Show this message") { puts opt; exit }

opt.parse!(ARGV)
puts options

実行結果

$ ruby opt.rb -f --bar arg2
  # =>{:f=>true, :bar=>"arg2"}

$ ruby opt.rb -h
usage:opt.rb -f --bar [value]
    -f, --foo                        引数なしだよ
    -b, --bar <param>                引数ありだよ
    -h, --help                       Show this message