`config.asset_host` がデフォルトで環境変数から読み込めるように
Railsの新規アプリケーションテンプレートで生成される production.rb において、config.asset_host がデフォルトで ENV["CDN_HOST"] を参照するように変更されました。これにより、CDNによる静的アセット配信を有効化するためにコードを変更する必要がなくなります。
背景
これまで production.rb の config.asset_host はコメントアウトされたサンプル値として提供されていました。CDNを設定する際は、開発者がコメントを解除してホスト名を書き換えるか、環境変数を参照するコードに書き直す必要がありました。
Railsガイドの「CDNを設定して静的アセットを配信する」では ENV["CDN_HOST"] を使った設定例が既に紹介されていましたが、生成されるテンプレートはその慣例に従っていませんでした。今回の変更はテンプレートとガイドの例を一致させるものです。
技術的な変更
railties/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt の該当行が変更され、新規アプリケーション生成時のデフォルト設定が更新されました。
変更前:
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
# config.asset_host = "http://assets.example.com"
変更後:
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
config.asset_host = ENV["CDN_HOST"]
ENV["CDN_HOST"] が設定されていない場合、config.asset_host には nil が設定されます。Railsは asset_host が nil の場合は従来どおりの動作を維持するため、この変更は既存アプリケーションおよび CDN_HOST を設定していない環境での動作に影響を与えません。
同じ変更は actionmailbox、actiontext、activestorage 各コンポーネントのテスト用ダミーアプリケーションにも適用されており、テンプレートとの一貫性が保たれています。
設計判断
コメントアウトを解除してコードを追記する方式ではなく、最初から有効な設定として ENV["CDN_HOST"] を読み込む形式が採用されました。
環境変数が未設定の場合に nil となりデフォルト動作を維持するRubyの性質を活用することで、後方互換性を損なわずにゼロコンフィグでのCDN設定を実現しています。また、環境変数名として CDN_HOST を選択した理由はPR内で明示されており、Railsガイドのサンプルコードとの一貫性を保つためとされています。
まとめ
本PRは、Railsガイドで推奨されてきた ENV["CDN_HOST"] パターンをアプリケーションテンプレートに反映させた変更です。コードの意味を変えることなくコメントアウトを廃止することで、CDN設定を「コードの変更」ではなく「環境変数の設定」だけで完結させるというRailsの設定哲学をテンプレートレベルで体現しています。