Skip to main content
Laravel 11 では「Slim Application Skeleton」としてアプリケーション構造が大幅に変わりました。旧構造のままアップグレードしたプロジェクトへ途中参加した場合や、Laravel 10 以前の書籍・チュートリアルで学習した場合に戸惑いやすい点をまとめています。Laravel 11 リリース当時にLaracastsのフォーラムやStack Overflowでよくされていた質問です。
この FAQ は新規プロジェクト(Laravel 11 以降)を対象としています。既存プロジェクトのアップグレード手順は移行ガイドを参照してください。
新構造では変更頻度の低い config ファイルがプロジェクトから削除されています。これらのファイルはフレームワーク内の config/ が使われます。プロジェクト側の config/ とフレームワーク側の config/ はマージされ、プロジェクト側が優先されます。カスタマイズが必要になった時点でファイルを作成すれば反映されます。
Laravel 11 の新構造では App\Http\Controllers\Controller が空のクラスになっており、Illuminate\Routing\Controller を継承せず、ValidatesRequests / AuthorizesRequests トレイトも使用していません。参考: Laravel 10 の Controller vs Laravel 11 の Controller代替方法:
頻繁に使う場合は App\Http\Controllers\Controller を Laravel 10 と同様に戻す方法もあります。
新構造では app/Http/Kernel.php が廃止され、ミドルウェアの設定は bootstrap/app.phpwithMiddleware() で行います。
カスタムミドルウェアのファイル自体は app/Http/Middleware/ に引き続き作成します。
$this->middleware()Illuminate\Routing\Controller の機能であり、新構造の空のベースコントローラーでは使えません。代わりに HasMiddleware インターフェースを実装して middleware() メソッドを定義します。
Laravel 13 以降では #[Middleware] Attribute も使用できます。
参考: コントローラーミドルウェア
authorizeResource()AuthorizesRequests トレイトに依存しているため、新構造の空のベースコントローラーでは使えません。対応方法はいくつかあります。1. ベースコントローラーを Laravel 10 仕様に戻す(最も手軽)
これにより $this->authorizeResource() が使えるようになります。2. Laravel 13 の #[Authorize] Attribute を各メソッドに付与する
新構造では app/Console/Kernel.php が廃止され、スケジュールの設定場所が変わりました。routes/console.php に記述する(推奨):
bootstrap/app.php に記述する:
新構造では EventServiceProvider が廃止され、イベントとリスナーの手動登録が不要になりました。自動登録の仕組み: リスナークラスの handle() メソッドの引数にイベントクラスを型宣言すると自動で登録されます。
手動登録が必要な場合は AppServiceProvider::boot() で行います。
新構造では、サービスプロバイダーの一覧管理が config/app.php から bootstrap/providers.php に変わりました。
artisan make:provider で作成したプロバイダーは自動的にここへ追記されます。
新構造では app/Exceptions/Handler.php が廃止され、例外処理の設定は bootstrap/app.phpwithExceptions() で行います。
ルートのカスタマイズは bootstrap/app.phpwithRouting() で行います。ルートファイルを追加する:
完全に制御する(Laravel 10 の RouteServiceProvider と同様):using を指定すると Laravel のデフォルトのルート登録が完全に無効になり、すべてを自分で制御できます。
config/app.phpproviders キーを追加すると、フレームワーク内の config/app.php とマージされて反映されます。
replace() メソッドでデフォルトプロバイダーを独自実装に差し替えられます。
Laravel 11 以降、API 機能はデフォルトでは含まれておらず、必要な場合に個別インストールします。
このコマンドで以下が作成・設定されます。
  • routes/api.php
  • API 認証用の Laravel Sanctum の設定
  • bootstrap/app.php への API ルート登録
Laravel 11 以降、ブロードキャスト機能もデフォルトでは含まれておらず、必要な場合に個別インストールします。
このコマンドで以下が作成・設定されます。
  • routes/channels.php
  • Laravel Reverb のインストール設定
  • ブロードキャスト設定ファイル
bootstrap/app.php の内容を確認してください。Laravel 11 以降の新構造(または移行済み):
Laravel 10 以前の旧構造のままアップグレードしたプロジェクト:
return Application::configure(... の形式なら新構造、そうでなければ旧構造のままアップグレードしたプロジェクトです。旧構造のプロジェクトを新構造に移行する手順は移行ガイドを参照してください。

関連ページ

Laravel 11以降のアプリケーション構造

新しいアプリケーション構造の全貌と ApplicationBuilder の内部実装を解説します。

旧構造から新構造への移行ガイド

Laravel 10 の旧アプリ構造から Laravel 11 以降の新構造へ移行する手順を解説します。
最終更新日 2026年5月3日