【Ruby on Rails】Railsでよく出るエラーと解決法まとめ

Ruby

こんにちは、かつコーチです。

Railsを触り始めたばかりの頃は、見慣れないエラー画面に戸惑うことが多いですよね。
私自身も学習初期は、エラーメッセージを読まずにコードを闇雲に書き換えて時間を浪費していました。
この記事では、初心者が特につまずきやすい代表的なエラーを4つ取り上げます。
読み終える頃には、エラーメッセージを見て落ち着いて対処できるようになります。

エラーが起きたときの基本的な考え方

エラーメッセージは「敵」ではなく「ヒント」

Railsのエラー画面は、原因のクラス名発生箇所を丁寧に教えてくれます。
慌てずに、エラーメッセージの1行目をまず読む癖をつけましょう。
多くの場合、そこに解決の糸口が書かれています。

エラークラス名で検索する

エラーメッセージの先頭にあるActionController::RoutingErrorのようなクラス名は、そのままGoogle検索のキーワードとして使えます。
日本語の解説記事や公式ガイドがヒットすることが多く、原因の特定が早まります。

よくあるつまずきポイント・エラー対処

Before/After:ActionController::RoutingError

ルーティングに存在しないURLへアクセスすると、このエラーが発生します。

❌Before:存在しないルートにアクセスした状態

ActionController::RoutingError (No route matches [GET] "/artcles")

articlesとタイプすべきところをartclesとタイプミスしていたことが原因でした。
config/routes.rb側の定義は正しいのに、URLの入力ミスに気づかず10分ほど悩みました。

✅After:URLとルーティング定義を照合する

bin/rails routes | grep article

このコマンドで登録済みのルーティング一覧を確認し、正しいURLが/articlesであることに気づきました。
ブラウザのアドレスバーを直接タイプする際は、タイプミスがないか特に注意が必要です。

Before/After:ActiveRecord::PendingMigrationError

マイグレーションを実行し忘れたまま画面にアクセスすると発生するエラーです。

❌Before:マイグレーション未実行の状態

ActiveRecord::PendingMigrationError

Migrations are pending. To resolve this issue, run:

        bin/rails db:migrate RAILS_ENV=development

新しいカラムを追加するマイグレーションファイルを作成した後、実行を忘れたままサーバーを再起動してしまいました。

✅After:エラーメッセージ通りにコマンドを実行する

bin/rails db:migrate RAILS_ENV=development

このエラーは、実は解決コマンドまでメッセージに書かれている親切なエラーです。
表示された指示をそのまま実行すれば、すぐに解決します。

Before/After:NoMethodError

存在しないメソッドを呼び出したときに発生する、初心者が最も遭遇しやすいエラーです。

❌Before:nilに対してメソッドを呼び出してしまう

user = User.find_by(email: "notfound@example.com")
puts user.name
NoMethodError (undefined method `name' for nil)

find_byは該当データがない場合nilを返すため、nil.nameを呼び出す形になりエラーになりました。
一次情報として、私はこのエラーを本番リリース直前のテスト中に発見し、冷や汗をかいた経験があります。

✅After:nilチェックを入れる

user = User.find_by(email: "notfound@example.com")
if user
  puts user.name
else
  puts "ユーザーが見つかりません"
end

find_byを使う場合は、結果がnilになる可能性を必ず考慮した書き方にします。

Before/After:uninitialized constant

クラス名のタイプミスやファイルの命名規則違反で発生するエラーです。

❌Before:クラス名とファイル名が一致していない

# app/models/article.rb
class Artcle < ApplicationRecord
end
NameError (uninitialized constant Article)

ファイル名はarticle.rbのままクラス名だけArtcleとタイプミスしてしまい、Railsの自動読み込みが機能しませんでした。

✅After:ファイル名とクラス名を一致させる

# app/models/article.rb
class Article < ApplicationRecord
end

Railsは「ファイル名からクラス名を推測する」仕組み(オートロード)で動いているため、両者を一致させることが必須です。

まとめ

この記事のポイント

  • エラーメッセージの1行目とクラス名をまず読むことが、解決への近道
  • ActionController::RoutingErrorはURLとルーティング定義のズレが原因
  • ActiveRecord::PendingMigrationErrorは指示通りマイグレーションを実行すれば解決
  • NoMethodErrornilに対するメソッド呼び出しが典型パターン
  • uninitialized constantはファイル名とクラス名の不一致が典型パターン

次に読むべき記事

マイグレーション関連のトラブルをさらに深掘りしたい方は「マイグレーションが失敗して困った話と対処法」も参考にしてください。
rails consoleを使ったデバッグ方法を知りたい方は「rails consoleを使いこなすデバッグ術」も合わせてどうぞ。

タグ: Ruby on Rails, 初心者向け, エラー解決

タイトルとURLをコピーしました