はじめに
Rubyでコマンドライン引数を使う際は、optparse
でオプションを指定することができます。
今回はoptparse
の使い方を簡単にまとめていきたいと思います。
用語について
まず各用語について確認します。
-
オプション
→コマンドの振る舞い方を指定する。
-(ハイフン)とアルファベット1文字で指定する。 -
コマンドライン引数
→プログラムを実行する際に指定する引数(文字列)のこと。
使い方
以下の手順でoptparseの設定を行います。
- OptionParseオブジェクトを生成
- オプションを登録
- parseメソッドでコマンドラインを解析
具体的なソースコードは以下のようになります。
require 'optparse'
opt = OptionParse.new
opt.on('-m'){|v| p v}
opt.parse!(ARGV)
p ARGV
$ ruby sample.rb -m hoge
true
["hoge"]
$ ruby sample.rb -m
true
[]
$ ruby sample.rb
[]
1. OptionParseオブジェクトを生成
optparse
ライブラリを読み込み、OptionParse
オブジェクトを生成します。
# optparseライブラリを読み込む
require 'optparse'
# OptionParseオプジェクトを生成する
opt = OptionParse.new
2. オプションを登録
on
メソッドを使用することで、コマンドライン引数のオプションを登録することができます。
以下のコードでは、-m
オプションを指定しています。
引数v
には、オプションが指定されたことを示すtrue
が入ります。
# onメソッドを使用してオプションを登録
opt.on('-m'){|v| p v}
3. parseメソッドでコマンドラインを解析
parse!
メソッドでコマンドラインを解析します。
parse!
は破壊的メソッドであるため、ARGV
の内容はオプションが取り除かれた形となります。
# parse!メソッドでコマンドラインを解析
opt.parse!(ARGV)
# ARGVを出力する
p ARGV
その他例
ARGVからオプションを取り除かないようにする
ARGVからオプションを取り除かないようにするには、parse
メソッドを用います。
require 'optparse'
opt = OptionParser.new
opt.on('-m') {|v| p v }
# parseの場合、ARGVは変更されない
# argvにオプションを取り除いたものが設定される
argv = opt.parse(ARGV)
p ARGV
p argv
$ ruby sample.rb -m hoge
true
["-m","hoge"]
["hoge"]
$ ruby sample.rb -m
true
["-m"]
[]
$ ruby sample.rb
[]
[]
オプションの指定情報を他のコンテナに代入する
オプションの指定情報を他のコンテナに代入することも可能です。
require 'optparse'
opt = OptionParser.new
params = {}
# paramsの「mキー」にtrueを代入
opt.on('-m') {|v| params[:m] = v }
opt.parse!(ARGV)
p ARGV
p params
$ ruby sample.rb -m hoge
["hoge"]
{:m=>true}
$ ruby sample.rb -m
[]
{:m=>true}
$ ruby sample.rb
[]
{}
parseメソッドに:into
を指定することで、同様にオプションの指定情報を格納できます。
require 'optparse'
opt = OptionParser.new
params = {}
opt.on('-m') {|v| v }
# parseメソッドに":into"を指定する
opt.parse!(ARGV, into: params)
p ARGV
p params
オプションの引数を指定する
オプションの引数を指定する場合は、VAL
を追加します。
オプションの引数が指定されなかった場合は、OptionParser::MissingArgument
エラーが発生します。
require 'optparse'
opt = OptionParser.new
# "VAL"を追加
# "v"にオプションの引数が渡される
opt.on('-m VAL') {|v| p v }
opt.parse!(ARGV)
p ARGV
$ ruby sample.rb -m hoge
"hoge"
[]
$ ruby sample.rb -m
missing argument: -m (OptionParser::MissingArgument)
$ ruby sample.rb
[]
オプションの引数が必須でない場合は、[VAL]
を追加します。
require 'optparse'
opt = OptionParser.new
# "[VAL]"を追加
opt.on('-m [VAL]') {|v| p v }
opt.parse!(ARGV)
p ARGV
$ ruby sample.rb -m
nil
[]