MeWrite Docs

ArgumentError: wrong number of arguments

Rubyでメソッドに渡す引数の数が間違っている場合に発生するエラー

概要

Rubyでメソッドに渡す引数の数が定義と一致しない場合にArgumentErrorが発生します。

エラーメッセージ

ArgumentError: wrong number of arguments (given 2, expected 1)

原因

  1. 引数の数が多すぎる: メソッド定義より多くの引数を渡している
  2. 引数の数が少なすぎる: 必須引数が不足している
  3. キーワード引数の形式が間違っている: ハッシュとキーワード引数の混同

解決策

1. メソッド定義を確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# メソッド定義
def greet(name)
  puts "Hello, #{name}"
end

# 正しい呼び出し
greet("Alice")

# エラーになる呼び出し
greet("Alice", "Bob")  # ArgumentError

2. デフォルト引数を使用

1
2
3
4
5
6
def greet(name, greeting = "Hello")
  puts "#{greeting}, #{name}"
end

greet("Alice")           # OK
greet("Alice", "Hi")     # OK

3. 可変長引数を使用

1
2
3
4
5
6
def greet(*names)
  names.each { |name| puts "Hello, #{name}" }
end

greet("Alice")                    # OK
greet("Alice", "Bob", "Charlie")  # OK

4. キーワード引数を使用

1
2
3
4
5
6
def create_user(name:, email:, age: nil)
  # 処理
end

create_user(name: "Alice", email: "alice@example.com")
create_user(name: "Bob", email: "bob@example.com", age: 30)

よくある間違い

  • Ruby 3.0以降でHashをキーワード引数として渡す(明示的に展開が必要)
  • ブロックを引数としてカウントしてしまう
  • splat演算子の使い方を間違える

Ruby の他のエラー

最終更新: 2025-12-09