Skip to content

Remove Pathname gem after Ruby 4.0#197

Open
ohai wants to merge 1 commit into
masterfrom
remove-pathname-gem-for-ruby-4-0
Open

Remove Pathname gem after Ruby 4.0#197
ohai wants to merge 1 commit into
masterfrom
remove-pathname-gem-for-ruby-4-0

Conversation

@ohai

@ohai ohai commented Jul 8, 2026

Copy link
Copy Markdown
Member

Pathname は Ruby 4.0 で組み込みクラスになったので gem "pathname" で次のような warning が生じます。

/home/ohai/.rbenv/versions/4.0.5/lib/ruby/gems/4.0.0/gems/pathname-0.4.0/lib/pathname.rb:17: warning: already initialized constant Pathname::VERSION
internal:pathname_builtin:194: warning: previous definition of VERSION was here
/home/ohai/.rbenv/versions/4.0.5/lib/ruby/gems/4.0.0/gems/pathname-0.4.0/lib/pathname.rb:36: warning: already initialized constant Pathname::SEPARATOR_LIST
internal:pathname_builtin:312: warning: previous definition of SEPARATOR_LIST was here
/home/ohai/.rbenv/versions/4.0.5/lib/ruby/gems/4.0.0/gems/pathname-0.4.0/lib/pathname.rb:37: warning: already initialized constant Pathname::SEPARATOR_PAT
internal:pathname_builtin:313: warning: previous definition of SEPARATOR_PAT was here
/home/ohai/.rbenv/versions/4.0.5/lib/ruby/gems/4.0.0/gems/pathname-0.4.0/lib/pathname.rb:43: warning: already initialized constant Pathname::ABSOLUTE_PATH
internal:pathname_builtin:323: warning: previous definition of ABSOLUTE_PATH was here
String.new

そこで gem の指定を 3.x までに限定しました。

再現方法

bundle exec で実行。例:

bundle exec ruby bin/refe -d ../work/db-4.0.0 String upcase

pathname は default gem になって長いようなので、この行を消しても問題ないかもしれない。

Pathname is included in Ruby's core classes at Ruby 4.0.
Therefore `gem "pathname"` causes warnings after Ruby 4.0.
@znz

znz commented Jul 10, 2026

Copy link
Copy Markdown
Member

PR ありがとうございます。Ruby 4.0 で pathname gem の warning が出る問題、確認しました。

方針として、「注」でご自身も触れられているとおり、条件付きにするよりもこの行ごと削除するのが良さそうです。

  • pathname はサポートしている全バージョンで default gem なので、Gemfile に書かなくても require "pathname" はそのまま動きます(Gemfile.lock 上で pathname に依存している gem も他にありません)
  • gem "pathname" if RUBY_VERSION < "4.0.0" の形だと、bundler を実行した Ruby のバージョンによって Gemfile.lock の内容が変わり、3.x と 4.x で bundle するたびに lock の DEPENDENCIES から pathname が出たり消えたりする差分チャーンが発生します(frozen mode では install が失敗します)
  • また RUBY_VERSION < "4.0.0" は文字列の辞書順比較なので、Ruby 10.x で誤動作します(条件を残す場合は Gem::Version 比較にしてください)

どちらの方針でも、Gemfile.lock の更新を PR に含めてください(現状 DEPENDENCIES に pathname が残ったままです)。

マージ前に確認をお願いしたい点:

  • この行は 8992475("Fix some activation problems")で gem "uri" と一緒に追加された経緯があるので、削除した状態で Ruby 3.x でも bundle exec rake を実行し、当時の activation 警告が再発しないこと
  • rbs_collection.yaml が pathname を参照しているので、Ruby 4.x で bundle exec rake sig / bundle exec steep check の結果が悪化しないこと(master 時点で既存の失敗があるため「新たに増えないこと」の確認で大丈夫です)

なお、隣の gem "uri" も同じ経緯の行です。uri はまだ default gem のままなので今は警告が出ませんが、将来 builtin 化されたら同じ問題が再発します。この PR で扱うかは別として、扱い(残す/消す/その時に対応)を決めておけるとよさそうです。

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants