🙄

[Bug #20857] Ruby 3.4 の互換性に対するチケット

2024/10/23に公開

[Bug #20857] Ruby 3.4 seems to have backwards compatibility issues more than its predecessors

  • Ruby 3.4 では Hash#inspect の結果が以下のように変更されます
homu = { id: 1, name: "homu", age: 14, 1 => "one" }

# => から : に変わったり `=>` の前後にスペースが追加されたり
puts homu.inspect
# Ruby 3.3 => {:id=>1, :name=>"homu", :age=>14, 1=>"one"}
# Ruby 3.4 => {id: 1, name: "homu", age: 14, 1 => "one"}
  • これの影響によりいずれかのテストが落ちてしまうというチケット
    • https://github.com/asciidoctor/asciidoctor/issues/4634#issuecomment-2449497487 で影響がでている
    • どちらかというと => のスペースの話で『本当にこれって追加する必要があるのか』みたいなことがコメントされている
  • また Fedora では Ruby 3.4 だと528個のパッケージのうち127個のビルドが失敗しているらしい
  • 基本的に #inspect の結果をテストの期待値として扱うことは推奨はされていないのでこういう影響はしょうがない、ってスタンスではあるみたいですね
  • また Fedora の問題は ASCIIDoctor 以外は Hash#inspect 以外の互換性の問題も大きいみたいですね
  • 互換性の話自体は予想範囲内であるということで Revert 対応などは行われずにこのチケット自体は閉じられています
  • ちなみに Hash#inspect の結果をテストで利用したい場合は以下のように対応するとよいとコメントされています
# Before
expect(thing).to be == '{"x"=>10}'

# After
expect(thing).to be == {"x"=>10}.to_s
GitHubで編集を提案

Discussion