0
0

More than 1 year has passed since last update.

Rubyでのoptparseについて

Posted at

optparseとは

標準ライブラリのひとつ
コマンドラインのオプションを取り扱うためのライブラリ

使い方

基本的なパターン

  1. optparseをrequireする
  2. OptionParserオブジェクトを生成する
  3. onメソッドを用いて、オプションを取り扱うためのブロックを登録する
  4. parseメソッドを用いて、与えられたargvをパースする
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メソッドでショートオプションに追加して、ロングオプション・説明を渡せばよい

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

opt.on('-a', '--a_long_option', 'a_description') {|v| p v }

opt.parse(ARGV)
p ARGV

引数の必須かどうかの記述

  • 引数が必須の場合
    • onメソッドでオプションの末尾に文字列を追加する
    • 下記例だと、valueを追加している
  • 引数が省略可能な場合
    • onメソッドでオプションの末尾に[]で囲った文字列を追加する
    • 下記例だと、[value]を追加している
sample.rb
require 'optparse'
opt = OptionParser.new

# 通常の記述
opt.on('-a') {|v| p v }
# 引数が必須
opt.on('-b value') {|v| p v }
# 引数は省略可能
opt.on('-c [value]') {|v| p v }

opt.parse(ARGV)
p ARGV

引数の型指定

onメソッドで型を追記する

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

opt.on('-a', '--a_long A', Integer) {|v| p v }

opt.parse(ARGV)
p ARGV

ARGV

ARGVにコマンドラインから渡された引数が配列として渡される。
ARGVでオプションを定義することができる。
複雑なオプションが必要ない場合はARGVを使うのがおすすめ。
オプションの指定方法はgetoptsメソッドでオプションを指定するだけでOK。

  • ショートネームのオプション
    • ショートネームのオプションを文字列で指定する。
    • オプションが引数をとる場合は直後に:を付ける。
      • aという引数をとるオプションを追加する場合:a:
      • aとbという引数をとるオプションを追加する場合:a:b:
      • aという引数をとらないオプションとbという引数をとるオプションを追加する場合:ab:
  • ロングネームのオプション
    • ショートネームのオプションを文字列で指定する。
    • オプションが引数をとる場合は直後に:を付ける。
    • デフォルト値は : の直後に指定する。
      • bufsizeという引数をとらないオプションを追加する場合:bufsize
      • bufsizeという引数をとるオプションを追加する場合:bufsize:
      • デフォルト値1024のbufsizeという引数をとるオプションを追加する場合:bufsize:1024
sample.rb
require 'optparse'

params = ARGV.getopts("a:b:")
p params
実行結果
$ ruby sample.rb -a foo -b bar
#=> {"a"=>"foo", "b"=>"bar"}

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0