複数のコマンドにまたがって一時的にバージョンを切り替えたい

【mise】mise execで一時的にツールバージョンを切り替えてコマンド実行する は1回のコマンド実行だけ別バージョンを使う場合に向いている。複数のコマンドを続けて実行したい場合は、毎回mise execを付けるのは手間がかかる。mise shellを使うと、現在のシェルセッションが続く間だけ一時的にバージョンを切り替えられる。

事前にmise activateが必要

mise shell【mise】mise activateでシェルにmiseを組み込む でシェルにフックを組み込んだ状態でのみ動作する。mise activateをまだ設定していない場合は、先にシェルの設定ファイルに追記しておく。

mise shellの基本

jq = "1.7.1"と書かれたmise.tomlがあるディレクトリで、mise shellを使って1.8.2に切り替える。

$ jq --version
jq-1.7.1

$ mise shell jq@1.8.2
mise jq@1.8.2        [1/2] install
mise jq@1.8.2        [1/2] download jq-linux-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-linux-arm64
mise jq@1.8.2        [2/2] extract jq-linux-arm64
mise jq@1.8.2      ✓ installed

$ jq --version
jq-1.8.2

mise shellを実行した後は、mise execのように毎回コマンドの前に付けなくても、同じシェルセッションの中であれば1.8.2が使われ続ける。mise shmise shellの短いエイリアスである。

複数のツールをまとめて切り替えたい場合は、mise shell jq@1.8.2 node@22のように並べて指定できる。

mise.tomlは変更されない

mise shellでバージョンを切り替えても、mise.tomlの記述はそのままである。

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

切り替えは環境変数(MISE_JQ_VERSIONのような形式)としてシェルセッションに保持されるだけで、設定ファイルには書き込まれない。シェルを終了するか、後述の--unsetで解除すると、mise.toml通りのバージョンに戻る。

–unsetで解除する

--unsetを付けて同じツール名を指定すると、mise shellで設定したバージョンを解除できる。

$ mise shell --unset jq

$ jq --version
jq-1.7.1

解除すると、mise.tomlに記述された1.7.1が再び使われる。