Ruby 1.9.3 リファレンスマニュアル > ライブラリ一覧 > optparseライブラリ > OptionParserクラス

class OptionParser

クラスの継承リスト: OptionParser < Object < Kernel < BasicObject

要約

コマンドラインのオプションを取り扱うためのクラスです。

オプションが指定された時に呼ばれるブロックを OptionParser#on メソッドで登録していきます。 つまり、OptionParser を使う場合、基本的には

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

というような流れになります。

require "optparse"
ProgramConfig = Hash.new
opts = OptionParser.new
opts.on("-a"){|v| ProgramConfig[:a] = true } # オプション「-a」がコマンドラインで指定されていた場合の動作。
opts.parse!(ARGV)                            # 実際にコマンドラインの parse を行う。

デフォルトで利用可能なオプション

以下はデフォルトで利用可能なオプションです。オプションサマリには 出てきません。

--help

オプションサマリを表示してから exit します。

--version

OptionParser#ver を表示してから exit します。 OptionParser#ver が定義されていない場合は、そのようにエラーメッセージを出力して abort します。 オプション「--version」に「,」で区切られたクラス名かモジュール名を引数として与えた場合は、そのクラスおよびモジュールで定義されている定数「Version」および「Release」を表示して、終了します。

 $ ruby t.rb --version=OptionParser,URI,OpenSSL
 t: OptionParser version 12203 (2007-04-20)
 t: URI version 0.9.11
 t: OpenSSL version 1.0.0

目次

特異メソッド
accept getopts new reject
インスタンスメソッド
accept banner banner= default_argv default_argv= environment getopts help to_s load on on_head on_tail order order! parse parse! permute permute! program_name program_name= reject release release= separator summarize summary_indent summary_indent= summary_width summary_width= to_a ver version version=

特異メソッド

accept(klass, pat = /.*/) {|str| ...} -> ()[permalink][rdoc]

オプションの引数を文字列から Ruby のオブジェクトに変換するための ブロックを登録します。すべての OptionParser インスタンスに共通です。

ブロックには、文字列として与えられるオプションの引数から klass のインスタンスを生成して返すものを指定します。

OptionParser#on で klass を指定した場合、 コマンドラインのオプションに与えられた引数は、この accept で登録したブロックで klass のインスタンスに変換されてから、OptionParser#on メソッドで登録したブロックに渡されます。

require "optparse"
require "time"

OptionParser.accept(Time) do |s,|
  begin
    Time.parse(s) if s
  rescue
    raise OptionParser::InvalidArgument, s
  end
end

opts = OptionParser.new

opts.on("-t", "--time [TIME]", Time) do |time|
  p time.class #=> Time
end

opts.parse!(ARGV)

いくつかのクラスに対しては変換用のブロックがデフォルトで登録されて います。OptionParser#on を参照して下さい。

[PARAM] klass:
クラスオブジェクトを与えます。
[PARAM] pat:
match メソッドを持ったオブジェクト(Regexp オブジェクトなど)を与えます。
getopts(argv, *opts) -> Hash[permalink][rdoc]
getopts(*opts) -> Hash

引数をパースした結果を、Hash として返します。(self.new.getopts と同じです)

[PARAM] argv:
パースしたい配列を指定します。
[PARAM] opts:
引数を文字列で指定します。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、発生します。 実際は OptionParser::ParseError のサブク ラスになります。

[SEE_ALSO] OptionParser#getopts

new(banner = nil, width = 32, indent = ' ' * 4) -> OptionParser[permalink][rdoc]
new(banner = nil, width = 32, indent = ' ' * 4) {|opt| ...} -> OptionParser

OptionParser オブジェクトを生成して返します。

ブロックが与えられた場合、生成した OptionParser オブジェクトを引数としてブロックを評 価します。つまり、以下のような書き方が可能です。

require 'optparse'
OptionParser.new do |opt|

  opt.on('-a') {|v| p v }
  opt.on('-b') {|v| p v }

  opt.parse!(ARGV)
end
[PARAM] banner:
ヘルプ(サマリ)の最初の部分に表示される、アプリケーションの説明などを文字列で与えます。
[PARAM] width:
サマリの幅を整数で与えます。
[PARAM] indent:
サマリのインデントを文字列で与えます。
reject(klass) -> ()[permalink][rdoc]

OptionParser.accept メソッドで登録したブロックを削除します。

[PARAM] klass:
削除したいクラスオブジェクトを指定します。

インスタンスメソッド

accept(klass, pat = /.*/) {|str| ...} -> ()[permalink][rdoc]

OptionParser.accept と同様ですが、 登録したブロックはレシーバーに限定されます。

[PARAM] klass:
クラスオブジェクトを与えます。
[PARAM] pat:
match メソッドを持ったオブジェクト(Regexp オブジェクトなど)を与えます。
banner -> String[permalink][rdoc]

サマリの最初に表示される文字列を返します。

[RETURN]
サマリの最初に表示される文字列を返します。
banner=(heading)[permalink][rdoc]

サマリの最初に表示される文字列を指定します。

[PARAM] heading:
サマリの最初に表示される文字列を指定します。
default_argv -> [String][permalink][rdoc]

自身がデフォルトでパースする引数を文字列の配列で返します。

[PARAM] argv:
デフォルトでパースする文字列の配列を返します。
default_argv=(argv)[permalink][rdoc]

自身がデフォルトでパースする引数を文字列の配列で指定します。

OptionParser#parse の引数が指定されなかったときに使われます。

[PARAM] argv:
デフォルトでパースしたい文字列の配列を指定します。
environment(env) -> [String][permalink][rdoc]

環境変数 env に対して Shellwords.#shellwords を呼 んで配列にしてから parse を行ないます。

[PARAM] env:
環境変数名を文字列で与えます。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、発生します。 実際は OptionParser::ParseError のサブク ラスになります。
getopts(argv, *opts) -> Hash[permalink][rdoc]
getopts(*opts) -> Hash

引数をパースした結果を、Hash として返します。

配列 argv を与えた場合、argv をパースします。そうでない場合は、 default_argv をパースします。

opt = OptionParser.new
params = opt.getopts(ARGV, "ab:", "foo", "bar:")
# params["a"] = true   # -a
# params["b"] = "1"    # -b1
# params["foo"] = true  # --foo
# params["bar"] = "x"  # --bar x
[PARAM] argv:
パースしたい配列を指定します。
[PARAM] opts:
引数を文字列で指定します。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、発生します。 実際は OptionParser::ParseError のサブク ラスになります。
help -> String[permalink][rdoc]
to_s -> String

サマリの文字列を返します。

load(filename = nil) -> bool[permalink][rdoc]

指定された filename を読み込んで各行をまとめたものに対して OptionParser#parse を行ないます。

パースが成功した場合に true を返します。 ファイルが存在しなかった場合に false を返します。

[PARAM] filename:
各行をパースしたいファイルの名前を文字列で指定します。 指定されないか nil である場合、~/.options/ に プログラムのサフィックスを付けた '~/.options/コマンド名' というファイルをパースします。
on(short, desc = "") {|v| ... } -> self[permalink][rdoc]
on(long, desc = "") {|v| ... } -> self
on(short, long, desc = "") {|v| ... } -> self

オプションを取り扱うためのブロックを自身に登録します。 ブロックはコマンドラインのパース時に、オプションが指定されていれば呼ばれます。

ショートオプションとロングオプションを同時に登録することもできます。

opts.on("-r", "--require LIBRARY"){|lib| ...}

これは以下と同値です。

opts.on("-r LIBRARY"){|lib| ...}
opts.on("--require LIBRARY"){|lib| ...}

複数の異なるオプションに同じブロックを一度に登録することもできます。

opt.on('-v', '-vv'){|boolean| ...}
opt.on('--require X', '--need', '--dependon'){|x| ... }
[PARAM] short:
ショートオプションを表す文字列を指定します。 そのオプションが引数をとらない場合は、
  on("-x"){|boolean| ...}
となります。コマンドラインにオプションが存在した場合 true を引数と してブロックを評価します。 ショートオプションが引数をとる場合は、
  on("-x MANDATORY"){|val| ...}
となります。"MANDATORY" の部分は任意の文字列で構いません。 オプションの引数が必須でない場合は [ ] をつけて、
  on("-x [OPTIONAL]"){|val| ...}
となります。
[PARAM] long:
ロングオプションを表す文字列を指定します。ショートオプションの時と同様に、
  on("--long"){|boolean| ...}
  on("--long MANDATORY"){|val| ...}
  on("--long [OPTIONAL]"){|val| ...}
と指定できます。
[PARAM] desc:
オプションの説明を文字列で与えます。サマリに表示されます。
on(short, pat = /.*/, desc = "") {|v| ...} -> self[permalink][rdoc]
on(long, pat = /.*/, desc = "") {|v| ...} -> self
on(short, long, pat = /.*/, desc = "") {|v| ...} -> self

オプションを取り扱うためのブロックを自身に登録します。 ブロックはコマンドラインのパース時に、オプションが指定されていれば呼ばれます。

pat にはオプションの引数に許すパターンを表す正規表現で与えます。 コマンドに与えられた引数がパターンにマッチしない場合、 例外 OptionParser::InvalidArgument が parse 実行時に投げられます。

opts.on("--username VALUE", /[a-zA-Z0-9_]+/){|name| ...}
# ruby command --username=ruby_user
# ruby command --username=ruby.user #=> Error
[PARAM] short:
ショートオプションを表す文字列を指定します。
[PARAM] long:
ロングオプションを表す文字列を指定します。
[PARAM] pat:
オプションの引数に許すパターンを表す正規表現で指定します。
[PARAM] desc:
オプションの説明を文字列で与えます。サマリに表示されます。
on(short, klass = String, desc = "") {|v| ...} -> self[permalink][rdoc]
on(long, klass = String, desc = "") {|v| ...} -> self
on(short, long, klass = String, desc = "") {|v| ...} -> self

オプションを取り扱うためのブロックを自身に登録します。 ブロックはコマンドラインのパース時に、オプションが指定されていれば呼ばれます。

klass にはクラスを与えます。どのようなクラスを受け付けるかは、 以下の「デフォルトで利用可能な引数クラス」を参照して下さい。 OptionParser.accept や OptionParser#accept によって、受け付け るクラスを増やすことができます。登録されていないクラスが指定された 場合、例外 ArgumentError を投げます。 また、登録されたクラスであっても引数が変換できないものである場合、例外 OptionParser::InvalidArgument を投げます。

オプションの引数は accept で登録したブロックで klass のインスタンス に変換されてから、ブロックに渡されます。

opts.on("-w", "--width N", Integer){|w|
  p w.class #=> Integer
}
# ruby command --width=32

opts.on("-o", "--overwrite VALUE", TrueClass){|boolean| ...}
# ruby command --overwrite yes
[PARAM] short:
ショートオプションを表す文字列を指定します。
[PARAM] long:
ロングオプションを表す文字列を指定します。
[PARAM] klass:
オプションの引数のクラスを指定します。
[PARAM] desc:
オプションの説明を文字列で与えます。サマリに表示されます。
[EXCEPTION] ArgumentError:
登録されていないクラスが klass に指定された場合に発生します。

デフォルトで利用可能な引数クラス

Object

オプションの引数は変換されません。

String

オプションの引数は変換されません。ただし、空文字列を指定すると OptionParser::InvalidArgument が発生します。

Integer

Integer オブジェクトに変換されます。"0b1"、"07"、"99"、"0xff" といった 2進数、8進数、10進数、16進数の整数のフォーマットを指定できます。

Float

Float オブジェクトに変換されます。"1.0" や "0.5e0" のようなフォーマッ トを指定できます。

Numeric

整数の場合は Integer オブジェクトに、実数の場合は Float オブジェクトに 変換されます。

OptionParser::DecimalInteger

Integer オブジェクトに変換されます。10進数の整数の整数のフォーマットの みを指定できます。

OptionParser::OctalInteger

Integer オブジェクトに変換されます。"0b1"、"07"、"0xff" といった 2進数、 8進数、16進数の整数のフォーマットを指定できます。

OptionParser::DecimalNumeric

整数の場合は Integer オブジェクトに、実数の場合は Float オブジェクトに 変換されます。10進数のフォーマットを指定できます。

TrueClass

true か false に変換されます。"yes" や "no"、"true" や "false"、"+" や "-" を指定できます。オプションの引数を省略した場合は true になります。 また、"no-" をオプションの先頭に付けた場合は値が反転します。

FalseClass

true か false に変換されます。TrueClass との違いはオプションの引数を省 略した場合に false になります。

Array

文字列の配列に変換されます。"," ごとに 1つの要素になります。

on(short, *rest) {|v| ...} -> self[permalink][rdoc]
on(long, *rest) {|v| ...} -> self
on(short, long, *rest) {|v| ...} -> self

オプションを取り扱うためのブロックを自身に登録します。 ブロックはコマンドラインのパース時に、オプションが指定されていれば呼ばれます。

コマンドに与えられた引数が配列やハッシュに含まれない場合、例外 OptionParser::InvalidArgumentOptionParser#parse 実行時 に発生します。

[PARAM] short:
ショートオプションを表す文字列を指定します。
[PARAM] long:
ロングオプションを表す文字列を指定します。
[PARAM] rest:
可能な引数を列挙した配列やハッシュを与えます。文字列を与えた場合は、 サマリに表示されるオプションの説明と見なします。

例:

opts.on("--protocol VALUE", [:http, :ftp, :https]){|w|
  p w
}
# ruby command --protocol=http #=> :http

opts.on("-c", "--charset VALUE", {"jis" => "iso-2022-jp", "sjis" => "shift_jis"}){|w|
  p w
}
# ruby command --charset=jis #=> "iso-2022-jp"
on_head(*arg, &block) -> self[permalink][rdoc]

オプションを取り扱うためのブロックを自身の持つリストの最初に登録します。

[PARAM] arg:
OptionParser#on と同様です。
[PARAM] block:
OptionParser#on と同様です。

[SEE_ALSO] OptionParser#on, OptionParser#on_tail

on_tail(*arg, &block) -> self[permalink][rdoc]

オプションを取り扱うためのブロックを自身の持つリストの最後に登録します。

--version や --help の説明をサマリの最後に表示したい時に便利です。

[PARAM] arg:
OptionParser#on と同様です。
[PARAM] block:
OptionParser#on と同様です。

例:

opts.on_tail("-h", "--help", "Show this message") do
  puts opts
  exit
end

opts.on_tail("--version", "Show version") do
  puts OptionParser::Version.join('.')
  exit
end

[SEE_ALSO] OptionParser#on, OptionParser#on_head

order(argv) -> [String][permalink][rdoc]
order(argv) {|s| ...} -> [String]
order(*args) -> [String]
order(*args) {|s| ...} -> [String]

与えられた argv を順番にパースします。 オプションではないコマンドの引数(下の例で言うと somefile)に出会うと、パースを中断します。 argv からオプションを取り除いたものを返します。

ブロックが与えられている場合は、パースを中断せずに引数をブロックに渡してブロックを評価し、 パースを継続します。argv を返します。

下の例で言うと、コマンドの引数 somefile よりも後ろにオプションを置くことができま せん。-b もコマンドのオプションではない引数として扱われてしまいます。

[PARAM] argv:
パースしたい引数を文字列の配列で指定します。
[PARAM] args:
パースしたい引数を順に文字列として与えます。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、発生します。 実際は OptionParser::ParseError のサブク ラスになります。

例:

$ cat opt.rb
require 'optparse'
opt = OptionParser.new

opt.on('-a [VAL]') {|v| p :a }
opt.on('-b') {|v| p :b }

opt.order!(ARGV)
p ARGV

$ ruby opt2.rb -a foo somefile -b
:a
["somefile", "-b"]
order!(argv = self.default_argv) -> [String][permalink][rdoc]
order!(argv = self.default_argv) {|s| ...} -> [String]

与えられた argv を順番に破壊的にパースします。 argv からオプションがすべて取り除かれます。 argv を返します。

オプションではないコマンドの引数(下の例で言うと somefile)に出会うと、パースを中断します。 ブロックが与えられている場合は、パースを中断せずに 引数をブロックに渡してブロックを評価し、パースを継続します。argv を返します。

下の例で言うと、コマンドの引数 somefile よりも後ろにオプションを置くことができません。 -b もコマンドのオプションではない引数として扱われてしまいます。

[PARAM] argv:
パースしたい引数を文字列の配列で指定します。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、発生します。 実際は OptionParser::ParseError のサブク ラスになります。

例:

$ cat opt.rb
require 'optparse'
opt = OptionParser.new

opt.on('-a [VAL]') {|v| p :a }
opt.on('-b') {|v| p :b }

opt.order!(ARGV)
p ARGV

$ ruby opt2.rb -a foo somefile -b
:a
["somefile", "-b"]
parse(argv) -> [String][permalink][rdoc]
parse(*args) -> [String]

与えられた argv をパースします。 argv からオプションを取り除いたものを返します。

OptionParser#permute と同様に振舞います。しかし、 環境変数に POSIXLY_CORRECT が設定されている場合は、 OptionParser#order と同様に振舞います。

[PARAM] argv:
パースしたい引数を文字列の配列で指定します。
[PARAM] args:
パースしたい引数を順に文字列として与えます。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、発生します。 実際は OptionParser::ParseError のサブク ラスになります。
parse!(argv = self.default_argv) -> [String][permalink][rdoc]

与えられた argv をパースします。

OptionParser#permute! と同様に argv を破壊的にパースします。 環境変数に POSIXLY_CORRECT が設定されている場合は、 OptionParser#order! と同様に振舞います。

[PARAM] argv:
パースしたい引数を文字列の配列で指定します。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、発生します。 実際は OptionParser::ParseError のサブク ラスになります。
permute(argv) -> [String][permalink][rdoc]
permute(*args) -> [String]

与えられた argv をパースします。 オプションではないコマンドの引数(下の例で言うと somefile)があってもパースを中断しません。 argv からオプションを取り除いたものを返します。

下の例で言うと、order と違いコマンドの引数 somefile よりも後ろにオプションを置くことが できます。

[PARAM] argv:
パースしたい引数を文字列の配列で指定します。
[PARAM] args:
パースしたい引数を順に文字列として与えます。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、発生します。 実際は OptionParser::ParseError のサブク ラスになります。

例:

$ cat opt.rb
require 'optparse'
opt = OptionParser.new

opt.on('-a [VAL]') {|v| p :a }
opt.on('-b ') {|v| p :b }

opt.permute!(ARGV)
p ARGV

$ ruby opt2.rb -a foo somefile -b
:a
:b
["somefile"]
permute!(argv = self.default_argv) -> [String][permalink][rdoc]

与えられた argv を破壊的にパースします。argv からオプションがすべて取り除かれます オプションではないコマンドの引数(下の例で言うと somefile)があってもパースを中断しません。 argv を返します。

下の例で言うと、order と違いコマンドの引数 somefile よりも後ろにオプションを置くことが できます。

[PARAM] argv:
パースしたい引数を文字列の配列で指定します。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、発生します。 実際は OptionParser::ParseError のサブク ラスになります。

例:

$ cat opt.rb
require 'optparse'
opt = OptionParser.new

opt.on('-a [VAL]') {|v| p :a }
opt.on('-b ') {|v| p :b }

opt.permute!(ARGV)
p ARGV

$ ruby opt2.rb -a foo somefile -b
:a
:b
["somefile"]
program_name -> String[permalink][rdoc]

プログラムの名前を文字列で返します。

デフォルトは $0 が使われます。

[RETURN]
プログラムの名前を文字列で返します。
program_name=(name)[permalink][rdoc]

プログラムの名前を文字列で指定します。

[PARAM] name:
プログラムの名前を文字列で指定します。
reject(klass) -> ()[permalink][rdoc]

OptionParser#accept で登録したクラスとブロックを 自身から削除します。

[PARAM] klass:
自身から削除したいクラスを指定します。
release -> String[permalink][rdoc]

プログラムのリリースを文字列で返します。

release=(rel)[permalink][rdoc]

プログラムのリリースを文字列で指定します。

[PARAM] rel:
プログラムのリリースを文字列で指定します。
separator(sep) -> ()[permalink][rdoc]

サマリにオプションを区切るための文字列 sep を挿入します。 オプションにいくつかの種類がある場合に、サマリがわかりやすくなります。

サマリには on メソッドを呼んだ順にオプションが表示されるので、区切りを挿入したい ところでこのメソッドを呼びます。

[PARAM] sep:
サマリの区切りを文字列で指定します。

例:

require 'optparse'
opts = OptionParser.new
opts.banner = "Usage: example.rb [options]"

opts.separator ""
opts.separator "Specific options:"

opts.on("-r", "--require LIBRARY") do |lib|
        options.library << lib
end

opts.separator ""
opts.separator "Common options:"

opts.on_tail("-h", "--help", "Show this message") do
  puts opts
  exit
end
summarize(to = [], width = self.summary_width, max = width - 1, indent= self.summary_indent) -> ()[permalink][rdoc]
summarize(to = [], width = self.summary_width, max = width - 1, indent= self.summary_indent) {|line| ... } -> ()

サマリを指定された to へと加えていきます。

ブロックが与えられた場合、サマリの各行を引数としてブロックを評価します。 この場合、ブロックの中で明示的に to へと加えていかない限り、 to にサマリが加えられることはありません。

[PARAM] to:
サマリを出力するオブジェクトを指定します。to には << メソッドが定義されいる必要があります。
[PARAM] width:
サマリの幅を整数で指定します。
[PARAM] max:
サマリの最大幅を整数で指定します。
[PARAM] indent:
サマリのインデントを文字列で指定します。
summary_indent -> String[permalink][rdoc]

サマリを表示する時のインデントを文字列で返します。

[RETURN]
サマリを表示する時のインデントを文字列で返します。
summary_indent=(indent)[permalink][rdoc]

サマリを表示する時のインデントを文字列で指定します。

[PARAM] indent:
サマリを表示する時に使われるインデントを文字列で指定します。
summary_width -> Integer[permalink][rdoc]

サマリを表示するときの幅を整数で返します。

[RETURN]
サマリを表示するときの幅を整数で返します。
summary_width=(width)[permalink][rdoc]

サマリを表示するときの幅を整数で指定します。

[PARAM] width:
サマリを表示するときの幅を整数で指定します。
to_a -> [String][permalink][rdoc]

サマリの各行を要素とした配列を返します。

ver -> String[permalink][rdoc]

program_name、version と release から生成したバージョンを表す文字列を返します。

version -> String[permalink][rdoc]

プログラムのバージョンを文字列で返します。

[RETURN]
プログラムのバージョンを文字列で返します。
version=(ver)[permalink][rdoc]

プログラムのバージョンを文字列で指定します。

[PARAM] ver:
プログラムのバージョンを文字列で指定します。