LoginSignup
1
1

Rubyでコマンドラインのオプションを扱う"optparse"の使い方

Last updated at Posted at 2023-08-20

optparseとは

Rubyでコマンドライン引数を扱うための標準ライブラリです。

例えば、test.rbというファイルを実行するとして、ruby test.rb -a 100のようにコマンドライン引数で値を渡すことができます。-a 100の中身はファイル内で使用することができます。

今回は説明の題材として、コマンドライン引数から二つの値を受け取り、合計値を返すシンプルなプログラムを作成します。

optparseの使い方

  1. OptionParser オブジェクト opt を生成する。
  2. オプションを取り扱うブロックを opt に登録する。
  3. opt.parse(ARGV) でコマンドラインを実際に parse する。

library optparse (Ruby 3.2 リファレンスマニュアル)より引用

1. OptionParser オブジェクト opt を生成する。

sum.rb
require 'optparse'

opt = OptionParser.new

require 'optparse'でライブラリを読み込み、変数optにOptionParserクラスから生成したインスタンスを格納しています。このインスタンスに対して操作を加えることでオプション引数を扱えるようになります。

2. オプションを取り扱うブロックを opt に登録する。

sum.rb
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を実行します。

sum.rb
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"]

引数の合計値を返す

二つの整数を受け取りその合計を返すプログラムを作成します。

sum.rb
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を使ってコマンドライン引数を扱う手順となります。

参考記事

library optparse (Ruby 3.2 リファレンスマニュアル)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1