miseは、言語をインストール時にビルドするのか
miseを使い始めています。先日、miseが参照するPythonはどこから来るのか、を調べて、プリビルドされたPythonをダウンロードすることがわかってました。一方で、Rubyの場合は、ソースビルドするのがデフォルトのようです。この詳細を調べました。
なぜ、気づいたのか
既存のmise設定をubuntu 26.04の環境で再現しようとした時の出来事です。 mise install を実行すると Rubyのインストールで落ちました。詳細を調べてみると、Rubyをソースからビルドしようとしており、そのビルドのための依存が足りないために落ちていました。
この問題は、ChatGPTに調査させ、プリビルドのRubyを利用することで問題は取り急ぎ回避しました。実際にやったことは以下です。
mise settings ruby.compile=false
mise install
Code language: JavaScript (javascript)
そもそも、プリビルドの利用が基本じゃないのか?
私はこの挙動を知った後に「そもそも、miseってプリビルドの利用が基本じゃないのか?」と思いました。なぜなら、Pythonはビルド済みのランタイムをダウンロードしていたからです。調べてみた結果わかったのは、「言語・ツールごとに違う」と言うことです。
言語ごとにパラメータも違う
Rubyの場合はデフォルトがソースビルドで用意し、Pythonの場合はデフォルトがプリビルドでの用意になっています。このズレは個人的にもやっとするので設定を眺めていました。すると設定も揃ってないことがわかりました。
Rubyをプリビルドで用意する場合の設定はこうです。
mise settings ruby.compile=false
Code language: JavaScript (javascript)
一方で、Pythonをソースビルドで用意する場合の設定はこうです。
mise settings python.compile=1
なぜ、true false と書く場合と 1 0 と書く場合が混ざるんだ…。 まあ、1/0 を true/falseで解釈すると言われたらわかる部分もありますが、どうも気持ち悪い。
miseには様々なインストールバックエンドが存在する
ここまで来るとそもそもの話として、 miseのインストールはどう管理されているのか、を知りたくなります。なので、軽く調べました。するとmiseでは、様々な パッケージマネージャーやインストールシステムに連携するアダプターをバックエンドと呼んでいることがわかりました。
さらに、アダプターは公式が用意している言語そのものであったり、言語ごとパッケージマネージャーもあれば、GitHubからインスールするバックエンドもあったり、… と様々あります。
終わり
mise は、統一したインストール体験を提供するのではなく、統一したUI を提供することに注力しているように見えます。統一しているのは体験ではなく、UIであると理解した上で使うのが大切に思います。そうすれば、言語やバックエンドごとにデフォルト値が違うことも自然に感じますし、注意点として想像できます。 miseを使っていく場合、この点に注意していくのが良さそうです。
