WebMock の Ruby 3.4 互換対応まわりでの Pull Request が滞留している状態で、メンテナンスが捗っていないようだったため、いわゆるコミット権とリリース権というメンテナンスに必要な権限をもらって自分の方でも見れる範囲で見ていくことにしました。所属先の ESM, Inc. で同僚が実際困っている話を 1on1 で聞いたことも、これに向けて動いた理由のひとつ。
余談ですが、RubyKaigi 2019 の LT でも話したように、nobu さんから "Bug of the Year" の称号をもらったのは WebMock へのエンバグだったこともあり、そういう意味でも縁のプロダクトだったりします。
ひとまず Ruby 3.4 互換に対して最も大きな問題になっていそうなあたりのパッチを取り込んで、WebMock 3.25.0 としてリリースしておきました。
CI まわりがいろいろと落ちていたので、Ruby 3.4 と Ruby 3.5-dev は CI をパスするようにしましたが、JRuby は問題が根深そうでいったんサスペンドすることにしました。ひとまずグリーンにしておかないとコントリビュータのテストへの意識も落ちてしまいそうな状況だったので、今後に向けてそのあたりは先に解決済みです。
まだ Ruby 3.4 まわりで問題が残っているかもしれませんが、何か深刻な問題に遭遇したなどあれば GitHub リポジトリにフィードバックしてみてください。
参考までに WebMock アップグレード後にも、Ruby 3.4 で以下のようなエラーが出ている場合は、おそらく httpclient gem がランタイムに対して Ruby 3.4 から標準から外された mutex_m
が不足しているためです。
NameError: undefined method 'do_get_block' for class 'WebMockHTTPClient' (NameError) alias_method :do_get_block_without_webmock, :do_get_block ^^^^^^^^^^^^
残念ながら mutex_m
をランタイム依存に追加した httpclient はまだリリースされていないようでした (イシュー報告済み) 。
アプリケーションによっては、既になんらかの依存で mutex_m
が追加されているため問題になっていないケースもありますが、もし問題が再現するようであれば Gemfile に mutex_m
への依存することでワークアラウンドとしての解決はできるでしょう。以下のイシューにも記載していますので、あわせてご参照ください。