Rails.app.revisionが環境変数REVISIONに対応

rails/rails

この変更により、Rails.app.revisionENV["REVISION"]を優先的に参照するようになりました。これにより、デプロイメントプロバイダーが設定する環境変数を直接利用でき、REVISIONファイルの作成やGitリポジトリの同梱が不要になります。

背景

多くのデプロイメントプロバイダーは、アプリケーションのリビジョン情報を環境変数として提供しています。しかし、これまでのRails.app.revisionは環境変数を参照せず、REVISIONファイルまたはGitリポジトリからのみリビジョン情報を取得していました。そのため、環境変数で提供されるリビジョン情報を利用するには、デプロイ時にREVISIONファイルを生成する追加のステップが必要でした。

#56742は、環境変数を優先的に参照することで、この追加ステップを不要にしています。デプロイメントプロバイダーが設定するENV["REVISION"]を直接利用できるようになり、デプロイメントフローがシンプルになります。

技術的な変更

railties/lib/rails/application.rbrevisionメソッドが拡張され、REVISIONファイルを読む前にENV["REVISION"]をチェックするようになりました。

変更前:

def revision
  unless @revision_initialized
    @revision = begin
      root.join("REVISION").read.strip.presence
    rescue SystemCallError
      # git rev-parseへのフォールバック
    end
    @revision_initialized = true
  end
  @revision
end

変更後:

def revision
  unless @revision_initialized
    @revision = begin
      ENV["REVISION"].presence ||
        root.join("REVISION").read.strip.presence
    rescue SystemCallError
      # git rev-parseへのフォールバック
    end
    @revision_initialized = true
  end
  @revision
end

優先順位は以下の通りです:

  1. config.revision(明示的な設定)
  2. ENV["REVISION"](環境変数)
  3. REVISIONファイル
  4. git rev-parse HEAD(Gitリポジトリ)

config.revisionで明示的に設定されている場合、それが最優先されます。設定されていない場合のみ、ENV["REVISION"]、REVISIONファイル、Gitリポジトリの順にフォールバックします。

設計判断

既存の優先順位を維持しつつ環境変数を挿入する方式が採用されました。

config.revisionによる明示的な設定は引き続き最優先されます。この設計により、開発環境やテスト環境で特定のリビジョン値を設定する既存の使い方が保護されます。ENV["REVISION"]は、config.revisionが未設定の場合の最初の候補として追加され、REVISIONファイルやGitリポジトリよりも優先されます。

テストでは3つのシナリオがカバーされています:

  • ENV["REVISION"]のみが設定されている場合
  • ENV["REVISION"]とREVISIONファイルの両方が存在する場合(環境変数が優先)
  • config.revisionENV["REVISION"]の両方が設定されている場合(configが優先)

この優先順位の設計により、既存のデプロイメントフローを壊すことなく、環境変数による設定という新しい選択肢を追加しています。

本PRは、デプロイメントプロバイダーとの統合を簡素化する変更です。環境変数の優先参照により、REVISIONファイルの生成やGitリポジトリの同梱が不要になり、多くのデプロイメント環境で追加の設定なしにリビジョン追跡が機能するようになります。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

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

品質レビュー結果

Review Status:
リトライ後承認
Review Count:
2回 (改善を経て承認)
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

「総論→各論→結論」の構成が明確です。リード文で要旨を述べ、背景、技術詳細、設計判断、まとめが適切に配置されています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```ruby:path)とGitHubのPRリンク記法([#123](URL))が正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

内容はRailsの内部挙動に関するもので、専門知識を持つエンジニアという対象読者に適しています。冗長な説明もありません。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションが総論から各論へ展開され、各段落はトピックセンテンスで始まるなど、パラグラフ・ライティングの原則が守られており、可読性が高いです。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内のコードブロック(変更前・変更後)は、提供されたDiffの内容とファイル名を正確に反映しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「Rails.app.revision」「ENV["REVISION"]」「config.revision」などの技術用語が、PR情報と一致しており、正確に使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

変更による優先順位の変動(ENV["REVISION"]がREVISIONファイルより優先される点など)が、Diff内のテストコードに基づいて正確に説明されています。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内のすべての主張(背景、技術詳細、設計判断)は、PRのDescriptionやDiff内のコード・テストで裏付けられており、ハルシネーションは検出されませんでした。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#56742)や環境変数名(REVISION)などの固有名詞が正確に記載されています。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事のタイトル「Rails.app.revisionが環境変数REVISIONに対応」は、PRの主題「Read from ENV['REVISION'] if present」を的確に反映しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

記事内容はPR情報に限定されており、バージョンサポート状況やリリース日程といったPR外の知識の追記はありません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

「これまでの...」や「...ようになりました」といった時間表現が、変更の前後関係を正しく反映しており、適切です。