※ この記事にはプロモーションが含まれています。
MacBookの空き容量が28GBになった日、Xcodeのアップデートが「空き容量が足りません」で止まりました。1TBのモデルなのに、です。
調べていくと、削っても削っても数日で元に戻る。原因は開発で毎日生まれるキャッシュ類でした。ビルドの中間生成物、シミュレータのランタイム、Dockerのイメージ。この3つが、私の場合で400GB近くを占めていました。
結論から言うと、外付けSSDにキャッシュ類を逃がして解決しました。ただ、選び方を間違えると「遅い外付けにビルドを置いた結果、ビルド時間が伸びる」という本末転倒な状態になります。規格と速度の話を中心に書きます。
容量を食っていた犯人は、だいたい3つだった
ストレージ管理を開いて、何が容量を使っているのか順番に潰していきました。
一番大きかったのがiOSシミュレータのランタイムです。OSのバージョンごとに丸ごとダウンロードされるので、1つあたり7〜8GB。動作確認のために古いバージョンを残していたら、それだけで40GBを超えていました。
次にビルドの中間生成物。Xcodeが生成する中間ファイルは、プロジェクトを切り替えながら開発しているとどんどん溜まります。私は仕事で3つ、個人で2つのリポジトリを行き来しているので、気づくと合計100GBを超えていました。Flutter側のビルドキャッシュやGradleのキャッシュも別に積み上がります。
そしてDockerです。APIのローカル検証用に立てているコンテナのイメージが、使わなくなった古い層ごと残っていて、仮想ディスクのファイルが80GBほど。一度膨らんだ仮想ディスクは、中身を消しても勝手には縮まないことがあるので、これも厄介でした。
定期的に消せばいい、という話ではあります。私も月1回は掃除するようにしていました。ただ、消すと次のビルドが遅くなるんですよね。キャッシュは速度と引き換えに容量を食っているので、消して速度を捨てるか、残して容量を諦めるかの二択になる。逃がすという三つ目の選択肢に気づくまで、この往復を1年くらい繰り返していました。
あとから増設できない機種では、外付けが唯一の逃げ道
デスクトップなら内蔵ストレージを増設するのが一番きれいな解決です。M.2のSSDを1枚足せば、速度も容量も内蔵と同じ扱いで使えます。
ところが最近のノート、特にApple Siliconを積んだMacBookはストレージが基板に直付けされていて、購入後の増設という選択肢がありません。買うときに選んだ容量が一生の容量です。私はメモリを優先して1TBにしたので、この時点で内蔵増設の道は消えていました。
じゃあクラウドに逃がせばいいかというと、これも違う。ビルドキャッシュのようにミリ秒単位で大量の細かいファイルを読み書きするものを、同期型のクラウドストレージに置くのは無理があります。私は一度やってみて、同期プロセスがCPUを食い続ける地獄を見ました。頻繁に書き換わる作業データは、物理的に手元の高速なストレージに置くしかないという結論です。
USBの規格で実効速度が3倍変わる
ここが一番間違えやすいところだと思います。外付けSSDの箱には「USB3.2対応」と書いてあるのに、実際の速度が製品によって全然違う。理由は、USB3.2という名前の中に速度の違う規格が同居しているからです。
実効値でざっくり言うと、5Gbps世代のものが毎秒400〜450MB前後。10Gbps世代だと毎秒900MB〜1,000MB前後。20Gbpsに対応した製品なら毎秒2,000MB前後まで出ます。同じ「USB3.2」でも倍以上違うわけです。
ビルド用途では、この差がそのまま体感に出ます。私の環境でクリーンビルドを比較したとき、5Gbps世代の古いポータブルHDDに置いた場合と10Gbps世代のSSDに置いた場合で、体感2倍近い差がありました。ビルドは小さなファイルを何万個も読み書きするので、連続転送の速度以上にランダムアクセスの性能が効いてきます。
ただし注意点があります。20Gbps対応を謳う製品をMacにつないでも、その速度は出ません。Macのポートは10Gbpsまでの対応なので、20Gbps対応品を買っても頭打ちになります。ここを知らずに高いモデルを買うと、価格分の恩恵を受けられない。Windows機で20Gbps対応のポートを持っているなら話は別です。
それと、ケーブルの品質でも速度は落ちます。私は手持ちの充電用USB-Cケーブルでつないで、速度が半分以下しか出ずに悩んだことがあります。充電専用のケーブルはデータ転送に対応していないか、対応していても5Gbpsまでということが普通にあるんですよね。付属ケーブルを使うのが結局一番確実です。
持ち歩くならポータブル型。ただし抜き差しの手間は残る
外付けSSDは、電源不要で手のひらに収まるポータブル型と、ACアダプタが必要な据え置き型に分かれます。
開発用途でデスクに常設するなら据え置き型でも構いません。容量あたりの単価が安く、放熱の余裕があるので大容量の書き込みでも速度が落ちにくい。ただ、デスクの上に箱がひとつ増えて、電源タップも1口埋まります。
私はポータブル型を選びました。週1回の出社日にそのまま持っていけるからです。カフェで作業するときも、これがないと仕事にならない状態になっているので。持ち歩くなら耐衝撃性は見ておいたほうがよくて、カバンの中で他の荷物に押されることを考えると、金属筐体か厚めのゴムで覆われたモデルが安心です。
使っているのは、スライド式のコネクタでType-CとType-Aを切り替えられる1TBのモデルです。エレコムの外付けSSDで、USB3.2 Gen2対応。ケーブルが要らないのがポータブル型としては一番大きい利点で、出社日にケーブルを忘れて詰む可能性がゼロになりました。会社のWindows機がType-Aしか空いていないときも、スライドさせるだけで挿さります。
短所も書きます。まず発熱。連続で50GBほど書き込むと、金属部分が触って熱いと感じるくらいまで温度が上がります。壊れるレベルではないと思いますが、その状態が続くと速度が落ちるので、大容量のコピーは分割するようにしました。
次に抜き差しの手間。当たり前ですが、外付けなので毎回挿す必要があります。私は挿し忘れたままXcodeを開いて、ビルド先が見つからないというエラーを出したことが何度もあります。デスクではハブに常時挿しっぱなしにして、持ち出すときだけ抜く運用に落ち着きました。
もうひとつ。取り外しの手順を守らないと、キャッシュが壊れることがあります。ビルド中に抜いたときにキャッシュが中途半端な状態で残って、次のビルドが謎のエラーで落ちる、というのを一度やりました。丸ごと消して作り直せば直りますが、30分溶けます。
もっと速いものが必要なら、20Gbps対応で読み込み毎秒2,000MB級の製品が楽天だと1TBで14,280円前後から出ています。Windows機がメインで、対応ポートを持っているなら選択肢に入ると思います。
バックアップ用と作業用は、物理的に分けたほうがいい
ここは失敗してから学んだ話です。
最初、私は1台のSSDをパーティションで分けて、片方をバックアップ、片方を作業用のキャッシュ置き場にしていました。効率的だと思ったんです。実際には最悪の構成でした。
理由は2つあります。ひとつは、作業用のドライブは書き込み回数が桁違いに多いこと。ビルドのたびに数GBが書かれては消えるので、SSDの寿命を削るペースがバックアップ用途とは比べ物になりません。同じ物理ドライブに大事なバックアップを同居させるのは、単純にリスクです。
もうひとつは、持ち歩くこと。作業用は毎日カバンに入れて移動します。落とす可能性がある物体にバックアップを載せておくのは、バックアップの意味を半分捨てているのと同じでした。
今は、作業用が持ち歩くポータブルSSD、バックアップは家に置きっぱなしの別ドライブ、と完全に分けています。作業用は最悪壊れても、キャッシュなので作り直せばいい。この割り切りができると、SSDの寿命を気にせず酷使できるようになります。
最後に
外付けSSDを導入して半年、内蔵の空き容量は400GB前後で安定しています。月1回のキャッシュ掃除もしなくなりました。
選ぶときに見るべきなのは、容量よりも先に規格です。10Gbps対応であること、付属ケーブルを使うこと、この2つだけ守れば大きく外さないと思います。Macで使うなら20Gbps対応にお金を払う理由はほぼありません。
そのうえで容量は1TBを推します。500GBだと、シミュレータとDockerを両方逃がした時点でかなり埋まります。数千円の差で悩む部分ではないと感じました。
この記事は開発環境の個別レビューです。モニター選びの判断基準そのものは開発用モニターの選び方|4K・WQHD・ウルトラワイドをコードを書く視点でで整理しています。

