使われなくなった古いバージョンが溜まっていく

【mise】mise uninstallでインストール済みツールを削除する は削除したいツールとバージョンを自分で指定する必要がある。mise useでバージョンを切り替えるたびに、古いバージョンを手動でmise uninstallするのは手間がかかる。mise pruneを使うと、どの設定ファイルからも参照されなくなったバージョンをまとめて削除できる。

mise pruneの基本

jqのバージョンを1.7.1から1.8.2に切り替えた状態でmise pruneを実行する。

$ mise use jq@1.7.1
$ mise use jq@1.8.2
$ mise ls jq
jq  1.7.1
jq  1.8.2  /path/to/project/mise.toml  1.8.2

$ mise prune -y
mise pruned configuration links
mise jq@1.7.1        uninstall
mise jq@1.7.1        remove ~/.local/share/mise/installs/jq/1.7.1
mise jq@1.7.1        remove ~/.cache/mise/jq/1.7.1
mise jq@1.7.1      ✓ done

$ mise ls jq
jq  1.8.2  /path/to/project/mise.toml  1.8.2

mise.tomlはバージョン1.8.2のみを参照しており、1.7.1はどの設定ファイルからも必要とされていない。mise pruneはこの状態を検出し、1.7.1だけを削除する。mise useで上書きする前の1.7.1を明示的に指定する必要はない。-yは削除前の確認プロンプトへの応答を省略するオプションで、mise pruneに限らず多くのmiseコマンドで共通して使える。

削除前に対象を確認する

--dry-runを付けると、実際には削除せずに削除対象と理由を確認できる。

$ mise prune --dry-run
mise pruned configuration links [dryrun]
mise jq@1.7.1 is prunable: jq is required at 1.8.2 by /path/to/project/mise.toml
mise jq@1.7.1 [dryrun]  uninstall
mise jq@1.7.1 [dryrun]  remove ~/.local/share/mise/installs/jq/1.7.1
mise jq@1.7.1 [dryrun]  remove ~/.cache/mise/jq/1.7.1
mise jq@1.7.1 [dryrun]done

jq is required at 1.8.2 by /path/to/project/mise.tomlという行から、なぜ1.7.1が削除対象になったのかが分かる。

事前に一覧だけを確認したい場合はmise ls --prunableを使う。

$ mise ls --prunable
jq  1.7.1

ツール名を指定して絞り込む

hyperfineなど他のツールもインストールされている状態で、jqだけをprune対象にしたい場合はツール名を指定する。

$ mise prune --dry-run jq
mise pruned configuration links [dryrun]
mise jq@1.7.1 is prunable: jq is required at 1.8.2 by /path/to/project/mise.toml
mise jq@1.7.1 [dryrun]  uninstall
mise jq@1.7.1 [dryrun]  remove ~/.local/share/mise/installs/jq/1.7.1
mise jq@1.7.1 [dryrun]  remove ~/.cache/mise/jq/1.7.1
mise jq@1.7.1 [dryrun]done

hyperfineのバージョンには影響せず、指定したjqの不要なバージョンだけが対象になる。