Windows はアプリごとにキャッシュを持っていて、Tempなどにまとめて管理する文化がない。
まぁLinuxとかRuby Bundler なんかも同じなんですけど。
せめて、Windowsのディスクのクリーンアップが「$APPDATA/**/Cache」フォルダの中身は容赦なく消すぞ。みたいな仕様にしてくれたらなぁっと思う。
キャッシュ関連を削除
rm -Recurse -Force -Confirm:$false C:\Users\takuya\AppData\Local\NuGet\Cache\* rm -Recurse -Force -Confirm:$false C:\Users\takuya\scoop\cache\* rm -Recurse -Force -Confirm:$false 'C:\ProgramData\Package Cache\*' rm -Recurse -Force -Confirm:$false C:\ProgramData\chocolatey\logs\chocolatey.*.log rm -Recurse -Force -Confirm:$false C:\ProgramData\chocolatey\logs\choco.summary.*.log rm -Recurse -Force -Confirm:$false C:\ProgramData\ChocolateyHttpCache/* rm -Recurse -Force -Confirm:$false C:\ProgramData\Emurasoft\EmEditor\updates\* rm -Recurse -Force -Confirm:$false 'C:\ProgramData\Apple Computer\Installer Cache\*' ## ゴミ箱を空に echo y | powershell Clear-RecycleBin
他にも、キャッシュを持ってるフォルダは見つかり次第に追加していこうと思う
タスクスケジューラに登録する。
こんな感じで、コマンドを登録して、定期的に実行することにした。
<?xml version="1.0" encoding="UTF-16"?> <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task"> <RegistrationInfo> <Date>2024-09-11T14:42:35.0215253</Date> <Author>takuya</Author> <URI>\takuya\Cleanup Caches</URI> </RegistrationInfo> <Triggers /> <Principals /> <Settings /> <Actions Context="Author"> <Exec> <Command>powershell.exe</Command> <Arguments>-WindowStyle Hidden -ExecutionPolicy Bypass -File ""C:\Users\takuya\misc-app\maintenance\remove-cache.ps1"</Arguments> </Exec> </Actions> </Task>
キャッシュは溜めないでほしい
キャッシュがSSD居座ることで、SSDの容量に居座る。そのためログとキャッシュある箇所は二度と書き込みされないのに、ずっとデータが有る。SSDはキャッシュの箇所など認識しないので、データ有りとなる。SSDは空き容量をやりくりながら書き込みを平準化する。SSDを容量ギリギリ迄使っていると、結果としていつも同じ箇所に書き込みが続いて、寿命を縮めることになる。
アプリつくる人はキャッシュ消せよ!1年以上も残してるんじゃないよ。っていうかボリューム・シャドウコピーがあるんだから、ボリューム・シャドウコピーを前提として上書きしてほしい。ボリューム・シャドウコピーならWindowsが管理してくれるんだから。
起動用のキャッシュならともかく、アップデート用のキャッシュは複数溜まってたりするので絶対に消してほしい。