Laravelのグローバルミドルウェアとルートミドルウェアの違いをやさしく解説
生徒
「Laravelでミドルウェアの種類があると聞きました。グローバルとルートって何が違うんですか?」
先生
「いい質問だね。簡単に言うと、全てのページに自動で働くものがグローバルで、特定のページだけに使うものがルートだよ。」
生徒
「例えばどんな場面で使い分けるんですか?」
先生
「サイト全体で日時や言語を統一したいときはグローバル。ログインや管理者チェックのように特定ページだけ必要な処理はルートに向いているよ。」
1. グローバルミドルウェアとは?やさしい説明
グローバルミドルウェアは、アプリケーションに入ってくるすべてのリクエストに対して自動的に実行されるミドルウェアです。英語のglobalは「全体の」という意味で、Webサイト全体で共通して行いたい処理に使います。たとえばアクセスログを全て残したい場合や、アプリのメンテナンスモードを全てのページで有効にしたい場合などに便利です。
Laravelではこれらを app/Http/Kernel.php の $middleware 配列に登録します。登録すると、すべてのルートに対して自動で処理が走るので、簡単に共通機能を実装できます。
2. ルートミドルウェアとは?やさしい説明
ルートミドルウェアは、特定のルートやルートグループにだけ適用するミドルウェアです。ログイン確認や管理者権限のチェックなど、限られたページだけに適用したい処理に使います。英語のrouteは「経路、道筋」を意味し、特定の道だけに設置するゲートのようなイメージです。
Laravelでは Kernel.php の $routeMiddleware にキーを登録し、ルート定義で ->middleware('キー名') と指定して使います。
3. 違いを日常の例でわかりやすく説明
想像しやすい例として、ショッピングモールを考えてみましょう。モール全体の入り口に設置された手荷物検査は、来る人全員に関係します。これがグローバルミドルウェアに相当します。一方、ある専門店の前にある会員専用ゲートは、その店の利用者だけに関係します。これがルートミドルウェアです。
つまり「全員に必要か」「特定の人だけに必要か」で使い分けるということです。
4. 実際の登録方法と使い方の例
まずグローバルミドルウェアの登録例です。Kernelの $middleware にクラスを追加します。
// app/Http/Kernel.php
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\LogEveryRequest::class, // カスタムのグローバルミドルウェア
];
このように追加すると、アプリに来るすべてのリクエストで LogEveryRequest が実行されます。アクセスログの記録などに最適です。
次にルートミドルウェアの登録例です。Kernelの $routeMiddleware にキーを割り当てます。
// app/Http/Kernel.php
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'admin' => \App\Http\Middleware\CheckAdmin::class,
];
登録後はルートで指定して使います。
Route::get('/admin', function () {
return '管理ページ';
})->middleware('auth', 'admin');
この例では、/admin にアクセスする人に対してログイン確認と管理者確認が行われます。
5. グローバルとルートの使い分けポイント
- グローバルは全ページ共通の処理に使う(例:ログ記録、メンテナンスチェック)
- ルートは特定ページだけに必要な処理に使う(例:ログイン判定、権限チェック)
- 性能に注意。グローバルは全てのリクエストで動くため重い処理は避ける
- 分かりやすさのために処理は適切に分割することが重要
このように使い分けることで、アプリは安全で効率的に動きます。初心者のうちはまずルート単位で必要な処理を整理し、全体に必要な処理だけをグローバルに置くと良いでしょう。
6. よくある誤解と注意点
よくある誤解は「全部グローバルにすれば便利」という考えです。確かに簡単ですが、不要な処理が全リクエストで走るとアプリの速度が落ちてしまいます。また、セキュリティ上重要なチェックはルートに限定することで誤設定を減らせます。
もう一つの注意点はミドルウェアの実行順です。複数のミドルウェアを組み合わせる場合、実行される順番が結果に影響するため、Kernelでの登録順やルートでの指定順を意識しましょう。