テクノロジー
2017年12月12日ルーティングの仕組み
この記事では、受け取ったリクエストを元に、コントローラのどのアクションに処理を飛ばすかを決定するルーティングの解説をしていきます。
ルーティングの仕組み
この記事では、受け取ったリクエストを元に、コントローラのどのアクションに処理を飛ばすかを決定するルーティングの解説をしていきます。
Webアプリケーションの処理の流れをイメージする上で非常に重要な知識ですので、ぜひご理解を深めてください。
ルータ
ルータは受け取ったリクエストをもとに、コントローラ&アクションを案内する役割を持っています。
言い換えるとコントローラ&アクションまでの 経路を案内 するので、 ルータ と呼ばれているのです。
ルーティングとは
リクエストは URL + HTTPメソッド の組み合わせで成り立っていることはすでに学習しました。
ルーティングとは受け取ったリクエストをもとに、コントローラ&アクションを案内することです。
7つの基本アクション
Webアプリケーションは複雑な処理を除き、 7つの基本アクション で表現することができます。
| アクション名 | 意味 | HTTPメソッド | URL |
|---|---|---|---|
| index | 一覧 | GET | /blogs |
| show | 詳細 | GET | /blogs/:id |
| new | 新規 | GET | /blogs/new |
| edit | 編集 | GET | /blogs/:id/edit |
| create | 作成 | POST | /blogs |
| update | 更新 | PATCH | /blogs/:id |
| destroy | 削除 | DELETE | /blogs/:id |
:id にはレコードのid(1とか2とか)が入ります。
ルーティングの記述
ルーティングを記述するファイルは config/routes.rb です。
記述方法ですが、2通り存在します。
- 1個ずつ記述していく
- resourcesオプションを使用する
まずは前者から説明していきます。
左側に HTTPメソッド + URL 、右側に コントローラ名#アクション名 を記述します。
ちなみに以下は7つの基本アクションを全て定義した時の記述です。
(config/routes.rb)
Rails.application.routes.draw do
get '/blogs' => 'blogs#index'
post '/blogs' => 'blogs#create'
get '/blogs/new' => 'blogs#new'
get '/blogs/:id/edit' => 'blogs#edit'
get '/blogs/:id' => 'blogs#show'
patch '/blogs/:id' => 'blogs#update'
delete '/blogs/:id' => 'blogs#destroy'
end
2つ目は resourcesオプション を使って記述する方法です。
(config/routes.rb)
Rails.application.routes.draw do
resources :blogs
end
この記述は前者の7行分と全く同じ意味になります。
Webアプリケーションの開発においては、基本的に resourcesオプション を使ってルーティングを定義していきます。
ルーティングの確認
ルーティングを確認するコマンドを以下に示します。ここでは例として、achieveというアプリを使っています。
(コンソール)
~/workspace/achieve $ rake routes
ルーティングの絞り込み
さらに |grep というオプションをつけることで、ルーティングを絞り込んで検索することができます。
(コンソール)
~/workspace/achieve $ rake routes |grep blog
このようにすることで、achieveの中のblogに関連したルーティングだけを表示させることができます。
最初の段階ではまだ意識しなくて良いのですが、大規模な案件になった時にルーティングの数は 500個 を超えたりするそうです。
これに対して|grepオプションをつけてあげないと、表示するのに時間がかかってしまいますし、表示されても見づらいでしょう。
今のうちから|grepオプションをつけてコマンドを実行することをオススメします。