世界で僕くらいしか興味がないことなのだが、RubyGems の post_install
フックを使って、不要な C 拡張ファイルを削除するプラグインを作ってみた
https://github.com/hsbt/gem-ext-cleaner
gem install gem-ext-cleaner
で有効化されます。
背景については README に書いたつもりではあるけど、RubyGems(Bundler) は C 拡張を含む gem をインストールすると以下のようなパスにインストールされる。
$GEM_HOME/gems/extensions/$arch-$platform-$version/$rubyversion/foo-x.y.z
$GEM_HOME/gems/foo-x.y.z/lib
RubyGems 3.3 までは Working ディレクトリである $GEM_HOME/gems/foo-x.y.z/ext
の下にも .so
や .bundle
が残り続けるけど、これは RubyGems 3.4 では make clean
で消えるようになったので、上記の2つから選ぶしかない。
で、上記のディレクトリはどちらも $LOAD_PATH
に追加されており、どちらにも同じファイルが同じディレクトリ構造で存在しているので端的にディスクの無駄である。特に $GEM_HOME/gems/foo-x.y.z/lib
は GEM_HOME
を共有しているような環境では、Ruby のバージョンを変えたときに死んでしまうなど、プラットフォームやバージョンを扱うことができないので非常によくない。
個人的には $GEM_HOME/gems/extensions/$arch-$platform-$version/$rubyversion/foo-x.y.z
が公式な C 拡張のディレクトリであって、これのみを使うようにすべき、と思っているけど、gem の中にはハードコードで lib
の下を指して処理、具体的には ffi などを使っているものもあって、なかなか大変となっている。
で、このプラグインは、lib
の下の .so
や .bundle
を消しても動くのに問題ないよね、というのを確かめるために作ったもので、手元では今年に入ってから手元ではずっとこれで暮らしているけど困ってないので RubyGems のプラグインにもしてみた。Docker のイメージなどでとにかくサイズを減らしたい、という人は試してください。
スターレイルが PS5 で発売したのでインストールしておいた。基本、ソフトの値段はアイテム課金、みたいなものなのでいいとして相変わらずロードが速いというのと、オーディオが良かった気がする。ここしばらく、☆5キャラを引き続けていたので、当面はちまちまと育成素材集めで。
一方の原神はフォンテーヌで DPS とサポートの組み合わせを用意しておくかと思いヌヴィレットを引いておいた。
おそらく次のバージョンで水神が来るので、そこまでは PS5 の他のゲームをやりつつぼちぼちモード。