LoginSignup
1
0

Rails RESTfulなルーティング

Posted at

目次

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 設計は広く採用されているのだなということが分かりました。

4. 参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0