`run_order` メソッド定義のガード条件を正しい対象クラスに修正

rails/rails

ActiveSupport::TestCase における run_order メソッド定義のガード条件が、Minitest モジュールから正しい対象である Minitest::Runnable クラスへ修正されました。

背景

この修正は、run_order メソッドの存在確認に誤ったレシーバーが使われていた点を解消します。コメントに「MT6 API change」と記されているとおり、このガード条件はMinitest 6で導入された run_order APIへの対応として書かれたものです。しかし run_order が実際に定義されているのは Minitest モジュールではなく Minitest::Runnable クラスであるため、Minitest.respond_to? による確認は意図した動作を保証できていませんでした。

技術的な変更

activesupport/lib/active_support/test_case.rb のガード条件1行が修正されました。

変更前:

if Minitest.respond_to? :run_order # MT6 API change
  def run_order # :nodoc:
    test_order
  end
end

変更後:

if Minitest::Runnable.respond_to? :run_order # MT6 API change
  def run_order # :nodoc:
    test_order
  end
end

respond_to? のレシーバーを Minitest(モジュール)から Minitest::Runnable(クラス)に変更しています。run_order はテスト実行の順序制御を担うクラスメソッドであり、Minitest::Runnable に定義されるものです。Minitest モジュール自体への問い合わせでは常に false を返す可能性があり、ガードが正しく機能しないまま残っていました。

設計判断

respond_to? によるバージョン互換ガードという既存の方針自体は維持されています。

メソッドの有無でAPIの存在を確認するダックタイピング的なアプローチは、MinitestのバージョンごとのAPI差異を吸収する上で有効な手段です。今回の変更は方針を変えるものではなく、問い合わせ先を実際にメソッドが定義されているオブジェクトへ正確に向けるという修正です。Minitest モジュールと Minitest::Runnable クラスは別オブジェクトであり、クラスメソッドの存在確認には正しいレシーバーを指定する必要があります。

まとめ

1行の修正ですが、ガード条件が実際にメソッドを持つ正しいオブジェクトを参照するようになり、Minitest 6以降のAPIへの対応が意図どおりに機能します。respond_to? を使ったバージョン互換処理では、レシーバーの選択が正確さを左右するという点を改めて示す変更です。

記事メタデータ

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

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

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Review Error for DiffDaily

Review Criteria:

記事構成 ✓ OK

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

カスタムMarkdown構文 ✓ OK

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

対象読者への適合性 ✓ OK

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

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

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

Diff内容との照合 ✓ OK

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

技術用語の正確性 ✓ OK

技術用語の正確な使用

説明の技術的正確性 ✓ OK

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

事実の突合 ✓ OK

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

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

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

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

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

外部知識の正確性 ✓ OK

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

時間表現の正確性 ✓ OK

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