テクノロジー

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オプションをつけてコマンドを実行することをオススメします。

ダイビックのことをもっと知ってみませんか?