Windowsネイティブ(PowerShell)で動くパッケージ管理システムChocolatey がとっても便利で、MSYS2のpacmanでインストールできないものについてはこちらを使わせてもらっているのだが、一つ問題がある。choco upgradeコマンドでパッケージをアップグレードすると、古いバージョンが残ってしまうのだ。よりによってghcやopenjdk8といったでかいパッケージの旧バージョンが残ってしまうので放置するとストレージが逼迫する原因となってしまう。
とりあえずの対策は非常に簡単で、choco upgradeではなく、 choco uninstallしてからchoco installすればいい。が、誤って先に choco upgradeをしてしまった場合、一旦choco uninstallした後、旧バージョンをinstallし直し、uninstallしてもう一度最新版をinstallするという煩雑な手順が必要になってしまう。
いつも僕が行っている、理想的(と思われる)手順は
choco upgrade all --noop # アップグレード可能なパッケージ一覧を見る
# ghcとvimとopenjdk8がアップグレード可能だとすると
choco uninstall ghc vim openjdk8 -y
choco install ghc vim openjdk8 -yとなる。逆に、誤ってupgradeを実行してしまった場合は
choco upgrade all --noop
choco upgrade all -p # アップグレード可能なパッケージを全部アップグレード
choco uninstall ghc vim openjdk8 -y
choco install ghc --version=<ghcの旧バージョン> -y
choco install openjdk8 --version=<openjdk8の旧バージョン> -y
choco install vim --version=<vimの旧バージョン> -y
choco uninstall ghc vim openjdk8 -y
choco install ghc vim openjdk8 -yとなる。バージョンを指定してインストールしないといけないので、1パッケージずつインストールし直す必要がある。めんどくさい。
ちなみにChocolateyのGitHub issueにて報告されている。が、放置されているようだ。choco upgradeに--uninstall-firstみたいなフラグを追加したらいいんじゃないかとちょっと思う。