カテゴリ: Laravel 更新日: 2026/01/08

Laravelのルーティングにカスタムミドルウェアをネームで登録する方法

Laravelのルーティングにカスタムミドルウェアをネームで登録する方法
Laravelのルーティングにカスタムミドルウェアをネームで登録する方法

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

生徒

「先生、Laravelで作ったカスタムミドルウェアをルートに簡単に使う方法はありますか?」

先生

「はい、Laravelではミドルウェアに名前をつけてルートに登録することができます。これをネーム登録と呼びます。」

生徒

「ネーム登録ってどういう意味ですか?」

先生

「簡単に言うと、ミドルウェアに 'short name' をつけて、その名前をルートで呼び出すことで、わかりやすく便利に使える仕組みです。」

生徒

「具体的にはどうやって登録するんですか?」

先生

「それでは、順を追って解説していきます。」

1. カスタムミドルウェアを作成する

1. カスタムミドルウェアを作成する
1. カスタムミドルウェアを作成する

まずは自分でカスタムミドルウェアを作ります。ターミナルで以下のコマンドを実行します。


php artisan make:middleware CheckRole

これで app/Http/Middleware/CheckRole.php が作成されます。このファイル内でユーザーの権限チェックなどの処理を書きます。


namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class CheckRole
{
    public function handle(Request $request, Closure $next, $role)
    {
        if (! $request->user() || $request->user()->role !== $role) {
            abort(403, 'アクセスが禁止されています');
        }

        return $next($request);
    }
}

2. ミドルウェアに名前をつけて登録する

2. ミドルウェアに名前をつけて登録する
2. ミドルウェアに名前をつけて登録する

作成したミドルウェアを名前でルートに登録するには、app/Http/Kernel.php$routeMiddleware 配列に追加します。


protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'role' => \App\Http\Middleware\CheckRole::class, // 名前登録
];

この例では、CheckRole ミドルウェアを 'role' という名前で登録しています。

3. ルートで名前を使ってミドルウェアを呼び出す

3. ルートで名前を使ってミドルウェアを呼び出す
3. ルートで名前を使ってミドルウェアを呼び出す

ルート定義でミドルウェア名を使うと、登録したカスタムミドルウェアが適用されます。例えば、管理者専用ページの場合は以下のように書きます。


use Illuminate\Support\Facades\Route;

Route::get('/admin', function () {
    return '管理者専用ページです';
})->middleware('role:admin');

ここで 'role:admin' と書くことで、CheckRole ミドルウェアが呼ばれ、ユーザーのロールが admin かどうかチェックされます。

4. 複数ミドルウェアの組み合わせ

4. 複数ミドルウェアの組み合わせ
4. 複数ミドルウェアの組み合わせ

ルートに複数のミドルウェアを適用することもできます。配列で指定するだけです。


Route::get('/dashboard', function () {
    return 'ダッシュボードページ';
})->middleware(['auth', 'role:editor']);

これで、まず認証が行われ、その後に権限チェックが実行されます。順序も Laravel が正しく処理してくれます。

5. ネーム登録のメリット

5. ネーム登録のメリット
5. ネーム登録のメリット
  • コードがシンプルで読みやすくなる
  • 複数のルートで同じミドルウェアを簡単に使える
  • パラメータ付きミドルウェアも柔軟に適用できる
  • ミドルウェアの切り替えや変更も Kernel.php で一元管理できる

6. 注意点

6. 注意点
6. 注意点
  • ネーム登録したミドルウェア名はユニークにする
  • ミドルウェアの順序によって処理が変わる場合があるため、依存関係を意識する
  • テスト環境で必ず動作確認を行う

7. 実践的な使い方

7. 実践的な使い方
7. 実践的な使い方

例えば、ブログサイトで投稿編集ページにアクセスする場合、ログインしているユーザーで、さらに編集権限を持つユーザーだけがアクセスできるように設定できます。


Route::get('/post/edit/{id}', function ($id) {
    return "投稿ID {$id} の編集ページ";
})->middleware(['auth', 'role:editor']);

これで未ログインユーザーや編集権限のないユーザーはアクセスできず、セキュアな運用が可能です。

カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.3
Java&Spring記事人気No3
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.6
Java&Spring記事人気No6
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
No.7
Java&Spring記事人気No7
Laravel
LaravelでRemember Me(ログイン状態保持)機能を実装する方法を完全解説!初心者でも安心の認証入門
No.8
Java&Spring記事人気No8
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点