macOSで空き容量を増やす〜xcode関連の不要なファイル削除

macOSで空き容量を増やす〜xcode関連の不要なファイル削除
macOSで空き容量を増やす〜xcode関連の不要なファイル削除

macを使い始めてはやくも15年、iOSアプリ開発では10年以上の月日が経ちました。 とくにMac BookでXCodeを使っている方は、いつの間にかハードディスク容量が少なくなって、不要なゴミファイルを削除しなければならないことありますよね。 私も定期的にやるのですが、毎回その場でググって不要ファイルを探すことをしていました。毎回確認するのは面倒ですし、不安感がありますので、削除対象となるディレクトリを記事に残すことにしました。

▼ ファイル削除という危険な作業が伴いますので、免責事項をお読みの上、各自が自己責任で行なってください。

当サイトに掲載されている情報の正確性については万全を期しておりますが、当方は利用者が当サイトの情報を用いて行う一切の行為について、何らの責任を負うものではありません。利用者に生じた損害につき、当方としては責任を負いかねますので御了承ください。

はじめに「rmは使わない」

Finderでdeleteする方なら問題ないですが、ターミナルから操作する方は rm コマンド使うのやめましょう。rm コマンドで削除するとゴミ箱に入りませんので、元に戻すことが困難になります。 rm コマンドによる失敗談は色々な方々からよく聞く話です。私も先日ついうっかりタイプミスしてしまい、危うく人生を詰むところでした。

rmで人生詰む
rmで人生詰む

rm の代わりに、trash-cli を使うのが便利です。trash-cli については、記事のさいごで解説しました。 また、mv コマンドを使って、$ mv 削除対象 ~/.Trash とすればゴミ箱へ移動できます。 私は、mv の方法でゴミ箱に移してから削除するようにしてます。

といっても、rm が簡単に実行できてしまうと、そのうち使いたくなってしまいますから、次の方法で rm を実行不可能にしておくのがおすすめです。

rmを使えないようにする

zshでの設定だとこんな感じです。

zsh
$ vi ~/.zshrc

以下追記します。

zsh
alias rm='echo "This is not the command you are looking for."; false'

シェルに設定を反映させます。

zsh
$ source ~/.zshrc

rmが使えないことを確認します。

zsh
$ rm hoge 
This is not the command you are looking for.

これで安心ですね。

【ビフォアー】macOSの容量

【ビフォアー】macOSの容量
【ビフォアー】macOSの容量

ファイルサイズの大きなディレクトリを探す

du コマンドを使って、ファイルサイズの大きなディレクトリを探してみます。
zsh
$ 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

zsh
~/Library/Developer/CoreSimulator/ $ du -sh *
9.6G	Caches
2.4G	Devices
  0B	Temp
Caches はその名の通りキャッシュなので、~/Library/Developer/CoreSimulator/Caches/* 以下は削除してしまいます。

不要なシミュレータの削除

Xcodeをアップデートするたびに、シミュレーターが溜まっていきます。使わないものは削除してしまいましょう。 $ xcrun simctl list でシミュレータ一覧が表示できます。

zsh
~/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です。個別に削除するのは面倒なので、次のコマンドで一括削除しましょう。

zsh
$ xcrun simctl delete unavailable

12GBから0.5GBまで削減できましたね!

zsh
$ du -sh *
  0B	Caches
587M	Devices
  0B	Temp

さらに、Apple TVApple Watch の開発をすることがないのであれば、それらのシミュレータも個別に削除して大丈夫です。

$ xcrun simctl list で表示したリストの()内のハッシュを使って、次のようにして削除できます。
zsh
$ xcrun simctl delete 6FAB13BF-237F-4A68-A20C-C53FCAEE53A0

~/Library/Developer/Xcode/Archives/

~/Library/Developer/Xcode/Archives/ は、ipa 作成時に生成されるファイルです。かなり容量をくらいますので、不要なものは削除してしまいます。
zsh
$ 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 には中間生成ファイルが溜まります。中間生成ファイルは、アプリ単位でビルド時に作成されるようです。これらも削除して問題ありません。
zsh
$ 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のバージョンをアップデートする度に新しいファイルが増えていきますので、全部削除してしまいます。
zsh
$ 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も容量あります。

Samsung USBメモリ
Samsung USBメモリ
超小型
超小型
Macbookと相性抜群!
Macbookと相性抜群!

USBメモリは安く買えますので、複数買ってジャンル別に保存管理するのもアリですね!

【アフター】macOSの容量

ここまででOSやXcodeの動作に問題ありませんでしょうか? 問題なければ、さあゴミ箱を空にしましょう!

ゴミ箱を空にする
ゴミ箱を空にする

この「ゴミ箱を空にする」ときの音がたまらないですよね!

約50GBも空き容量を増やすことに成功しました!

【アフター】macOSの容量
【アフター】macOSの容量

よっしゃー!
よっしゃー!

rmの代わりにtrash-cliをつかう

さいごに、 trash-cli の使い方を簡単に解説します。詳しくは公式ページをご覧ください。 GitHub - andreafrancia/trash-cli: Command line interface to the freedesktop.org trashcan.

trash-cliのインストール

zsh
$ brew install trash-cli

trash-cliで削除

zsh
$ 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

マッチパターンで削除

zsh
$ trash-rm \*.o

ゴミ箱の場所は?

trash-cli を使うと、macOS標準のゴミ箱とは違う場所へ移動されます。
zsh
$ tree ~/.local/share/Trash/
/Users/somebody/.local/share/Trash/
├── files
│   └── hoge
└── info
    └── hoge.trashinfo

2 directories, 2 files

ゴミ箱を空にする

zsh
$ trash-empty

{{}}

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

Python学習にオススメの本をご紹介!
Pandasでデータサイエンスはじめよう!
スクレイピングにオススメの書籍

▼ Beautiful Soup4を使ったWebクローリングをはじめ、表データをpandasやOpenPyXL、matplotでデータ解析、グラフ表示などのスクレイピングのやり方が分かりやすく説明されてます。図解が多いのでPython初心者の方でも読み進められる内容となってます。