複数のコマンドにまたがって一時的にバージョンを切り替えたい
【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 shはmise 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が再び使われる。
