🙄
[Bug #20857] Ruby 3.4 の互換性に対するチケット
[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
以外の互換性の問題も大きいみたいですね- https://bugs.ruby-lang.org/issues/20857#note-9
- より詳細な内訳
- https://bugs.ruby-lang.org/issues/20857#note-12
-
base64
が存在しない問題は https://bugs.ruby-lang.org/issues/20859 でも議論されています- Ruby Core に追加する話だったんですが結局は追加しないことになったみたい
- 互換性の話自体は予想範囲内であるということで Revert 対応などは行われずにこのチケット自体は閉じられています
- ちなみに
Hash#inspect
の結果をテストで利用したい場合は以下のように対応するとよいとコメントされています
# Before
expect(thing).to be == '{"x"=>10}'
# After
expect(thing).to be == {"x"=>10}.to_s
Discussion