Railsのresourceとresourcesの違いとは?単数・複数ルーティングの使い分け解説
生徒
「Railsのルーティングで、resourceとresourcesってどう違うんですか?」
先生
「簡単に言うと、1つのデータに対して使うのがresourceで、たくさんのデータに対して使うのがresourcesですよ。」
生徒
「見た目が1文字違うだけなのに、どうして使い分ける必要があるんですか?」
先生
「それには理由があるんです。具体例と一緒に、単数と複数のルーティングの違いを見ていきましょう!」
1. resourceとresourcesの違いとは?
Railsのルーティングでは、resource(単数)とresources(複数)という2つの書き方があります。
resource(単数)は、「そのユーザーに1つしか存在しないもの」に使います。たとえば「プロフィール」など。
resources(複数)は、「たくさん作れるもの」に使います。たとえば「記事」や「コメント」など。
2. resourcesの基本とルーティング
まずはresourcesの使い方から見てみましょう。これは「たくさんのデータを扱うルーティング」です。
resources :articles
この一行で、次のようなルートが自動生成されます。
GET /articles → 一覧(index)
GET /articles/new → 新規作成フォーム(new)
POST /articles → 作成(create)
GET /articles/:id → 詳細(show)
GET /articles/:id/edit → 編集フォーム(edit)
PATCH /articles/:id → 更新(update)
DELETE /articles/:id → 削除(destroy)
特徴は、:idが付く点です。データが複数あるので、「どのデータか」を区別するためにIDが必要になります。
3. resourceの基本とルーティング
次に、resourceの例を見てみましょう。これは「ひとり1つしか持たない」ようなデータに使います。
resource :profile
この場合に自動生成されるルートは以下のようになります。
GET /profile → 詳細(show)
GET /profile/new → 新規作成フォーム(new)
POST /profile → 作成(create)
GET /profile/edit → 編集フォーム(edit)
PATCH /profile → 更新(update)
DELETE /profile → 削除(destroy)
ここでは:idがありません。「どれを編集するか?」を指定する必要がないからです。常に「自分のプロフィール1つ」しか扱わない前提だからですね。
4. resourceを使うべきケースとは?
resourceは、以下のような「1人1つしか持たない情報」に使うと分かりやすく、コードもすっきりします。
- ユーザーのプロフィール
- マイページ
- 設定画面(アカウント設定など)
たとえば、プロフィールの画面であれば、URLは/profileだけで済みます。IDを指定しなくていいので、セキュリティ的にも安心です。
5. resourcesを使うべきケースとは?
resourcesは、「たくさんのデータを管理する」場面に使います。代表的な例は次の通りです。
- 記事(articles)
- コメント(comments)
- ユーザー一覧(users)
- 商品(products)
たとえば、複数のブログ記事を表示するなら、/articlesで一覧、/articles/3で3番目の記事を表示、という風にURLを分けて使います。
6. controllerの命名規則の違い
resourcesを使うと、コントローラは複数形(例:ArticlesController)になります。
resourceを使うと、コントローラは単数形で(例:ProfilesController)と複数になりますが、扱うデータは1つだけです。これはRailsの命名規則に従っています。
7. 実際のコードで比較してみよう
では、resourceとresourcesをそれぞれ使った場合のルーティングを比較してみましょう。
# routes.rb
resource :profile
GET /profile → profiles#show
GET /profile/edit → profiles#edit
PATCH /profile → profiles#update
# routes.rb
resources :articles
GET /articles → articles#index
GET /articles/:id/edit → articles#edit
PATCH /articles/:id → articles#update
8. URLの形がわかりやすいのがポイント
resourceとresourcesの最大の違いは「URLの形」に現れます。
特にRESTfulな設計では、「人が見てわかるURL」が重要です。単数なら/profile、複数なら/articles/5という風に、URLだけで意味が伝わります。
そのため、Railsのルーティング設計ではこの違いをしっかり使い分けることが大切です。
まとめ
resourceとresourcesを理解するとRailsの設計が一気に読みやすくなる
この記事では、Railsのルーティングにおけるresourceとresourcesの違いについて、具体例を交えながら詳しく学んできました。どちらもRailsで頻繁に使われるルーティング定義ですが、「単数か複数か」という小さな違いが、URL設計やコントローラ設計、さらにはアプリ全体の分かりやすさに大きな影響を与えます。
resourcesは、複数のデータを扱うことを前提としたルーティングで、記事やコメント、商品一覧など、同じ種類のデータが何件も存在するケースに適しています。URLには:idが含まれ、「どのデータを操作するのか」が明確になるため、一覧表示や詳細表示、編集、削除といった基本的なCRUD操作を自然な形で表現できます。RailsのRESTful設計を学ぶうえで、まず最初に理解しておきたいルーティングと言えるでしょう。
一方でresourceは、「そのユーザーに一つだけ存在するもの」を表現するためのルーティングです。プロフィール、設定画面、マイページなど、「常に自分自身のデータだけを扱う」ケースでは、IDをURLに含める必要がありません。その結果、/profileのようにシンプルで直感的なURLになります。これは可読性だけでなく、誤って他人のIDを指定してしまうリスクを減らすという意味でも、安全な設計につながります。
Railsでは「URLの形そのものが仕様書になる」と言われることがあります。単数ルーティングか複数ルーティングかを正しく選ぶことで、URLを見ただけで「これは一覧なのか」「これは自分専用の情報なのか」が自然と伝わります。そのため、resourceとresourcesの使い分けは、単なる書き方の違いではなく、アプリケーション設計そのものに関わる重要な判断ポイントなのです。
また、コントローラの役割を考えるうえでも、この違いは役立ちます。複数データを扱うresourcesではindexやshowといったアクションが中心になりますが、resourceでは「常に一つの対象」を扱う前提でコードを書くことができます。その結果、条件分岐が減り、コードがすっきり整理されるというメリットもあります。
まとめとしてのサンプルルーティング
ここで、今回学んだ内容を踏まえたシンプルなルーティング例をもう一度確認してみましょう。単数と複数を使い分けることで、URLと役割がはっきり分かれます。
# routes.rb
# 1人につき1つだけ持つ情報
resource :profile
# 複数作成・管理する情報
resources :articles
GET /profile → profiles#show
GET /profile/edit → profiles#edit
PATCH /profile → profiles#update
GET /articles → articles#index
GET /articles/:id → articles#show
GET /articles/:id/edit → articles#edit
このように定義することで、URLを見ただけで「これは自分専用の画面」「これは一覧や個別記事を扱う画面」という意図が明確になります。RailsらしいRESTfulな設計を実現するためにも、resourceとresourcesの違いを意識したルーティング設計が重要です。
生徒
「resourceとresourcesって、ただの書き方の違いだと思っていましたけど、URLの意味まで変わるんですね。」
先生
「そうなんです。RailsではURL設計がとても重要なので、単数か複数かを正しく選ぶことが読みやすさにつながります。」
生徒
「プロフィールみたいに一つしかない情報は、resourceを使う方が自然だと分かりました。」
先生
「その理解はとても良いですね。設計の段階で迷ったら、『これは一人につき一つか?複数か?』と考えると判断しやすくなります。」
生徒
「これからは、ルーティングを書くときにURLの意味も意識しながらRailsの設計をしてみます。」