カテゴリ: Rails 更新日: 2025/12/23

Railsルーティング:memberとcollectionでカスタムアクションを追加する方法【初心者向けガイド】

member / collection:カスタムアクションの正しい追加方法
member / collection:カスタムアクションの正しい追加方法

先生と生徒の会話形式で理解しよう

生徒

「Railsのルーティングで、普通の7アクション以外に何か追加する方法ってあるんですか?」

先生

「ありますよ。それにはmembercollectionという書き方を使います。」

生徒

「その2つはどう違うんですか?見た目が似てて混乱します…」

先生

「それでは、それぞれの意味と使い方をわかりやすく解説していきましょう!」

1. Railsのカスタムアクションとは?

1. Railsのカスタムアクションとは?
1. Railsのカスタムアクションとは?

Railsのルーティングでは、resourcesを使うことで、CRUDと呼ばれる基本的な7つのアクション (index、show、new、create、edit、update、destroy)が自動的に用意されます。 初心者のうちは、この7つを使うだけでも十分にアプリを作れます。

しかし、実際にアプリを作り始めると、「いいねを押す」「フォローする」「一覧を条件で絞り込む」など、 基本の7アクションには当てはまらない処理が必要になることが多くあります。 こうした標準以外の処理を追加したいときに登場するのが、Railsのカスタムアクションです。

カスタムアクションは、既存のresourcesの中に追加して定義します。 その際に使われるのがmembercollectionという書き方です。 どちらも「独自のURLとアクションを追加するための仕組み」ですが、 操作の対象が1件なのか、全体なのかで使い分けます。


# カスタムアクションを追加する基本イメージ
resources :articles do
  # ここにmemberやcollectionを書く
end

このように、Railsではルーティングの段階で「どんなURLで、どの処理を呼び出すか」を明確に決めます。 カスタムアクションを正しく理解しておくと、URL設計が分かりやすくなり、 コントローラやビューの役割も整理しやすくなります。 次のセクションでは、memberとcollectionの違いを具体的に見ていきましょう。

2. memberとcollectionの違いとは?

2. memberとcollectionの違いとは?
2. memberとcollectionの違いとは?

membercollectionは、どちらもRailsのルーティングでカスタムアクションを追加するための書き方ですが、 最大の違いは「URLにIDが含まれるかどうか」です。 ここを意識すると、迷いにくくなります。

  • member:特定の1件に対する操作(URLに:idが含まれる)
  • collection:一覧や全体に対する操作(URLに:idは含まれない)

たとえば「この記事をいいねする」「この記事を非公開にする」といった処理は、 どのデータを操作するかを特定する必要があるため、memberを使います。 URLの中にIDが入ることで、「対象が1つに決まる」仕組みになっています。

一方で、「人気記事一覧を見る」「新着記事をまとめて表示する」などは、 特定の1件ではなく全体に関係する処理です。 このような場合はcollectionを使い、IDを指定しないURLを作ります。


# memberとcollectionの使い分けイメージ
resources :articles do
  member do
    post :like
  end

  collection do
    get :popular
  end
end

「1つの記事を見る・操作するならmember」「一覧やまとめを見るならcollection」 という感覚で覚えておくと、Railsのルーティング設計がスムーズになります。 まずはURLにIDが必要かどうかを考えるのがおすすめです。

3. memberを使ったカスタムアクションの例

3. memberを使ったカスタムアクションの例
3. memberを使ったカスタムアクションの例

ここではmemberを使って、記事に「いいね」を付けるカスタムアクションを追加してみます。 memberの特徴は、特定の1件を指定して処理することです。 そのためURLには必ず:idが入り、「どの記事に対して実行するのか」をはっきりさせます。

イメージとしては、記事一覧の中から1つ選んでボタンを押す感じです。 たとえば「この記事だけにいいねしたい」というとき、対象の記事を決めないと処理できませんよね。 その「対象を決めるための目印」が:idだと思うと分かりやすいです。


resources :articles do
  member do
    post :like
  end
end

このように書くと、次のようなルーティングが追加されます。 POSTになっているのは、「いいね」で状態が変わる(データを書き換える)ためです。


POST /articles/:id/like → articles#like

:idが含まれていることがポイントです。「どの記事をいいねするのか?」を明確に指定する必要があるからです。 たとえば記事IDが5なら、URLは/articles/5/likeのようになります。 こうしておくと、ルーティングを見ただけで「1件に対する操作なんだな」と判断できるので、後から見返しても迷いにくくなります。


# 参考:URLのイメージ(idが5の記事にいいねする)
# POST /articles/5/like

4. collectionを使ったカスタムアクションの例

4. collectionを使ったカスタムアクションの例
4. collectionを使ったカスタムアクションの例

次はcollectionの例です。collectionは、特定の1件ではなく一覧(全体)に対して行う処理を追加したいときに使います。 そのためURLに:idは付かず、「どれか1つの記事」ではなく「記事全体」に関係するアクションだと分かる形になります。

たとえば「人気記事だけを表示する」「最近の投稿をまとめて見る」「検索結果の一覧を出す」といった機能は、 どれも最初から1件に絞れないのでcollection向きです。 初心者の方は、一覧ページに追加するボタンやリンクはcollectionが多いと覚えると判断しやすくなります。


resources :articles do
  collection do
    get :popular
  end
end

このようにすると、次のルートが追加されます。GETになっているのは、人気記事を「表示するだけ」で、基本的にデータを変更しないからです。


GET /articles/popular → articles#popular

このURLには:idがありません。なぜなら、個別の記事ではなく、全体に関する処理だからです。 たとえば、メニューに「人気記事」というリンクを置く場合も、/articles/popularのようにシンプルなURLにできます。 「IDがない=一覧や条件付き一覧の処理」と考えると、ルーティングを見た瞬間に役割がつかめます。


# 参考:URLのイメージ(人気記事一覧を表示する)
# GET /articles/popular

5. 複数のカスタムアクションを追加する

5. 複数のカスタムアクションを追加する
5. 複数のカスタムアクションを追加する

membercollectionの中に、複数のアクションを追加することもできます。


resources :articles do
  member do
    post :like
    post :unlike
  end

  collection do
    get :popular
    get :recent
  end
end

このように、読みやすく整理して書くことで、ルートが見やすくなります。

6. どのHTTPメソッドを使うべき?

6. どのHTTPメソッドを使うべき?
6. どのHTTPメソッドを使うべき?

Railsではアクションの内容によって、HTTPメソッドを選ぶ必要があります。

  • GET:データを取得する(例:一覧表示)
  • POST:データを作成・実行する(例:いいね、検索)

たとえば、「いいね」は何かの状態を変えるのでPOSTにするのが適切です。

7. カスタムアクション設計のポイント

7. カスタムアクション設計のポイント
7. カスタムアクション設計のポイント

カスタムアクションを設計する際のポイントは次の通りです。

  • 個別データに対する操作はmember
  • 全体に関わる操作はcollection
  • アクション名は機能を簡潔に表す名前にする
  • できるだけRESTの原則に沿うように考える

こうすることで、コードの見通しが良くなり、チームでの開発もスムーズになります。

関連記事:
カテゴリの一覧へ
新着記事
New1
データベース
SQLの処理が遅くなる原因とは?初心者向けにデータベースパフォーマンス最適化を完全解説
New2
Ruby
RubyのネストHash操作を徹底解説!digとtransformメソッドで複雑なデータも楽々
New3
Rails
Railsインデックス設計の極意!爆速サイトを作るためのスキーマ設計ガイド
New4
データベース
SQLのCOMMITとROLLBACKとは?トランザクション操作を初心者向けに完全解説
人気記事
No.1
Java&Spring記事人気No1
Ruby
PATHと環境変数の正しい設定!Windows・Mac・Linux別チェックリスト付き
No.2
Java&Spring記事人気No2
Rails
Railsで日本語と時刻の設定をしよう!初心者でも安心のlocale/zone初期設定チートシート
No.3
Java&Spring記事人気No3
Ruby
Rubyのハッシュを徹底比較!シンボルキーと文字列キーの違いと使い分け
No.4
Java&Spring記事人気No4
Rails
Railsマイグレーションの型選びを完全ガイド!初心者が迷わないカラム設計
No.5
Java&Spring記事人気No5
Ruby
WindowsでRubyをインストールする方法!RubyInstallerとMSYS2を使った完全ガイド
No.6
Java&Spring記事人気No6
Rails
RailsモデルとActive Record基礎|ID戦略を完全理解!AUTO INCREMENT・UUID・ULIDの比較と導入手順
No.7
Java&Spring記事人気No7
データベース
ACID特性とは?データベーストランザクションの信頼性を初心者向けに徹底解説
No.8
Java&Spring記事人気No8
Rails
RailsモデルとActive Record基礎|クエリログの読み方を理解してEXPLAIN・joins・includesの違いを学ぼう