Railsルーティング超入門:resourcesの7アクションとRESTful設計を理解しよう
生徒
「Railsでresourcesってよく見るんですが、どういう意味ですか?」
先生
「resourcesは、Webアプリの基本的な操作を、たった一行でまとめて設定できる便利な仕組みなんですよ。」
生徒
「へえ、それだけで全部できるんですか?なんだか難しそう…」
先生
「安心してください。今から順番に、RESTという考え方と一緒に、基礎から丁寧に解説していきますね。」
1. Railsのresourcesとは?
resourcesは、Railsでよく使われるルーティングの省略記法で、「あるデータに対して行える基本操作(一覧表示・詳細表示・新規作成など)」をまとめて定義する方法です。
Webアプリでは、ユーザーや記事などのデータに対して、「見る・作る・更新する・削除する」などの操作をしますよね。これらを一つひとつ書かなくても、resourcesと書くだけでRailsが自動で用意してくれるのです。
resources :articles
この一行で、7つのルートが自動で設定されます。これがいわゆる「7つのアクション」です。
2. RESTとRESTfulってなに?
REST(レスト)は、Webの設計ルールのひとつで、「URLと操作の組み合わせでわかりやすく整理しよう」という考え方です。
この考え方に沿って作られたルーティングのことをRESTful(レストフル)なルーティングと呼びます。
たとえば、以下のようにURLと動作が対応しています。
GET /articles → 記事一覧を表示する
GET /articles/1 → IDが1の記事を表示する
POST /articles → 新しい記事を作成する
PATCH /articles/1 → IDが1の記事を更新する
DELETE /articles/1 → IDが1の記事を削除する
このように、HTTPメソッド(GETやPOSTなど)とURLを組み合わせて、自然な形で操作を表現できるようになります。
3. 7つのアクションとは?
Railsでは、resourcesを使うと、以下の7つのアクションが自動で定義されます。
- index:全データの一覧表示
- show:特定のデータの詳細表示
- new:新規データの作成フォームを表示
- create:新規データを保存する
- edit:既存データの編集フォームを表示
- update:編集されたデータを更新する
- destroy:データを削除する
これらは、コントローラの中にそれぞれ関数(アクション)として定義されることになります。
4. 実際にroutes.rbに書いてみよう
config/routes.rbに以下のように記述します。
Rails.application.routes.draw do
resources :articles
end
このたった3行で、以下のルーティングが自動生成されます。
GET /articles → articles#index
GET /articles/new → articles#new
POST /articles → articles#create
GET /articles/:id → articles#show
GET /articles/:id/edit → articles#edit
PATCH /articles/:id → articles#update
PUT /articles/:id → articles#update
DELETE /articles/:id → articles#destroy
特に、:idはデータのID(番号)を表します。「何番目の記事か」を識別するために使われます。
5. resourcesのメリットとは?
resourcesを使うことで、次のようなメリットがあります。
- コードが短くて済む(1行で7つのルートが定義される)
- RESTfulな設計で統一感が出る
- Railsの自動生成コマンドやscaffoldと相性が良い
- チーム開発でもルールが共通なので迷わない
初心者でも迷わずに使えるように、RailsではRESTful設計を前提にした作りがあちこちに取り入れられています。
6. 一部のアクションだけ使いたい場合
もし7つ全部は使わず、「一覧と詳細だけでいい」といった場合は、onlyを使って必要なルートだけを指定できます。
resources :articles, only: [:index, :show]
逆に、「これだけは使いたくない」という場合は、exceptを使って除外することもできます。
resources :articles, except: [:destroy]
7. 単数形のresourceとの違い
複数形のresourcesと似たもので、単数形のresourceという書き方もあります。これは「データが1つしかない」ような場合に使います。
resource :profile
この場合、URLにはIDが含まれず、次のようになります。
GET /profile → profiles#show
PATCH /profile → profiles#update
ユーザープロフィールのように、「1人1つだけ持つ」ようなデータで使われます。
まとめ
resourcesとRESTful設計を全体から振り返ろう
今回の記事では、Railsのルーティングにおいて非常に重要な概念であるresourcesと、その背景にあるRESTful設計について、初心者向けに基礎から学んできました。RailsでWebアプリを開発する際、多くの場面で登場するresourcesは、単なる省略記法ではなく、Webアプリ全体の設計思想を反映した仕組みです。
resourcesを使うことで、URLとコントローラの対応関係が自然な形で整理され、「どのURLで、どんな操作をするのか」が直感的に分かるようになります。これは、Railsが大切にしている「設定より規約」という考え方にも深く関係しており、Railsらしい開発スタイルを理解するうえで欠かせないポイントです。
記事の中で紹介したように、resources :articlesと一行書くだけで、一覧表示、詳細表示、新規作成、更新、削除といった7つの基本アクションが自動的に用意されます。これらはWebアプリで最もよく使われる操作であり、多くのサービスが同じ構造を持っています。Railsではこの共通パターンをあらかじめ仕組みとして提供してくれているため、開発者は余計なことを考えずに機能開発に集中できます。
7つのアクションとRESTの考え方
resourcesで定義される7つのアクションは、RESTという設計思想に基づいています。RESTでは、「どのデータに対して、どんな操作をするのか」をURLとHTTPメソッドの組み合わせで表現します。これにより、URLの意味が分かりやすくなり、アプリの構造も整理されます。
たとえば、GETで取得、POSTで作成、PATCHで更新、DELETEで削除といった役割分担は、Railsだけでなく、多くのWebフレームワークやAPI設計でも共通して使われています。Railsでresourcesを理解することは、Rails特有の知識にとどまらず、Web開発全体の基礎力を高めることにもつながります。
Rails.application.routes.draw do
resources :articles
end
このようなシンプルな記述で、RESTfulなルーティングが一気に整うのは、Railsの大きな魅力のひとつです。最初は自動で生成されるルートの多さに戸惑うかもしれませんが、何度もroutes.rbやrails routesコマンドを確認していくうちに、自然と理解が深まっていきます。
only・except・resourceを使い分ける視点
実際の開発では、必ずしも7つすべてのアクションが必要になるとは限りません。resourcesには、必要なアクションだけを指定できるonlyや、不要なものを除外できるexceptといった便利なオプションが用意されています。これらを活用することで、ルーティングをより安全で分かりやすいものにできます。
また、単数形のresourceは、「データが一つしか存在しない」という前提の設計に適しています。ユーザープロフィールや設定画面など、IDを意識せずに扱いたい場面では、resourceを使うことでURL設計がすっきりします。この違いを理解しておくと、Railsのルーティング設計に自信が持てるようになります。
Railsのルーティングは、最初は覚えることが多く感じられますが、resourcesとRESTful設計を軸に考えることで、一気に整理されます。URL、コントローラ、アクションの関係が見えてくると、Railsアプリ全体の流れも自然と理解できるようになるでしょう。
生徒:「resourcesって、ただの便利な省略記法だと思っていましたが、ちゃんとした考え方があるんですね。」
先生:「そうなんです。RESTful設計という共通ルールがあるからこそ、Railsのコードは読みやすくなるんですよ。」
生徒:「7つのアクションも、Webアプリでよく使う操作ばかりでした。」
先生:「その気づきは大事ですね。Railsはその“よくある形”を最初から用意してくれているんです。」
生徒:「onlyやexcept、resourceの使い分けも、だんだんイメージできてきました。」
先生:「とても良い理解です。ルーティングが分かると、Rails開発が一気に楽になりますよ。」
生徒:「これからroutes.rbを見るのが少し楽しみになりました。」
先生:「その感覚を大切にしてください。Railsの基礎力として、とても重要な一歩です。」