最近学んだOptionParserの使い方についてアウトプットします。
まず以下のような課題があるとします。
Rubyでカレンダーを作る
$ cal
で表示されるカレンダーを作ってみよう。
イメージ
➜ ruby calendar.rb
2月 2022
日 月 火 水 木 金 土
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28
必須要件
- macに入っているcalコマンドと同じ見た目になっていること
- Gemは使わないこと
-
-m
オプションで月を指定できるようにすること。今年が2022年ならcal -m 6
で2022年6月のカレンダーになる。 - 引数を指定しない場合は、今月・今年のカレンダーが表示される
本題
この課題に対して、どのようにOptionPaserを駆使するか。。
まず、使い方の流れは以下の通りです。
- OptionPaser オブジェクト opt を生成する。
- オプションを取り扱うブロックをoptに登録する。
- opt.parse(ARGV)でコマンドラインを実際にparseする。
各項目を詳しく
1. OptionPaser オブジェクト opt を生成する。
require 'optparse'
opt = OptionParser.new
2. オプションを取り扱うブロックをoptに登録する。
option = {}
opt.on('-m [v]') {|v| option[:m] = v}・・・・# オプションmを作り、0-12までの数字を入れられる仕組み
ここでの[v]は引数を受けつけられることを意味しています。さらに[]をつけてる意味は引数が必須ではないことを示しています。
3. opt.parse(ARGV)でコマンドラインを実際にparseする。
opt.parse!(ARGV)
以上この3段階を経て完成です。簡単に見えますが、調べながら考えてコードを書くのに時間がかかりました。実際にこのコードの返り値を駆使して月の指定をすることができました。