`raise_on_missing_required_finder_order_columns` のデフォルト値を修正

rails/rails

コピー&ペーストによる記述ミスで、ActiveRecord.raise_on_missing_required_finder_order_columns の初期値が false ではなく nil になっていた不具合を修正します。動作への影響はないものの、ドキュメントとの乖離を解消する正確性の修正です。

背景

#54608raise_on_missing_required_finder_order_columns 設定が導入された際、コピー&ペーストによる修正漏れが発生していました。load_defaults のバージョンが 8.1 未満の場合にこの設定のデフォルト値が適用されるコードで、別の設定 run_after_transaction_callbacks_in_order_defined の初期化行がそのまま重複して残されていました。

結果として、Railsガイドでは false と明記されているにもかかわらず、実際のデフォルト値は nil となっていました。nilfalse はどちらもfalsy値であるため実行時の挙動に変化はありませんが、コードベースとドキュメントの不一致として残っていた問題です。

技術的な変更

activerecord/lib/active_record.rb の1行を修正することで、重複代入を正しい代入に置き換えます。

変更前:

singleton_class.attr_accessor :raise_on_missing_required_finder_order_columns
self.run_after_transaction_callbacks_in_order_defined = false

変更後:

singleton_class.attr_accessor :raise_on_missing_required_finder_order_columns
self.raise_on_missing_required_finder_order_columns = false

変更前のコードでは、raise_on_missing_required_finder_order_columnsattr_accessor が宣言されているにもかかわらず、続く代入は run_after_transaction_callbacks_in_order_defined に対して行われていました。これにより raise_on_missing_required_finder_order_columns は未代入のまま nil となり、コンソールで ActiveRecord.raise_on_missing_required_finder_order_columns を参照すると nil が返される状態でした。

設計判断

PR作者が明示しているとおり、nilfalse は同じfalsy値であるため、この修正は実行時の振る舞いを変更しません。修正の目的は、Railsガイドに記載された公式のデフォルト値 false と、実際のコードが返す値を一致させることにあります。

この種の1行バグは、設定追加時のコピー&ペーストで起きやすく、テストで検出しにくい類の不整合です。PR本文で「コピー&ペーストして修正を忘れたPR」と明確に指摘されており、元凶となった #54608 のマージ後も長期間見過ごされていたことが分かります。

まとめ

1行の代入先を修正するだけの変更ですが、コードとドキュメントの乖離を解消することで、設定値を参照したデバッグやイントロスペクションの正確性が担保されます。挙動に影響がないとはいえ、公式ドキュメントに記載されたデフォルト値が実際のコードと一致していることは、信頼性の高いAPIを維持するうえで重要な基盤です。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
b5825c72

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

品質レビュー結果

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

Review Criteria:

記事構成 ✓ PASS

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

リード文(総論)、背景・技術的変更(各論)、まとめ(結論)の3部構成が明確で、ガイドラインに完全に準拠しています。

カスタムMarkdown構文 ✓ PASS

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

ファイル名付きシンタックスハイライト(```ruby:activerecord/lib/active_record.rb)とGitHubリンク記法([#54608])が正しく使用されています。

対象読者への適合性 ✓ PASS

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

「falsy値」などの用語を前提として説明しており、専門知識を持つエンジニアという対象読者に適合しています。

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

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

各セクションの冒頭で要旨が述べられ、各段落はトピックセンテンスで始まるなど、パラグラフ・ライティングの原則が守られています。非常に読みやすいです。

Diff内容との照合 ✓ PASS

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

記事内のコードブロックは、提供されたDiffの内容(削除行と追加行)を正確に反映しています。ファイルパスも一致しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「falsy値」「attr_accessor」「イントロスペクション」といった技術用語が文脈に沿って正確に使用されています。

説明の技術的正確性 ✓ PASS

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

デフォルト値が`nil`になる原因(誤った代入)と、`nil`と`false`がfalsy値であるため挙動に影響がないという説明は、技術的に正確かつ論理的です。

事実の突合 ✓ PASS

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

記事内のすべての主張(コピー&ペーストミス、関連PR#54608、Railsガイドとの不一致など)は、PRのDescriptionで裏付けられており、ハルシネーションは一切ありません。

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

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

PR番号(#54608、#56951)やバージョン(8.1)などの数値・固有名詞はすべて正確です。

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

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

記事タイトルは「デフォルト値の修正」というPRの主題を正確に反映しています。

外部知識の正確性 ✓ PASS

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

PRに記載のない外部知識(サポート状況、リリース日程など)の追加はなく、すべての情報が提供された情報源に基づいています。

時間表現の正確性 ✓ PASS

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

「発生していました」「残っていた問題です」といった過去の経緯を示す時間表現が、PRの内容と一致しており正確です。