今回はRailsでconfig/routes.rbの書き方を忘れる人に向けて書きました。
routes.rbっの書き方を忘れてしまう人がすぐに見て思い出せるようにまとめてみました。(自分用の備忘録でもあります)
▼この記事では以下の点を理解できます。
- config/routes.rbの書き方
- config/routes.rbで使われる設定の解説
- ルーティングの確認方法
Railsの環境設定などは省略します。単純にconfig/routes.rbの記述についてのみ紹介です。
Rails初心者の方、Railsに興味がある方は、ご覧になってみてください。
Ruby on Railsが学べる高評価のプログラミングスクール
- Rubyを学ぶならRUNTEQ
- Web系開発企業に内定98%。必要な技術力がきちんと身につくカリキュラムで自走力を身に着け、卒業後には開発現場レベルのスキルが身につくと評判です。WEB系企業が運営する信頼できるプログラミングスクールです。
- Webエンジニア輩出実績トップクラスの【ポテパンキャンプ】
- Rails専門に教えているプログラミングスクール。卒業生の転職先からの評判が良いと話題に。厳しめでレベルの高い学習をするため本気で転職したい人以外は挫折します。
- tech boost無料カウンセリング
- オリジナルアプリの作成ができるため、応募先から高い評価をもらえる本格的なプログラミングスクール。転職サービスも展開している。
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初心者の方、とりあえずよく使う点をまとめてみました。(備忘録)