Ruby on RailsのAPIのconfig/routes.rb書き方【ルーティング備忘録】

プログラミング

RailsでAPIを作成するときにconfig/routes.rbの書き方いつも忘れる。まとめられいるサイトないかな?

今回はRailsでconfig/routes.rbの書き方を忘れる人に向けて書きました。

routes.rbっの書き方を忘れてしまう人がすぐに見て思い出せるようにまとめてみました。(自分用の備忘録でもあります)

▼この記事では以下の点を理解できます。

  1. config/routes.rbの書き方
  2. config/routes.rbで使われる設定の解説
  3. ルーティングの確認方法

Railsの環境設定などは省略します。単純にconfig/routes.rbの記述についてのみ紹介です。

Rails初心者の方、Railsに興味がある方は、ご覧になってみてください。

Ruby on Railsが学べる高評価のプログラミングスクール

Webエンジニア輩出実績トップクラスの【ポテパンキャンプ】
Rails専門に教えているプログラミングスクール。卒業生の転職先からの評判が良いと話題に。厳しめでレベルの高い学習をするため本気で転職したい人以外は挫折します。
tech boost無料カウンセリング
オリジナルアプリの作成ができるため、応募先から高い評価をもらえる本格的なプログラミングスクール。転職サービスも展開している。



目次

  1. Railsのrotesの書き方
    • config/routes.rbの基本的な書き方
    • config/routes.rbのサンプルコード
  2. ルーティングを定義するroutes.rbの中身を詳しく紹介
    • resources(複数形)
    • resource(単数形)
    • only: / except:
    • member / collection
    • namespace
    • scope
    • module
  3. config/routes.rbのルーティングを調べる
    • ターミナルでrails routes
    • rails4以前はrake routes
    • ブラウザで確認する
  4. まとめ

Railsのrotesの書き方

Railsのルーティングの設定を書くファイルがconfig/routes.rbです。

config/routes.rbの基本的な書き方

ルーティングの基本的な書き方です。

Rails.application.routes.draw do
  # ルーティングの記述をしていく部分
end

config/routes.rbのサンプルコード

config/routes.rbの中身のサンプルです。

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resources :groups
    end 
  end 
end

上記のルーティングを作成し、以下のcurlコマンドで実行すると、indexを呼ぶことができます。

curl -X GET http://localhost:3001/api/v1/groups

ルーティングを定義するroutes.rbの中身を詳しく紹介

config/routes.rbの中を見ると、よくわからない記述があります。例えば、上記のサンプルコードの中にあるresourcesなど。

どんな意味があるのか書いておきます。

resources(複数形)

以下のようにresoucesでルーティングを定義します。

resources :groups

Railsでは、このように書くだけで7つのアクションのルーティングを定義できます。

  • index
  • show
  • new
  • create
  • edit
  • update
  • destroy

ネストしたresources

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resource :group do
        resources :users
      end
    end 
  end 
end

resourcesをネストさせると、indexのルーティングが下記のような感じになります。

/api/v1/group/:group_id/user(.:format)

resource(単数形)

resources(複数形)とresource(単数形)の違いは、大きく2つの点です。

  • 単数形の場合はindexのルーティングは生成されない
  • pathに[:id]が含まれない
resource :group
  • show
  • new
  • create
  • edit
  • update
  • destroy

only: / except:

resourcesを使うことでデフォルトで7つのアクションができてしまうという点を上で紹介しました。7つも使わないという場合にアクションを指定するのがonly, except

必要なメソッドだけが生成されるようにするのがonly:

▼以下のような記述でindex, showルーティングのみを指定することができます。

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resources :groups, only: [:index, :show]
    end 
  end 
end

不要なメソッドを指定するのがexcept:

▼以下のような記述でonly:と同様index, show以外の指定したルーティングが生成されません。only:に比べてわかりにくいため、ほぼ使わないですが。

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resources :groups, except: [:create, :new, :edit, :update, :delete]
    end 
  end 
end

member / collection

自動で生成されるルーティング以外に自分でメソッドを指定して作りたい場合に使われるのがmember / collectionです。

member

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resource :group do
        member do
         get 'detail'
        end 
      end
    end 
  end 
end

これでdetailメソッドにアクセスできるようになります。

/api/v1/group/:id/detail(.:format)  

collection

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resource :group do
        collection do
         get 'detail'
        end 
      end
    end 
  end 
end

collectionを使うと、[:id]がなくなります。

/api/v1/group/detail(.:format)

namespace

ファイルの構成とパスを同じにしたい場合に使う。

 controllers
   api
     v1
      - groups_controller.rb
Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resources :group
    end 
  end 
end

scope

以下のようなPathでファイルの構成はcontroller直下にしたいという場合にscopeを使うと👍。controller直下にgroups_controllerがあり、Pathにあるapiがない構成にしたいという時に使用。

/api/groups(.:format)
 controllers
  - groups_controller.rb
Rails.application.routes.draw do
  scope :api do
    resources :groups
  end
end

module

Pathに対してファイルの構成を変えたい場合に使用する👍。

/groups(.:format)
 controllers
   api
    - groups_controller.rb
Rails.application.routes.draw do
  scope module: :api do
    resources :groups
  end
end

config/routes.rbのルーティングを調べる

config/routes.rbに記述した内容がどのようなルーティングになっているか調べるためのコマンドが準備されています。

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resources :groups, only: [:index, :show]
    end 
  end 
end

ターミナルでrails routes

ターミナルでrails routesを叩くと、現在のルーティングが表示されます。

rails routes

dockerをお使いの場合は、コマンドをdockerに渡します。(api)はサービス名

docker-compose run api bundle exec rails routes
Prefix Verb URI Pattern Controller#Action
groups GET /groups(.:format) api/groups#index
group GET /groups/:id(.:format) api/groups#show

rails4以前はrake routes

rails routesコマンドはrails5以降で使えるようになったコマンドです。rails4以前はrake routesで実行します。

ブラウザで確認する

開発環境でブラウザで以下のURLを入力しても確認できます。

http://localhost:3000/rails/info/routes

まとめ

今回は、config/routes.rb基本の使い方でした。rails初心者の方、とりあえずよく使う点をまとめてみました。(備忘録)

当サイトで申込の多いプログラミングスクール

TechAcademyの無料体験
マンツーマンでオリジナルアプリの作成ができるテックアカデミーは人気が高いプログラミングスクール。
Webエンジニア輩出実績トップクラスの【ポテパンキャンプ】
転職に強く本気でエンジニア転職を目指す人におすすめ。難易度が高いため身につくスキルも高く企業からの評価も高いのが特徴。
CodeCamp無料体験
講師を選択できるのが特徴のコードキャンプ。チャットでの質問ができないと言われていますが、オプションでチャットサポートを選択できるのがあまり知られていない。講師の評判が高いため質問しながらどんどん進みたい人向け。