Laravel 11「新しいディレクトリ構造」で旧ファイルの行き先を探す方法(迷子になった時の見つけ方)

Laravel 11「新しいディレクトリ構造」で旧ファイルの行き先を探す方法(迷子になった時の見つけ方)

Laravel 11の新規インストール(Slim Skeleton)では、これまで「app配下にあった設定ファイル一式」が生成されなくなり、設定の多くが bootstrap/app.php に集約された。結果として「Kernel.phpが消えた」「例外ハンドラが見当たらない」「ミドルウェアはどこで登録するのか」「スケジューラはどこへ」など、旧構成に慣れているほどファイルが迷子になりやすい。探し方はシンプルで、(1) 旧ファイル名からの全文検索、(2) bootstrap/app.php と routes/console.php を起点に辿る、(3) Artisanで“登録済みの設定”から逆引き、の3本でほぼ片付く。 :contentReference[oaicite:0]{index=0}

迷子が発生する条件(典型パターン)

・Laravel 10以前の感覚で「app/Http/Kernel.php」「app/Console/Kernel.php」「app/Exceptions/Handler.php」を探してしまう
・新規に Laravel 11 を作成した(旧構造のファイルがそもそも生成されない) :contentReference[oaicite:1]{index=1}
・Laravel 10→11のアップグレード後に「Slim Skeletonへ寄せよう」として、旧ファイルを削除/移動した(差分が増えやすい) :contentReference[oaicite:2]{index=2}

最短の探し方:まずは“文字列”で全文検索する(OS問わず)

旧ファイル名やクラス名、設定名で検索すると、行き先が bootstrap/app.php / routes/console.php / config/* のどれかに当たることが多い。

# プロジェクト直下で(ripgrep推奨)
rg -n "Http\\Kernel|Console\\Kernel|Exceptions\\Handler|withMiddleware|withExceptions|Schedule" .

# Linux/macOS: findで旧ファイル名の痕跡を探す
find . -maxdepth 4 -type f \( -name "Kernel.php" -o -name "Handler.php" \) -print

# Windows PowerShell例
Get-ChildItem -Recurse -Filter Kernel.php
Get-ChildItem -Recurse -Filter Handler.php

bootstrap/app.php が“新しい中心地”になった(まずここを見る)

Laravel 11では、HTTPカーネル相当・ミドルウェア登録・例外処理・ルーティングの結線が bootstrap/app.php に集約されている。旧構造で「Kernel/Handlerに書いていた内容」は、まず bootstrap/app.php の withMiddleware / withExceptions / withRouting 付近を探すのが最短になる。 :contentReference[oaicite:3]{index=3}

旧:app/Http/Kernel.php はどこへ行った?(ミドルウェア設定の移動先)

行き先:bootstrap/app.php の withMiddleware(…)
探し方:Kernel.php の $middleware / $middlewareGroups / $routeMiddleware に相当する定義を、withMiddleware で行う。

# bootstrap/app.php(イメージ:実際の形はプロジェクトにより差がある)
use Illuminate\Foundation\Configuration\Middleware;

->withMiddleware(function (Middleware $middleware) {
    // グローバル
    // $middleware->append(...);

    // webグループ相当
    // $middleware->web(append: [...]);

    // apiグループ相当
    // $middleware->api(append: [...]);

    // ルートミドルウェアのエイリアス相当
    // $middleware->alias(['auth' => \App\Http\Middleware\Authenticate::class]);
});

この置き換えにより「Kernelクラスそのもの」が不要になった、という整理になっている。 :contentReference[oaicite:4]{index=4}

旧:app/Exceptions/Handler.php はどこへ行った?(例外ハンドリングの移動先)

行き先:bootstrap/app.php の withExceptions(…)
探し方:report/render、例外のHTTPレスポンス変換、特定例外の握りつぶしなどを withExceptions で行う。

# bootstrap/app.php(イメージ)
use Illuminate\Foundation\Configuration\Exceptions;

->withExceptions(function (Exceptions $exceptions) {
    // 例:特定例外のレンダリングを変更
    // $exceptions->render(function (SomeException $e, $request) {
    //     return response()->json(['message' => '...'], 422);
    // });
});

Handler.php を探して見つからない場合、まず bootstrap/app.php を開いて withExceptions を探す。 :contentReference[oaicite:5]{index=5}

旧:app/Console/Kernel.php はどこへ行った?(スケジュール/コマンドの移動先)

行き先:routes/console.php(スケジュールやクロージャコマンドの定義)
探し方:schedule() に書いていた処理、Artisan::command(…) の定義が routes/console.php 側に寄る。 :contentReference[oaicite:6]{index=6}

# routes/console.php(イメージ)
use Illuminate\Support\Facades\Schedule;

Schedule::command('reports:daily')->dailyAt('01:00');
Schedule::call(function () {
    // ...
})->hourly();

旧:app/Http/Middleware は消えた?(“置き場”と“登録場所”を分けて考える)

新規のLaravel 11では app/Http/Middleware ディレクトリ自体が最初から存在しないことがある。置き場は作って問題ない(自分で app/Http/Middleware を作成してOK)。重要なのは登録が bootstrap/app.php に寄った点。 :contentReference[oaicite:7]{index=7}
探し方:ミドルウェアのクラスは、(1) 自作ディレクトリに置く、(2) bootstrap/app.php の withMiddleware で alias / append / prepend を探す、の順で辿る。

旧:ルート周り(RouteServiceProviderやKernelのグループ)はどこで結線している?

行き先:bootstrap/app.php の withRouting(…) と routes/*
探し方:routes/web.php / routes/api.php は従来通り。結線の入口が RouteServiceProvider ではなく bootstrap/app.php 側に寄っているケースがある。 :contentReference[oaicite:8]{index=8}

# bootstrap/app.php(イメージ)
->withRouting(
    web: __DIR__.'/../routes/web.php',
    api: __DIR__.'/../routes/api.php',
    commands: __DIR__.'/../routes/console.php',
    health: '/up',
);

旧:app/Providers 配下はどうなった?(プロバイダの登録先)

Laravel 11の新規構成では、プロバイダが“最小セット”になり、登録の一部が bootstrap/providers.php にまとまる構成が見られる。どこで読み込まれているかは bootstrap/app.php を起点に辿る。 :contentReference[oaicite:9]{index=9}
探し方:AppServiceProvider 以外が見当たらない場合、bootstrap/providers.php を検索する。

rg -n "providers\\.php|AppServiceProvider" bootstrap app config .

旧:Model の $casts はどこへ?(書き方が変わるケース)

Laravel 11周辺で「$casts をプロパティではなくメソッドに寄せる」スタイルが案内されることがある。プロジェクト内で統一されていればOKで、探す時は Model 内の casts / $casts を検索するのが確実。 :contentReference[oaicite:10]{index=10}

# どっちで書かれているか検索
rg -n "protected \\$casts|function casts\\(" app/Models

# メソッド形式の例(イメージ)
protected function casts(): array
{
    return [
        'email_verified_at' => 'datetime',
    ];
}

“登録されている事実”から逆引きする(Artisanで現在の状態を見る)

ファイルを探すより早いのが「今、何が登録されているか」を先に出す方法。ルート、ミドルウェア、コマンド、環境情報を出してから該当箇所を検索すると迷いにくい。

# 環境と構成の概要(どの構成で動いているかの手がかり)
php artisan about

# ルート一覧(どのファイルから生えているか当たりを付ける)
php artisan route:list

# コマンド一覧(routes/console.php / コマンドクラスの所在を当てる)
php artisan list

まとめ:探す順番を固定すると迷子が減る

・「Kernel/Handlerが無い」=消えたのではなく、bootstrap/app.php に寄った可能性が高い :contentReference[oaicite:11]{index=11}
・スケジュールとクロージャコマンドは routes/console.php を見る :contentReference[oaicite:12]{index=12}
・見つからない時は、(1) rgで文字列検索 → (2) bootstrap/app.php 起点で辿る → (3) php artisan about/route:list/list で逆引き、の順で進める