6.

Laravel ルート一覧確認|php artisan route:list の使い方・フィルタオプション・JSON 出力・キャッシュ

編集
この記事の要点
  • Laravel ではアプリケーションに登録された全ルートを php artisan route:list で一覧表示できる
  • --path=--name=--method=--except-vendor などのフィルタで巨大なルート表を絞り込める
  • route:list --json で機械可読な JSON 出力。CI でルート差分を検知する用途にも使える
  • 本番では route:cache でルート読み込みを高速化。キャッシュ後はクロージャ定義のルートは使えなくなる

ルート一覧コマンドの基本

Laravel では、アプリケーションに登録された全 HTTP ルートを 1 つのテーブルとして一覧表示する Artisan コマンドが用意されています。

php artisan route:list

出力例(Laravel 10 以降の新スタイル)は次のようになります。

$ php artisan route:list

  GET|HEAD   /                                 ........... home
  GET|HEAD   login                              ......... login
  POST       login
  POST       logout                            .......... logout
  POST       password/email                    .. password.email
  GET|HEAD   password/reset                    password.request
  POST       password/reset
  GET|HEAD   password/reset/{token}            ... password.reset
  GET|HEAD   register                          ........ register
  POST       register
  GET|HEAD   api/user                          App\Http\Controllers\HomeController@index
                                                  Showing [10] routes

列にはそれぞれ HTTP メソッド・URI・ルート名・コントローラのアクション・ミドルウェアが表示されます。

絞り込みオプション

中〜大規模アプリではルート数が数百を超えるため、フィルタオプションで必要なルートだけ抽出するのが実用的です。

オプション説明
--path=URI の部分一致で絞り込み
--name=ルート名の部分一致で絞り込み
--method=指定 HTTP メソッドのみ
--except-vendorvendor 配下(ベンダーが提供する)ルートを除外
--only-vendorvendor 配下のルートだけ表示
--except-path=指定パスを除外
--columns=表示する列を絞り込み(method,uri,name,action,middleware)
--reverse / -r逆順で表示
--sort=uri / method / name / action / middleware で並び替え
--jsonJSON で出力(パイプ処理向け)

使用例

# /api/ で始まるルートだけ
php artisan route:list --path=api

# POST メソッドだけ
php artisan route:list --method=POST

# ベンダーのルートを隠して自分のアプリのルートだけ表示
php artisan route:list --except-vendor

# 名前付きルートで auth を含むものだけ
php artisan route:list --name=auth

# 列を絞ってシンプルに
php artisan route:list --columns=method,uri,name

JSON 出力

CI でルートの増減を差分検知したい場合などは、--json オプションで機械可読な出力が得られます。

php artisan route:list --json > routes.json

# jq で必要なフィールドだけ抽出
php artisan route:list --json | jq '.[] | {method,uri,name}'

ルートキャッシュとの関係

本番環境ではルート定義の読み込みを高速化するためにキャッシュを使います。

# キャッシュ生成(デプロイ時に実行)
php artisan route:cache

# キャッシュをクリア
php artisan route:clear

キャッシュ後はクロージャベースのルート定義が使えなくなる点に注意してください。本番でキャッシュを使うなら、すべてのルートをコントローラ参照([Controller::class, 'method'])として定義する必要があります。

キャッシュが効いている状態でも route:list はキャッシュから読んで表示できます。デプロイ後にルートが意図通りに登録されているか確認するときに便利です。

ルート定義の場所

ルートは routes/ ディレクトリ配下に置かれ、Laravel が起動時に読み込みます。代表的なファイルは次の通りです。

ファイル用途
routes/web.phpセッション/CSRF を使う通常の Web ルート
routes/api.phpAPI 用ルート(/api プレフィックスが自動付与)
routes/console.phpArtisan の独自コマンドをクロージャで定義
routes/channels.phpブロードキャストチャネル定義

route:list でよく見るトラブル

1. 期待したルートが表示されない

  • ルートファイルが読み込まれていない(RouteServiceProvider 確認)
  • ミドルウェアグループの設定ミス
  • route:cache でキャッシュされた古い定義を表示している → route:clear で解消

2. 同じ URI に対して複数ルートが定義されている

同じパス・メソッドの組み合わせに複数のルートを定義すると、後勝ちで上書きされます。route:list で重複の有無を確認すると気付きやすいです。

ルート名 (Named Routes) の重要性

各ルート定義に ->name('users.show') のように名前を付けておくと、URL を直書きせずに route('users.show', ['id' => 1]) でリンクや遷移先 URL を生成できます。URL 構造を後から変更しても、ルート名のままならテンプレートやコントローラを書き換える必要がなく、保守性が大幅に向上します。route:list --name= オプションで名前付きルート一覧を素早く確認できるため、リファクタリング前後でのルート差分チェックにも活用できます。Laravel チュートリアルでは省略されがちですが、本番アプリでは命名規則を最初から徹底するのが圧倒的に楽です。

ミドルウェアの確認

route:list の右端列に表示されるミドルウェアは、そのルートへリクエストが届いたときに通過する処理の連鎖です。代表的なものに web(セッション・CSRF・暗号化 Cookie)、auth(未ログイン時にリダイレクト)、throttle:60,1(レート制限)、verified(メール認証必須)などがあります。本番で「ログインしていないのに認証必須ページに入れてしまう」「CSRF が効いていない」といった事故が起きたときは、まず route:list で対象ルートのミドルウェアを確認し、想定通りのスタックになっているかを検証するのが診断の第一歩です。

API リソースルート

REST API でよく使われる CRUD 7 操作(index / create / store / show / edit / update / destroy)は、Route::resource('posts', PostController::class) の一行で一度に登録できます。これらは route:list 上ではすべて別ルートとして展開されて表示されるため、リソースが何個登録されているか、命名規則は揃っているかを目視で確認できます。API 専用なら apiResource() を使うとブラウザ向けのフォームルート(create / edit)が省かれた 5 操作だけになります。プロジェクトが大きくなるにつれて、リソース型を活用するか個別ルートを書き続けるかが運用負荷に直結するため、早めに方針を決めておくと良いでしょう。

route:list を CI で活用する

大規模プロジェクトでは、リファクタリング時にうっかりルートを増減させてしまう事故を防ぐため、CI で route:list --json の出力をスナップショットとして保存しておくのが有効です。プルリクエストごとに差分を比較し、意図しないルートの追加・削除があれば警告するワークフローを組めば、設計と実装の整合性を継続的に確認できます。OpenAPI ドキュメントの自動生成と組み合わせると、フロントエンドや外部チームへのインタフェース公開も自動化できます。

パラメータとモデルバインディング

ルート定義で /users/{user} のように波括弧で囲った部分は、URL からパラメータとして取り出せます。route:list 上ではこのプレースホルダがそのまま表示されるため、どのパラメータをどこで受け取るかが一目で分かります。Laravel のルートモデルバインディングを使うと、{user}App\Models\User 型として自動解決し、コントローラの引数にそのまま User インスタンスが渡ります。これにより、各アクションの冒頭で行いがちな findOrFail($id) をすべて省略でき、コードが大幅にすっきりします。バインディングが見つからなければ自動で 404 を返してくれる点も実装漏れ防止に役立ちます。

ドメインとサブドメインのルーティング

マルチテナント SaaS では、{tenant}.example.com のようにサブドメインごとにテナントを分けたいケースがあります。Laravel では Route::domain('{tenant}.example.com')->group(...) でサブドメインごとのルートグループを定義でき、route:list ではドメインの違いも明示的に列に表示されます。マルチドメインで複数アプリケーションを 1 つのコードベースで動かすときは、ドメインフィルタが指定できることで実装と確認の両面で大いに助かります。

API バージョニング

API を運用していると、後方互換性を保ったまま新バージョンを並行公開したい場面が出てきます。routes/api.php 内で Route::prefix('v1')->group(...)Route::prefix('v2')->group(...) を併存させる方式が定番で、route:list --path=v2 のように特定バージョンのルートだけ確認できます。クライアントの移行が完了した時点で旧バージョンのルートを削除すれば、段階的なバージョンアップが安全に進められます。

関連記事

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. 新規プロジェクトの作成
  2. サーバーの起動
  3. マイグレーションファイルの作成
  4. マイグレーションの実行(migrate)
  5. モデルの作成
  6. 全ルートを確認
  7. Laravelのバージョンの確認方法

最近更新/作成されたページ