LoginSignup
0
0

optparseを使ったコマンドラインアプリケーションの作成

Posted at

sample

require 'optparse'

# オプションのデフォルト値を設定するハッシュ
options = {}

# OptionParserを初期化し、コマンドライン引数を解析するブロックを開始
OptionParser.new do |opts|
  # ヘルプメッセージと使い方を設定
  opts.banner = "Usage: myapp [options]"

  # -fまたは--fileオプションの設定
  opts.on("-f", "--file FILE", "入力ファイルを指定") do |file|
    options[:file] = file  # オプションで指定されたファイル名をoptionsハッシュに保存
  end

  # -vまたは--verboseオプションの設定
  opts.on("-v", "--verbose", "詳細なモードを有効化") do
    options[:verbose] = true  # オプションが指定された場合、:verboseキーをtrueに設定
  end
end.parse!

# ここで、オプションが設定された後にプログラムの残りの部分を記述します。

# もしオプションが指定された場合、その値を使って必要な処理を実行します。
# たとえば、options[:file]には入力ファイルのパスが、options[:verbose]には詳細モードの有無が格納されています。

# 以下のコードでは、設定されたオプションに応じて処理を行う例です。
if options[:file]
  puts "入力ファイル: #{options[:file]}"
end

if options[:verbose]
  puts "詳細モードが有効化されています"
end

このコードの概要は次のとおりです:

OptionParserを使用してコマンドライン引数を解析するための基本的な設定を行います。
-fまたは--fileオプションを使ってファイルの指定ができるようにし、その値をoptionsハッシュに格納します。
-vまたは--verboseオプションを使って詳細モードを有効化できるようにし、オプションが指定された場合にはoptionsハッシュに:verboseキーを設定します。
最後に、実際のプログラムの中でoptionsハッシュの値を使って必要な処理を実行します。例えば、入力ファイルが指定された場合にそのファイルを処理したり、詳細モードが有効化されている場合には詳細なログを表示したりします。
このようにして、コマンドライン引数を使った柔軟なプログラムを作成することができます。

1から12を選択するサンプルコード

require 'optparse'
require 'date'

# コマンドライン引数の解析
options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: #{File.basename(__FILE__)} [options]"

  # -mまたは--monthオプションで月を指定
  opts.on('-m MONTH', '--month MONTH', Integer, 'Month (1-12)') do |month|
    if month >= 1 && month <= 12
      options[:month] = month
    else
      puts "#{month}は月の数字(1から12)ではありません"
      exit 1
    end
  end
end.parse!

# 引数のデフォルト値を設定
options[:month] ||= Date.today.month

# デバッグ用に月を出力
puts "選択された月: #{options[:month]}"

引数として月を指定できるようにし、指定された月が1から12の範囲内であることを確認します。また、引数が指定されなかった場合には、現在の月をデフォルト値として使用します。
image.png

opts.banner

opts.bannerは、OptionParserを使用してコマンドライン引数を解析する際に、ヘルプメッセージや使い方の情報を指定するためのオプションです。

opts.banner = "Usage: #{File.basename(__FILE__)} [options]"

Usage:: これは、ユーザーにプログラムの使い方を示すラベルです。
#{File.basename(FILE)}: これは、現在のスクリプトファイルの名前を取得するためのRubyコードです。__FILE__は現在のスクリプトファイルのパスを表し、File.basename関数はそのパスからファイル名部分を取り出します。つまり、これによって現在のスクリプトファイルの名前が表示されます。
[options]: これは、オプション引数が指定可能であることを示す一般的な表記です。ユーザーがプログラムを実行する際にオプション引数を指定することができることを示しています。
したがって、この行は、ユーザーがコマンドラインでスクリプトを実行する際に、正しい使い方やオプションの指定方法を表示するための文字列を設定しています。例えば、ユーザーが誤ったオプションを指定した場合、このバナーテキストが表示されて、正しい使い方を知らせる役割を果たします。

opts.on

# -mまたは--monthオプションの設定
  opts.on('-m MONTH', '--month MONTH', Integer, '月 (1-12)を指定') do |month|
    # 月が1から12の範囲内かどうかをチェック
    if month >= 1 && month <= 12
      options[:month] = month  # 有効な月が指定された場合、optionsハッシュに保存
    else
      # 無効な月が指定された場合、エラーメッセージを表示して終了
      puts "#{month}は月の数字 (1から12) ではありません"
      exit 1  # プログラムをエラーコード1で終了
    end

OptionParserを使用してコマンドライン引数を解析するための基本的な設定を行います。
-mまたは--monthオプションが指定された場合、オプション引数として月を受け取ります。
受け取った月が1から12の範囲内にあるかどうかを確認します。有効な月が指定された場合、それをoptionsハッシュに格納します。
無効な月が指定された場合、エラーメッセージを表示し、プログラムをエラーコード1で終了させます。
もしオプションが指定されなかった場合、現在の月をデフォルト値として設定します。
最後に、選択された月を表示します。
このようにして、プログラムは正しい使い方で月を指定するか、デフォルトの月を使用して実行されます。

options[:month] ||= Date.today.month

options[:month] ||= Date.today.month

この行は、コマンドライン引数として指定された月がない場合に、デフォルトの値を設定するために使われます。具体的には、現在の日付から現在の月を取得し、それをデフォルトの月として設定します。ここで行われる操作を以下で説明します:

options[:month] は、options というハッシュ(連想配列)内のキー :month に対応する値を表します。この値はコマンドライン引数で指定された月を保持します。

||= 演算子は、左側の変数が nil または false の場合に、右側の値を代入するために使用されます。つまり、左側の変数が既に値を持っている場合には、右側の値は代入されません。

Date.today.month は、現在の日付を取得してその月部分を抽出する操作です。この部分が現在の月を表します。たとえば、現在が9月であれば、Date.today.month は 9 となります。

したがって、この行の目的は次の通りです:

コマンドライン引数で月が指定されていない場合、デフォルトの月として現在の月を設定します。
既にコマンドライン引数で月が指定されている場合、その値を優先して使用します。
このようにして、プログラムはデフォルトの値を適切に設定し、ユーザーが明示的に月を指定しなかった場合には現在の月をデフォルトとして利用できるようになります。

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