Active Recordコールバックの順序説明の誤記を修正
Active Record のコールバックに関する公式ドキュメントから、"メソッドとして定義されたコールバックは最後に呼び出される" という誤った記述が削除され、"コールバックは定義順に実行される" とシンプルに記述されるようになりました。
背景
従来の ActiveRecord::Callbacks ドキュメントは、コールバックは定義順に実行されるが、モデル上のメソッドとして定義されたものは例外的に最後に実行されると説明していました。実際の Rails 実装は、ActiveSupport::Callbacks が統合された以降、すべてのコールバックを定義順に処理しており、この記述は 20 年以上にわたり実態と乖離していました。
このずれは、PR 内で提示された実例(Widget クラスで proc とメソッドコールバックを混在させたテスト)により裏付けられ、メソッドコールバックが定義位置通りに実行されることが確認されています。結果として、ドキュメントの誤記は利用者に誤解を与えるリスクがあるため、修正が必要と判断されました。
技術的な変更
この PR は、activerecord/lib/active_record/callbacks.rb 内のコメントを修正し、誤った例外記述を除去しています。実装コード自体には変更はなく、唯一の差分はコメント行の置き換えです。
変更前:
-# \Callbacks are generally run in the order they are defined, with the exception of callbacks defined as
-# methods on the model, which are called last.
+# \Callbacks are run in the order they are defined.
変更後:
+# \Callbacks are run in the order they are defined.
このシンプルな置換により、ドキュメントは実装と完全に一致し、利用者はコールバックの順序について余計な例外を考慮する必要がなくなります。
設計判断
コメント修正は、正確性の維持 を最優先した設計判断の表れです。Rails コアは長期間にわたり後方互換性を重視していますが、実装と食い違う情報はバグとみなされ、ドキュメントの刷新が行われました。新しい記述は、過去の「2 トラック」ディスパッチ方式が廃止された事実を反映し、現在の単一ディスパッチモデルと整合しています。
この変更はコードロジックに影響を与えないため、既存アプリケーションへの互換性リスクはゼロです。むしろ、ドキュメントと実装の乖離を解消することで、開発者が正しい期待値を持ってコールバックを利用できるようになりました。
まとめ
今回の PR は、Active Record コールバックの順序に関する長年の誤記を除去し、公式ドキュメントを実装と完全に一致させました。コメント修正のみという軽微な変更ながら、情報の正確性と開発者体験の向上という観点で重要な改善です。