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

class OptionParser

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

Abstract

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

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

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

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(klass, pat = /.*/) {|str| ...} -> ()

オプションの引数を文字列から 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, short = nil, *long)
getopts(short = nil, *long)

指定された argv をパースし、パースした結果を Hash として返します。 argv が指定されない場合 OptionParser#default_argv をパースします。

[PARAM] argv:
パースしたい文字列の配列を指定します。
[PARAM] short:
ショートオプションを文字列で指定します。 例えば "ab" を与えると、「-a」と「-b」を受け付けるようになります。 引数を伴う場合は、"a:b:" のように文字の後ろに「:」を付けます。
[PARAM] long:
ロングオプションを文字列で指定します。 例えば "optname" を与えると、「--optname」を受け付けるようになります。 引数を伴う場合は、"optname:" のように文字の後ろに「:」を付けます。 デフォルトの値を持たせたい場合は、例えば "optname:dfval009" の様に、 ":" の直後にそのデフォルト値を指定します。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、例外 OptionParser::ParseError のサブクラスが投げられます。

例:

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
new(banner = nil, width = 32, indent = ' ' * 4) -> OptionParser
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) -> ()

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

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

インスタンスメソッド

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

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

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

サマリの最初に表示される文字列を表すアクセサです。

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

自身がデフォルトでパースする引数を表すアクセサです。 文字列の配列です。デフォルト値は Kernel::ARGV です。

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

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

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

[PARAM] env:
環境変数名を文字列で与えます。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、例外 OptionParser::ParseError のサブクラスが投げられます。
getopts(argv, short = nil, *long) -> Hash
getopts(short = nil, *long) -> Hash

指定された argv をパースし、パースした結果を Hash として返します。 argv が指定されない場合 OptionParser#default_argv をパースします。

[PARAM] argv:
パースしたい文字列の配列を指定します。
[PARAM] short:
ショートオプションを文字列で指定します。 例えば "ab" を与えると、「-a」と「-b」を受け付けるようになります。 引数を伴う場合は、"a:b:" のように文字の後ろに「:」を付けます。
[PARAM] long:
ロングオプションを文字列で指定します。 例えば "optname" を与えると、「--optname」を受け付けるようになります。 引数を伴う場合は、"optname:" のように文字の後ろに「:」を付けます。 デフォルトの値を持たせたい場合は、例えば "optname:dfval009" の様に、 ":" の直後にそのデフォルト値を指定します。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、例外 OptionParser::ParseError のサブクラスが投げられます。

例:

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
help -> String
to_s -> String

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

load(filename = nil) -> bool

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

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

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

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

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

オプションの引数は 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

any string, and no conversion. this is fall-back.

String

any none-empty string, and no conversion.

Integer

Ruby/C-like integer, octal for 0-7 sequence, binary for 0b, hexadecimal for 0x, and decimal for others; with optional sign prefix. Converts to Integer.

Float

Float number format, and converts to Float.

Numeric

Generic numeric format, and converts to Integer for integer format, Float for float format.

OptionParser::DecimalInteger

Decimal integer format, to be converted to Integer.

OptionParser::OctalInteger

Ruby/C like octal/hexadecimal/binary integer format, to be converted to Integer.

OptionParser::DecimalNumeric

Decimal integer/float number format, to be converted to Integer for integer format, Float for float format.

TrueClass

Boolean switch, which means whether it is present or not, whether it is absent or not with prefix no-, or it takes an argument yes/no/true/false/+/-.

FalseClass

Similar to TrueClass, but defaulted to false.

Array

List of strings separated by ","

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

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

コマンドに与えられた引数が配列やハッシュに含まれない場合、 例外 OptionParser::InvalidArgument が 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)
on_tail(*arg, &block)

OptionParser#onと同様、オプションを取り扱うためのブロックを自身に登録します。 on メソッドと違う点は、OptionParser オブジェクトが保持している リストの最初かあるいは最後にブロックを登録する点です。

--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
order(argv) -> [String]
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]
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]
parse(*args) -> [String]

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

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

[PARAM] argv:
パースしたい引数を文字列の配列で指定します。
[PARAM] args:
パースしたい引数を順に文字列として与えます。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、例外 OptionParser::ParseError の サブクラスが投げられます。

例:

require "optparse"
ProgramConfig = Hash.new
opts = OptionParser.new
opts.on("-a"){|v| ProgramConfig[:a] = true }
opts.on("-b [VAL]"){|v| ProgramConfig[:b] = v }

opts.parse("-a", "-bhoge hoge")
p ProgramConfig[:b]                            #=> "hoge hoge" 空白込みでオプション -b の引数として
                                                               扱われていること似注意。
parse!(argv = self.default_argv) -> [String]

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

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

[PARAM] argv:
パースしたい引数を文字列の配列で指定します。
[PARAM] args:
パースしたい引数を順に文字列として与えます。
[EXCEPTION] OptionParser::ParseError:
パースに失敗した場合、例外 OptionParser::ParseError の サブクラスが投げられます。
permute(argv) -> [String]
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]

与えられた 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
program_name=(name)

プログラムの名前を表すアクセサです。デフォルトは $0 が使われます。

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

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

[UNKNOWN_META_INFO] @parse:
klass 自身から削除したいクラスを指定します。
release -> String
release=(rel)

Release code.

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

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

サマリには on メソッドを呼んだ順にオプションが表示されるので、区切りを挿入したい ところでこのメソッドを呼びます。[[unknown:例|optparse/Example]]を参照してください。

[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) -> ()
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
summary_indent=(indent)

サマリを表示する時のインデントを表すアクセサです。

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

サマリを表示するときの幅を表すアクセサです。

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

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

ver -> String

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

version -> String
version=(ver)

プログラムのバージョンを表すアクセサです。

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

Methods

Classes