タイトルの通り。 ちょっと調べたらDHHのgistが見つかって、割と良さそうだったのでそれをそのまま使用する事にしました。
# config/routes.rb class ActionDispatch::Routing::Mapper def draw(routes_name) instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb"))) end end Rails.application.routes.draw do draw :api end
# config/routes/api.rb namespace :api do namespace :v1 do resources :users, only: %i(index show) end end
こんな感じ。
一点問題があって、このままだとroutes
配下のファイルを更新した際に自動でルーティングの情報が更新されないので、そこは別途リロード用のmiddlewareを作成して対応。
# config/initializers/routes_reloader.rb class RoutesReloader def initialize(app) @app = app routes_path = Dir.glob("config/routes/*.rb") @routes_reloader = ActiveSupport::FileUpdateChecker.new(routes_path) do Rails.application.reload_routes! end end def call(env) @routes_reloader.execute_if_updated @app.call(env) end end Rails.application.config.middleware.use RoutesReloader if Rails.env.development?
Railsにはファイルの更新を検知する為のFileUpdateCheckerというクラスがあるので、それを使用して対応しました。
これで期待通りに動作する事が確認出来たので当面はこれでやってみよう。