macOSで空き容量を増やす〜xcode関連の不要なファイル削除
macを使い始めてはやくも15年、iOSアプリ開発では10年以上の月日が経ちました。 とくにMac BookでXCodeを使っている方は、いつの間にかハードディスク容量が少なくなって、不要なゴミファイルを削除しなければならないことありますよね。 私も定期的にやるのですが、毎回その場でググって不要ファイルを探すことをしていました。毎回確認するのは面倒ですし、不安感がありますので、削除対象となるディレクトリを記事に残すことにしました。
▼ ファイル削除という危険な作業が伴いますので、免責事項をお読みの上、各自が自己責任で行なってください。
はじめに「rmは使わない」
Finderでdeleteする方なら問題ないですが、ターミナルから操作する方は rm コマンド使うのやめましょう。rm コマンドで削除するとゴミ箱に入りませんので、元に戻すことが困難になります。 rm コマンドによる失敗談は色々な方々からよく聞く話です。私も先日ついうっかりタイプミスしてしまい、危うく人生を詰むところでした。
rm の代わりに、trash-cli を使うのが便利です。trash-cli については、記事のさいごで解説しました。 また、mv コマンドを使って、$ mv 削除対象 ~/.Trash とすればゴミ箱へ移動できます。 私は、mv の方法でゴミ箱に移してから削除するようにしてます。といっても、rm が簡単に実行できてしまうと、そのうち使いたくなってしまいますから、次の方法で rm を実行不可能にしておくのがおすすめです。
rmを使えないようにする
zshでの設定だとこんな感じです。
$ vi ~/.zshrc
以下追記します。
alias rm='echo "This is not the command you are looking for."; false'
シェルに設定を反映させます。
$ source ~/.zshrc
rmが使えないことを確認します。
$ rm hoge
This is not the command you are looking for.
これで安心ですね。
【ビフォアー】macOSの容量
ファイルサイズの大きなディレクトリを探す
du コマンドを使って、ファイルサイズの大きなディレクトリを探してみます。$ du -sh ~/Library/Developer/*
12G /Users/somebody/Library/Developer/CoreSimulator
0B /Users/somebody/Library/Developer/XCTestDevices
27G /Users/somebody/Library/Developer/Xcode
Xcodeをアップデートするたびに、このようにiOSシミュレータやXcode関連が肥大化します。
容量の大きい不要なファイルを削除する
それではこれから、容量の大きい不要なファイルを削除していきます。
~/Library/Developer/CoreSimulator
~/Library/Developer/CoreSimulator/ $ du -sh *
9.6G Caches
2.4G Devices
0B Temp
不要なシミュレータの削除
Xcodeをアップデートするたびに、シミュレーターが溜まっていきます。使わないものは削除してしまいましょう。 $ xcrun simctl list でシミュレータ一覧が表示できます。
~/Library/Developer/CoreSimulator/ $ xcrun simctl list
== Device Types ==
iPhone 4s (com.apple.CoreSimulator.SimDeviceType.iPhone-4s)
iPhone 5 (com.apple.CoreSimulator.SimDeviceType.iPhone-5)
iPhone 5s (com.apple.CoreSimulator.SimDeviceType.iPhone-5s)
iPhone 6 Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus)
iPhone 6 (com.apple.CoreSimulator.SimDeviceType.iPhone-6)
...
Apple TV (com.apple.CoreSimulator.SimDeviceType.Apple-TV-1080p)
Apple TV 4K (com.apple.CoreSimulator.SimDeviceType.Apple-TV-4K-4K)
...
Apple Watch - 38mm (com.apple.CoreSimulator.SimDeviceType.Apple-Watch-38mm)
Apple Watch Series 7 - 41mm (com.apple.CoreSimulator.SimDeviceType.Apple-Watch-Series-7-41mm)
Apple Watch Series 7 - 45mm (com.apple.CoreSimulator.SimDeviceType.Apple-Watch-Series-7-45mm)
== Runtimes ==
iOS 15.5 (15.5 - 19F70) - com.apple.CoreSimulator.SimRuntime.iOS-15-5
tvOS 15.4 (15.4 - 19L439) - com.apple.CoreSimulator.SimRuntime.tvOS-15-4
watchOS 8.5 (8.5 - 19T241) - com.apple.CoreSimulator.SimRuntime.watchOS-8-5
== Devices ==
-- iOS 15.5 --
iPhone 8 (0BD33883-A354-44A8-AF4B-DA35F274B6A6) (Shutdown)
iPhone 8 Plus (1F86100C-B6FB-4C29-AD0B-AC576AB9111C) (Shutdown)
iPhone 11 (824BA648-A99D-4856-8BC9-E2BF4D8A3089) (Shutdown)
iPhone 11 Pro (9B816A48-37C8-4700-BFE6-F4371A0CD60C) (Shutdown)
...
-- Unavailable: com.apple.CoreSimulator.SimRuntime.iOS-14-4 --
iPhone 8 (D6C43353-3C2C-4BA5-8F23-C15BC69A4C6F) (Shutdown) (unavailable, runtime profile not found)
iPhone 8 Plus (82D18BC2-1444-4B50-9C57-4A5477F60C9A) (Shutdown) (unavailable, runtime profile not found)
iPhone 11 (C2649B4C-AA96-4DE3-BD52-4D0EDB58A167) (Shutdown) (unavailable, runtime profile not found)
iPhone 11 Pro (E563F1E4-D7B9-4F16-AD64-F9E6E9794CCF) (Shutdown) (unavailable, runtime profile not found)
iPhone 11 Pro Max (97710DA9-3D0B-4B77-98B1-322048DB6FC2) (Shutdown) (unavailable, runtime profile not found)
iPhone SE (2nd generation) (83E3B880-D855-4634-89B8-8A6E8563BE1C) (Shutdown) (unavailable, runtime profile not found)
iPhone 12 mini (706C5CF8-4F01-452E-B0BB-7A02FAA71440) (Shutdown) (unavailable, runtime profile not found)
iPhone 12 (6420F144-E4D5-4626-8727-B538B5AC70D3) (Shutdown) (unavailable, runtime profile not found)
iPhone 12 Pro (F8D65040-9DA3-4149-B222-4C9FA75C6882) (Shutdown) (unavailable, runtime profile not found)
iPhone 12 Pro Max (BC934548-FB3D-43F3-BE3F-155E0CBE7CB3) (Shutdown) (unavailable, runtime profile not found)
...
== Device Pairs ==
08FA165D-D758-4DDC-8C9A-DD0034474FBF (active, disconnected)
Watch: Apple Watch Series 5 - 40mm (6FAB13BF-237F-4A68-A20C-C53FCAEE53A0) (Shutdown)
Phone: iPhone 12 Pro (96D27B12-6405-4DD6-9F32-9E4F2B342491) (Shutdown)
5D62959F-BA80-46F5-AB36-79038C0EB45D (active, disconnected)
Watch: Apple Watch Series 5 - 44mm (76F14EC4-9F54-4F3F-A440-502F641A67F1) (Shutdown)
Phone: iPhone 12 Pro Max (2E140120-FDFB-48E2-8906-16941AF06629) (Shutdown)
...
リスト中の Unavailable となっているものは、使えなくなった過去のデバイスイメージなので削除してOKです。個別に削除するのは面倒なので、次のコマンドで一括削除しましょう。
$ xcrun simctl delete unavailable
12GBから0.5GBまで削減できましたね!
$ du -sh *
0B Caches
587M Devices
0B Temp
さらに、Apple TV や Apple Watch の開発をすることがないのであれば、それらのシミュレータも個別に削除して大丈夫です。
$ xcrun simctl list で表示したリストの()内のハッシュを使って、次のようにして削除できます。$ xcrun simctl delete 6FAB13BF-237F-4A68-A20C-C53FCAEE53A0
~/Library/Developer/Xcode/Archives/
~/Library/Developer/Xcode/Archives/ は、ipa 作成時に生成されるファイルです。かなり容量をくらいますので、不要なものは削除してしまいます。$ du -sh ~/Library/Developer/Xcode/Archives/*
150M /Users/somebody/Library/Developer/Xcode/Archives/2021-04-08
167M /Users/somebody/Library/Developer/Xcode/Archives/2021-04-18
167M /Users/somebody/Library/Developer/Xcode/Archives/2021-04-21
166M /Users/somebody/Library/Developer/Xcode/Archives/2021-04-22
344M /Users/somebody/Library/Developer/Xcode/Archives/2021-05-13
186M /Users/somebody/Library/Developer/Xcode/Archives/2021-05-14
186M /Users/somebody/Library/Developer/Xcode/Archives/2021-05-16
183M /Users/somebody/Library/Developer/Xcode/Archives/2021-05-19
158M /Users/somebody/Library/Developer/Xcode/Archives/2021-05-20
167M /Users/somebody/Library/Developer/Xcode/Archives/2021-05-24
312M /Users/somebody/Library/Developer/Xcode/Archives/2021-06-17
159M /Users/somebody/Library/Developer/Xcode/Archives/2021-08-03
504M /Users/somebody/Library/Developer/Xcode/Archives/2021-10-11
166M /Users/somebody/Library/Developer/Xcode/Archives/2021-11-30
167M /Users/somebody/Library/Developer/Xcode/Archives/2022-06-30
167M /Users/somebody/Library/Developer/Xcode/Archives/2022-07-08
~/Library/Developer/Xcode/DerivedData
~/Library/Developer/Xcode/DerivedData には中間生成ファイルが溜まります。中間生成ファイルは、アプリ単位でビルド時に作成されるようです。これらも削除して問題ありません。$ du -sh ~/Library/Developer/Xcode/DerivedData/*
91M /Users/somebody/Library/Developer/Xcode/DerivedData/HelloAR-hjhyrhffmlqcezcucbzwjrkvrggp
2.2G /Users/somebody/Library/Developer/Xcode/DerivedData/ModuleCache.noindex
16K /Users/somebody/Library/Developer/Xcode/DerivedData/Runner-adwhctgybgeatcaxsvakcefgbssj
12K /Users/somebody/Library/Developer/Xcode/DerivedData/Runner-bzolbyuahookqagriiseqmffbxay
20K /Users/somebody/Library/Developer/Xcode/DerivedData/Runner-dfxasebahtuiumdrxgiwesffxmlx
12K /Users/somebody/Library/Developer/Xcode/DerivedData/Runner-eijrgqukwdpvwgbdtvdqworklcwu
32K /Users/somebody/Library/Developer/Xcode/DerivedData/Runner-ekohwgznlowtiqczqcozsckoxvjl
43M /Users/somebody/Library/Developer/Xcode/DerivedData/Runner-fcslfemuljftxwbzrfopwswkrxjl
28K /Users/somebody/Library/Developer/Xcode/DerivedData/Runner-figweoemiacscoeoewvmfuqjxnbz
2.8M /Users/somebody/Library/Developer/Xcode/DerivedData/Runner-gcsrfumiimzmbrewlknluxemikus
30M /Users/somebody/Library/Developer/Xcode/DerivedData/SymbolCache.noindex
12K /Users/somebody/Library/Developer/Xcode/DerivedData/Unsaved_Xcode_Document_2-basqnhuaoxmgrvgdayxwyfnhuhze
12K /Users/somebody/Library/Developer/Xcode/DerivedData/Unsaved_Xcode_Document_3-btfmodptmwemmrewsoclplwjvwif
953M /Users/somebody/Library/Developer/Xcode/DerivedData/chazuke4ios-focvtlphbmsmgjamyxczqosscjbn
362M /Users/somebody/Library/Developer/Xcode/DerivedData/harmonize-gmvziyvhubbmtcgbghtuyrgduwfr
409M /Users/somebody/Library/Developer/Xcode/DerivedData/memo-edpaxhpaeddyzlckraidasgbuqzy
105M /Users/somebody/Library/Developer/Xcode/DerivedData/radio-bfyhfszmaeokcgghgvhztscerdvi
~/Library/Developer/Xcode/iOS DeviceSupport
~/Library/Developer/Xcode/iOS DeviceSupport 下は、XcodeがiOS実機端末との接続を認識したタイミングで作成されるファイルです。iOSのバージョンをアップデートする度に新しいファイルが増えていきますので、全部削除してしまいます。$ du -sh ~/Library/Developer/Xcode/iOS\ DeviceSupport/*
3.8G /Users/somebody/Library/Developer/Xcode/iOS DeviceSupport/14.4.2 (18D70)
4.0G /Users/somebody/Library/Developer/Xcode/iOS DeviceSupport/14.5.1 (18E212)
5.1G /Users/somebody/Library/Developer/Xcode/iOS DeviceSupport/15.1 (19B74) arm64e
5.3G /Users/somebody/Library/Developer/Xcode/iOS DeviceSupport/15.4.1 (19E258) arm64e
ここまでで、Xcode関連の不要ファイルは削除できました。ここからは、そのほかの不要ファイルの見つけ方をお伝えしていきます。
使ってないアプリはできるだけアンインストールする
使っていないのにインストールしたアプリを持ち続けていませんか?本当に必要になれば、あとから入手可能です。しばらく使ってないアプリはガンガン削除します。
使わないフォントを削除
Font Book.app を開いて、使わないフォントを command + delete で削除してしまいましょう。アラビア文字とかフリーフォントとか使わないだろうと思うものは削除しました。文字入力は「ことえり」、ブラウザは「Safari」でGoogleは使わない
今までは「Google日本語入力」+「Chrome」がデフォルトでしたが、この機会にアンインストールしてみました。macOSにバンドルされている「ことえり」+「Safari」で運用してみます。
たまにしか使わないファイルはUSBメモリへ移す
たまにしか使わない容量の大きなファイルは、USBメモリへ移して管理すると良さそうです。
- 容量の大きな動画
- 音楽データ
- 過去の写真
- 自炊した電子書籍
こちらは私が使っているUSBメモリです。タイプCなのでMacbookに直接させますし、驚くほど小型なのに128GBも容量あります。
【アフター】macOSの容量
ここまででOSやXcodeの動作に問題ありませんでしょうか? 問題なければ、さあゴミ箱を空にしましょう!
この「ゴミ箱を空にする」ときの音がたまらないですよね!
約50GBも空き容量を増やすことに成功しました!
rmの代わりにtrash-cliをつかう
さいごに、 trash-cli の使い方を簡単に解説します。詳しくは公式ページをご覧ください。 GitHub - andreafrancia/trash-cli: Command line interface to the freedesktop.org trashcan.
trash-cliのインストール
$ brew install trash-cli
trash-cliで削除
$ touch hoge
$ trash-put hoge
$ trash-list
2022-07-10 09:25:26 /Users/somebody/workspace/hoge
$ trash-restore
0 2022-07-10 09:25:26 /Users/somebody/workspace/hoge
What file to restore [0..0]: 0
$ ls
hoge
マッチパターンで削除
$ trash-rm \*.o
ゴミ箱の場所は?
trash-cli を使うと、macOS標準のゴミ箱とは違う場所へ移動されます。$ tree ~/.local/share/Trash/
/Users/somebody/.local/share/Trash/
├── files
│ └── hoge
└── info
└── hoge.trashinfo
2 directories, 2 files
ゴミ箱を空にする
$ trash-empty
{{}}