0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

routes.rbのルーティングを他ファイルに分割した話

Posted at

はじめに

本稿は、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"ディレクトリを作成する

スクリーンショット 2021-03-07 21.43.56.png

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.rbapi_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

終わりに

これでかなり見やすくなりました!

分割するタイミングはプロダクトによって様々だと思いますが、コードの可読性を上げるためにも管理ができる範囲でコードをどんどん外に出していくことは重要だと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?