mcpField
C
cleanmymac

cleanmymac

github.com/fengyiqicoder生産性1184 回インストール22 週間前に更新
リポジトリ

cleanmymac について

cleanmymacは、ファイルの検出、安全性の判定、削除を分けて扱うディスククリーンアップ用スキルです。項目を自動削除可能・要確認・保護対象に分類し、対話型の確認や定期実行にも対応します。

主な機能

  1. 01フォルダーをスキャンしてパスを分類
  2. 02安全性に応じた3段階の整理
  3. 03自動削除可能な項目の一括削除
  4. 04項目ごとの対話型確認
  5. 05ヒューリスティック分析と定期実行

活用シーン

  1. 01容量を使う大きなフォルダーの特定
  2. 02再生成可能なキャッシュの一括削除
  3. 03アプリデータの削除前確認
  4. 04定期クリーンアップの設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/fengyiqicoder/cleanmymac --skill cleanmymac

インストール後、Claude Code で/cleanmymacを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

advisor-heuristics/
ai_models.sh
ide_workspaces.sh
ios_backups_old.sh
large_misc.sh
media_caches.sh
orphaned_app_support.sh
stale_node_modules.sh
stale_python_envs.sh
vm_disks.sh
modules/
_template.sh
adobe.sh
android_studio.sh
apfs_snapshots.sh
arc.sh
brave.sh
brew.sh
bun.sh
cargo.sh
chrome.sh
chromium.sh
claude_app.sh
cocoapods.sh
composer.sh
conan.sh
cursor_caches.sh
cursor_full.sh
dart_server_cache.sh
diagnostic_reports.sh
discord.sh
dns_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 には一切触れないでください
  • ❌ 外部ボリュームやネットワークボリュームには一切触れないでください。対象は / のみです
  • ❌ 中リスク/高リスクのモジュールを「安全に削除できる」として提示しないでください。理由があってレビュー階層に分類されています

表面化させるべき危険信号

  1. 🚨 不明データの合計が 50 GB 超 — 未分類データが大量にあります。削除する前に中まで調べてください
  2. 🚨 単一の不明フォルダーが 10 GB 超 — ほぼ常に調査する価値があります(仮想マシン、AI モデル、放置されたプロジェクトの依存関係など)
  3. 🚨 単一のレビュー項目が 5 GB 超 — いったん保留し、ユーザーが本当に削除を希望しているか再確認してください
  4. 🚨 クリーンアップ後の空き容量が 5 GB 未満 — diskmap で ❓ unknown の中まで調べるよう提案してください
  5. 🚨 Docker/Xcode が実行中 — docker prune では実行中のコンテナーはスキップされます。DerivedData がロックされている可能性があります。先に終了するよう提案してください
  6. ⚠️ diskmap で TCC のアクセス許可が拒否された場合 — 「true size ≥ X GB」の行を表示し、正確な合計を確認したい場合は「システム設定」で「フルディスクアクセス」を許可できることを伝えてください
  7. ⚠️ レビュー階層に 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> 関数とディスパッチ分岐を追加)

コメント