Laravel route:list に地味に追加された並び替えオプションを試してみた
2022年10月 追記
Laravel Ver.9.1.0 で、半分勘違いもあってか、下記で紹介している --sort=precedence オプションは消されてしまいました。
それ以降は、代わりに --sort=domain がいいかも知れません。
なお、--compact オプションも今はありません。
本文
小ネタですが、Laravel 8.48.2 にて route:list コマンドで、定義したルート順に表示する事ができるようになったので、試してみました。
参考:GitHub Add "resolution" order to route:list command #37824
ちなみに、何も並び順を指定しない時というのは、URI 順なんですね。
まぁ、それは悪くはないかも知れませんが、定義した順に表示させたいという事はあると思います。
そこで、出てきたのが、--sort=precedence オプションです。今までも、method やら action やらで並び替えはできましたが、何故か定義した順は無かった訳ですね。
例えば、web.php に以下のように記述がある時、
Route::get('/zzz', [PhotoController::class, 'zzz']);
Route::get('/hoge', [PhotoController::class, 'hoge']);
Route::get('/bar', [PhotoController::class, 'bar']);
php artisan route:list --compact
とコマンド叩けば、
+----------+----------+-------------------------------------------+
| Method | URI | Action |
+----------+----------+-------------------------------------------+
| GET|HEAD | bar | App\Http\Controllers\PhotoController@bar |
| GET|HEAD | hoge | App\Http\Controllers\PhotoController@hoge |
| GET|HEAD | zzz | App\Http\Controllers\PhotoController@zzz |
+----------+----------+-------------------------------------------+
と表示されていましたが、
php artisan route:list --compact --sort=precedence
と叩けば、
+----------+----------+-------------------------------------------+
| Method | URI | Action |
+----------+----------+-------------------------------------------+
| GET|HEAD | zzz | App\Http\Controllers\PhotoController@zzz |
| GET|HEAD | hoge | App\Http\Controllers\PhotoController@hoge |
| GET|HEAD | bar | App\Http\Controllers\PhotoController@bar |
+----------+----------+-------------------------------------------+
と表示される訳ですね。
あまりいい例ではなかったかも知れませんが、多くの定義がある時に、不用意にURIで並び替えられると、逆に「どこだ?」と探してしまうかも知れませんね。
もっとも、本当に多い時はフィルタとかして、
php artisan route:list --compact --sort=precedence --path=hoge
+----------+------+-------------------------------------------+
| Method | URI | Action |
+----------+------+-------------------------------------------+
| GET|HEAD | hoge | App\Http\Controllers\PhotoController@hoge |
+----------+------+-------------------------------------------+
とした方がいいのかも知れませんが。
余談ですが
個人的には、歓迎なオプションですが、日本人の私的には、もうちょっと短くて簡単な綴りの方が嬉しかったぞ、と思う所はあります。
まぁ、この際、しっかり precedence(優先、先に来ること、先行、優位) の綴りを覚えるしか無いですね。もし忘れた時は、
php artisan route:list --help
Options:
--sort[=SORT] The column (precedence, domain, method, uri, name, action, middleware) to sort by [default: "uri"]
(他、略)
で確認できます。
ちなみに、元のPRでは、"resolution" (先にルートが解決された順)でしたが、
Taylor氏によって、"precedence" に置き換えられました。先に定義されたものが先(早い者勝ち)とでも覚えておきます。
Discussion