LaravelのClass ‘App\Http\Controllers\Controller’ not found:原因と解決策


1. 問題の概要
Laravelアプリケーションを開発している際に、エラーメッセージ「クラス ‘App\Http\Controllers\Controller’ が見つかりません」と表示されることがあります。このエラーは、主にコントローラーの名前空間が正しく設定されていない場合に発生します。
2. エラーの原因
このエラーが発生する一般的な原因は、コントローラーファイル内で宣言された名前空間が正しくないことです。Laravelでは、コントローラーは通常 App\Http\Controllers
に配置されるため、名前空間もこれに一致している必要があります。
例えば、以下のようなコントローラーがあるとします:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SampleController extends Controller
{
// コントローラーメソッド
}
上記の例では、コントローラー SampleController
が App\Http\Controllers
名前空間内に配置されていることがわかります。
3. 解決策
3.1. 名前空間を確認する
まず、コントローラーファイル内の名前空間宣言が正しいか確認しましょう。コントローラーが App\Http\Controllers
ディレクトリ内にある場合、名前空間は以下のように設定されているべきです。
namespace App\Http\Controllers;

4. エラーの検証と修正
まず、エラーの検証を行います。エラーの検証後に修正を行います。以下の画像のようにエラーが表示されるコードを意図的に作成します。
4.1. 検証環境
今回の検証環境は次のようになります。
- PHP 8.1.25
- Laravel 10.48.12
- Windows 11
4.2. コントローラーの作成
最初に、コントローラーを作成します。以下のコードを使用して、SampleController
を作成します。
<?php
namespace App\Http\Controller;
use Illuminate\Http\Request;
class SampleController extends Controller
{
public function index(){
return response("Hello");
}
}
このコードでは、SampleController
という名前のコントローラーを作成し、index
メソッドを定義しています。このメソッドは文字列「Hello」を返すようになっています。

4.3. ルーティング

次に、
web.php
ファイルでルーティングを設定します。以下のコードを追加してください。
use App\Http\Controllers\SampleController;
Route::get('/', [SampleController::class,"index"]);
このルーティング設定により、ブラウザで http://127.0.0.1:8000/
にアクセスすると、SampleController
の index
メソッドが実行されます。
4.4. エラーの原因と修正方法
ここで、php artisan serve
コマンドを実行し、ブラウザで http://127.0.0.1:8000/
にアクセスします。目的としていた画像のようなエラーが発生します。
このエラーは、namespace
の設定が誤っていることが原因です。正しくは App\Http\Controllers
であるべきところが、App\Http\Controller
になっています。
次のように修正してください。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SampleController extends Controller
{
public function index(){
return response("Hello");
}
}
これで、再度 php artisan serve
コマンドを実行し、ブラウザで http://127.0.0.1:8000/
にアクセスすると、次の画像のように「Hello」と表示されるはずです。
このようにして、エラーの検証と修正が完了しました。正しいnamespace
を使用することを忘れないようにしましょう。

