可変長引数を使うと、メソッドに渡す引数の数を柔軟に変更できます。Rubyでは*(スプラット演算子)を引数名の前に付けることで、任意の個数の引数を配列として受け取ることができます。引数の数が事前に決まっていない場合に非常に便利な機能です。
基本的な使い方
引数名の前に*を付けると、渡された引数がすべて配列として受け取れます。
Ruby
def greet(*names)
names.each do |name|
puts "こんにちは、#{name}さん!"
end
end
greet('太郎')
puts '---'
greet('太郎', '花子', '次郎')実行結果
こんにちは、太郎さん!
---
こんにちは、太郎さん!
こんにちは、花子さん!
こんにちは、次郎さん!*namesで受け取った引数は配列になるため、eachで繰り返し処理したり、lengthで個数を確認できます。引数を1つも渡さない場合は空の配列になります。
通常の引数と組み合わせる
可変長引数は通常の引数と組み合わせて使えます。
Ruby
def sum(label, *numbers)
total = numbers.sum
puts "#{label}: #{numbers.join(' + ')} = #{total}"
end
sum('合計', 1, 2, 3)
sum('合計', 10, 20, 30, 40, 50)実行結果
合計: 1 + 2 + 3 = 6
合計: 10 + 20 + 30 + 40 + 50 = 150最初の引数はlabelに代入され、残りのすべての引数がnumbers配列に入ります。可変長引数は通常の引数の後に配置するのが一般的です。
ダブルスプラット(**)でハッシュを受け取る
**(ダブルスプラット)を使うと、キーワード引数をハッシュとして受け取れます。
Ruby
def create_user(name, **options)
puts "名前: #{name}"
options.each do |key, value|
puts " #{key}: #{value}"
end
end
create_user('太郎', age: 25, city: '東京')
puts '---'
create_user('花子', age: 22, email: 'hanako@example.com', role: 'admin')実行結果
名前: 太郎
age: 25
city: 東京
---
名前: 花子
age: 22
email: hanako@example.com
role: adminスプラット演算子で配列を展開
*はメソッド呼び出し時に配列を展開する目的でも使えます。
Ruby
def add(a, b, c)
a + b + c
end
numbers = [10, 20, 30]
result = add(*numbers) # 配列を展開して引数に渡す
puts "合計: #{result}"実行結果
合計: 60実践的な使い方
Ruby
# ログ出力メソッド
def log(level, *messages)
timestamp = '2026-02-19 10:30:00'
messages.each do |msg|
puts "[#{timestamp}] [#{level.upcase}] #{msg}"
end
end
log('info', 'アプリケーション起動')
log('warn', 'メモリ使用量が80%を超えました', 'ディスク容量が少なくなっています')
log('error', 'データベース接続エラー')
puts '---'
# 統計計算メソッド
def statistics(*values)
return puts '値がありません' if values.empty?
puts "データ: #{values.inspect}"
puts "個数: #{values.length}"
puts "合計: #{values.sum}"
puts "平均: #{(values.sum.to_f / values.length).round(1)}"
puts "最大: #{values.max}"
puts "最小: #{values.min}"
end
statistics(85, 92, 78, 95, 67)実行結果
[2026-02-19 10:30:00] [INFO] アプリケーション起動
[2026-02-19 10:30:00] [WARN] メモリ使用量が80%を超えました
[2026-02-19 10:30:00] [WARN] ディスク容量が少なくなっています
[2026-02-19 10:30:00] [ERROR] データベース接続エラー
---
データ: [85, 92, 78, 95, 67]
個数: 5
合計: 417
平均: 83.4
最大: 95
最小: 67*と**の使い分け
*argsは位置引数を配列で受け取り、**kwargsはキーワード引数をハッシュで受け取ります。両方を組み合わせることで、あらゆる形式の引数を受け入れる柔軟なメソッドが作れます。
可変長引数の位置に注意
可変長引数(*args)はメソッド定義の中で1つだけ使えます。通常の引数の後、キーワード引数の前に配置してください。def method(a, *b, **c)のような順序が正しい形です。
まとめ
*引数名で任意の個数の引数を配列として受け取れる**引数名でキーワード引数をハッシュとして受け取れる- 通常の引数と可変長引数は組み合わせて使える
- メソッド呼び出し時の
*配列で配列を展開して引数に渡せる - 引数の数が不定のメソッドを作る際に非常に便利