MeWrite Docs

NoMethodError: undefined method for nil:NilClass

Rubyでnilオブジェクトにメソッドを呼び出した際に発生するエラー

概要

Rubyでnilオブジェクトにメソッドを呼び出そうとするとNoMethodErrorが発生します。

エラーメッセージ

NoMethodError: undefined method `length' for nil:NilClass

原因

  1. 変数がnilのまま使用: 初期化されていない、または値がnilの変数にメソッドを呼び出している
  2. メソッドの戻り値がnil: findやfirstなどが結果を見つけられずnilを返した
  3. Hash/Arrayのキーが存在しない: 存在しないキーにアクセスしてnilが返った

解決策

1. Safe Navigation Operator(&.)を使用

1
2
3
4
5
# Before
user.name.length

# After
user&.name&.length

2. nilチェックを追加

1
2
3
4
5
6
7
8
if user && user.name
  puts user.name.length
end

# または
unless user.nil?
  puts user.name.length if user.name
end

3. ||演算子でデフォルト値を設定

1
2
name = user&.name || "Guest"
puts name.length

4. dig メソッドを使用(Hash/Array)

1
2
3
4
5
# Before
data[:user][:profile][:name]

# After
data.dig(:user, :profile, :name)

5. fetch メソッドでデフォルト値

1
hash.fetch(:key, "default_value")

よくある間違い

  • findメソッドの戻り値をチェックせずに使用
  • params[:key]の存在確認なしでアクセス
  • 関連付けられたオブジェクトがnilの場合を考慮していない

Ruby の他のエラー

最終更新: 2025-12-09