Ruby のバージョンがいきなり 3.4 → 4.0 と上がったために,動かせなくなる gem が出てくる。
実際に非互換な場合もあるかもしれないが,多くは,
「Ruby 4 でどんな非互換性がくるか分かんないから,とりあえず仕様で required_ruby_version を 4 未満にしとくわ」
てんじゃないだろうか。
それはともかく,いま手元にある(Ruby 3.4 とかにインストールしてある)gem のなかで,Ruby 4 非対応のものの一覧が欲しいよね?
このコードで分かる:
v4 = Gem::Version.new("4.0.0")
Gem::Specification.each do |spec|
next if spec.required_ruby_version.satisfied_by?(v4)
puts "#{spec.name} #{spec.version}"
puts " requires Ruby #{spec.required_ruby_version}"
puts
end
私の手元ではこうだった:
commonmarker 0.23.12
requires Ruby >= 2.6, < 4.0
ffi 1.17.2
requires Ruby >= 2.5, < 3.5.dev
google-protobuf 4.33.2
requires Ruby >= 3.1, < 3.5.dev
html-proofer 3.19.4
requires Ruby >= 2.6.0, < 4.0
nokogiri 1.18.10
requires Ruby >= 3.1, < 3.5.dev
sqlite3 2.8.1
requires Ruby >= 3.1, < 3.5.dev
ええっ,nokogiri 1.18.10 も sqlite3 2.8.1 も対応してないんか〜いっ。
(どちらも記事執筆時点 2025-12-26 の最新版)
と思ったが,どうもおかしい。
それぞれの gemspec で,required_ruby_version は以下のとおり。
- https://github.com/sparklemotion/nokogiri/blob/v1.18.10/nokogiri.gemspec#L43
- https://github.com/sparklemotion/sqlite3-ruby/blob/v2.8.1/sqlite3.gemspec#L21
いずれも Ruby 3.1 以上となっていて,3.5.dev 未満,とは書いてない。
実際,どちらの gem も Ruby 4.0.0 でインストールできたし,require できた。
うーむ?
Ruby 4.0 で本当にダメだったのは上記のリストでは
- commonmarker 0.23.12
- html-proofer 3.19.4
だけのようだ。これらは最新版ではなく古いバージョン。事情により入れてある。最新版は Ruby 4.0 も OK だ。