Railsの使わない機能をオフにする(翻訳)
Railsフレームワークは、互いに協調動作するさまざまなサブシステムによって構成されています。これらのサブシステムは、多くの場合ActionまたはActiveという名前で始まります(Active Record、Active Support、Action Packなど)。
個別のコンポーネントgemは、以下のrails/rails
リポジトリのディレクトリにあります。
Railsが最初にリリースされて以来、新しい便利なライブラリが継続的に追加されてきました。たとえば、Action Cableを介したWebソケットのサポートの追加はRails 5の目玉機能でした。Railsに大規模な新しいサブフレームワークが次々に追加されたにもかかわらず、Rails 3でMerbがRailsにマージされて以来(当時はRubyのビッグニュースでした)、モジュラーな構造を保っています。
以下のようにするのではなく
Railsの機能をそのまま使う。
- config/application.rb
require_relative "boot"
require "rails/rails"
# ...
以下のようにする
自分が欲しいRailsの機能だけを使う。
- config/application.rb
require_relative "boot"
require "rails"
# Pick the frameworks you want:
require "active_model/railtie"
require "active_job/railtie"
require "active_record/railtie"
# require "active_storage/engine"
require "action_controller/railtie"
require "action_mailer/railtie"
# require "action_mailbox/engine"
# require "action_text/engine"
require "action_view/railtie"
# require "action_cable/engine"
# require "sprockets/railtie"
require "rails/test_unit/railtie"
# ...
私が立ち上げたプロジェクトでは、このアプローチをよく使います。
Railsアプリでメール受信機能(Action Mailbox)やリアルタイムWebSocket(Action Cable)を使う必要がないことは珍しくありません。
ファイルアップロード機能(Active Storage)やリッチテキスト機能(Action Text)には他のソリューションもあります。
さらに、最近はWebpackですべてをまかないたいこともあります。その場合はsprocketsをオフにする方が理にかなっているでしょう。
そうする理由
Railsスタックをスリムにする方が文字どおり少ないコードで済み、読み込みや実行が速くなります。どの程度高速化するかは、Railsで使う機能によって変わります。
使わない機能をオフにする主な理由は、「余分な設定を削ぎ落とす」「プロジェクトを整理して全般的な見通しをよくする」ためです。
使っていないサードパーティgemは削除する方がよいのと同様に、使っていないRailsの機能も削除するとすっきりすることがよくあります。
さらに、特定のRailsサブシステムを他のものに置き換えたい場合(Active Recordの代わりにrom-rbを使うなど)両方を使うのではなく、Active Recordを無効にする方がよい可能性もあります。
そうしない理由があるとすれば
Railsはひとつに統合されたフレームワークです。Railsアプリがproduction環境で読み込まれた後の速度の向上は、ほとんど無視できる範囲です。
フルスタックのRailsコンポーネントは現場で実績を積んでいてメンテナンスも行き届いているので、たとえ個人的な好みに合わないとしても、ほとんどの場合まともなソリューションです。
アプリケーションから削除したサブフレームワークを後で再度追加すると、設定を適切に行うのがより面倒になる可能性もあります。
概要
原著者の許諾を得て翻訳・公開いたします。