asdf から mise へ移行した

重岡 正 ·  Sun, February 1, 2026

ランタイムのバージョン管理に使っていた asdf から mise へ移行しました。あわせて、mise が環境変数管理を組み込みでサポートしているため direnv も削除しました。

mise を選んだ理由

asdf は長く使ってきたバージョン管理ツールですが、Rust 製でより高速な mise の存在を知り、移行することにしました。詳しい違いは mise 公式の asdf 比較ページにまとまっています。

asdf と mise の比較

項目asdfmise
実装言語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 mise

2. シェルの設定

.zshrc の asdf 関連の設定(. $(brew --prefix asdf)/libexec/asdf.sh など)を削除し、代わりに mise の activate を追加します。

echo 'eval "$(mise activate zsh)"' >> ~/.zshrc

注意: asdf と mise を同時に activate しないでください。.zshrc で asdf の行を削除してから mise を追加します。

設定を反映します。

source ~/.zshrc

3. ツールのインストール

mise は asdf のインストール済みツールをそのまま引き継がないため、再インストールが必要です。.tool-versions がプロジェクトにあれば、そのディレクトリで以下を実行するだけです。

mise install

これで .tool-versions に記載されたツールがまとめてインストールされます。

4. 動作確認

ツールが mise 経由で正しく動いているか確認します。

mise doctor
node -v
which node  # ~/.local/share/mise/installs/node/... になっていれば OK

5. asdf のアンインストール

mise でツールが問題なく動くことを確認できたら、asdf をアンインストールします。

brew uninstall asdf --force

direnv の削除

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 の環境変数管理の比較

項目direnvmise
設定ファイル.envrc(シェルスクリプト)mise.toml(TOML)
.env 読み込みdotenv .env_.file = '.env'
PATH 追加PATH_add ./bin_.path = './bin'
Python venvlayout python_.python.venv = { path = ".venv", create = true }
スクリプト実行.envrc に直接記述_.source = "./script.sh"

まとめ

asdf から mise への移行は、Homebrew を使えば数コマンドで完了します。mise を先にセットアップしてから asdf を外す順序にすることで、ツールが使えない空白期間なく安全に移行できます。

さらに mise の環境変数管理を使えば direnv も不要になり、バージョン管理と環境変数管理を mise ひとつに集約できます。

以上、asdf と direnv から mise へ移行した、現場からお送りしました。