Railsのエラー『RoutingError: uninitialized constant XController』の解決方法

  • 作成日 2025.07.28
  • rails
Railsのエラー『RoutingError: uninitialized constant XController』の解決方法

Railsで『RoutingError: uninitialized constant XController』というエラーが発生することがあります。このエラーは、ルーティングで指定されたコントローラーが見つからない場合に発生します。発生条件や解決方法を詳しく見ていきます。

エラーの発生条件

このエラーは、以下のような状況で発生します:

  • コントローラーのクラス名が正しく定義されていない
  • コントローラーファイルの名前が適切でない
  • ルーティングの設定ミス
  • 名前空間の誤り
  • オートロードの問題

エラーメッセージの例

以下のようなエラーメッセージが出力されることがあります:

ActionController::RoutingError (uninitialized constant UsersController)

これは、`UsersController` が正しく認識されていないために発生しています。

コントローラーのクラス名のミス

コントローラーのクラス名が正しく定義されていない場合、エラーが発生します。例えば、`users_controller.rb` 内で以下のように定義されているとエラーになります:

class UserController < ApplicationController
end

この場合、ファイル名とクラス名が一致していません。修正するには、以下のようにクラス名を `UsersController` に変更します:

class UsersController < ApplicationController
end

コントローラーファイル名の誤り

ファイル名がクラス名と一致しない場合、エラーになります。

例えば、`user_controller.rb` というファイル名で、クラス名が `UsersController` になっていると認識されません。

正しくするには、ファイル名を `users_controller.rb` に変更してください。

ルーティングの設定ミス

ルーティングの設定が正しくない場合、エラーが発生します。

例えば、`routes.rb` に以下のように記述しているとします:

get 'users', to: 'user#index'

しかし、コントローラーのクラス名が `UsersController` である場合、正しくは以下のようにする必要があります:

get 'users', to: 'users#index'

名前空間の誤り

モジュールを使って名前空間を指定している場合、適切に指定しないとエラーになります。

例えば、以下のように `Admin::UsersController` を定義しているとします:

module Admin
  class UsersController < ApplicationController
  end
end

この場合、ルーティングを正しく設定しないとエラーになります:

get 'admin/users', to: 'admin/users#index'

オートロードの問題

Rails 7 では `zeitwerk` によるオートロードがデフォルトになっています。以下のような場合、オートロードが正しく機能せず、エラーになります。

  • ファイル名とクラス名が一致していない
  • モジュールの定義が適切でない
  • キャッシュが古い

キャッシュの問題を解決するには、以下のコマンドを実行してください:

rails tmp:cache:clear

まとめ

『RoutingError: uninitialized constant XController』が発生する原因と対策をまとめると、以下の点を確認する必要があります:

  • コントローラーのクラス名とファイル名が一致しているか
  • ルーティングが正しく設定されているか
  • 名前空間の指定が適切か
  • オートロードの問題がないか

上記のポイントをチェックすることで、エラーを解決できます。