Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
49
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@ionis_h

Rubyのoptparseを軽く使うなら悩む必要なんてなかった

今回『スクリプトに--dry-runオプションのみを作りたい』場面が個人的に出てきました。
以前、Rubyのoptparseを軽く使いたい時に悩むというような事を書いていたのですが、実は軽く使いたい時は悩む必要がなかったのでメモ・・・orz

概要

library optparse

ARGV の機能
optparse を require すると ARGV に OptionParser::Arguable の機能 が加わります。以下の書き方ができるようになります。
OptionParser::Arguable#getopts はオプションを保持した Hash を返します。

# sample.rb の内容
require 'optparse'
params = ARGV.getopts("a:c:", "foo", "bar:")
p params

この sample.rb を実行すると

$ ruby sample.rb -a 1 --foo --bar xxx
{"a"=>"1", "c"=>nil, "foo"=>true, "bar"=>"xxx"}

(引用元のコードでは、getopts第一引数のa:の後ろはb:なのですが、そうするとQiitaの記法に引っかかるのか、"a:b:"と絵文字っぽくなってしまうので、cに変更しました。)

試しに上記スクリプトを--helpをしてみると

$ ruby sample.rb --help
Usage: sample [options]
    -a VAL
    -c VAL
        --foo
        --bar VAL

・・・素敵やん。

なおgetoptsに関して、詳しくは以下のリンク
instance method OptionParser::Arguable#getopts

今回のコード

というわけで、今回は--dry-runのオプションのみを作りたかっただけなので、以下に落ち着きました。

require "optparse"

options = ARGV.getopts("", "dry-run")
p options

実行結果

$ ruby temp.rb --dry-run
{"dry-run"=>true}
$ ruby temp.rb
{"dry-run"=>false}

シンプル!!(`・ω・´)

まとめ

ちゃんとドキュメントは読みましょう。。。orz
だいぶ手軽になりましたね〜(^^

49
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
49
Help us understand the problem. What is going on with this article?