ランタイムのバージョン管理に使っていた asdf から mise へ移行しました。あわせて、mise が環境変数管理を組み込みでサポートしているため direnv も削除しました。
mise を選んだ理由
asdf は長く使ってきたバージョン管理ツールですが、Rust 製でより高速な mise の存在を知り、移行することにしました。詳しい違いは mise 公式の asdf 比較ページにまとまっています。
asdf と mise の比較
| 項目 | asdf | mise |
|---|---|---|
| 実装言語 | Shell スクリプト | Rust |
| コマンド実行方式 | shim(約 120ms のオーバーヘッド) | PATH 直接更新(約 5〜10ms) |
| ツールインストール | プラグイン追加 → install → set の 3 ステップ | mise use の 1 コマンド |
| 設定ファイル | .tool-versions | .tool-versions / mise.toml |
| 環境変数管理 | なし | 組み込みサポート |
| タスクランナー | なし | 組み込みサポート |
移行手順
mise を先にインストールし、ツールが動くことを確認してから asdf をアンインストールする手順です。mise 公式の FAQ でもこの順序が推奨されています。
1. mise のインストール
公式ドキュメントに従って、Homebrew でインストールします。
brew install mise2. シェルの設定
.zshrc の asdf 関連の設定(. $(brew --prefix asdf)/libexec/asdf.sh など)を削除し、代わりに mise の activate を追加します。
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc注意: asdf と mise を同時に activate しないでください。.zshrc で asdf の行を削除してから mise を追加します。
設定を反映します。
source ~/.zshrc3. ツールのインストール
mise は asdf のインストール済みツールをそのまま引き継がないため、再インストールが必要です。.tool-versions がプロジェクトにあれば、そのディレクトリで以下を実行するだけです。
mise installこれで .tool-versions に記載されたツールがまとめてインストールされます。
4. 動作確認
ツールが mise 経由で正しく動いているか確認します。
mise doctor
node -v
which node # ~/.local/share/mise/installs/node/... になっていれば OK5. asdf のアンインストール
mise でツールが問題なく動くことを確認できたら、asdf をアンインストールします。
brew uninstall asdf --forcedirenv の削除
mise は環境変数管理を組み込みでサポートしているため、direnv も不要になりました。mise の公式ドキュメントでも direnv との併用は非推奨とされています。
direnv のアンインストール
brew uninstall direnv.zshrc から direnv 関連の設定(eval "$(direnv hook zsh)" など)も削除します。
mise での環境変数管理
direnv で .envrc に書いていた設定は、プロジェクトの mise.toml に移行できます。
[env]
DATABASE_URL = "postgres://localhost/mydb"
NODE_ENV = "development"
# .env ファイルの読み込み
_.file = ".env"
# PATH の追加
_.path = "./bin"mise.toml はディレクトリに入ると自動で適用され、離れると解除されます。direnv と同じ挙動です。
direnv と mise の環境変数管理の比較
| 項目 | direnv | mise |
|---|---|---|
| 設定ファイル | .envrc(シェルスクリプト) | mise.toml(TOML) |
.env 読み込み | dotenv .env | _.file = '.env' |
| PATH 追加 | PATH_add ./bin | _.path = './bin' |
| Python venv | layout python | _.python.venv = { path = ".venv", create = true } |
| スクリプト実行 | .envrc に直接記述 | _.source = "./script.sh" |
まとめ
asdf から mise への移行は、Homebrew を使えば数コマンドで完了します。mise を先にセットアップしてから asdf を外す順序にすることで、ツールが使えない空白期間なく安全に移行できます。
さらに mise の環境変数管理を使えば direnv も不要になり、バージョン管理と環境変数管理を mise ひとつに集約できます。
以上、asdf と direnv から mise へ移行した、現場からお送りしました。