目次
1. はじめに
2. Rails のルーティング設計
3. RESTful なルーティングとは
4. 参考
1. はじめに
Rails で CRUD 処理を作成中、どの操作がどのルーティングなのかよく忘れてしまうため、備忘録としてまとめておくことにしました。
また Rails のルーティングは REST 設計に基づいていますが、REST 設計についてあまり知りませんでした。
RESTful なルーティング設計は Rails をはじめ広く採用されているため、その考え方やメリットについても調べてみようと思いました。
2. Rails のルーティング設計
まずは、Rails のルーティング設計がどうなっているかを見てみたいと思います。
これは、Rails にルーティングを自動作成してもらうことで簡単に分かります。
ルーティングを自動作成
Rails では、ルーティング設定用のファイル config/routes.rb
にルーティングを書いていきます。
一つずつルーティングを書いていくことももちろんできますが、resources
キーワードを使うと基本的なルーティングが自動的に作成されます。例えば以下のように resources :comments
と書くだけで、コメントに関する CRUD 処理のルーティングを簡単に作ることができます。
# config/routes.rb
Rails.application.routes.draw do
resources :comments # この行を追加
end
ターミナルで以下のコマンドを打って、ルーティング一覧を確認してみましょう。
rails routes
出力結果が以下です。
Prefix Verb URI Pattern Controller#Action
.
.
.
comments GET /comments(.:format) comments#index
POST /comments(.:format) comments#create
new_comment GET /comments/new(.:format) comments#new
edit_comment GET /comments/:id/edit(.:format) comments#edit
comment GET /comments/:id(.:format) comments#show
PATCH /comments/:id(.:format) comments#update
PUT /comments/:id(.:format) comments#update
DELETE /comments/:id(.:format) comments#destroy
.
.
.
ちなみにルーティングを一つずつ書く場合は、以下のようになります。自動生成したものと同じ設計です。
# config/routes.rb
Rails.application.routes.draw do
get "/comments", to: "comments#index"
get "/comments/new", to: "comments#new"
post "/comments", to: "comments#create"
get "/comments/:id", to: "comments#show"
get "/comments/:id/edit", to: "comments#edit"
patch "/comments/:id", to: "comments#update"
put "/comments/:id", to: "comments#update"
delete "/comments/:id", to: "comments#destroy"
end
ルーティングごとの用途
上記のルーティングを以下の表にまとめました。
これが Rails で基本となるルーティングであり、REST 設計に基づいたものです。
新規作成や編集など CRUD の各処理が、URI と HTTP メソッドの組み合わせによって割り当てられています。
HTTPメソッド | URI | アクション | 用途 |
---|---|---|---|
GET | /comments | index | コメントの一覧を表示 |
GET | /comments/new | new | コメントの新規作成フォームを表示 |
POST | /comments | create | コメントを新規作成 |
GET | /comments/:id | show | 特定のコメントを表示 |
GET | /comments/:id/edit | edit | 特定のコメントの編集フォームを表示 |
PATCH または PUT | /comments/:id | update | 特定のコメントを編集 |
DELETE | /comments/:id | destroy | 特定のコメントを削除 |
3. RESTful なルーティングとは
では RESTful なルーティングとは何なのでしょうか?
そもそも REST とは
そもそも REST (Representational State Transfer) が何かというと、Webシステムにおける設計の考え方のことです。そしてその REST の考え方に基づいて作られたものを、RESTful なシステム、RESTful な ルーティング、といったように呼んだりします。
REST で重要な考え方の一つが、『リソース』を扱うということです。
Webサービスを作成する上で、ユーザーや記事、コメント、商品など色々な情報が必要になりますよね。これらの情報のかたまりを REST では『リソース』としています。例えば『ユーザーリソース』『コメントリソース』のような感じです。
( REST の定義はこれだけではなく、ステートレス性など他にも色々あるのですが...この記事では理解しやすいように、一部のみ取り上げました。)
RESTful なルーティング
REST 設計の考え方では、リソースは一意の URI で識別されます。これが先ほど作成したルーティングの comments
の部分です。
ルーティング一覧で見たように、リソースごとの URI に適切な HTTP メソッドを使うことで、『リソース』を操作します。これが RESTful なルーティングの基本的な考え方です。
REST 設計に基づくことで、一貫したルーティング構造を作ることができます。(慣れれば)直感的に構造を理解しやすく、リソースやルーティングの追加もしやすそうだなと思いました。このようなメリットがあるため、REST 設計は広く採用されているのだなということが分かりました。