rails で routes.rb を分割管理する方法
プロジェクト自体が大きくなってきた際に routes.rb にまとめて記載すると見づらくて追加しようとした際にわかりずらい課題が発生した
そのため、rails で routes.rb を分割管理する方法を備忘録として残しておく
参考
環境 ruby: 3.0.5 rails: 6.1.7 方法 concern を使用して共通の routes を定義する draw を使用して別ファイルに分割する 前提 config |-routes | |-concerns.rb # プロジェクト共通の routes | |-foo_service_provider.rb # Foo サービス用の routes | |-hoge_service_provider.rb # Hoge サービス用の routes | |-service_provider_common.rb # サービス共通の routes |-routes.rb 実際の例 concern :loggable do get "login", to: "sessions#new" post "login", to: "sessions#create" delete "logout", to: "sessions#destroy" end concern :data do namespace :data do get "download" end end namespace :service_provider, path: "services" do concerns :loggable scope :home, as: :home do get "/", to: "home#index" end end draw(:service_provider_common) namespace :service_provider, path: "services" do concerns :data end draw(:service_provider_common) namespace :service_provider, path: "services" do resources :users, only: [:index, :show] end # == Route Map # # Prefix Verb URI Pattern Controller#Action # admin_login GET /admin/login(.:format) admin/sessions#new # POST /admin/login(.:format) admin/sessions#create # admin_logout DELETE /admin/logout(.:format) admin/sessions#destroy # foo_service_provider_login GET /foo/services/login(.:format) foo/service_provider/sessions#new # POST /foo/services/login(.:format) foo/service_provider/sessions#create # foo_service_provider_logout DELETE /foo/services/logout(.:format) foo/service_provider/sessions#destroy # foo_service_provider_home GET /foo/services/home(.:format) foo/service_provider/home#index # foo_service_provider_users GET /foo/services/users(.:format) foo/service_provider/users#index # foo_service_provider_user GET /foo/services/users/:id(.:format) foo/service_provider/users#show # hoge_service_provider_data_download GET /hoge/services/data/download(.:format) hoge/service_provider/data#download # hoge_service_provider_users GET /hoge/services/users(.:format) hoge/service_provider/users#index # hoge_service_provider_user GET /hoge/services/users/:id(.:format) hoge/service_provider/users#show Rails.application.routes.draw do draw(:concerns) namespace :admin do concerns :loggable end namespace :foo do draw(:foo_service_provider) end namespace :hoge do draw(:hoge_service_provider) end end