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

【Ruby】OptionParserを使ってRubyスクリプトにカスタムオプションを渡す!

Last updated at Posted at 2025-01-04

どうもこんにちは。

今回は、「Rubyスクリプトを実行するときに、OptionParserを使用してカスタムオプションを渡す」方法をメモとして残しておこうと思います。

経緯

OptionParserを使用する経緯としては、「試験仕様書を作成するのめんどくさ!!」というところから始まりました。(なんとも不純な動機...)

作成したかったRubyスクリプトは、「ある機能」の「ある画面」の「ユーザの種類によるアクセス可否」の試験仕様書を作成するスクリプトでした。

「顧客管理機能」の「一覧画面」の「すべてのユーザのアクセス可否」の試験

試験を実施する対象のアプリケーションは、Ruby on Railsで開発していて、config/settings.ymlに記載しています。このファイルを今回作成するRubyスクリプトから参照して、試験手順と期待する結果を変えています。

yml_path = '/Users/testuser/code/test_create_tools/'
data = YAML.load_file(yml_path)

あとはごちゃごちゃ書いて、require 'csv'でCSVモジュールを使って試験仕様書を作成していくのですが、このコードを実行するときに、以下の手順を踏まなきゃ行けなかったんです。

  1. コード内のfunction_namedisplay_nameに代入する値を直接変更する
  2. ruby /Users/testuser/code/test_create_tools/test_create_tool.rbを実行する

上記のように、コードを直接編集するのはなんとも使い勝手が悪い...

なので、コマンドを実行するときに渡せないかと考えたときに、OptionParser という存在を発見!

OptionParserで何をした?

rubyコマンドでRubyスクリプトを実行すると同時に、コードに「機能名」「画面名」をパラメータとして渡すということをしました。

使い方

require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "使い方: test_create_tool.rb [options]"
  opts.on("-fVAL", "--f=VAL", "テストを作成する機能名") do |f|
    options[:f] = f
  end
  opts.on("-sVAL", "--d=VAL", "テストを作成する画面名") do |d|
    options[:d] = d
  end

  # ヘルプの表示
  opts.on_tail("-h", "--help", "ヘルプを表示") do
    puts opts
    exit
  end
end.parse!

# テスト対象となる機能名
function_name = options[:f]

if function_name.nil?
  puts '機能名を指定してください。'
  exit
end

# テスト対象となる画面名
display_name = options[:d]

if display_name.nil?
  puts '画面名を指定してください。'
  exit
end

まとめ

これでコードを直接編集することなく、パラメータとして「機能名」「画面名」を渡すことで、試験仕様書の作成を行うことができました。

2025年からは、試験仕様書の作成での工数消費を抑えて、開発業務に時間を使えるようにしたいなぁと思います!

以上

2
0
2

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