はじめに
本稿は、railsのroutes.rbに記述されたルーティングが数百行にも渡り、コードの可読性が欠けてしまっている場合において、自身がどのように見やすさを確保したのかを記載したものになります。
ルーティングを分割する
0. 編集前のconfig/routes.rb
※記載されている内容は例として設定しているだけなので、それぞれのルーティング名に関連性はありません。
config/routes.rb
Rails.application.routes.draw do
namespace :api, format: 'json' do
namespace :v1 do
namespace :libraies do
resources :libraries
end
namespace :books do
resources :books
end
end
namespace :v2 do
namespace :libraries do
resources :libraries do
collection do
get :borrowed_books
end
end
resources :librarians do
end
end
end
end
end
こちらのroutes.rbをファイル分割していきます。
1. config配下に"routes"ディレクトリを作成する
2. config/routes.rbを編集
config/routes.rb
Rails.application.routes.draw do
def draw(routes_name)
instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb")))
end
Rails.application.routes.draw do
# ここに"routes_name"を定義します。
end
end
- "routes_name"には
1. config配下に"routes"ディレクトリを作成する
で作成したroutesディレクトリ内に作成したファイル名を指定します。
※まだconfig/routes配下にファイルを作成していないので、次で作成していきます。
分割先のファイルを用意
今回サンプルで作成したroutes.rbでは
- api v1
- api v2
この粒度で分割していきたいと思います。
そこでapi_v1.rb
とapi_v2.rb
という名前のファイルを作成します。
touch config/routes/api_v1.rb
touch config/routes/api_v2.rb
3. routes.rbに作成したファイル名を指定する
config/routes.rb
Rails.application.routes.draw do
def draw(routes_name)
instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb")))
end
Rails.application.routes.draw do
draw :api_v1
draw :api_v2
end
end
4. api_v1.rbを編集
config/routes/api_v1.rb
namespace :api, format: 'json' do
namespace :v1 do
namespace :libraies do
resources :libraries
end
namespace :books do
resources :books
end
end
end
5. api_v2を編集
config/routes/api_v2.rb
namespace :api, format: 'json' do
namespace :v2 do
namespace :libraries do
resources :libraries do
collection do
get :borrowed_books
end
end
resources :librarians do
end
end
end
end
終わりに
これでかなり見やすくなりました!
分割するタイミングはプロダクトによって様々だと思いますが、コードの可読性を上げるためにも管理ができる範囲でコードをどんどん外に出していくことは重要だと思います。