🚂

rails routes(rake routes) で表示される不要なルーティング設定を非表示にする

2024/09/30に公開

概要

rails new で作成したプロジェクトで rails routes すると、デフォルトでストレージ用のフレームワークと、メール用のフレームワークのルーティングが設定されている。
今回この 2 つは使うつもりがないので、表示されないように修正する。

$ rails routes
                                  Prefix Verb   URI Pattern                                                                                       Controller#Action
                          api_v1_samples GET    /api/v1/samples(.:format)                                                                         api/v1/samples#index
                                         POST   /api/v1/samples(.:format)                                                                         api/v1/samples#create
                           api_v1_sample GET    /api/v1/samples/:id(.:format)                                                                     api/v1/samples#show
                                         PATCH  /api/v1/samples/:id(.:format)                                                                     api/v1/samples#update
                                         PUT    /api/v1/samples/:id(.:format)                                                                     api/v1/samples#update
                                         DELETE /api/v1/samples/:id(.:format)                                                                     api/v1/samples#destroy
                      rails_health_check GET    /up(.:format)                                                                                     rails/health#show
           rails_postmark_inbound_emails POST   /rails/action_mailbox/postmark/inbound_emails(.:format)                                           action_mailbox/ingresses/postmark/inbound_emails#create
              rails_relay_inbound_emails POST   /rails/action_mailbox/relay/inbound_emails(.:format)                                              action_mailbox/ingresses/relay/inbound_emails#create
           rails_sendgrid_inbound_emails POST   /rails/action_mailbox/sendgrid/inbound_emails(.:format)                                           action_mailbox/ingresses/sendgrid/inbound_emails#create
     rails_mandrill_inbound_health_check GET    /rails/action_mailbox/mandrill/inbound_emails(.:format)                                           action_mailbox/ingresses/mandrill/inbound_emails#health_check
           rails_mandrill_inbound_emails POST   /rails/action_mailbox/mandrill/inbound_emails(.:format)                                           action_mailbox/ingresses/mandrill/inbound_emails#create
            rails_mailgun_inbound_emails POST   /rails/action_mailbox/mailgun/inbound_emails/mime(.:format)                                       action_mailbox/ingresses/mailgun/inbound_emails#create
          rails_conductor_inbound_emails GET    /rails/conductor/action_mailbox/inbound_emails(.:format)                                          rails/conductor/action_mailbox/inbound_emails#index
                                         POST   /rails/conductor/action_mailbox/inbound_emails(.:format)                                          rails/conductor/action_mailbox/inbound_emails#create
       new_rails_conductor_inbound_email GET    /rails/conductor/action_mailbox/inbound_emails/new(.:format)                                      rails/conductor/action_mailbox/inbound_emails#new
           rails_conductor_inbound_email GET    /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                                      rails/conductor/action_mailbox/inbound_emails#show
new_rails_conductor_inbound_email_source GET    /rails/conductor/action_mailbox/inbound_emails/sources/new(.:format)                              rails/conductor/action_mailbox/inbound_emails/sources#new
   rails_conductor_inbound_email_sources POST   /rails/conductor/action_mailbox/inbound_emails/sources(.:format)                                  rails/conductor/action_mailbox/inbound_emails/sources#create
   rails_conductor_inbound_email_reroute POST   /rails/conductor/action_mailbox/:inbound_email_id/reroute(.:format)                               rails/conductor/action_mailbox/reroutes#create
rails_conductor_inbound_email_incinerate POST   /rails/conductor/action_mailbox/:inbound_email_id/incinerate(.:format)                            rails/conductor/action_mailbox/incinerates#create
                      rails_service_blob GET    /rails/active_storage/blobs/redirect/:signed_id/*filename(.:format)                               active_storage/blobs/redirect#show
                rails_service_blob_proxy GET    /rails/active_storage/blobs/proxy/:signed_id/*filename(.:format)                                  active_storage/blobs/proxy#show
                                         GET    /rails/active_storage/blobs/:signed_id/*filename(.:format)                                        active_storage/blobs/redirect#show
               rails_blob_representation GET    /rails/active_storage/representations/redirect/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations/redirect#show
         rails_blob_representation_proxy GET    /rails/active_storage/representations/proxy/:signed_blob_id/:variation_key/*filename(.:format)    active_storage/representations/proxy#show
                                         GET    /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format)          active_storage/representations/redirect#show
                      rails_disk_service GET    /rails/active_storage/disk/:encoded_key/*filename(.:format)                                       active_storage/disk#show
               update_rails_disk_service PUT    /rails/active_storage/disk/:encoded_token(.:format)                                               active_storage/disk#update
                    rails_direct_uploads POST   /rails/active_storage/direct_uploads(.:format)                                                    active_storage/direct_uploads#create

修正方法

/config/application.rbrails/allrequire されているが、ここでまとめてフレームワークを利用するよう設定されている。

require_relative "boot"

require "rails/all"

rails/all は以下のフレームワークを require しているとのこと。

active_record/railtie
active_storage/engine
action_controller/railtie
action_view/railtie
action_mailer/railtie
active_job/railtie
action_cable/engine
action_mailbox/engine
action_text/engine
rails/test_unit/railtie

https://railsguides.jp/initialization.html#railties-lib-rails-all-rb

今回active_storage/engineaction_mailer/railtie は必要ないため、この 2 つを除いたフレームワークを require する。

require_relative "boot"

# rails/all だと不要なフレームワークまで読み込まれるため必要なものだけ記載
# require "rails/all"
require 'active_record/railtie'
require 'action_controller/railtie'
require 'action_view/railtie'
require 'active_job/railtie'
require 'action_cable/engine'
require 'rails/test_unit/railtie'

また、プロジェクト内を active_storageaction_mailer で grep して削除する。

ここまでの作業を行うと、以下のようにスッキリとルーティングを確認できる。

$ rails routes
            Prefix Verb   URI Pattern                   Controller#Action
    api_v1_samples GET    /api/v1/samples(.:format)     api/v1/samples#index
                   POST   /api/v1/samples(.:format)     api/v1/samples#create
     api_v1_sample GET    /api/v1/samples/:id(.:format) api/v1/samples#show
                   PATCH  /api/v1/samples/:id(.:format) api/v1/samples#update
                   PUT    /api/v1/samples/:id(.:format) api/v1/samples#update
                   DELETE /api/v1/samples/:id(.:format) api/v1/samples#destroy
rails_health_check GET    /up(.:format)                 rails/health#show

参考

https://railsguides.jp/initialization.html#railties-lib-rails-all-rb
公式ガイドを見れば rails/all で何が require されるのかわかる

https://qiita.com/tomsyoya/items/8f3dc7720bc3a71cd5b3
これは 2021 年の記事ということもあり、コピペでは目的を達成できなかったため、今回記事を作成した

Discussion