Rails6.1 で config/routes.rb を分割する
はじめに
Railsアプリケーションではconfig/routes.rb
にルーティングを記述します。
ただ規模が大きくなればなるほど、1つのファイルで管理するのは難しくなります。
Rails6.1 のアップデートで、config/routes.rb
から外部のルーティングを読み込むことが可能になりました。
厳密には復活のようですね。
Bring back the feature that allows loading external route files from the router.
This feature existed back in 2012 but got reverted with the incentive that
https://github.com/rails/routing_concerns was a better approach. Turned out
that this wasn't fully the case and loading external route files from the router
can be helpful for applications with a really large set of routes.
Without this feature, application needs to implement routes reloading
themselves and it's not straightforward.
引用:Rails6.1 CHANGELOG
参照PR:https://github.com/rails/rails/pull/37892
やってみる
実装は超かんたんです。
config/routes.rb
でconfig/routes/
以下に配置したルーティングファイルをdraw(:hoge)
で読み込みます。
Rails.application.routes.draw do
root to: 'home#index'
resources :users
draw(:admin)
draw(:api)
end
namespace 'admin' do
root to: "home#index"
end
namespace 'api' do
resources :users
end
こうすると...
$ bin/rails routes
Prefix Verb URI Pattern Controller#Action
root GET / home#index
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
admin_root GET /admin(.:format) admin/home#index
api_users GET /api/users(.:format) api/users#index
POST /api/users(.:format) api/users#create
new_api_user GET /api/users/new(.:format) api/users#new
edit_api_user GET /api/users/:id/edit(.:format) api/users#edit
api_user GET /api/users/:id(.:format) api/users#show
PATCH /api/users/:id(.:format) api/users#update
PUT /api/users/:id(.:format) api/users#update
DELETE /api/users/:id(.:format) api/users#destroy
簡単にルーティングファイルの分割ができました。
- 管理画面用のルーティング
- API用のルーティング(バージョンごとも)
- 機能ごと
などなど様々な観点で分割できるので、見通しの良いルーティングファイルにしていきましょう。
Discussion