0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rubyのoptparse使い方まとめ

Posted at

はじめに

Rubyでコマンドライン引数を使う際は、optparseでオプションを指定することができます。
今回はoptparseの使い方を簡単にまとめていきたいと思います。

用語について

まず各用語について確認します。

  • オプション
    →コマンドの振る舞い方を指定する。
    -(ハイフン)とアルファベット1文字で指定する。

  • コマンドライン引数
    →プログラムを実行する際に指定する引数(文字列)のこと。

使い方

以下の手順でoptparseの設定を行います。

  1. OptionParseオブジェクトを生成
  2. オプションを登録
  3. parseメソッドでコマンドラインを解析

具体的なソースコードは以下のようになります。

sample.rb
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オブジェクトを生成します。

sample.rb
# optparseライブラリを読み込む
require 'optparse'
# OptionParseオプジェクトを生成する 
opt = OptionParse.new

2. オプションを登録

onメソッドを使用することで、コマンドライン引数のオプションを登録することができます。
以下のコードでは、-mオプションを指定しています。
引数vには、オプションが指定されたことを示すtrueが入ります。

sample.rb
# onメソッドを使用してオプションを登録
opt.on('-m'){|v| p v}

3. parseメソッドでコマンドラインを解析

parse!メソッドでコマンドラインを解析します。
parse!は破壊的メソッドであるため、ARGVの内容はオプションが取り除かれた形となります。

sample.rb
# parse!メソッドでコマンドラインを解析
opt.parse!(ARGV)
# ARGVを出力する
p ARGV

その他例

ARGVからオプションを取り除かないようにする

ARGVからオプションを取り除かないようにするには、parseメソッドを用います。

sample.rb
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
[]
[]

オプションの指定情報を他のコンテナに代入する

オプションの指定情報を他のコンテナに代入することも可能です。

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を指定することで、同様にオプションの指定情報を格納できます。

sample
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エラーが発生します。

sample.rb
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]を追加します。

sample.rb
require 'optparse'
opt = OptionParser.new

# "[VAL]"を追加
opt.on('-m [VAL]') {|v| p v }         

opt.parse!(ARGV)
p ARGV
オプションありのみの実行結果
$ ruby sample.rb -m
nil
[]

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?