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とは

公式リファレンスを見ていただければわかりますが、要するにコマンド実行時のオプションを自分で作るためのライブラリです。
オプションというのは、コマンドを実行するときにその後に---をつけて指定できるものです。
たとえばGitのbranchコマンドでは、以下のように-d(--delete)オプションの後にブランチ名を指定することでそのブランチを削除できます。-dがショートオプション、--deleteがロングオプションです。

git branch -d ブランチ名
git branch --delete ブランチ名

上の例ではオプションのあとにブランチ名を指定していますが、これは引数となるものです。引数は省略できる場合もあります。オプション(+引数)で色々な操作が実現可能になります。optparseで自分の好きなオプションを作成可能です。

optparseの使ったオプションの作成方法

requireします。

optparse.rb
+ require 'optparse'

OptionParser.newブロック内に必要なオプションを定義します。
引数なしのオプションを作成する場合はオプション名のみ、引数ありのオプションを作成する場合はオプション名と引数名を指定します。
下記の例は、引数に指定した値をxにプラスする処理です。-aオプションのあとに引数のnumberを書いています。

optparse.rb
require 'optparse'

+ x = 10
+ options = {} # 引数の値を入れるための空の配列を作成
+ OptionParser.new do |opts|
+   opts.on('-a number') do |number|
+     options[:number] = number.to_i
+     x += options[:number]
+   end
+ end.parse!

+ puts x
実行結果
$ ruby optparse.rb -a 10
20

コードの役割

options = {}

引数を入れるための空の配列を作成しています。

options[:number] = number.to_i

引数は文字列として扱われるので、number.to_iで数値型に変換しています。もしこの行を以下のように書くとエラーになります。

x += number
実行結果
$ ruby optparse.rb -a 10
optparse.rb:10:in `+': String can't be coerced into Integer (TypeError)

ただし、以下のように引数の型を指定しておけばまた別です。

opts.on('-a number', Integer) do |number|
  options[:number] = number
  x += options[:number]
end
end.parse!

この行はARGV(オプションと引数の配列)から引数だけを取り出します。この行まで来たらブロック内の処理が行われます。もし.parse!の部分がなかったら以下のようにブロック内の処理が行われません。

require 'optparse'

x = 10
options = {} # 引数の値を入れるための空の配列を作成
OptionParser.new do |opts|
  opts.on('-a number') do |number|
    options[:number] = number.to_i
    x += options[:number]
  end
- end.parse!
+ end
puts x
実行結果
$ ruby optparse.rb -a 10
10

補足

ロングオプション

指定する場合は以下のようになります。

optparse.rb
- opts.on('-a number') do |number|
+ opts.on('-a', '--add number') do |number|
実行結果
$ ruby optparse.rb --add 10
20

引数なしの場合

本記事では引数必須のオプションを作成したので、引数を指定しないとエラーになります。

実行結果
$ ruby optparse.rb -a
optparse.rb:16:in `<main>': missing argument: -a (OptionParser::MissingArgument)
$ ruby optparse.rb --add
optparse.rb:16:in `<main>': missing argument: --add (OptionParser::MissingArgument)

本記事では解説しませんが、省略可の引数ありのオプションを作成する場合は、引数を[]で囲みます。

ヘルプ

オプションの説明を加えておくことで、-h(--help)でコマンドの説明を出力できます。

optparse.rb
opts.on('-a', '--add number', 'add') do |number|
実行結果
$ ruby optparse.rb -h
Usage: optparse [options]
    -a, --add number                 add
$ ruby optparse.rb --help
Usage: optparse [options]
    -a, --add number                 add

以上になります。

参考記事

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?