Rubyでargvを使いこなす!7つの詳細ガイドとコード例 – Japanシーモア

Rubyでargvを使いこなす!7つの詳細ガイドとコード例

Ruby argv 使い方 ガイドRuby
この記事は約12分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Rubyのargvは、Rubyスクリプトがコマンドラインから引数を受け取るための特殊な配列です。

これにより、ユーザーはスクリプトにデータを渡し、そのデータをスクリプトが操作することが可能となります。

本記事を読めば、Rubyのargvの使い方、注意点、そしてカスタマイズ方法まで理解し活用することができるようになります。

●argvの基本的な使い方

○argvとは何か?

RubyのARGVとは、Arrayの一種で、コマンドラインから入力された引数が格納されています。

Rubyスクリプトが実行されるとき、コマンドラインの引数はARGV配列に格納され、スクリプト内で利用できます。

○コマンドライン引数とargv

コマンドライン引数とは、プログラムが実行されるときにコマンドラインから渡される引数のことを指します。

例えば、次のようなRubyスクリプトを考えてみましょう。

# sample.rb
puts ARGV[0]

上記のスクリプトを以下のように実行した場合、

$ ruby sample.rb Hello

コマンドラインから渡された引数 “Hello” がARGV[0]に格納され、スクリプトはその値を出力します。

つまり、”Hello” が表示されるのです。

●詳細な使い方:7つのサンプルコード

以下に、argvの詳細な使い方を7つのサンプルコードとともにご紹介します。

それぞれのコードを試すことで、argvの使い方を深く理解することができます。

○サンプルコード1:argvの基本的な使い方

まずは、argvの基本的な使い方を見ていきましょう。

下記のコードは、すべてのコマンドライン引数を順番に表示するスクリプトです。

# argv_basic.rb
ARGV.each do |arg|
  puts arg
end

このスクリプトを次のように実行すると、

$ ruby argv_basic.rb Hello World 123

“Hello”, “World”, “123” の順番に表示されます。

○サンプルコード2:複数の引数を取得する

次に、複数の引数を取得する方法について見ていきます。

下記のスクリプトは、二つの引数を取得し、それぞれを表示します。

# argv_multiple.rb
first_arg, second_arg = ARGV
puts "First argument: #{first_arg}"
puts "Second argument: #{second_arg}"

このスクリプトを以下のように実行します。

$ ruby argv_multiple.rb Ruby argv

出力結果は “First argument: Ruby” と “Second argument: argv” となります。

○サンプルコード3:オプション引数を取得する

次に、コマンドラインからオプション引数を取得する方法を見てみましょう。

オプション引数とは、一般的にダッシュ(-)またはダブルダッシュ(–)で始まる特殊な引数です。

下記のコードは、ダッシュで始まるオプション引数を探し、それらの値を出力するスクリプトです。

# argv_options.rb
ARGV.each do |arg|
  if arg.start_with?('-')
    puts "Option: #{arg}"
  else
    puts "Argument: #{arg}"
  end
end

このスクリプトを以下のように実行します。

$ ruby argv_options.rb -a -b value

出力結果は “Option: -a”、”Option: -b”、”Argument: value”となります。

このコードでは、eachメソッドを使用してARGV配列内の各引数にアクセスし、start_with?メソッドを使用して引数がダッシュで始まるかどうかをチェックしています。

ダッシュで始まる引数はオプションとして扱い、それ以外の引数は通常の引数として扱います。

○サンプルコード4:引数が存在しない場合のエラーハンドリング

コマンドライン引数は、ユーザーが何も入力しなかった場合には存在しません。

そのため、argvを使用するスクリプトでは、引数が存在しない場合に備えるエラーハンドリングが重要です。

下記のコードでは、引数が存在しない場合にエラーメッセージを表示します。

# argv_error_handling.rb
if ARGV.empty?
  puts "Error: No arguments provided."
  exit 1
else
  puts "Arguments: #{ARGV.join(', ')}"
end

このスクリプトを引数なしで実行します。

$ ruby argv_error_handling.rb

すると、”Error: No arguments provided.”というエラーメッセージが出力されます。

このスクリプトでは、empty?メソッドを使用してARGV配列が空かどうかをチェックしています。

引数が存在しない場合、エラーメッセージを表示し、exit 1を使ってスクリプトを終了します。

引数が存在する場合は、引数をカンマで連結した文字列を表示します。

○サンプルコード5:引数を利用したファイル操作

ARGVを使用することで、ファイル名やディレクトリ名を引数として受け取り、その引数を基にファイル操作を行うことも可能です。

下記のコードは、引数で指定されたファイルの内容を表示するスクリプトです。

# argv_file_operation.rb
filename = ARGV[0]
if File.exists?(filename)
  content = File.read(filename)
  puts "Content of #{filename}:"
  puts content
else
  puts "Error: File #{filename} does not exist."
end

このスクリプトを次のように実行します。

$ ruby argv_file_operation.rb sample.txt

ここで、sample.txtは存在していてその内容が”Hello, Ruby!”だとすると、出力結果は “Content of sample.txt: Hello, Ruby!”となります。

このコードでは、ARGV[0]を使用して最初の引数を取得し、それをfilenameとしています。

そして、File.exists?メソッドを使ってそのファイルが存在するかどうかを確認します。

もしファイルが存在すれば、File.readメソッドを使ってファイルの内容を読み取り、その内容を表示します。

存在しなければ、エラーメッセージを表示します。

○サンプルコード6:コマンドラインから入力を受け取る

次に、コマンドラインから実行時に入力を受け取る方法を見てみましょう。

下記のコードは、ARGVを使用してコマンドラインから入力を受け取り、それをそのまま出力するスクリプトです。

# argv_input.rb
input = ARGV[0]
puts "You entered: #{input}"

このスクリプトを以下のように実行します。

$ ruby argv_input.rb Hello

すると、出力結果は “You entered: Hello”となります。

このコードでは、ARGV[0]を使用してコマンドラインからの最初の入力を取得し、それをそのまま出力しています。

○サンプルコード7:argvを使った小さなプロジェクト

最後に、argvを使用した小さなプロジェクトの例を見てみましょう。

下記のコードは、引数で指定された2つの数字の加算を行うスクリプトです。

# argv_addition.rb
num1 = ARGV[0].to_i
num2 = ARGV[1].to_i
sum = num1 + num2
puts "Sum: #{sum}"

このスクリプトを以下のように実行します。

$ ruby argv_addition.rb 3 5

すると、出力結果は “Sum: 8″となります。

このコードでは、ARGV[0]とARGV[1]を使用してコマンドラインから2つの数値を取得し、to_iメソッドを使用して文字列から整数へ変換しています。

その後、これらの数値を加算し、結果を出力します。

●応用例 – argvを使って何ができるのか?

argvは、プログラムに対する入力をコマンドラインから受け取ることが可能な、Rubyの非常に強力な機能の一つです。

これにより、ユーザーはスクリプトの実行時にパラメータを渡すことができます。

また、これを活用することで、スクリプトが異なるデータやパラメータに対応できるようになり、再利用可能性が大幅に向上します。

例えば、argvを使用して、ユーザーから任意の数の単語を受け取り、それらをアルファベット順に並べ替えるスクリプトを作成することができます。

# argv_sort.rb
words = ARGV
sorted_words = words.sort
puts "Sorted words: #{sorted_words.join(', ')}"

上記のスクリプトを次のように実行します。

$ ruby argv_sort.rb Ruby argv Guide

すると、出力結果は “Sorted words: Guide, Ruby, argv”となります。

このコードでは、ARGVを使ってコマンドラインから任意の数の単語を受け取り、それらをソートして出力しています。

Rubyのsortメソッドを使用することで、受け取った単語をアルファベット順に並べ替えることができます。

●注意点と対処法

Rubyでargvを使う際の注意点としては、argvが文字列の配列として入力を受け取るため、数値操作を行う場合は適切に型変換を行う必要がある点があります。

また、入力が無い場合にはnilが返され、これをそのまま使用するとエラーが発生する可能性があります。

これを防ぐためには、適切なエラーハンドリングが必要となります。

# argv_error.rb
num1 = ARGV[0].to_i
num2 = ARGV[1].to_i
if num1.nil? || num2.nil?
  puts "Error: Please provide two numbers as arguments."
  exit
end
sum = num1 + num2
puts "Sum: #{sum}"

このコードでは、ARGV[0]とARGV[1]が存在するかどうかをチェックし、存在しない場合にはエラーメッセージを出力してスクリプトの実行を終了しています。

このように、適切なエラーハンドリングを行うことで、予期せぬエラーを防ぐことができます。

●カスタマイズ方法

argvはそのまま使用するだけでなく、あなた自身のニーズに応じてカスタマイズすることも可能です。

たとえば、ARGV配列から特定の値を検索するメソッドを追加することができます。

次に示すのは、ARGV配列から特定の値を検索するメソッドを追加するサンプルコードです。

# argv_extension.rb
class << ARGV
  def find_value(key)
    index = self.index(key)
    return nil if index.nil? || index == self.length - 1
    self[index + 1]
  end
end

puts "Value of '--name': #{ARGV.find_value('--name')}"
puts "Value of '--age': #{ARGV.find_value('--age')}"

このコードを実行するときに次のように引数を指定します。

$ ruby argv_extension.rb --name John --age 20

すると、出力結果は “Value of ‘–name’: John”と “Value of ‘–age’: 20″となります。

このコードでは、ARGVの特異クラスに新しいメソッドfind_valueを追加しています。

このメソッドは指定されたキーの後の値を探し出し、その値を返します。

このようにARGVを拡張することで、コマンドライン引数の解析をより柔軟に行うことが可能になります。

○自分だけのargvライブラリを作る

一歩進んで、あなた自身のコマンドライン引数解析ライブラリを作成することもできます。

そのための一例として、次に示すコードは、コマンドライン引数を解析し、キーと値のペアをハッシュとして返すシンプルなライブラリです。

# argv_parser.rb
class ArgvParser
  def self.parse(args)
    result = {}
    args.each_slice(2) do |key, value|
      result[key.gsub('--', '')] = value
    end
    result
  end
end

parsed_args = ArgvParser.parse(ARGV)
puts parsed_args

このコードを実行するときに次のように引数を指定します。

$ ruby argv_parser.rb --name John --age 20

すると、出力結果は “{“name”=>”John”, “age”=>”20”}”となります。

このコードでは、ArgvParserというクラスを定義し、その中にコマンドライン引数を解析するためのparseメソッドを定義しています。

parseメソッドは引数の配列を2つずつスライスし、それぞれをキーと値のペアとしてハッシュに格納します。そして、そのハッシュを

返すことで、コマンドライン引数がキーと値のペアのハッシュとして扱えるようになります。

まとめ

Rubyのargvは非常に強力な機能であり、様々な応用が可能です。

ユーザーからの入力をコマンドラインから直接受け取ることができ、スクリプトの再利用性を大幅に向上させることができます。

また、適切なエラーハンドリングを行うことで、予期せぬエラーを防ぐことが可能です。

さらに、argvは自分自身のニーズに合わせてカスタマイズすることが可能で、例えば特定の値を検索するメソッドを追加するなどのカスタマイズを行うことができます。

以上が、Rubyのargvの使い方とその応用、注意点、そしてカスタマイズ方法についてのガイドです。

これらを理解し活用することで、あなたもRubyのargvをマスターできることでしょう。

最後まで読んでいただき、ありがとうございました。