Tauri や Rust でデスクトップアプリやWebアプリを開発していると、一度はこんな経験をしたことがあるのではないでしょうか。
MacやPCのストレージ容量が急に不足し、原因を調べるためにシステム設定やディスクアナライザーを開くと、プロジェクトリポジトリ内に巨大なフォルダ群を発見する瞬間です。
~/code/nextai-translator/src-tauri/target ---> 8.00 GB
~/code/lingoloop/src-tauri/target ---> 7.53 GB
~/code/yolo/src-tauri/target ---> 7.50 GB
たった 3つ のプロジェクトだけで 23 GB 以上 を占有しています!
心当たりがあってもパニックになる必要はありません。コードが肥大化しているわけではなく、これはRustのビルドシステムであるCargoが高速化のために用意している仕様です。しかし放置しておくと、Cargoは容赦なくSSD全体の容量を食いつぶしてしまいます。
この記事では、なぜこれが起こるのか、そして全プロジェクトでマルチギガバイトの target フォルダが作成されるのを防ぐ たった1行の設定 について解説します。
🔍 なぜCargoは大量の容量を消費するのか?
Rustはディスク使用量の最小化よりも 高速なコンパイル を優先します。cargo build や pnpm dev-tauri を実行すると、Cargoはバックグラウンドで以下のような重い処理を行います。
deps/(依存関係キャッシュ): 依存関係ツリー内のすべてのクレート(tokio,serde,tauriなど)を静的オブジェクトファイル(.rlib,.dylib)にコンパイルします。重要:Cargoは古いバージョンの依存関係を自動削除しません。 ライブラリを更新すると、新旧両方のコンパイル済みファイルがdeps/内に並んで残ります。- デバッグシンボル: デバッグビルドには巨大なシンボルマップが含まれており、スタックトレースがサードパーティ製クレートの正確な行番号を指すようにします。
incremental/(増量コンパイラキャッシュ): 関数レベルのコンパイル状態を保存し、1行のコード変更に対する再ビルドを30秒から1秒に短縮します。build/: C/C++のネイティブビルド中間生成物(WebViewやOpenSSLのバインディングなど)を保存します。
これが4〜5個のプロジェクトに増えると、簡単に30〜50 GBもの容量が失われてしまいます。
🚀 解決策:グローバル共有 Target ディレクトリの設定
デフォルトでは、すべてのプロジェクトが独自の独立した target/ ディレクトリを作成します。つまり、プロジェクトAとプロジェクトBの両方が serde と tauri を使用している場合、Cargoはそれらを 2回コンパイル し、別々の7GBフォルダを作成します。
Cargoに 全 プロジェクト共通の 中央共有Targetディレクトリ を使用させることで、この問題を永久に解決できます。
ステップ 1: グローバル Cargo 設定を追加する
~/.cargo/config.toml のグローバルCargo設定ファイルを作成または編集します:
[build]
target-dir = "/Users/yourusername/.cargo/shared-target"
または、以下の1行のターミナルコマンドを実行します(yourusername をご自身のユーザー名に変更してください):
mkdir -p ~/.cargo && echo '[build]\ntarget-dir = "'"$HOME"'/.cargo/shared-target"' >> ~/.cargo/config.toml
これでどうなる?
- 🧹 クリーンなプロジェクトディレクトリ: どのプロジェクトで
pnpm dev-tauriやcargo buildを実行しても、リポジトリ内にtarget/フォルダが作成されなくなります! - ⚡ ビルドの高速化: 共通の依存関係(
tauri,tokioなど)は 1回だけ コンパイルされ、すべてのプロジェクトで再利用されます。 - 📦 一元化されたクリーンアップ: すべてのビルド生成物が1箇所(
~/.cargo/shared-target)に集約されるため、将来のディスク管理が非常に簡単になります。
🧹 ステップ 2: 古い Target フォルダを削除して容量を回収する
グローバル設定が有効になったら、各プロジェクトフォルダに残っている古い孤立した target フォルダを安全に一括削除できます:
# プロジェクト内の target フォルダを削除
rm -rf ~/code/*/src-tauri/target
rm -rf ~/code/*/target
一瞬で23GB以上の空き容量が復活! 🎉
🛠️ ボーナスヒント:複数プロジェクトの自動クリーンアップ
多数のRustプロジェクトを開発しており、古いビルドファイルを自動でスキャン・清掃したい場合は、cargo-clean-all をインストールします:
cargo install cargo-clean-all
# ~/code 内のすべてのRustプロジェクトをスキャンしてクリーンアップ
cargo-clean-all ~/code
まとめ
| 変更前 | 変更後 |
|---|---|
各プロジェクトが ~7–10 GB の target/ フォルダを所持 | プロジェクトフォルダ内は 0 GB |
| プロジェクトごとに重複する依存関係をコンパイル | 共有キャッシュ内で依存関係のコンパイルは 1回のみ |
| どのプロジェクトが容量を圧迫しているか特定しにくい | すべてのビルドキャッシュが ~/.cargo/shared-target に集約 |
SSDの空き容量に悩んでいるなら、2分で ~/.cargo/config.toml を設定してみてください。ストレージが劇的に快適になります!
参考になりましたら、ぜひ他のRust & Tauriデベロッパーにもシェアしてください! 🦀