こんにちは!みんみんです。
今回はRubyでoptparseを使う方法についてまとめました。
「optparse」って?
optparseとは、コマンドラインのオプションを設定するための組み込みライブラリ
です。
要するにターミナルでコマンドを使用したい場合に、
- どんなコマンドを使うか
- コマンドを使ってどんな結果を出したいか
を決めるために使います。
組み込みライブラリなので、Gemのようにインストールする必要はありません。
Rubyでコマンドなんていつ使うの?
そもそもですが、Rubyでコマンドを使うときとは一体いつなのでしょうか?
たとえば 「ファイルの処理に数値を指定したいとき」 です。
今回はカレンダーアプリの実装を例にしてみましょう。
「◯月だけ出力したい」など、指定した月のカレンダーだけを表示したいとします。
その場合、以下のように指定したオプションを入力すると、好きな月のカレンダーだけを出力できるようになります。
% ruby calendar.rb -m 10
10月 2023
月 火 水 木 金 土 日
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 29
30 31
つまり、「-m」というオプションと数値を入れると、その数値で処理された結果が出力されます。
その設定ができるのが 「optparse」 です。
optparseの主な設定方法は?
では、さっそくoptparseの設定をしてみましょう。
以下が基本的なコードです。
require 'optparse'
opt = OptionParser.new
opt.on('-a') {|v| p v }
opt.on('-b') {|v| p v }
opt.parse!(ARGV)
p ARGV
optparseはRubyに標準装備されているわけではないので、使いたいときは必ず以下のコードを書かなかればいけません。
require 'optparse'
新しいOptionParserクラス
からopt
という変数(インスタンス)を作ります。
opt = OptionParser.new
-a
と-b
のオプションを指定します。
すると同様にブロックの中にあるコードが実行される仕組みです。
v
にはオプションの値が入り、その値をp
で出力します。
opt.on('-a') {|v| p v }
opt.on('-b') {|v| p v }
最後にコマンドの処理結果を配列(ARGV配列)に格納して出力します。
OptionParserクラスのメソッドであるparse!
を使い、コマンドのオプション部分を出力しないようにします(-a
-b
部分ですね)。
opt.parse!(ARGV)
p ARGV
先ほどのコードを実行すると、以下のような結果が出ます。
配列にはオプションを実行した結果だけが入っていますね。
ruby sample.rb -a foo bar -b baz
# => true
true
["foo", "bar", "baz"]
引数を使いたいときは?
基本的な設定では、-a
-b
の後ろに文字をつけると、その結果が配列に格納されるという仕組みでした。
ただ例として挙げたカレンダーのように、数値で処理した結果を出力したい場合は、以下のようにコードを書くとオプションが引数を受けつけるようになります。
require 'optparse'
opt = OptionParser.new
opt.on('-a VAL') {|v| p v } # <- " VAL" を追加
opt.on('-b') {|v| p v }
opt.parse!(ARGV)
p ARGV
他にも色々な使い方があるようです。
最初こそ 「optparseって何のために使うんだろう?」 と思いましたが、実際に使ってみるととても便利なライブラリだなと感じました(まだ全然使いこなせていませんが…)!
間違いがありましたらコメントいただけると嬉しいです。
ありがとうございました!