🌀

Laravel11以降のKernel.php廃止とミドルウェア管理の新方式

に公開

はじめに

Laravel 11以降で新しくLaravelのプロジェクトを立ち上げた際、「Kernel.phpが存在しない」「ミドルウェアの登録方法が分からない」と戸惑った方はいませんか?
私も最初、app/Http/Kernel.php が見つからず、「設定ファイルを削除してしまった?」と焦りました。しかし、これはLaravel 11から導入され、12でも正式に定着した構成です。
本記事では、Laravel11以降で刷新されたミドルウェアの定義・登録方法について、Laravel 10以前との違いを踏まえながら整理していきます。

対象者

  • Laravel 11以降のLaravelを立ち上げたエンジニア
  • Laravel 10以前との違いに戸惑っている方
  • ミドルウェアの登録方法が分からず詰まっている方

Laravel 10以前のミドルウェア登録方法

Laravel 10以前では、app/Http/Kernel.php にて以下のようにグローバルミドルウェアやルートミドルウェアを登録していました。

// app/Http/Kernel.php
protected $middleware = [
    \App\Http\Middleware\TrustProxies::class,
    // ...
];

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
];

このファイルがすべてのミドルウェア設定の起点でした。


Laravel 11以降ではKernel.phpが廃止された理由

Laravel 11以降では、これまでミドルウェアの登録・管理を担っていた app/Http/Kernel.php が廃止され、設定は bootstrap/app.php に一本化されました。
これは「アプリケーションの初期設定を1箇所に集約する」ことで、構成をよりシンプルかつ明示的にすることを目的としています。


Laravel 11以降でのミドルウェア登録方法

グローバルミドルウェアの追加

// bootstrap/app.php
use App\Http\Middleware\EnsureTokenIsValid;

->withMiddleware(function (Middleware $middleware) {
    $middleware->append(EnsureTokenIsValid::class);
});

ミドルウェアグループに追加(例:webグループ)

// bootstrap/app.php
$middleware->web(append: [
    \App\Http\Middleware\EnsureUserIsSubscribed::class,
]);

ミドルウェアにエイリアスをつける

// bootstrap/app.php
$middleware->alias([
    'subscribed' => \App\Http\Middleware\EnsureUserIsSubscribed::class,
]);

ルーティングでは以下のように記載します

// routes/web.php
Route::get('/dashboard', fn() => view('dashboard'))
    ->middleware('subscribed');

Laravelバージョン別ミドルウェア比較表

Laravelバージョン ミドルウェア登録方法 主なファイル
〜10 $middleware 配列に追記 app/Http/Kernel.php
11〜 withMiddleware() で構成 bootstrap/app.php

実装例:独自ミドルウェアの作成と登録

php artisan make:middleware EnsureTokenIsValid
// app/Http/Middleware/EnsureTokenIsValid.php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class EnsureTokenIsValid
{
    public function handle(Request $request, Closure $next): Response
    {
        if ($request->input('token') !== 'my-secret-token') {
            return redirect('/home');
        }

        return $next($request);
    }
}

このミドルウェアを bootstrap/app.php で登録します。

$middleware->alias([
    'token.check' => \App\Http\Middleware\EnsureTokenIsValid::class,
]);

ルートに適用

Route::get('/secure', fn() => 'Access Granted')
    ->middleware('token.check');

おわりに

Laravel 11以降の構成変更に最初は戸惑いましたが、よりシンプルで理解しやすい構造だと感じています。すべてのミドルウェア設定が集約されたことで、可視性が向上し、保守性の高い設計が実現できます。Laravel 11以降の新方式に慣れていない方にとって、本記事が参考になれば嬉しいです。


株式会社ONE WEDGE

【Serverlessで世の中をもっと楽しく】
ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
https://onewedge.co.jp/

GitHubで編集を提案

Discussion