Laravel 11 では「Slim Application Skeleton」としてアプリケーション構造が大幅に変わりました。旧構造のままアップグレードしたプロジェクトへ途中参加した場合や、Laravel 10 以前の書籍・チュートリアルで学習した場合に戸惑いやすい点をまとめています。Laravel 11 リリース当時にLaracastsのフォーラムやStack Overflowでよくされていた質問です。Documentation Index
Fetch the complete documentation index at: https://kawax.biz/llms.txt
Use this file to discover all available pages before exploring further.
この FAQ は新規プロジェクト(Laravel 11 以降)を対象としています。既存プロジェクトのアップグレード手順は移行ガイドを参照してください。
configファイルが少ない
configファイルが少ない
新構造では変更頻度の低い config ファイルがプロジェクトから削除されています。これらのファイルはフレームワーク内の
config/ が使われます。プロジェクト側の config/ とフレームワーク側の config/ はマージされ、プロジェクト側が優先されます。カスタマイズが必要になった時点でファイルを作成すれば反映されます。コントローラーで $this->validate() や $this->authorize() が使えない
コントローラーで $this->validate() や $this->authorize() が使えない
app/Http/Middleware がなくてミドルウェアの設定を変更できない / app/Http/Kernel.php がない
app/Http/Middleware がなくてミドルウェアの設定を変更できない / app/Http/Kernel.php がない
新構造では カスタムミドルウェアのファイル自体は
app/Http/Kernel.php が廃止され、ミドルウェアの設定は bootstrap/app.php の withMiddleware() で行います。app/Http/Middleware/ に引き続き作成します。コントローラー内で $this->middleware() が使えない
コントローラー内で $this->middleware() が使えない
$this->middleware() は Illuminate\Routing\Controller の機能であり、新構造の空のベースコントローラーでは使えません。代わりに HasMiddleware インターフェースを実装して middleware() メソッドを定義します。#[Middleware] Attribute も使用できます。$this->authorizeResource() がない
$this->authorizeResource() がない
app/Console/Kernel.php がなくてScheduleが設定できない
app/Console/Kernel.php がなくてScheduleが設定できない
新構造では
app/Console/Kernel.php が廃止され、スケジュールの設定場所が変わりました。routes/console.php に記述する(推奨):bootstrap/app.php に記述する:イベントとリスナーの登録方法が分からない
イベントとリスナーの登録方法が分からない
新構造では 手動登録が必要な場合は
EventServiceProvider が廃止され、イベントとリスナーの手動登録が不要になりました。自動登録の仕組み: リスナークラスの handle() メソッドの引数にイベントクラスを型宣言すると自動で登録されます。AppServiceProvider::boot() で行います。config/app.php へのサービスプロバイダー追加方法が分からない
config/app.php へのサービスプロバイダー追加方法が分からない
新構造では、サービスプロバイダーの一覧管理が
config/app.php から bootstrap/providers.php に変わりました。artisan make:provider で作成したプロバイダーは自動的にここへ追記されます。app/Exceptions/Handler.php がない
app/Exceptions/Handler.php がない
新構造では
app/Exceptions/Handler.php が廃止され、例外処理の設定は bootstrap/app.php の withExceptions() で行います。ルーティングをカスタマイズしたい
ルーティングをカスタマイズしたい
ルートのカスタマイズは 完全に制御する(Laravel 10 の
bootstrap/app.php の withRouting() で行います。ルートファイルを追加する:RouteServiceProvider と同様):using を指定すると Laravel のデフォルトのルート登録が完全に無効になり、すべてを自分で制御できます。LaravelデフォルトのServiceProviderを置き換えたい
LaravelデフォルトのServiceProviderを置き換えたい
config/app.php に providers キーを追加すると、フレームワーク内の config/app.php とマージされて反映されます。replace() メソッドでデフォルトプロバイダーを独自実装に差し替えられます。routes/api.php がない
routes/api.php がない
Laravel 11 以降、API 機能はデフォルトでは含まれておらず、必要な場合に個別インストールします。このコマンドで以下が作成・設定されます。
routes/api.php- API 認証用の Laravel Sanctum の設定
bootstrap/app.phpへの API ルート登録
routes/channels.php がない
routes/channels.php がない
Laravel 11 以降、ブロードキャスト機能もデフォルトでは含まれておらず、必要な場合に個別インストールします。このコマンドで以下が作成・設定されます。
routes/channels.php- Laravel Reverb のインストール設定
- ブロードキャスト設定ファイル
途中参加したプロジェクトが新旧どちらか判別したい
途中参加したプロジェクトが新旧どちらか判別したい
bootstrap/app.php の内容を確認してください。Laravel 11 以降の新構造(または移行済み):return Application::configure(... の形式なら新構造、そうでなければ旧構造のままアップグレードしたプロジェクトです。旧構造のプロジェクトを新構造に移行する手順は移行ガイドを参照してください。関連ページ
Laravel 11以降のアプリケーション構造
新しいアプリケーション構造の全貌と
ApplicationBuilder の内部実装を解説します。旧構造から新構造への移行ガイド
Laravel 10 の旧アプリ構造から Laravel 11 以降の新構造へ移行する手順を解説します。