1
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.

optparseについて

Last updated at Posted at 2023-01-29

経緯

 Rubyでカレンダーアプリを作成する際に,引数に任意の数値を渡すことでmacのcalコマンドで表示されるようなカレンダーを表示したかったのでoptparseを使用しました。そこで私なりにoptparseについて調べてみました。

役割

  • コマンドライン引数
     コマンドライン引数は、ターミナルから実行時に引数を渡して読み込める仕組みです。
  • 引数は文字列として出力されます。

OptionParser

以下

sample.rb
require 'optparse'

opt = OptionParser.new
#aに渡ってきた引数をvに格納
opt.on('-a') {|v| p v }
# 真偽値を表示。
opt.parse!(ARGV)
p ARGV

$ruby sample.rb -a foo
# この場合aに引数が渡っていますのでtrueを表示。そしてfooを表示
=>true
["foo"]

引数が2つの場合

sample.rb
require 'optparse'

opt = OptionParser.new
opt.on('-a') {|v| p v }
opt.on('-b') {|v| p v }
opt.parse!(ARGV)
p ARGV

$ruby sample.rb -a fooe  -b baz
=>true
true
["foo", "baz"]

 定義していないオプションを指定すると例外 OptionParser::InvalidOption が発生します。

sample.rb
ruby sample.rb -c           
=>sample.rb:3:in `<main>': invalid option: -c (OptionParser::InvalidOption)
sample.rb:3:in `<main>': invalid option: c (OptionParser::InvalidOption)

 OptionParser 自体は、どのオプションが指定されたかを記憶しないため、後の処理の方で、オプションによる条件判断を加えるには、 他のコンテナに格納します。

sample.rb
require 'optparse'
opt = OptionParser.new
# 引数を格納
OPTS = {}

opt.on('-a') {|v| OPTS[:a] = v }
opt.on('-b') {|v| OPTS[:b] = v }

opt.parse!(ARGV)
p ARGV
p OPTS

$ruby sample.rb -a foo bar -b baz
=>["foo", "bar", "baz"]
  {:a=>true, :b=>true}

ARGV

sample.rb
require 'optparse'

option1 = ARGV[0]
option2 = ARGV[1]

puts "Option 1: #{option1}"
puts "Option 2: #{option2}"

$ruby sample.rb foo bar
=>Option 1: foo
Option 2: bar


# またはARGV.getoptsを使う
require 'optparse'

# 引数にオプションa, オプションbを指定
params = ARGV.getopts("a:b:")
p params

$ruby sample.rb -a foo -b bar
=>{"a"=>foo, "b"=>"bar"}

 getoptsメソッド使うとワンラインでコードでオプションと引数を複数指定することができ、受け取ったものをHashとして( 例[a:])受け取ることができます。引数が必要なオプションにはコロンをオプションの後ろにつけます。オプションや引数をシンプルに扱うだけであればARGV.getoptsを使うと記述量が少なくて済みます。

参考サイト

1
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
1
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?