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スキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
Discussion