~/Library/Caches:このブログの半分を陰で支える、たった1つのフォルダ
Mac の ~/Library/Caches に何が溜まっているのかを解説します。アプリごとの容量をサイズ順に確認する方法と、削除しても安全な範囲がわかります。
この種のガイドは、現在のところ英語版のほうが充実しています。 すべての記事を見る
このブログの記事を2つ以上読んだことがあるなら、あるパターンに気づいているはずです。DerivedData、 ブラウザのキャッシュ、Electron アプリのキャッシュ、CocoaPods、JetBrains のインデックス——その大 部分が、1つの単一のディレクトリの下のどこかに存在しています。アプリごとにではなく、このディレク トリそのものを一度直接見てみる価値があります。
open ~/Library/Caches
Finder はデフォルトで ~/Library を隠しています——Finder の Go メニューをクリックしながら
Option キーを押すと表示されるか、上記の open コマンドを使えば、隠しフォルダの設定を完全に
迂回できます。
このフォルダが存在する理由と、設計として安全である理由
~/Library/Caches は、まさにこの目的——どのアプリでも再生成やダウンロードし直せて、OS がディス
ク逼迫時に明示的にパージしてよいデータ——のために Apple 自身が用意した場所です。これは開発者が考
案した慣習ではなく、Apple のファイルシステムレイアウトに正式に文書化された部分であり、行儀の良い
Mac アプリはすべて、重要でないものについてここを使うことになっています。
この一点こそが、ディスク上の他のほぼどこよりもこのフォルダを広範囲に消しても安全にしている理由で す。Apple 自身の設計により、ここにあるものが重要な何かの唯一のコピーであるはずはないのです。 実際上の例外——Caches フォルダを本当は使い捨てではないデータのために誤用している一部のアプリ—— は、名指しする価値があるほど稀であり、この記事でも以下で具体的に扱います。
サイズ順にランク付けして、直接読み取る
du -sh ~/Library/Caches/* 2>/dev/null | sort -hr | head -30
1年以上使われているほぼどの Mac でも、このコマンド1つで、このブログの他のガイドで扱っているのと
まったく同じ名前が浮かび上がってきます。com.apple.Safari、Google/Chrome、org.swift.swiftpm、
Homebrew、CocoaPods、pip、JetBrains、加えて、個別に確認しようとは思いもしなかったであろ
う何十もの小さなエントリです。
フォルダ名はほとんどの場合、逆引き DNS 形式のバンドル識別子
(com.company.AppName)か、そのままのパッケージ名(pip、Homebrew)です——見覚えのない名前
があれば、mdfind "kMDItemCFBundleIdentifier == '<the-name>'" でたいてい、どのインストール済み
アプリに属するものか分かります。
一括で安全なアプローチ
ほとんどの人にとって、ほとんどの場合、これは本当に問題ありません。
rm -rf ~/Library/Caches/*
行儀の良いアプリはすべて、次に起動したときにこのフォルダから必要なものを再構築します——それがこ のディレクトリが存在する理由そのものです。目に見えるコストは、このブログの他の場所で扱っている個 々のコストの合計にすぎません。ブラウザはリソースを再取得し、パッケージマネージャーは次のインスト ール時に再ダウンロードし、Xcode のインデックスは再構築される、といった具合です——何も壊れず、い くつかの動作が一時的に遅くなるだけです。
名前で知っておく価値のある例外
ごく少数のアプリは、自分の Caches サブフォルダを「キャッシュ」という言葉が示すよりも失うと困る データのために使っており、それぞれ別記事でさらに詳しく扱っています。
- Slack の
IndexedDBには未送信の下書きメッセージが保存されていることがあります—— Slack と Discord のガイド を参照してください。 - ローカルファーストのストレージとして IndexedDB を使う任意のアプリ(一部の PWA、一部のメモ アプリ)——ブラウザキャッシュのガイド を参照して ください。
- Docker のキャッシュは、そもそもこのフォルダの外に存在します——
~/Library/Cachesではな く、~/Library/Containersの中の VM ディスクイメージの内部にあります。これを知っておくと、 Caches を一括で消してもそれで Docker まで対処したような錯覚に陥らずに済みます。詳しくは Docker のディスク容量ガイド を参照してください。
このブログで扱っている残りのもの——DerivedData は技術的には ~/Library/Caches ではなく
~/Library/Developer の下にあり、これもこのフォルダの影響範囲のすぐ外側にある、知っておく価値の
あるもう1つのフォルダです——は、直接 ~/Library/Caches の中にあるか、Apple がわずかに異なるトッ
プレベルディレクトリに分類していても「安全に再生成できる」という同じ原則に支配されているかのどち
らかです。
それでも一括削除よりスキャンのほうが優れている理由
rm -rf ~/Library/Caches/* は安全ですが、盲目的でもあります——45GBのうち40GBがどの3つのアプリの
せいなのかは教えてくれませんし、それが起きる前に上記の Slack の IndexedDB の例外について警告して
くれることもありません。1バイト単位まで、名前付きで整理された内訳があれば、「キャッシュフォルダ
を消して祈る」が「実際に知っておく価値のある4つのこと、優先順位付きで」に変わります。
DevCruft は、開発中の開発者向け無料 Mac アプリです。まさにこのフォルダ——加えて DerivedData、
Docker のコンテナストレージ、そのすぐ外側にある他のすべて——を読み取り、上記の du コマンドと同じ
ランク付けされた内訳を、バンドル識別子を自分で調べなくても、それぞれが実際に何であり安全かどうか
というラベル付きで表示できるように作っています。公開時にお知らせを受け取りたい方は
ウェイトリスト に登録してください。
これは今回追加された10本のガイドの最後の1本です。開発者の Mac を埋め尽くすあらゆるものについて の、より広範な最初のツアーについては、 開発者向けストレージ完全ガイド から始めてください。