[Rails] ActionController::Liveの遅延読み込みとload hookの導入

rails/rails

背景

Railsでは、ActionController::Liveを使用していない場合でも、ActionControllerがロードされると同時にActionController::Liveも読み込まれてしまう問題がありました。この変更は#56393のフォローアップとして、必要になるまでActionController::Liveの読み込みを遅延させることで、不要なモジュールの早期読み込みを回避します。

技術的な変更内容

load hookの追加

ActionController::Liveモジュールに新しいload hook action_controller_liveが導入されました。

actionpack/lib/action_controller/metal/live.rb:

ActiveSupport.run_load_hooks(:action_controller_live, self)

これにより、ActionController::Liveが実際に使用されるタイミングでload hookが実行されるようになります。

設定の遅延適用

initializer内での設定適用が、load hookでラップされるように変更されました。

変更前:

initializer "action_controller.live_streaming_excluded_keys" do |app|
  ActionController::Live.live_streaming_excluded_keys = app.config.action_controller.live_streaming_excluded_keys
end

変更後:

initializer "action_controller.live_streaming_excluded_keys" do |app|
  ActiveSupport.on_load(:action_controller_live) do
    ActionController::Live.live_streaming_excluded_keys = app.config.action_controller.live_streaming_excluded_keys
  end
end

この変更により、live_streaming_excluded_keysの設定はActionController::Liveが実際にロードされるまで適用されません。

利用方法

新しく追加されたaction_controller_live load hookは、以下のように使用できます。

ActiveSupport.on_load(:action_controller_live) do
  # ActionController::Liveがロードされた時点で実行される処理
  ActionController::Live.some_configuration = custom_value
end

パフォーマンスへの影響

この変更により、ActionController::Liveを使用しないアプリケーションでは、以下の利点があります。

  • 起動時のメモリ使用量の削減
  • 初期化時間の短縮
  • 不要なモジュールの読み込みを回避

SSE(Server-Sent Events)やストリーミングレスポンスを使用しないアプリケーションでは、ActionController::Liveは完全に読み込まれなくなります。

まとめ

この変更は、Railsの起動時のパフォーマンス最適化の一環として、必要なモジュールのみを遅延読み込みする取り組みの一部です。load hookを活用することで、機能の利用可否に応じた柔軟なモジュール読み込みが実現されています。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

ガイドライン準拠 ⚠ WARNING

記事構成とDiffDaily Styleへの準拠状況

記事構成やコードブロックの書式は適切ですが、タイトル形式と一部のGitHubリンク記法がガイドラインと完全に一致していません。ただし、可読性や内容の理解には影響しない軽微な問題です。

  • 記事構成(Title、Context、Technical Detail)
  • DiffDaily Styleガイド準拠
  • カスタムMarkdown活用
  • 対象読者への適合性
技術的整合性 ✓ PASS

技術的な正確性と表現の適切性

技術的な内容は正確です。Diffから引用されたコードは適切で、`load hook`を用いた遅延読み込みの仕組みについての説明も論理的かつ正確です。技術用語の誤用もありません。

  • 技術用語の正確性
  • コード例の正確性
  • 説明の技術的正確性
PR内容との整合性 ✓ PASS

元のPR情報との一致度

PRの内容と記事の主張は完全に一致しています。PRの目的である「`ActionController::Live`の読み込み遅延」が、背景・技術詳細・影響の各セクションで一貫して説明されており、ハルシネーションは検出されませんでした。

  • タイトル・説明の一致
  • Diff内容の正確な反映
  • 推測の排除