この記事では、Railsのルーティングとは何か、そして Rails API においてリクエストがどのように処理されるのかを、基本から順を追って解説します。
Rails API を学習していると、
- routes.rb に何を書けばよいのか分からない
- URL と Controller がどのようにつながっているのか曖昧
- resources を使っているが、何が自動で定義されているのか理解できていない
といったように、ルーティング周りで全体像が見えず、手が止まることがあります。
これらを解消するために、この記事を通して、Railsのルーティングを一緒に学んでいきましょう。
※ namespace や scope といった少し応用的な設定については、別の記事で解説します。
1. Railsのルーティングとは何か?
Railsのルーティングとは、クライアントから送られてきたリクエストをもとに、
アプリケーション内で「どんな処理を行うか」を決める仕組みです。
Rails APIでは、リクエストが直接処理されることはなく、最初にルーティングを通ります。
HTTPリクエスト
↓
ルーティング
↓
アプリケーションの処理
以降の章で、この仕組みをもう少し具体的に見ていきます。
2. Rails APIにおけるリクエストの流れ
ブラウザやクライアントからリクエストが送られてくると、
Railsはまず、routes.rb ファイルに定義されたルーティングをもとに、
どのControllerのどのアクションで処理するかを判断し、そのアクションを呼び出します。
※ Railsでは、アクションはController内のメソッドと同義と考えて問題ありません。
そして最後に、Controllerからクライアントへレスポンスを返します。
Request
↓
Routing
↓
Controller
↓
Response(JSON)
※ ルーティングの説明のため、Modelは省いています。
まずはこの全体像を把握しておくと、ルーティングの仕組みの理解がしやすくなります。
3. routes.rb とは?
routes.rb は、クライアントからのリクエストと、それに対応するControllerのアクションを定義するファイルです。
※ routes.rb は Railsアプリケーションの config/routes.rb に配置されています。
例えば、次のようなURLにアクセスしたとします。
GET /users
このリクエストは、
- HTTPメソッド:GET
- URL:/users
という情報を持っています。
このリクエストに対して、routes.rb に次のような定義があるとします。
get '/users', to: 'users#index'
ここで使われている get は、
HTTPリクエストのメソッドである GET に対応した、Railsのルーティング用メソッドです。
また、 to: 'users#index' という指定は、 処理を担当するControllerとアクションを表しています。
具体的には、
- users:どのControllerで処理するか
- index:そのControllerのどのアクションで処理するか
を意味しています。
Railsでは命名規約により、
users と指定されている場合は、UsersController というControllerクラスが使われます。
そのため、このルーティングは、
UsersController の indexアクション を呼び出す
という意味になります。
Railsでは、この「URL → 処理」の対応関係をすべて routes.rb にまとめて書くことで、
アプリ全体の入り口を一元管理しています。
4. 基本的なルーティングの書き方
routes.rb で使われている get や post は、
HTTPメソッドに対応したRailsのルーティング用メソッドです。
対応関係は次のようになっています。
- HTTPの GET → get
- HTTPの POST → post
- HTTPの PUT → put
- HTTPの DELETE → delete
そのため、次のように routes.rb を書くことができます。
get '/users', to: 'users#index'
post '/users', to: 'users#create'
put '/users/:id', to: 'users#update'
delete '/users/:id', to: 'users#destroy'
5. resources を使ったルーティング
ここまでで、HTTPメソッドとURLを使って、
ルーティングを以下のように1つずつ定義してきました。
get '/users', to: 'users#index'
post '/users', to: 'users#create'
put '/users/:id', to: 'users#update'
delete '/users/:id', to: 'users#destroy'
Railsでは、このような定型的なルーティングを一括で定義するための仕組みとして
resources が用意されています。
5-1. resources とは何か?
resources は、「一覧・詳細・作成・更新・削除」といった処理でよく使われるルーティングを、
1行でまとめて定義できる仕組みです。
例えば、次の1行を routes.rb に書いた場合、
resources :users
以下のような6つのルーティングを定義したことと同義になります。
get '/users', to: 'users#index'
post '/users', to: 'users#create'
get '/users/:id', to: 'users#show'
patch '/users/:id', to: 'users#update'
put '/users/:id', to: 'users#update'
delete '/users/:id', to: 'users#destroy'

※ update アクションは PUT と PATCH の両方で呼び出せるため、ルーティング定義としては2つ作られます。
このような、Railsでよく使われる「お決まりのルーティングの組み合わせ」を毎回書かなくて済むようにしたものが resources です。
(この構成は「RESTful」と呼ばれる設計に基づいていますが、RESTfulという言葉を意識しすぎず、まずは「Railsの標準的な書き方」として理解すれば問題ありません。)
おわりに
この記事では、Railsのルーティングとは何かを整理した上で、
Rails API においてリクエストがどのような流れで処理されるのかを解説しました。
ルーティング自体は、決して難しいものではありません。
- URL と HTTPメソッドを受け取ること
- routes.rb に定義されたルールをもとに処理先を決めること
- resources を使うことで、よく使われるルーティングをまとめて定義できること
といった 基本的な役割と流れ を押さえておくだけで、Railsのルーティングの見え方は大きく変わります。
本記事が、Rails API のルーティングを
「なんとなく使うもの」から「リクエストの流れを理解しながら読める・書けるもの」へ変えるための、
最初の一歩になれば幸いです。

