#author("2022-05-03T06:53:25+00:00","default:src128","src128") #author("2022-05-03T06:53:44+00:00","default:src128","src128") &tag(Ruby/OptionParser); *目次 [#ka21f7d1] #contents *関連ページ [#a648f896] *参考情報 [#c385c37c] -[[library optparse:http://docs.ruby-lang.org/ja/2.1.0/library/optparse.html]] *概要 [#wbf70088] -コマンドラインオプションを解析するライブラリ。 *基本的使用方法 [#p899961b] -以下のように使用する #pre{{ require 'optparse' opt = OptionParser.new opt.banner = "Usage: #{opt.program_name} [-h|--help] <args>" opt.separator("#{opt.program_name} Available Options") opt.version = '2.3.4' opt.on_head('-h', '--help', 'Show this message') do |v| puts opt.help exit end opts = {} opt.on('-a VAL') {|v| opts[:a] = v } opt.on('-b') {|v| opts[:b] = v } commands = ['backup', 'sync', 'list', 'expire', 'verify', 'delete'] opt.on('-c COMMAND', '--command=COMMAND', commands, commands.join('|')) {|v| opts[:c] = v} opt.on('-t VAL', '--type=VAL', ['foo', 'bar' 'baz']) {|v| opts[:t] = v } #選択肢は配列として第二引数に指定 opt.parse!(ARGV) p opts }} -以下が出力される。 #pre{{ $ ruby option.rb -a foo -b {:a=>"foo", :b=>true} }} -ヘルプを表示する場合。 #pre{{ ruby option.rb --help Usage: option [-h|--help] <args> -h, --help Show this message option Available Options -a VAL -b -c, --check-type=VAL }} -on_head / on_tailはopt.helpで表示されるヘルプ文字列の並びに影響する。on_headはseparatorの前になり、on_tailはonの後ろとなる。 -h / -vはデフォルトでハンドリングされるが、-vのほうは適切な表示を行いたい場合opt.versionを設定しておく。 *その他使用方法 [#o497f465] **ショートオプションのみを指定 [#r2b57d56] -以下のように指定 #pre{{ opt.on('-a VAL') {|v| opts[:a] = v } opt.on('-b') {|v| opts[:b] = v } opt.on('-t', 'test option}{|v| opts[:t] = v} }} -ショートオプションは最初の1文字のみが採用される。例えば"-to"を指定すると"-t o"と解釈される。 #pre {{ #pre{{ opt.on('-to', 'test option') {|v| opts[:to] = v} }} *ロングオプションのみを指定 [#l3d343f6] -以下のように指定 #pre{{ opt.on('--test-option', 'test option') {|v| opts[:test_option] = v} }} *Tips [#f5db24a4] **必要な引数が存在しない場合ヘルプを表示して終了する [#q435b567] -デフォルトで-h / -vオプションがサポートされている。必要な引数がわたっていなかった場合にヘルプを表示して終了したい場合、以下のように処理する。 #pre{{ opts = {} opt = OptionParser.new opt.on('-f VAL', '--file=VAL') {|v| opts[:file] = v } opt.parse!(ARGV) if opts[:file].nil? || !FileTest.file?(opts[:file]) puts opt # putsでヘルプが表示sあれる exit end }}