🏃‍♂️

asdfからmise(旧rtx)に乗り換えた話

2024/05/16に公開

はじめに

この記事では、私がasdfからmise(旧rtx)に乗り換えた経験について共有します。

asdfを使っていましたが、最近の傾向よりrtxが気になっていました。
そのrtxも名前が変わってmiseになっていたのでmiseの手順として残します。

参考

https://minerva.mamansoft.net/Notes/📜2024-01-06+asdfからmiseに移行してみる

こちらを参考にしました。

asdfを消す

まず、asdfを使っていましたが思い切って削除します。
ただ、丁寧にやらないといくつかエラーが出るので、手順を確認してから進めます。
一応使っていたバージョンを確認して控えておきます。

❯ asdf list
golang
 *1.21.4
nodejs
  16.0.0
 *20.5.0
  21.7.1
python
 *3.10.12
  3.11.0
  3.11.4
ruby
 *3.2.2

まず、これらのプラグインを削除しておきます。
次に、Homebrewで管理しているasdfの削除に移ります。
ちなみに確認したところ依存ライブラリは以下でした。

❯ brew deps --tree --installed asdf
asdf
├── autoconf
│   └── m4
├── automake
│   └── autoconf
│       └── m4
├── coreutils
│   └── gmp
├── libtool
│   └── m4
├── libyaml
├── openssl@3
│   └── ca-certificates
├── readline
└── unixodbc
    └── libtool
        └── m4

こちらの手順を参考に一気に削除しちゃいます。

brew uninstall --force asdf
brew autoremove
rm -rf ~/.tool-versions
rm -rf ~/.asdf/

asdf経由でインストールしていたnodeなどのエラーが出た場合はターミナルのシェルを再読み込みするとよいでしょう。
ここまでやや強制的に削除しましたが、順を追うなら丁寧に1つずつ消したほうがよさそうです。ただ、これでいったんasdfの環境を削除しました。

miseを入れる

次に、miseをインストールする手順について説明します。これは公式のとおりですね。
その上でHomebrewを使ってインストールします。

> brew install mise
Error: usage CLI not found. This is required for completions to work in mise.
See https://usage.jdx.dev for more information.

なお、私の環境ではプロンプトに以下のエラーがでたので、usageを導入して回避できました。

❯ brew install usage

miseのplugin経由でnodeのインストール

miseを使ってnpmをインストールする方法について説明します。

❯ mise use --global node@latest
mise node@22.2.0 ✓ installed                                                                        mise ~/.config/mise/config.toml tools: node@22.2.0

これで最新版はインストールされます。
あとは、pythonとかrubyやGoなど必要に応じてバージョンも指定できます。

複数バージョン入れる場合は同様に。都度切り替えればOKです。

❯ mise use --global node@16.0.0
mise node@16.0.0 ✓ installed                                                                        mise ~/.config/mise/config.toml tools: node@16.0.0

❯ mise list
Plugin  Version  Config Source              Requested
go      1.22.3   ~/.config/mise/config.toml latest
node    16.0.0   ~/.config/mise/config.toml 16.0.0
node    22.2.0

❯ mise use --global node
mise ~/.config/mise/config.toml tools: node@22.2.0

❯ mise list
Plugin  Version  Config Source              Requested
go      1.22.3   ~/.config/mise/config.toml latest
node    16.0.0
node    22.2.0   ~/.config/mise/config.toml latest

❯ cat ~/.mise.toml
[tools]
node = "latest"

asdf localのような設定はありませんが、ディレクトリごとにバージョンを切り替えることができます。さきほどの例はglobalを指定しないことでローカルに反映されています。上記は、該当ディレクトリでの実行なので、移動すれば別バージョンのデフォルト設定が機能します。

なお、miseにはdirenvと同等の機能があります。

mise configについて

miseのhelpより今後用意される機能についても紹介します。

###   config       [experimental] Manage config files [aliases: cfg]
❯ mise config ls
mise `mise config ls` is experimental. Enable it with `mise settings set experimental true`
mise Run with --verbose or MISE_VERBOSE=1 for more information

❯ mise version
2024.5.16 macos-arm64 (2024-05-15)

この設定は今使ってるバージョンではデフォルトで設定されていません(experimental)が、設定することで以下のように扱えます。

❯ mise settings set experimental true
❯ mise config ls
Path                       Plugins
~/.mise.toml               node
~/.config/mise/config.toml node, go

❯ cat  ~/.config/mise/config.toml
[tools]
node = "latest"
go = "latest"

[settings]
experimental = true

これで、プロジェクトごとにバージョンを切り替えた際に、どのバージョンが設定されているか確認できます

おわりに

miseへの乗り換えは私にとって大きな変化でしたが、新しい環境に慣れるまでの努力は報われました。今ではmiseを使うことで、より効率的な開発環境が整いました。plugin-addの初期設定がないだけでもお手軽に感じますし、将来の機能追加にも期待しています。

この記事が他の方々の乗り換えの参考になれば幸いです。

GitHubで編集を提案

Discussion