optparseとは
Rubyでコマンドライン引数を扱うための標準ライブラリです。
例えば、test.rbというファイルを実行するとして、ruby test.rb -a 100
のようにコマンドライン引数で値を渡すことができます。-a 100
の中身はファイル内で使用することができます。
今回は説明の題材として、コマンドライン引数から二つの値を受け取り、合計値を返すシンプルなプログラムを作成します。
optparseの使い方
- OptionParser オブジェクト opt を生成する。
- オプションを取り扱うブロックを opt に登録する。
- opt.parse(ARGV) でコマンドラインを実際に parse する。
library optparse (Ruby 3.2 リファレンスマニュアル)より引用
1. OptionParser オブジェクト opt を生成する。
require 'optparse'
opt = OptionParser.new
require 'optparse'
でライブラリを読み込み、変数optにOptionParserクラスから生成したインスタンスを格納しています。このインスタンスに対して操作を加えることでオプション引数を扱えるようになります。
2. オプションを取り扱うブロックを opt に登録する。
require 'optparse'
opt = OptionParser.new
opt.on('-a') {|v| p v }
opt.on('-b') {|v| p v }
OptionParser#on メソッドの引数でオプション-a
と-b
を定義し、引数が指定された時の処理をブロック {}
内に記述します。ただしこの時点ではブロックは実行されません。実行されるのは後述するOptionParser#parseが呼ばれた時です。
3. opt.parse(ARGV) でコマンドラインを実際に parse する。
OptionParser#parse!を使い、コマンドラインの解析を行います。以下を追記してruby sum.rb -a 10 -b 20
を実行します。
require 'optparse'
opt = OptionParser.new
opt.on('-a') {|v| p v }
opt.on('-b') {|v| p v }
opt.parse!(ARGV)
p ARGV
["10", "20"]
コマンドライン引数の値を取得することができました。
ちなみにopt.parse(ARGV)
とすると値だけでなくオプションも取得することができます。
["-a", "10", "-b", "20"]
引数の合計値を返す
二つの整数を受け取りその合計を返すプログラムを作成します。
require 'optparse'
values = []
opt = OptionParser.new
opt.on('-a int') {|v| values << v.to_i }
opt.on('-b int') {|v| values << v.to_i }
opt.parse!(ARGV)
sum = values.sum
puts "sum :#{sum}"
opt.on('-a int') {|v| values << v.to_i }
ここでは、-aで受け取った数値をブロック内でvalues[]という配列に格納しています。受け取った値は文字列となっており、このままだと計算処理を行えないためto_i
メソッドでIntagerへ変換しています。この処理はopt.parse!(ARGV)
時点で実行されます。
その後sumメソッドでvalues[]の合計を算出しています。
無事実装できているか次のコマンドでテストしてみましょう。
ruby sum.rb -a 10 -b 20
10 + 20なので30が出力されればOKですね。
sum :30
無事出力されました。
以上がrubyのoptparseを使ってコマンドライン引数を扱う手順となります。