💭

mise(旧rtx) にアップデートしてちょっとハマった話

2024/01/10に公開

はじめに

  • mise とは
    Rust製asdf互換のバージョン管理ツールのrtxがリネームされたものです。

基本的にリネームされただけっぽいです。
初回起動時にrtxから移行の場合は自動でマイグレーションが実行されるようになっているので、ほとんどの場合は特別なことをしなくてもrtxからの移行でハマることはないと思います。

rtx からのアップデート方法

筆者は、プライベートでmacOS、業務用としてUbuntu を使用していて、両方rtxを利用していましたので、それぞれ下記の方法でアップデートしました。

macOS
# rtxをHomebrewで入れていたので、下記のコマンドを順番に実行しました。

brew update 

brew migrate --force rtx

brew upgrade
Ubuntu
# aptでrtxを入れていたので、公式のドキュメント通りに下記を実行

sudo install -dm 755 /etc/apt/keyrings
wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=amd64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
sudo apt update
sudo apt install -y mise

詳細は公式ドキュメントを参照してください。

アップデートができたら忘れずに.zshrcを書き換えます

.zshrc
- eval "$(~/.local/bin/rtx activate zsh)"
+ eval "$(~/.local/bin/mise activate zsh)"

ここまで来たら、下記を実行してマイグレーションを走らせれば移行できます。

mise ls

ハマったこと

基本的にリネームされただけrtxからの移行は自動でマイグレーションされると書いたのですが、下記2点がうまくいきませんでした。

  1. config.tomlのマイグレーションに失敗した。
  2. python のインストールに失敗した。

1の原因と対応方法

リネームされただけと思っていたのですが、設定ファイル周りが若干変わっていたようです。

今回の原因としては、rtxの時は~/.config/rtx/config.toml[settings]というセクション
で各種設定を記載していたのですが、miseでは、~/.config/mise/config.tomlではなく~/.config/mise/settings.tomlという別ファイルに書くようになったみたいで、[settings]が許容されていないのでconfig.tomlのマイグレーションに失敗していたという理解になりました。

2の原因と対応方法

まず、これに関しての原因というかうまく行かなかった根本の原因はまだ調べきれてないのですが、
もしかすると環境起因の可能性もあるので、参考程度に捉えていただくと良いと思います。

筆者の環境だと、Ubuntuの方は問題なかったのですが、macOSの方だけこの事象が発生しました。

前提として、rtxからのマイグレーションではpythonは移行されません。
そして、miseは設定ファイルでexperimental modeTrueになっている場合、python-buildでコンパイルする代わりに、pythonのコンパイル済みバイナリをダウンロードするようになっているようです。(今後デフォルトの仕様にすることを検討していると書いてありました。)

まずは、`mise i`を実行して、config.tomlに書いてあるpythonをインストールしようとします。
実行結果は下記のようになりました。

mise installing precompiled python from indygreg/python-build-standalone
mise if you experience issues with this python, switch to python-build
mise by running: mise settings set python_compile 0
Error:   × no precompiled version found for python@3.11.1

プリコンパイルされたバイナリが見つからないっぽいですね。

設定ファイルに下記を追加して、再度mise iを実行し、無事インストールができました。
通常のインストールなので少し時間がかかった印象でした。

settings.toml
python_compile = true

設定ファイルでexperimental = trueを指定している場合、experimental = falseにしても解決すると思います。

まとめ

mise(旧rtx)はasdfよりも体験がよく基本的にハマることは少ないと思うので、ぜひ使っていない方は使ってみてください。

Discussion