はじめに
HappinessChainの課題でRubyのoptparseを使用したので、使い方について簡単にまとめます。
使用したRubyのバージョンは3.2.2です。
optparseについての詳細は以下の公式リファレンスを確認してください。
optparseとは何か
optparseはRubyの標準ライブラリの一つで、コマンドラインのオプションを取り扱うのに使用します。
optparseを使わない場合
optparseを使用しなくても、ARGV
を使用すればコマンドラインの引数を受け取ることはできます。
たとえば、aオプションとbオプションを使い、それぞれに数値の引数を受け取りたいとします。
$ ruby sumple.rb -a 1 -b 2
# sample.rb hikisu0 = ARGV[0] # "-a" hikisu1 = ARGV[1] # "1" hikisu2 = ARGV[2] # "-b" hikisu3 = ARGV[3] # "2"
しかし、こちらですと、オプションと値のセット(上記の例だと-a
と1
, -b
と2
)には関連性はありません。
値が数値かどうかのチェックも1から実装しなくてはなりません。
optparseを使えば、与えられたオプションごとに値をチェックすることができます。
オプションを受け付ける
たとえば、上記と同じようにaオプションとbオプションを受け付ける場合は、以下のように書きます。
$ ruby sumple.rb -a 1 -b 2
# sample.rb # ライブラリoptparseの読み込み require 'optparse' # optpaserのインスタンス化 opt = OptionParser.new # オプションの登録 opt.on('-a') opt.on('-b') # 受け取った引数がARGVに格納される opt.parse(ARGV) p ARGV # ["-a", "1", "-b", "2"]
すると、a, b以外のオプションを指定した場合はエラーにしてくれます。
$ ruby sample.rb -m 1 invalid option: -m (OptionParser::InvalidOption) invalid option: m (OptionParser::InvalidOption)
破壊的メソッドにすると、ARGVにオプションは含まれません。
opt.parse!(ARGV) p ARGV # ["1", "2"]
引数の入力をチェックする
以下のように書くと、aオプションの引数がなかった場合にエラーにしてくれます。
require 'optparse' opt = OptionParser.new opt.on('-a VAL') opt.parse(ARGV) p ARGV
$ ruby sample.rb -a missing argument: -a (OptionParser::MissingArgument)
引数が必須でない場合は[]
をつけます。
opt.on('-a [VAL]')
引数の型をチェックする
VALの後に型を指定することができます。
opt.on('-a VAL', Integer)
指定した型以外の値が入力された場合はエラーを出してくれます。
$ ruby sample.rb -a arg invalid argument: -a arg (OptionParser::InvalidArgument)