カテゴリ: Laravel 更新日: 2025/12/24

Laravelのグローバルミドルウェアとルートミドルウェアの違いをやさしく解説

Laravelのグローバルミドルウェアとルートミドルウェアの違い
Laravelのグローバルミドルウェアとルートミドルウェアの違い

先生と生徒の会話形式で理解しよう

生徒

「Laravelでミドルウェアの種類があると聞きました。グローバルとルートって何が違うんですか?」

先生

「いい質問だね。簡単に言うと、全てのページに自動で働くものがグローバルで、特定のページだけに使うものがルートだよ。」

生徒

「例えばどんな場面で使い分けるんですか?」

先生

「サイト全体で日時や言語を統一したいときはグローバル。ログインや管理者チェックのように特定ページだけ必要な処理はルートに向いているよ。」

1. グローバルミドルウェアとは?やさしい説明

1. グローバルミドルウェアとは?やさしい説明
1. グローバルミドルウェアとは?やさしい説明

グローバルミドルウェアは、アプリケーションに入ってくるすべてのリクエストに対して自動的に実行されるミドルウェアです。英語のglobalは「全体の」という意味で、Webサイト全体で共通して行いたい処理に使います。たとえばアクセスログを全て残したい場合や、アプリのメンテナンスモードを全てのページで有効にしたい場合などに便利です。

Laravelではこれらを app/Http/Kernel.php$middleware 配列に登録します。登録すると、すべてのルートに対して自動で処理が走るので、簡単に共通機能を実装できます。

2. ルートミドルウェアとは?やさしい説明

2. ルートミドルウェアとは?やさしい説明
2. ルートミドルウェアとは?やさしい説明

ルートミドルウェアは、特定のルートやルートグループにだけ適用するミドルウェアです。ログイン確認や管理者権限のチェックなど、限られたページだけに適用したい処理に使います。英語のrouteは「経路、道筋」を意味し、特定の道だけに設置するゲートのようなイメージです。

Laravelでは Kernel.php$routeMiddleware にキーを登録し、ルート定義で ->middleware('キー名') と指定して使います。

3. 違いを日常の例でわかりやすく説明

3. 違いを日常の例でわかりやすく説明
3. 違いを日常の例でわかりやすく説明

想像しやすい例として、ショッピングモールを考えてみましょう。モール全体の入り口に設置された手荷物検査は、来る人全員に関係します。これがグローバルミドルウェアに相当します。一方、ある専門店の前にある会員専用ゲートは、その店の利用者だけに関係します。これがルートミドルウェアです。

つまり「全員に必要か」「特定の人だけに必要か」で使い分けるということです。

4. 実際の登録方法と使い方の例

4. 実際の登録方法と使い方の例
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. グローバルとルートの使い分けポイント

5. グローバルとルートの使い分けポイント
5. グローバルとルートの使い分けポイント
  • グローバルは全ページ共通の処理に使う(例:ログ記録、メンテナンスチェック)
  • ルートは特定ページだけに必要な処理に使う(例:ログイン判定、権限チェック)
  • 性能に注意。グローバルは全てのリクエストで動くため重い処理は避ける
  • 分かりやすさのために処理は適切に分割することが重要

このように使い分けることで、アプリは安全で効率的に動きます。初心者のうちはまずルート単位で必要な処理を整理し、全体に必要な処理だけをグローバルに置くと良いでしょう。

6. よくある誤解と注意点

6. よくある誤解と注意点
6. よくある誤解と注意点

よくある誤解は「全部グローバルにすれば便利」という考えです。確かに簡単ですが、不要な処理が全リクエストで走るとアプリの速度が落ちてしまいます。また、セキュリティ上重要なチェックはルートに限定することで誤設定を減らせます。

もう一つの注意点はミドルウェアの実行順です。複数のミドルウェアを組み合わせる場合、実行される順番が結果に影響するため、Kernelでの登録順やルートでの指定順を意識しましょう。

カテゴリの一覧へ
新着記事
New1
Laravel
Laravelの認証状態をチェックする方法を完全解説!authとAuth::check()を初心者向けにやさしく説明
New2
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New3
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New4
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.7
Java&Spring記事人気No7
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートキャッシュ機能を活用してパフォーマンス改善!初心者でもわかる完全ガイド