概要
rails で Web アプリケーションを作っている、という前提で本日の話です。
Web アプリケーションの開発中は rails routes
コマンド等で現在のルーティング一覧を確認することがちらほらあるかと思います。(いや、私はブラウザで見てます、という方はブラウザバックでw)
* rails routes
についてはこちらをご参照ください
その際、出力結果はこんなかんじの内容が出力されます。(※横に長いのでPC閲覧推奨)
Prefix Verb URI Pattern Controller#Action
new_user_session GET (/:locale)/users/sign_in(.:format) users/sessions#new {:locale=>/en/}
user_session POST (/:locale)/users/sign_in(.:format) users/sessions#create{:locale=>/en/}
destroy_user_session DELETE (/:locale)/users/sign_out(.:format) users/sessions#destroy {:locale=>/en/}
new_user_password GET (/:locale)/users/password/new(.:format) users/passwords#new {:locale=>/en/}
edit_user_password GET (/:locale)/users/password/edit(.:format) users/passwords#edit {:locale=>/en/}
user_password PATCH (/:locale)/users/password(.:format) users/passwords#update {:locale=>/en/}
PUT (/:locale)/users/password(.:format) users/passwords#update {:locale=>/en/}
POST (/:locale)/users/password(.:format) users/passwords#create {:locale=>/en/}
cancel_user_registration GET (/:locale)/users/cancel(.:format) users/registrations#cancel {:locale=>/en/}
new_user_registration GET (/:locale)/users/sign_up(.:format) users/registrations#new {:locale=>/en/}
edit_user_registration GET (/:locale)/users/edit(.:format) users/registrations#edit {:locale=>/en/}
user_registration PATCH (/:locale)/users(.:format) users/registrations#update {:locale=>/en/}
PUT (/:locale)/users(.:format) users/registrations#update {:locale=>/en/}
DELETE (/:locale)/users(.:format) users/registrations#destroy {:locale=>/en/}
POST (/:locale)/users(.:format) users/registrations#create {:locale=>/en/}
……見づらい( ゚д゚)
この感覚、routes コマンドを実行したことある方ならきっとわかってくれるはずです(たぶん)
これをあれこれ加工して見やすくしてみようというのが今回のお話です。
いろいろ手段はありそうなんですが、コマンドで対処している例はあまり見かけなかったので、自分好みの書式にするのも兼ねて記事にしました。
というわけでレッツトライ。
Step1. 余計なものを消す
表示上は必要なさそうなものを単純に置換で消してみようと思います。
コマンド
rails routes |\
sed \
-e 's/(\/:locale)//g' \
-e 's/(.:format)//g' \
-e 's/{:locale=>.*}//g'
出力結果
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in users/sessions#new
user_session POST /users/sign_in users/sessions#create
destroy_user_session DELETE /users/sign_out users/sessions#destroy
new_user_password GET /users/password/new users/passwords#new
edit_user_password GET /users/password/edit users/passwords#edit
user_password PATCH /users/password users/passwords#update
PUT /users/password users/passwords#update
POST /users/password users/passwords#create
cancel_user_registration GET /users/cancel users/registrations#cancel
new_user_registration GET /users/sign_up users/registrations#new
edit_user_registration GET /users/edit users/registrations#edit
user_registration PATCH /users users/registrations#update
PUT /users users/registrations#update
DELETE /users users/registrations#destroy
POST /users users/registrations#create
これだけでもそこそこすっきりしましたね。
Step2. 見た目を調整する
左詰め右詰めがバラバラだったり、幅が広すぎたりしてまだいまひとつ見づらい(※個人の感想です)のでもうちょっと手を加えてみます。
コマンド
rails routes | \
sed \
-e 's/(\/:locale)//g' \
-e 's/(.:format)//g' \
-e 's/{:locale=>.*}//g' \
-e 's/URI Pattern/URI-Pattern/g' | \
awk -F'Verb|GET|POST|PUT|PATCH|DELETE' '{if(match($1, /^ *$/)){printf "\" %s\n", $0;} else print}' | \
awk '{printf "%-30s %-10s %-40s %-40s\n", $1,$2,$3,$4}'
出力結果
Prefix Verb URI-Pattern Controller#Action
new_user_session GET /users/sign_in users/sessions#new
user_session POST /users/sign_in users/sessions#create
destroy_user_session DELETE /users/sign_out users/sessions#destroy
new_user_password GET /users/password/new users/passwords#new
edit_user_password GET /users/password/edit users/passwords#edit
user_password PATCH /users/password users/passwords#update
" PUT /users/password users/passwords#update
" POST /users/password users/passwords#create
cancel_user_registration GET /users/cancel users/registrations#cancel
new_user_registration GET /users/sign_up users/registrations#new
edit_user_registration GET /users/edit users/registrations#edit
user_registration PATCH /users users/registrations#update
" PUT /users users/registrations#update
" DELETE /users users/registrations#destroy
" POST /users users/registrations#create
意外とめんどかった(心の声)
力技ですがどうにかしました。 awk の if 文とか初めて使った
左詰めで各列が揃ってきれいになりましたね(自己満
Prefixが省略されている行は最後の awk 実行時にそこだけ列数が少なくて表示がおかしくなるので "
を入れて列数の帳尻を合わせています。ただの数合わせなので入れる文字は特になんでもいいんですが 日本語の 〃
と見た目が近い というだけの理由でわたしはとりあえずダブルクオートで試してみましたw
最後の printf の %-数字
が各列の幅です。お好みや routes の設定状況に応じてこのへんは適当に数字変えて調節してください。
Step3. 関数にする
function my_routes() {
rails routes | \
grep $1 | \
sed \
-e 's/(\/:locale)//g' \
-e 's/(.:format)//g' \
-e 's/{:locale=>.*}//g' \
-e 's/URI Pattern/URI-Pattern/g' | \
awk -F'Verb|GET|POST|PUT|PATCH|DELETE' '{if(match($1, /^ *$/)){printf "\" %s\n", $0;} else print}' | \
awk '{printf "%-30s %-10s %-40s %-40s\n", $1,$2,$3,$4}'
}
シェルの関数作ったのは初めてなのでそもそもこういう書き方や使い方はいいのかどうかは 相当怪しい ですが意図通り動くには動きますw通りすがりの方、気になる点あればご指摘ください。(マサカリ大歓迎)
ここでは rails routes のあとに grep を追加しました。私の場合は rails routes はだいたい grep とセットで使うことが多いので組み込んでみました。関数の引数に渡したものがこの grep で使われます。alias ではなく関数にしたのはこれがやりたかったがゆえです。
$ my_routes registrations
cancel_user_registration GET /users/cancel users/registrations#cancel
new_user_registration GET /users/sign_up users/registrations#new
edit_user_registration GET /users/edit users/registrations#edit
user_registration PATCH /users users/registrations#update
" PUT /users users/registrations#update
" DELETE /users users/registrations#destroy
" POST /users users/registrations#create
こんなかんじで実行できます。一応これで完成です!
言い訳(スキップ可)
grep 入れると1行目のヘッダーがなくなってしまいますね。sed コマンドで挿入してもいいんですが Mac の sed だと挙動が違ってちょっと面倒そう なのと、正直 ヘッダーなくてもそこまでは困らないかな という気がしたので今回は一旦パスしました。
検証環境
- Railsバージョン
- 5.2.0
- Windows7 Professional
- GitBash 使用
- macOS 10.13.6 High Sierra