はじめに
最近、Macbook Pro の動きがもっさりしていて、画面を見つめて止まってる無駄な待ち時間が気になっていた。たぶん、引っ越してから若干グレードダウンしたネットワーク環境と、南シナ海の覇権争いの影響で、ネットワークが遅いからというのが原因だと思うものの、Apple がポンポン新しいものを出すので、買うならメモリとディスクはどれくらいが良いのか、利用状況から考えてみようと思った。
スペック:
- MacBook Pro 14-inch, 2023
- Chip: Apple M2 Max
- Memory: 32GB
- macOS: Tahoe 26.3.1
- Storage: 1TB SSD
利用状況
メモリ
フルで使ってそうに見えるけど、macOS は、空きメモリを作らずキャッシュに使うので、ピーク時にもメモリは 6GB くらい余裕あり。
ディスク
80GB くらいしか空いてなかった。これはかなりゴミが溜まってそう。Docker とか。
でも、キャッシュで何百 GB も使う??ということで調査。
犯人はお前だ!Adobe!! (100GB)
$ du -h -d 1 /Applications | sort -hr
107G /Applications
6.4G /Applications/Adobe Premiere Pro 2026
6.1G /Applications/Adobe Premiere Pro 2024
6.1G /Applications/Adobe Premiere Pro 2023
6.0G /Applications/Adobe Photoshop 2026
5.8G /Applications/Adobe Photoshop 2025
5.2G /Applications/Adobe Media Encoder 2024
5.1G /Applications/Adobe Photoshop 2024
5.0G /Applications/Xcode.app
5.0G /Applications/Adobe Media Encoder 2026
5.0G /Applications/Adobe Media Encoder 2023
4.8G /Applications/Adobe Premiere Pro 2025
3.9G /Applications/Adobe Bridge 2026
3.7G /Applications/iMovie.app
3.6G /Applications/Adobe Media Encoder 2025
3.3G /Applications/Adobe Bridge 2024
3.1G /Applications/Adobe Bridge 2025
2.9G /Applications/Adobe Illustrator 2026
2.7G /Applications/Adobe Illustrator 2025
...
Adobe CC の旧バージョンがいっぱい!!
というわけで、最新バージョン以外をアンインストール。不要なアプリケーション本体だけで、60GB くらいあったけど、なんやかんや 100GB 程度消えた。設定は常にデフォルトなのだけど、そのあたり?
今後、旧バージョンが残らないように、 Remove oloder versions のチェックを入れた。
これで、Adobe の無駄なディスク使用はなくなるかな。
Adobe かよ!という感じだが…、普段チェックしてなかったので、盲点でした笑
キャッシュを削除!削除! (150GB)
まぁあとは Docker, Xcode あたりのキャッシュなどだろうと普通に削除していった。
まとめ
| 項目 | 何? | 削減 |
|---|---|---|
| Xcode DeviceSupport | 実機デバッグ | 45GB |
| Xcode DerivedData | ビルド | 10GB |
| Yarn cache | キャッシュ | 30GB |
| Docker | コンテナ等 | 25GB |
結局削除したもので大きかったのは、こんな感じ。
Adobe やその他諸々と合わせて全部で 250GB くらい削除できた。
Xcode
$ rm -rf ~/Library/Developer/Xcode/DerivedData
$ rm -rf ~/Library/Developer/Xcode/DocumentationCache
$ rm -rf ~/Library/Developer/Xcode/iOS\ DeviceSupport/*
Yarn
$ yarn cache clean
Docker
$ docker builder prune -af
$ docker container prune -f
$ docker image prune -af
ボリュームは必要なものがあるので、消さないでおいた。
その他
# brew
$ breaw update
$ brew cleanup
# pip
$ pip3 cache purge
# node family
$ npm cache clean --force
$ pnpm store prune
再発防止
今回、削除したものは、常識的に使っていれば溜まってしまうもので、その掃除をサボっていたのでディスクを圧迫していた。毎度調べて消すのも面倒なので、お掃除スクリプトを作成して実行することにする。
スクリプト(パスは適宜書き換え)
削除系スクリプトなので、コピペで実行せず、中身を確認してお使いください。
#!/bin/zsh
set -euo pipefail
# dev-mac-cleanup.zsh
# Safe-ish cleanup script for developer Macs
# Default: dry run
# Use --apply to actually delete
# Use --with-adobe to include Adobe media cache cleanup
APPLY=0
WITH_ADOBE=0
for arg in "$@"; do
case "$arg" in
--apply)
APPLY=1
;;
--with-adobe)
WITH_ADOBE=1
;;
-h|--help)
cat <<'EOF'
Usage:
zsh dev-mac-cleanup.zsh # dry run
zsh dev-mac-cleanup.zsh --apply # actually delete safe targets
zsh dev-mac-cleanup.zsh --apply --with-adobe
What it cleans:
- Xcode DerivedData
- Xcode DocumentationCache
- Xcode iOS DeviceSupport
- Docker builder cache
- Docker unused images
- Docker stopped containers
- Yarn cache
- Optional: Adobe Media Cache
What it does NOT clean:
- Docker volumes
- OrbStack VM data
- User documents
- node_modules in projects
EOF
exit 0
;;
*)
echo "Unknown option: $arg" >&2
exit 1
;;
esac
done
log() {
printf '%s\n' "$*"
}
run_cmd() {
if [[ "$APPLY" -eq 1 ]]; then
log "[RUN] $*"
eval "$@"
else
log "[DRY] $*"
fi
}
human_size() {
local p="$1"
if [[ -e "$p" ]]; then
du -sh "$p" 2>/dev/null | awk '{print $1}'
else
echo "0B"
fi
}
section() {
echo
echo "=================================================="
echo "$1"
echo "=================================================="
}
total_before_report() {
section "Current major disk usage"
df -h /
echo
du -sh \
"$HOME/Library/Developer/Xcode" \
"$HOME/.lmstudio" \
"$HOME/Library/Application Support/Adobe" \
"$HOME/Library/Containers/com.docker.docker" \
"$HOME/Library/Group Containers/HUAQ24HBR6.dev.orbstack" \
2>/dev/null || true
}
clean_xcode() {
section "Xcode cleanup"
local derived="$HOME/Library/Developer/Xcode/DerivedData"
local docs="$HOME/Library/Developer/Xcode/DocumentationCache"
local support="$HOME/Library/Developer/Xcode/iOS DeviceSupport"
log "DerivedData: $(human_size "$derived")"
log "DocumentationCache: $(human_size "$docs")"
log "iOS DeviceSupport: $(human_size "$support")"
[[ -d "$derived" ]] && run_cmd "rm -rf \"$derived\""
[[ -d "$docs" ]] && run_cmd "rm -rf \"$docs\""
[[ -d "$support" ]] && run_cmd "rm -rf \"$support\"/*"
}
clean_docker() {
section "Docker cleanup"
if ! command -v docker >/dev/null 2>&1; then
log "docker not found, skipping."
return
fi
docker system df || true
echo
run_cmd "docker builder prune -af"
run_cmd "docker container prune -f"
run_cmd "docker image prune -af"
log "Skipping Docker volumes for safety."
}
clean_yarn() {
section "Yarn cache cleanup"
local yarn_cache="$HOME/Library/Caches/Yarn"
log "Yarn cache: $(human_size "$yarn_cache")"
if command -v yarn >/dev/null 2>&1; then
run_cmd "yarn cache clean"
else
log "yarn not installed, skipping."
fi
}
clean_adobe() {
section "Adobe Media Cache cleanup"
local media_cache="$HOME/Library/Application Support/Adobe/Common/Media Cache"
local media_cache_files="$HOME/Library/Application Support/Adobe/Common/Media Cache Files"
log "Media Cache: $(human_size "$media_cache")"
log "Media Cache Files: $(human_size "$media_cache_files")"
[[ -d "$media_cache" ]] && run_cmd "rm -rf \"$media_cache\""
[[ -d "$media_cache_files" ]] && run_cmd "rm -rf \"$media_cache_files\""
}
post_report() {
section "After cleanup"
df -h /
echo
du -sh \
"$HOME/Library/Developer/Xcode" \
"$HOME/.lmstudio" \
"$HOME/Library/Application Support/Adobe" \
"$HOME/Library/Containers/com.docker.docker" \
"$HOME/Library/Group Containers/HUAQ24HBR6.dev.orbstack" \
2>/dev/null || true
}
main() {
if [[ "$APPLY" -eq 1 ]]; then
log "Mode: APPLY"
else
log "Mode: DRY RUN"
fi
total_before_report
clean_xcode
clean_docker
clean_yarn
if [[ "$WITH_ADOBE" -eq 1 ]]; then
clean_adobe
else
section "Adobe Media Cache cleanup"
log "Skipped. Use --with-adobe to include it."
fi
post_report
echo
log "Done."
}
main
launchd 設定
定期実行は、launchd でやる。
以下ファイルを作成
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>dev.cleanup</string>
<key>ProgramArguments</key>
<array>
<string>/bin/zsh</string>
<string>/Users/kura/tools/diskCleaner/dev-mac-cleanup.zsh</string>
<string>--apply</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartCalendarInterval</key>
<dict>
<key>Day</key>
<integer>1</integer>
<key>Hour</key>
<integer>11</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>StandardOutPath</key>
<string>/tmp/dev-cleanup.log</string>
<key>StandardErrorPath</key>
<string>/tmp/dev-cleanup.err</string>
</dict>
</plist>
こういうのは、深夜帯にやっておくのが良いので、毎月1日午前3時とかに設定したいところだが、sleep 状態だと動かないので、毎月1日午前11時(たぶん作業してそうな時間)に実行されるようにした。プラス、RunAtLoad で再起動時にも実行するようにした。
多少緩いが、いったんこれでよしとする。
有効化
$ launchctl load ~/Library/LaunchAgents/dev.cleanup.plist
停止したい場合は、unload
手動実行
$ launchctl start dev.cleanup
ログ確認
/tmp/dev-cleanup.log
/tmp ディレクトリ内は、再起動で消える。消したくなければ別の場所へ。
デベロッパーに必要な Mac のスペック(2026)
ディスクスペースはかなりスッキリした。ちょっとサクサク動いている気がする。
掃除しないのは怠惰として、3年使ってこれくらいの使用量だし、映像編集などするなら話は別だが、ディスクは 1TB あれば充分そう。512GB では明らかに足らない。余裕をみるなら 2TB。
メモリは、32GB で充分かな。余裕をみるなら 64GB。
Chip に関しては、正直よく分からない。いま最新は M5 で、私のは M2 Max とかなり遅そうな気もするが、現状の使用では、おっそいなーとは思わない。なんなら、2013年の MacPro メモリ超盛りでも、Intel Mac は流石に…と思うけど、実際には超イライラしたりはしない。
PC 減価償却期間が 4 年なので、Chip 性能は置いといて、4~5年で買い替え、今なら 1TB・32GB くらいが良さそう。メモリをめっちゃ使う新しい何かが日常的に必要になった場合(LLM ローカル実行とか)は、メモリ容量を考え直す感じで。
というわけで、私は後2年くらいしたら良いのに買い替える。いまじゃない。
そして、ネットワーク環境はアップグレードする。
スペック目処
| 項目 | 目安 |
|---|---|
| Storage | 1TB(最低)/ 2TB(余裕) |
| Memory | 32GB(標準) / 64GB(余裕) |
| Chip | Apple Silicon なら体感差は大きくなさそう |
買い替えは、4〜5年目処。



