カテゴリ: Laravel 更新日: 2026/05/06

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での登録順やルートでの指定順を意識しましょう。

まとめ

まとめ
まとめ

今回の記事では、Laravelのミドルウェアの種類について詳しく解説しました。ポイントは大きく分けて二つあります。ひとつはグローバルミドルウェア、もうひとつはルートミドルウェアです。グローバルミドルウェアは全てのリクエストに対して自動的に実行され、サイト全体に共通する処理に向いています。例えば、アクセスログの記録やメンテナンスモードの適用などが挙げられます。一方、ルートミドルウェアは特定のルートやルートグループにのみ適用され、ログイン認証や管理者権限チェックなど特定ページだけ必要な処理に使います。どちらも適切に使い分けることでアプリケーションは安全かつ効率的に動作します。

実際の登録方法も具体例として示しました。グローバルミドルウェアは $middleware 配列にクラスを追加するだけで全ページに自動適用されます。ルートミドルウェアは $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');

また、ミドルウェアを使う際の重要なポイントとして、実行順序の理解があります。複数のミドルウェアが組み合わさる場合、Kernelに登録した順番やルートでの指定順序によって結果が変わることがあります。性能面でも注意が必要で、グローバルに重い処理を入れると全リクエストに影響するため避けるべきです。初心者はまずルート単位で必要な処理を整理し、全体に必要な処理だけをグローバルに置くことを推奨します。

サンプルコードまとめ

グローバルミドルウェアとルートミドルウェアの設定例をまとめると、以下のようになります。


// グローバルミドルウェア例
protected $middleware = [
    \App\Http\Middleware\TrustProxies::class,
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    \App\Http\Middleware\LogEveryRequest::class,
];

// ルートミドルウェア例
protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'admin' => \App\Http\Middleware\CheckAdmin::class,
];

// 実行結果例(管理ページアクセス時)
管理ページ
先生と生徒の振り返り会話

生徒

「先生、結局グローバルとルートのミドルウェアってどう使い分ければいいんですか?」

先生

「全体に必要な処理はグローバル、特定のページだけで良い処理はルート、というシンプルな考え方で大丈夫だよ。例えば、全ページでアクセスログを取るならグローバル、管理者ページだけ認証チェックするならルートだね。」

生徒

「なるほど、あと実行順やパフォーマンスも気をつける必要があるんですね。」

先生

「その通り。特にグローバルは全てのリクエストで動くから、重い処理を入れるとサイト全体に影響するよ。まずはルート単位で整理して、必要な処理だけをグローバルに置くと安全で効率的だね。」

生徒

「コードも例があると分かりやすいですね。実際に書いてみながら確認します。」

カテゴリの一覧へ
新着記事
New2
Symfony
Symfonyのコントローラで404・403エラーを制御する方法を初心者向けに解説!
New3
Symfony
Symfonyで独自イベント(カスタムイベント)を作成する方法をやさしく解説
New4
Laravel
Laravel Sailとは?初心者でもわかるDocker環境構築と使い方の基本
人気記事
No.2
Java&Spring記事人気No2
CodeIgniter
CodeIgniterのCSRF対策を完全解説!フォーム処理のセキュリティ手順
No.3
Java&Spring記事人気No3
Laravel
LaravelでReactコンポーネントを組み込む方法完全ガイド!JSX対応でフロントエンド連携を学ぼう
No.4
Java&Spring記事人気No4
Laravel
Laravelのリレーションを使った検索条件の書き方(whereHas)
No.5
Java&Spring記事人気No5
Symfony
Symfonyでバリデーションをコントローラに組み込む方法を徹底解説!初心者にもやさしい入力チェックの基本
No.6
Java&Spring記事人気No6
Laravel
LaravelのRESTfulコントローラ設計のベストプラクティスを初心者向けにわかりやすく解説
No.7
Java&Spring記事人気No7
Symfony
Symfonyのインストール方法!CLIとComposerの導入手順まとめ
No.8
Java&Spring記事人気No8
Laravel
Laravelのold()関数でフォーム再表示時に値を保持する方法