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