cleanmymac について
cleanmymacは、ファイルの検出、安全性の判定、削除を分けて扱うディスククリーンアップ用スキルです。項目を自動削除可能・要確認・保護対象に分類し、対話型の確認や定期実行にも対応します。
主な機能
- 01フォルダーをスキャンしてパスを分類
- 02安全性に応じた3段階の整理
- 03自動削除可能な項目の一括削除
- 04項目ごとの対話型確認
- 05ヒューリスティック分析と定期実行
活用シーン
- 01容量を使う大きなフォルダーの特定
- 02再生成可能なキャッシュの一括削除
- 03アプリデータの削除前確認
- 04定期クリーンアップの設定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ fengyiqicoder/ cleanmymac --skill cleanmymacインストール後、Claude Code で/cleanmymacを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
advisor-heuristics/ai_models.shide_workspaces.shios_backups_old.shlarge_misc.shmedia_caches.shorphaned_app_support.shstale_node_modules.shstale_python_envs.shvm_disks.shmodules/_template.shadobe.shandroid_studio.shapfs_snapshots.sharc.shbrave.shbrew.shbun.shcargo.shchrome.shchromium.shclaude_app.shcocoapods.shcomposer.shconan.shcursor_caches.shcursor_full.shdart_server_cache.shdiagnostic_reports.shdiscord.shdns_cache.sh詳細
CleanMyMac
アーキテクチャ — 検出と判定と実行
3つの独立したレイヤーです。決して混同しないでください。
| レイヤー | 役割 | スクリプト | 元に戻せるか? |
|---|---|---|---|
| 検出 | 任意のパス(デフォルトは$HOME)からファイルシステムをツリー状に走査します。直下の各項目について、判定レジストリでパスを照合し、注釈を付けます。分類機能を内蔵したOmniDiskSweeperのようなものです。 | diskmap.sh | 該当なし(読み取り専用) |
| 判定 | 51個のクリーンアップモジュールと、ハードコードされた「絶対に触れない」リストでレジストリを構成します。任意のパスについて、自動削除して安全/要確認/絶対に触れない/不明のどれに当たるかを判定します。 | lib-registry.sh(diskmapとautocleanで使用) | 該当なし |
| 実行 | 削除します。自動削除して安全な項目は一括処理します。要確認の項目は、1項目ずつ対話形式で処理します。絶対に触れない項目と不明な項目には、ユーザーによる明示的なオプトインが必要です。 | autoclean.sh、execute.sh | キャッシュは再生成されますが、要確認の項目は削除すると永久に失われます |
ワークフロー
フェーズ 1 — diskmapで検出(デフォルト)
~/.claude/skills/cleanmymac/scripts/diskmap.sh
出力:2 GB以上のすべてのフォルダー。分類可能な具体的項目まで自動的に掘り下げ、3つの階層に分類します(「不明」はありません。diskmapはレジストリとヒューリスティックを使って自動分類します)。
| アイコン | 階層 | 意味 |
|---|---|---|
| ✅ | auto_safe | キャッシュ/ビルド成果物(レジストリとの一致、またはキャッシュ名のヒューリスティック)。影響を与えずに一括削除できます。 |
| ⚠️ | review | その他すべて(アプリデータ、サンドボックス化されたアプリ、AIモデルの重み、バックアップ)。項目ごとに判断します。 |
| 🔒 | never_touch | ユーザーデータ、OSファイル、iCloud、Mail、Messages、Keychain、SSH/GPG/AWS。保護されています。 |
特定のパスを掘り下げるには:
diskmap.sh <path> # e.g. diskmap.sh ~/Library
diskmap.sh / --top 20 # full-disk view (some TCC denials expected)
diskmap.sh --threshold 500M # surface anything ≥ 500 MB
diskmap.sh --json # JSON output for parsing
⚠️ 必須の出力ルール — diskmapの出力をそのまま貼り付ける
スキャン結果をユーザーに提示するときは、diskmapの出力を単一のコードフェンス(text … )内に必ずそのまま貼り付けてください。次のことは禁止です。
- ❌ Markdownの表に整形し直す
- ❌ 項目を独自のサブカテゴリ(「AI系/アプリ系/開発系」など)に分ける
- ❌ 列や行を削除したり、列の順序を変更したりする
- ❌ diskmapがすでに出力したものに独自の絵文字/色/アイコンを加える
- ❌ パスを省略したり、モジュール名を変更したりする
diskmapの出力が正式なUIです。これは3つのセクション(✅ AUTO-SAFE/⚠️ NEEDS REVIEW/🔒 NEVER-TOUCH)に分かれた固定幅テキストで、1行につき1項目、形式はSIZE | WHAT IT IS | WHEREです。ユーザーはこのレイアウトを明確に希望しているため、バイト単位でそのまま保持してください。
コードブロックの後には、次のステップを提案する短い文を最大1文だけ追加してもかまいません(例:「まず27.7 GBの安全な項目を削除しましょう → autoclean.sh --auto-safe --yes」)。それ以上詳しく説明しないでください。
フェーズ 2 — autocleanで実行
ユーザーが全体像を把握したら、どのモードを使うか尋ねます。
~/.claude/skills/cleanmymac/scripts/autoclean.sh # scan modules + show 3-tier breakdown
~/.claude/skills/cleanmymac/scripts/autoclean.sh --auto-safe --yes # delete auto-safe in bulk (recommended)
~/.claude/skills/cleanmymac/scripts/autoclean.sh --review # interactive per-item for medium/high
~/.claude/skills/cleanmymac/scripts/autoclean.sh --all # both
--reviewモードでは、中リスク/高リスクの各モジュールについて順に案内します。名前+サイズ+内容+削除した場合の影響を表示し、その後[d]elete / [k]eep / [q]uitと尋ねます。
フェーズ 3 — 不明な項目を掘り下げる(任意)
diskmapに大きな❓不明フォルダーが表示された場合は、掘り下げるよう提案します。
diskmap.sh ~/.cursor # for example, if .cursor was big and unclassified
diskmap.sh ~/Library/Containers
安全に再生成できるデータ(新しいAIツールのキャッシュなど)だと判明したフォルダーについては、レジストリにモジュールを追加するよう提案します。src/modules/<name>.shとホワイトリストのエントリーを含むPRを作成してください。
フェーズ 4 — Smart Advisor(任意、補完的)
advisor.shは、パスだけではdiskmapが自動分類できない項目(任意のプロジェクトにある古いnode_modules、古くなったconda環境、ダウンロード済みのチャットメディアなど)に対して、9つの特定のヒューリスティックを実行します。diskmapに、これらのパターンに一致する不明なフォルダーが表示された場合に使用してください。
~/.claude/skills/cleanmymac/scripts/advisor.sh --interactive
フェーズ 5 — スケジュール設定(任意)
「確認しなくても、毎週自動クリーンアップを実行しますか?」と尋ねます。
~/.claude/skills/cleanmymac/scripts/schedule.sh
対話形式で、頻度(毎週/隔週/毎月/カスタム)と対象範囲を選択します。ほとんどのユーザーには、毎週+安全な項目のみがおすすめです。
フェーズ 6 — 最終レポート
- 回収した容量(自動削除対象+要確認の合計)
- 確認した項目(保持した項目と削除した項目)
- スケジュールの状態
- ユーザーが掘り下げなかった、容量の大きな不明項目 — 項目を列挙し、モジュールへの貢献を提案します
実行してはいけないこと
- ❌ ユーザーに言われても、内容を見せる(中まで調べる)前に
❓ unknownのパスを削除しないでください - ❌ 明示的に項目ごとの許可を得ずに、レビュー階層内のものを削除しないでください
- ❌
rm -rfを直接実行しないでください。削除はすべてsafe_rm(ホワイトリストによる制限あり)経由で行ってください - ❌ いかなる理由があっても、ホワイトリストを回避しないでください
- ❌
--with-sudoの同意なしにsudoを実行しないでください - ❌
docker volume pruneを実行しないでください(ビルド時に禁止されています) - ❌
🔒 never_touchリストには一切触れないでください:~/Documents、~/Desktop、~/Pictures、~/Movies、~/Music、~/Library/Mobile Documents(iCloud)、~/Library/Mail、~/Library/Messages、~/Library/Keychains、~/.ssh、~/.gnupg、~/.aws - ❌ ブラウザーの
Cookies、Login Data、History、Bookmarks、Preferencesには一切触れないでください - ❌ 外部ボリュームやネットワークボリュームには一切触れないでください。対象は
/のみです - ❌ 中リスク/高リスクのモジュールを「安全に削除できる」として提示しないでください。理由があってレビュー階層に分類されています
表面化させるべき危険信号
- 🚨 不明データの合計が 50 GB 超 — 未分類データが大量にあります。削除する前に中まで調べてください
- 🚨 単一の不明フォルダーが 10 GB 超 — ほぼ常に調査する価値があります(仮想マシン、AI モデル、放置されたプロジェクトの依存関係など)
- 🚨 単一のレビュー項目が 5 GB 超 — いったん保留し、ユーザーが本当に削除を希望しているか再確認してください
- 🚨 クリーンアップ後の空き容量が 5 GB 未満 —
diskmapで ❓ unknown の中まで調べるよう提案してください - 🚨 Docker/Xcode が実行中 —
docker pruneでは実行中のコンテナーはスキップされます。DerivedData がロックされている可能性があります。先に終了するよう提案してください - ⚠️ diskmap で TCC のアクセス許可が拒否された場合 — 「true size ≥ X GB」の行を表示し、正確な合計を確認したい場合は「システム設定」で「フルディスクアクセス」を許可できることを伝えてください
- ⚠️ レビュー階層に 5 GB 超の iOS バックアップが含まれる場合 — バックアップは自動的には復元できません。念のため 2 回確認してください
言語/i18n
すべてのスクリプトは $LANG から言語を自動検出します(zh* → 中国語、それ以外 → 英語)。ユーザーが中国語で会話していても、シェルの $LANG が en_US.UTF-8(macOS ではよくある設定)の場合、ディスクレポートは英語で出力されます。これは適切ではありません。
対処法:スクリプトを実行する前に、会話の言語に合わせて CLEAN_MY_MAC_LANG をエクスポートしてください。この設定は常に $LANG より優先されます:
CLEAN_MY_MAC_LANG=zh ~/.claude/skills/cleanmymac/scripts/autoclean.sh
CLEAN_MY_MAC_LANG=en ~/.claude/skills/cleanmymac/scripts/diskmap.sh
この上書き設定は、lib.sh によってエクスポートされる MAC_LANG 経由で、後続のすべてのスクリプトに引き継がれます。翻訳辞書は references/i18n.sh にあり、英語の原文をキーとする gettext 形式です。文字列を追加するには、呼び出し箇所で $(i18n "English literal") で囲み、_i18n_zh の下に case 分岐を追加してください。
参考資料
- whitelist.txt —
safe_rmが操作できるパス - whitelist.md — ホワイトリストの説明
- safety-rules.md — すべてのスクリプトが適用する不変条件
- cleanup-catalog.md — 各モジュールの目的、サイズ、復元方法
- i18n.sh — 翻訳辞書(新しい言語を追加するには、新しい
_i18n_<code>関数とディスパッチ分岐を追加)