[Rails] Ruby 4.1のstabby lambda構文変更に対応

rails/rails

背景

Ruby 4.1.0において、Proc#source_locationstart_columnの挙動が変更されました。具体的には、stabby lambda(->)構文を含む完全な構文定義がソースに含まれるようになりました。この変更により、Railsのテストアサーション機能でラムダ式のソースコードを表示する際に、意図しない形式で出力される問題が発生していました。

この問題は、assert_changesassert_no_changesassert_differenceといったアサーションメソッドでラムダ式を使用した際に、エラーメッセージに@object.numのような読みやすい形式ではなく、#<Proc:0xXXXXXX ... (lambda)>のような冗長な形式が表示されるという形で現れていました。

技術的な変更内容

Ruby側の変更は意図的なものであるため、Rails側で対応が必要となりました。具体的には、ActiveSupport::Testing::Assertionsモジュールの_callable_to_source_stringメソッドに、stabby lambda構文を除去する処理を追加しています。

変更内容:

# Strip stabby lambda from Ruby 4.1+
source = source.sub(/^->\s*/, "")

この1行の追加により、ソース文字列の先頭から->とそれに続く空白文字を削除し、ラムダ式の本体のみを抽出できるようになりました。

影響範囲

この修正により、以下のようなテストケースが正常に動作するようになります:

修正前の出力例:

`#<Proc:0xXXXXXX /path/to/file.rb:381 (lambda)>` changed.
Expected: 0
  Actual: 1

修正後の出力例:

`@object.num` changed.
Expected: 0
  Actual: 1

まとめ

この変更は、Ruby 4.1.0の仕様変更に対するRails側の互換性対応です。stabby lambda構文を除去することで、テストのエラーメッセージがより読みやすく、開発者にとって有用な情報を提供できるようになりました。

関連するRuby側のissue: https://bugs.ruby-lang.org/issues/21816

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

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

品質レビュー結果

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

Review Criteria:

ガイドライン準拠 ✓ PASS

記事構成とDiffDaily Styleへの準拠状況

記事構成の3要素(Title, Context, Technical Detail)が明確に記載されています。また、コードブロック前後の空行やファイル名付きシンタックスハイライトなど、カスタムMarkdown構文も正しく使用されており、可読性が高いです。

  • 記事構成(Title、Context、Technical Detail)
  • DiffDaily Styleガイド準拠
  • カスタムMarkdown活用
  • 対象読者への適合性
技術的整合性 ✓ PASS

技術的な正確性と表現の適切性

PRの変更内容を技術的に正確に解説できています。`source.sub(/^->\s*/, "")` というコード変更が、stabby lambda構文を除去するためのものであるという説明は、Diffの内容と完全に一致しています。

  • 技術用語の正確性
  • コード例の正確性
  • 説明の技術的正確性
PR内容との整合性 ✓ PASS

元のPR情報との一致度

PRのタイトルや文脈から、変更の背景(Ruby 4.1の仕様変更)と目的(テストアサーションの出力改善)を正確に抽出し、記事に反映できています。ハルシネーションは見られません。

  • タイトル・説明の一致
  • Diff内容の正確な反映
  • 推測の排除