TL;DR

  • 言語やツールのバージョン管理を asdf から mise に乗り換えた。
  • Homebrew で入れ、mise install で各言語を入れ直し、mise use -g でデフォルトのバージョンを設定した。asdf の .tool-versions もそのまま使える。

背景

乗り換えた理由は 3 つある。

  • タスクランナーを別に用意したくない(Makefile も使いたくない)
  • 使っているプラグイン(asdf-kotlin)で mise に乗り換えようとする動きがあった
  • asdf の動作がもっさりすることがたまにあった

asdf では、Bun、Clojure、.NET、Elixir、Erlang、Flutter、Java、Kotlin、Node.js、pnpm、Poetry、Python、Rebar3、Ruby を管理していた。Node.js と Ruby は業務で使っているので必須である。

Leiningen は今後 Clojure CLI に乗り換えるので、移さなかった。PHP は依存関係を手動で管理するなどエラーの解決が面倒になったので、Homebrew で入れることにした。どうせ開発では Docker を使い、趣味で触ることも少ないので妥協した。

環境

$ mise -v
2025.3.6 macos-arm64 (2025-03-18)

検証

Homebrew でインストールし、zsh で mise を有効にする。

brew install mise
echo 'eval "$(mise activate zsh)"' >> "${ZDOTDIR-$HOME}/.zshrc"

一部を除いて最新版を入れた。インストールできるバージョンは mise ls-remote で確認できる。Java は LTS を選んだ。

mise install node@latest
mise install [email protected]
mise install bun@latest
mise install [email protected]
mise install [email protected]
mise install rebar@latest
mise install [email protected]
mise install pnpm@latest
mise install poetry@latest
mise install clojure@latest
mise install dotnet@latest
mise install [email protected]
mise install kotlin@latest
mise install flutter@latest

ついでに Deno と Terraform も入れた。

mise install deno@latest
mise install terraform@latest

デフォルトのバージョンは mise use -g で設定する。プロジェクトごとにバージョンを指定するときは、-g を付けない。

mise use -g node@latest

結果

バージョンやタスクは mise.toml で管理する。asdf の .tool-versions もそのまま使える。

キーワード

参考