Ruby optparseライブラリの使い方~自戒も込めて~

optparseとは

rubyの標準ライブラリの一つである「optparse」は、ruby実行時のオプションを取得するためのものです。

まず、オプションって何?という方は、下の図を見ると分かると思います。

-aというオプションには、ALFA
-bというオプションには、BRAVO
を指定できることです。

つまり、このオプションが取得できるRubyの標準ライブラリが「optparase」です。
詳しい使い方はこのサイトに任せるとして、一つ小話を。

docs.ruby-lang.org

その前に、僕が一番使いやすい・直観的だと感じたコードを貼っておきます。

require 'optparse'

params = ARGV.getopts("a:","b:")
p params

ここにたどり着くまでの物語を。(そんな大層なことはない。)

使い方が分からなければ、検索しよう

僕は、検索しました。
たぶん、トップに出てきます。
rubyというキーワードを付ければ、

docs.ruby-lang.org

上記のサイト内のコードを拝借しますが、
このライブラリの使い方はこうです。

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 -a foo bar -b baz
# => true
     true
     ["foo", "bar", "baz"]

早とちりの僕は、この時点でこう思います。
欲しいのは、trueじゃない
ただの配列じゃない
僕が所望する出力はこういうの!。

{
   "a":["foo", "bar"],
   "b":["baz"]
}

こう思って、すこしイラつくこと10分。
自分の意図するコードを探すこと10分。
ついに発見。便利な機能。

OptionParser::Arguable

使い方は、こうです。

require 'optparse'

params = ARGV.getopts("a:","b:")
p params

リファレンスマニュアルの下のほうに書いてあります。
「加わりました」と書いてあるので、古いRubyでは動かないのかもしれません。 library optparse (Ruby 3.2 リファレンスマニュアル)

今回の学び

リファレンスを下までスクロールを。

おかしいな。いつも他人にはそう教えるのに。