ここしばらく macOS ならことえり、Windows なら MS-IME と OS に同梱されている日本語変換エンジンを何も考えずに利用していたけど、全てのプラットフォームで共通で使えるものにしてみるか、と Google 日本語入力を改めて使うことにした。他の選択肢としては ATOK くらいなんだけど、ジャストシステムは個人情報の扱いのアレなやつ以降使わないことにしてるので Google 日本語入力くらいしか選択肢がなかった。
キーバインドを、MS-IME にした上で「変換/無変換」「英数/かな」のキーでトグルするように変更した以外は特に設定することもなくそのまま使えている。連文節変換がことえりのそれとちょっと違っていて気にはなるけどただの慣れな気がする。しばらくはこれで。
タイトルがすべてシリーズです。Ruby をインストールしたときに同梱されている default gems (bigdecimal や json など) と同じバージョンの default gems をローカルインストール、具体的には gem i json-x.y.z.gem
のように .gem ファイルを指定してインストールしようとすると動かない問題を直した。
https://github.com/rubygems/rubygems/pull/6430
上の pull request にあるように歴史を積み重ねているコードのあちこちに起因する難解な問題だった。
この問題が何故困るかというと、ruby org の下にあるリポジトリでは、gem をビルドかどうか、特に C ext の場合はインストールしようとしたときにビルドエラーがでないでインストールできるかどうか、ということをテストしているのだが、これが何故か head つまり、最新バージョンの Ruby でだけ発生していて、なんだこれ、という状況が起きていた。
https://github.com/ruby/bigdecimal/actions/runs/4229832742/jobs/7346568360
エラーメッセージを見るに、単に RubyGems のどこかがバグっているのであろう、というあたりはついたので腰を据えて調べることにしたら、やはり単なる RubyGems のバグだった。
RubyGems の gemspec の処理についてはちょっと複雑すぎるのでここでの解説は省略するけど、要はローカルにある .gem をインストールするときだけ、C 拡張がすでにビルドされているか、という判定がおかしくて、「gem としてインストールしようとしている default gems にも関わらず、Ruby に同梱されている default gems があるからインストール済みと解釈して、存在しないインストール済み gem を再インストールしようとしていてエラーとなっていた」という状況だった。複雑すぎる。
結局、修正方法としてはインストール対象としている gemspec が、default gems そのものかどうかではなく、システム内に同名の default gems が存在するかを判定して、存在する場合は再インストールではなく、新規インストール、となるように捻じ曲げることで解決した。
一日 RubyGems のコードを読んで、だいぶ理解がふかまったけどこれ大変すぎるからもうちょいシンプルにしたい...。
今週もみんなで discord に集まって軽く雑談。
https://asakusarb.esa.io/posts/1135
上に書いたような RubyGems の話をしながら、他にもいくつかある世界で数人くらいしか困ってない RubyGems の現状の動きの話をしているうちに時間が過ぎてしまった。最近、21時を過ぎたらもうだめだ、みたいな眠さになるので夜が本当に早い...。