mise.tomlを書き換えずに別バージョンで動作確認したい

古いバージョンでの挙動を確認したいときなど、mise.tomlを書き換えずにその場限り別バージョンのツールを使いたい場面がある。mise execを使うと、mise.tomlを変更せずに指定したバージョンでコマンドを実行できる。

mise execの基本

mise exec <tool>@<version> -- <command>の形式で、使うツールのバージョンとコマンドを指定する。jq = "1.7.1"と書かれたmise.tomlがあるディレクトリで、一時的に1.6を使ってみる。

$ mise exec -- jq --version
jq-1.7.1

$ mise exec jq@1.6 -- jq --version
jq-1.6

mise execにバージョンを指定しなければ、mise.toml通りのバージョンが使われる。バージョンを指定した場合でもmise.tomlの記述は変わらない。

$ cat mise.toml
[tools]
jq = "1.7.1"

mise xmise execの短いエイリアスである。

指定していないツールはmise.tomlの設定のまま使われる

mise.tomlに複数のツールを書いている場合、mise execでバージョンを指定したツール以外はmise.toml通りのバージョンで動く。

[tools]
jq = "1.7.1"
node = "22"
$ mise exec jq@1.6 -- sh -c 'jq --version && node --version'
jq-1.6
v22.23.2

jqだけ1.6に切り替わり、nodemise.tomlに書かれた22系のバージョンのまま実行されている。

mise.tomlが無いディレクトリでもその場限りで使える

mise.tomlが存在しないディレクトリでも、mise execにツールとバージョンを指定すればその場限りで使える。ツールが未インストールの場合は自動的にインストールされる。

$ mise exec jq@1.8 -- jq --version
mise jq@1.8.2        [1/2] install
mise jq@1.8.2        [1/2] download jq-macos-arm64
mise jq@1.8.2        [2/2] verify GitHub artifact attestations
mise jq@1.8.2        [2/2] ✓ GitHub artifact attestations verified
mise jq@1.8.2        [2/2] checksum jq-macos-arm64
mise jq@1.8.2        [2/2] extract jq-macos-arm64
mise jq@1.8.2      ✓ installed
jq-1.8.2

シェルの構文を含むコマンドは–commandで指定する

--の後に続けるコマンドはシェルを経由せずそのまま実行される。&&|のようなシェルの構文を使いたい場合は、sh -cで包むか--commandオプションに文字列として渡す。

$ mise exec jq@1.6 node@22 --command "jq --version && node --version"
jq-1.6
v22.23.2