Rails Insights

Ruby CLIにおけるコマンドラインオプション

Rubyは、シンプルでありながら強力なプログラミング言語であり、コマンドラインインターフェース(CLI)を使用してスクリプトを実行することができます。CLIを利用することで、ユーザーはプログラムに対してさまざまなオプションを指定し、動作をカスタマイズすることができます。本記事では、RubyのCLIにおけるコマンドラインオプションの使い方について詳しく解説します。

コマンドラインオプションとは?

コマンドラインオプションは、プログラムを実行する際に指定する追加の引数です。これにより、プログラムの動作を変更したり、特定の機能を有効にしたりすることができます。Rubyでは、これらのオプションを簡単に処理するための方法がいくつか用意されています。

基本的なコマンドラインオプションの使用

Rubyのスクリプトを実行する際、コマンドラインオプションを指定することができます。以下は、基本的なコマンドラインオプションの例です。

$ ruby my_script.rb --option value

ここで、`my_script.rb`は実行するRubyスクリプトのファイル名、`--option`はオプションの名前、`value`はそのオプションに渡す値です。

ARGVを使ったコマンドライン引数の取得

Rubyでは、`ARGV`という配列を使用してコマンドライン引数を取得することができます。`ARGV`は、スクリプトに渡されたすべての引数を格納します。

例: ARGVを使った引数の取得

以下の例では、コマンドライン引数を取得し、表示する簡単なスクリプトを作成します。

# my_script.rb
puts "コマンドライン引数:"
ARGV.each do |arg|
  puts arg
end

このスクリプトを実行すると、指定した引数がすべて表示されます。

$ ruby my_script.rb arg1 arg2 arg3
コマンドライン引数:
arg1
arg2
arg3

オプションの解析

コマンドラインオプションを解析するための便利なライブラリがいくつかあります。ここでは、`OptionParser`を使ったオプションの解析方法を紹介します。

OptionParserの基本的な使い方

`OptionParser`は、コマンドラインオプションを簡単に定義し、解析するためのクラスです。以下の例では、`OptionParser`を使用してオプションを定義し、解析する方法を示します。

require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "使用法: my_script.rb [オプション]"

  opts.on("-nNAME", "--name NAME", "名前を指定します") do |name|
    options[:name] = name
  end

  opts.on("-a", "--age AGE", "年齢を指定します") do |age|
    options[:age] = age.to_i
  end

  opts.on("-h", "--help", "ヘルプを表示します") do
    puts opts
    exit
  end
end.parse!

puts "名前: #{options[:name]}" if options[:name]
puts "年齢: #{options[:age]}" if options[:age]

このスクリプトを実行すると、指定したオプションに応じて名前や年齢を表示します。

$ ruby my_script.rb --name Alice --age 30
名前: Alice
年齢: 30

オプションのバリデーション

コマンドラインオプションを解析する際、入力された値が正しいかどうかを確認することが重要です。`OptionParser`を使用すると、オプションのバリデーションを簡単に行うことができます。

例: オプションのバリデーション

以下の例では、年齢が正の整数であることを確認するバリデーションを追加します。

require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "使用法: my_script.rb [オプション]"

  opts.on("-nNAME", "--name NAME", "名前を指定します") do |name|
    options[:name] = name
  end

  opts.on("-aAGE", "--age AGE", "年齢を指定します") do |age|
    if age.to_i <= 0
      puts "年齢は正の整数でなければなりません。"
      exit
    end
    options[:age] = age.to_i
  end

  opts.on("-h", "--help", "ヘルプを表示します") do
    puts opts
    exit
  end
end.parse!

puts "名前: #{options[:name]}" if options[:name]
puts "年齢: #{options[:age]}" if options[:age]

このスクリプトを実行すると、年齢が正の整数でない場合にエラーメッセージが表示されます。

$ ruby my_script.rb --age -5
年齢は正の整数でなければなりません。

複数のオプションの処理

複数のオプションを同時に処理することも可能です。`OptionParser`を使用すると、複数のオプションを簡単に定義できます。

例: 複数のオプションの処理

require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "使用法: my_script.rb [オプション]"

  opts.on("-nNAME", "--name NAME", "名前を指定します") do |name|
    options[:name] = name
  end

  opts.on("-aAGE", "--age AGE", "年齢を指定します") do |age|
    if age.to_i <= 0
      puts "年齢は正の整数でなければなりません。"
      exit
    end
    options[:age] = age.to_i
  end

  opts.on("-h", "--help", "ヘルプを表示します") do
    puts opts
    exit
  end
end.parse!

if options[:name] && options[:age]
  puts "こんにちは、#{options[:name]}さん!あなたの年齢は#{options[:age]}歳です。"
else
  puts "名前と年齢の両方を指定してください。"
end

このスクリプトを実行すると、名前と年齢の両方が指定された場合に挨拶が表示されます。

$ ruby my_script.rb --name Alice --age 30
こんにちは、Aliceさん!あなたの年齢は30歳です。

まとめ

RubyのCLIにおけるコマンドラインオプションは、プログラムの動作を柔軟にカスタマイズするための強力な手段です。`ARGV`を使用して引数を取得し、`OptionParser`を使ってオプションを定義・解析することで、ユーザーにとって使いやすいインターフェースを提供できます。

本記事で紹介した内容を参考にして、あなたのRubyスクリプトにコマンドラインオプションを追加してみてください。これにより、よりインタラクティブで便利なプログラムを作成することができるでしょう。

Published: August 12, 2024

© 2024 RailsInsights. All rights reserved.