Ruby に添付されているライブラリを gem にして、リポジトリも完全に分離してリリースサイクルなどを独立させようという取り組みの bundled gems 化を Ruby 3.3 でも進めている。
昨年は net-smtp
などを分離した影響で mail
gem の依存関係が解決できずに、rails
の方で net-*
を依存に入れるとか、各ユーザーが個別に Gemfile
に net-*
を追加しないと Rails アプリケーションが起動すらしない、という状況になったので今年はもうちょい何かを考えるようにしている。
https://bugs.ruby-lang.org/issues/19351
今のところ思いついた案として、Ruby のパッケージとして bundled gems にしたもののうち、特定の gem とバージョンは Gemfile
に追加しなくても require
をすることができる、というとんでもない抜け穴機能を作ってみた。この機能を使えば、将来的にただの gem となった csv
などが bundle exec
の実行時にも require
できることになる。便利。
ただ将来的にはユーザーなり mail みたいなライブラリの作者が Gemfile や gemspec に正しく依存関係を指定してほしいので、この抜け穴機能だけだと指定されることはないので、どう警告を出してどういうアクションを取らせるか、にちょっと悩んでいる。
https://github.com/rubygems/rubygems/pull/6811
Deivid, nobu, mame さんと議論して、RubyGems の kernel_require.rb
や Ruby 本体の gem_prelude.rb
などを拡張すれば、require
してるけど $LOAD_PATH にないというライブラリの警告はできるのでは、となったので、ユーザーに Gemfile に追加しろ、という警告をする分には良さそうだった。ただ、この方法でも、ライブラリの方で依存関係が足りないよ、というときにはユーザーに取ってはどうにもできないので、なんかいい方法はあるかなあと悩み中。ファイルも明示して
というあたりがマシな方法かなあ。うーん。難しい。
今週も Zoom で開催。以下のような事を話した。
* パーサーの話
* https://techracho.bpsinc.jp/hachi8833/2023_07_10/131808
* Ruby 3.3 で何をどこまでやる?のおさらい
* ARM の CI
* https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html
ここ最近毎回パーサーの話をしているような気がしなくもない。
https://hackmd.io/@ko1/Sks9RfAg_
誰でも参加できるので興味がある人はお越しください。
7/13 に 7月の Ruby 開発者会議があるので、ディスカッションする内容を事前に眺めて何が論点なのかを考える会に参加してきた。今回から自分の Zoom アカウントをホストにして mame さんから引き継ぎになった。
https://bugs.ruby-lang.org/issues/19722
先に書いた bundled gems 化の話をしたり、それ以外のあれこれを数時間話して終わり。がんばろう。