# Cargo キャッシュと target フォルダーの違い：削除してよいのはどれ？

> Rust プロジェクトの target と Cargo の依存関係キャッシュの違い、安全に削除できる範囲、.cargo 内で消してはいけないデータを解説します

空き容量を増やしたい場合は、まず使っていないプロジェクトの `target` フォルダーから整理するのがおすすめです。ここにあるのは Rust workspace ごとのビルド成果物で、必要になれば再コンパイルできます。Cargo の共有キャッシュを消すのは、実際に大きな容量を占めている、データが壊れている、しばらくオフライン作業をしない、といった場合に限るとよいでしょう。削除後は依存パッケージの再ダウンロードや展開が必要です。

`.cargo` フォルダー全体を削除してはいけません。Cargo の設定、registry の認証情報、`cargo install` で導入したコマンドも保存されており、これらはキャッシュではありません。

> 記載しているパスとコマンドは、2026 年 8 月 12 日に macOS 15.7.7、Cargo 1.84.0、rustc 1.84.0 で確認しました。Cargo Home やビルド先は変更できるため、削除前に必ず実際のパスを確認してください。

## 結論：まず target、共有キャッシュはその後

Cargo が保存する再生成可能なデータは、大きく次の 2 種類に分かれます。

- workspace の `target` フォルダー：そのプロジェクトのコンパイル結果
- Cargo Home（通常は `~/.cargo`）：共有ダウンロード、展開済みの依存ソース、Git 依存関係、設定、認証情報、インストール済みツール

違うのは、元に戻すためのコストです。`target` を削除すると再コンパイルが必要になります。依存関係のキャッシュまで削除すると、再コンパイルに加えてネットワーク接続も必要になる場合があります。そのため、通常は古いプロジェクトの `target` を先に確認する方が効率的です。

<table>
<thead>
  <tr>
    <th>
      パス
    </th>
    
    <th>
      保存されるもの
    </th>
    
    <th>
      削除してよいか
    </th>
    
    <th>
      削除後の動作
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        project/target
      </code>
    </td>
    
    <td>
      Debug・Release ビルド、インクリメンタルデータ、ドキュメント、ターゲット別の成果物
    </td>
    
    <td>
      ビルド停止後なら削除可能
    </td>
    
    <td>
      プロジェクトを再コンパイルする
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ~/.cargo/registry/cache
      </code>
    </td>
    
    <td>
      ダウンロード済み crate の圧縮ファイル
    </td>
    
    <td>
      オンラインなら通常は削除可能
    </td>
    
    <td>
      不足分を再ダウンロードする
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ~/.cargo/registry/src
      </code>
    </td>
    
    <td>
      registry から展開したパッケージのソース
    </td>
    
    <td>
      オンラインなら通常は削除可能
    </td>
    
    <td>
      再展開または再ダウンロードする
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ~/.cargo/git/db
      </code>
      
       と <code>
        git/checkouts
      </code>
    </td>
    
    <td>
      Git 依存関係の repository と checkout
    </td>
    
    <td>
      オンラインなら通常は削除可能
    </td>
    
    <td>
      再取得して checkout する
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ~/.cargo/bin
      </code>
    </td>
    
    <td>
      <code>
        cargo install
      </code>
      
       で導入したツール
    </td>
    
    <td>
      キャッシュとして削除しない
    </td>
    
    <td>
      インストール済みコマンドが消える
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        config.toml
      </code>
      
       と <code>
        credentials.toml
      </code>
    </td>
    
    <td>
      Cargo の設定と registry の認証情報
    </td>
    
    <td>
      削除しない
    </td>
    
    <td>
      ビルド、registry、プロキシ、認証が使えなくなる可能性がある
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        Cargo.toml
      </code>
      
      、<code>
        Cargo.lock
      </code>
      
      、<code>
        src
      </code>
    </td>
    
    <td>
      プロジェクト定義、依存バージョン、ソースコード
    </td>
    
    <td>
      削除しない
    </td>
    
    <td>
      プロジェクト自体が壊れる
    </td>
  </tr>
</tbody>
</table>

Windows の Cargo Home は通常 `%USERPROFILE%\.cargo` です。`CARGO_HOME` を設定している場合は、OS にかかわらず、その環境変数が指す場所を使ってください。

## target フォルダーが大きくなる理由

Cargo は、デフォルトでは workspace の `target` にビルド出力を保存します。Debug と Release では別のサブフォルダーが使われ、別の target triple 向けにコンパイルすれば、その分の成果物も増えます。インクリメンタルコンパイル用の中間データも、次回以降のビルドを速くするために残ります。

デスクトップアプリ、WebAssembly、複数アーキテクチャ、さまざまな feature の組み合わせを同じ workspace でビルドしていると、ソースコードのサイズを大きく上回ることがあります。Cargo の公式ドキュメントでも、これらは再生成できるビルドデータとして扱われています。ただし、削除すれば次回のビルドはキャッシュなしで始まります。

この記事で確認した MangoDisk の repository では、`target` が 27 GB を使用していました。同じ Mac で、Cargo registry の圧縮キャッシュは 189 MB、展開済みソースは 1.9 GB、Cargo Git database は 17 MB でした。これはあくまで手元の環境での測定値で、一般的な削減量を示すものではありません。先にサイズを調べるべき理由がよく分かる例です。

## 削除前に実際のパスとサイズを確認する

macOS または Linux の Rust workspace では、次の読み取り専用コマンドで一般的な保存先を確認できます。

```bash
cargo_home="${CARGO_HOME:-$HOME/.cargo}"

du -sh target 2>/dev/null
du -sh "$cargo_home/registry/cache" "$cargo_home/registry/src" \
  "$cargo_home/git/db" "$cargo_home/git/checkouts" 2>/dev/null
```

target の保存先は設定で変更できます。次のコマンドが出力する workspace metadata には、実際の `target_directory` が含まれます。

```bash
cargo metadata --no-deps --format-version 1
```

PowerShell では、現在のプロジェクトと Cargo Home を別々に確認できます。

```powershell
$CargoHome = if ($env:CARGO_HOME) { $env:CARGO_HOME } else { Join-Path $HOME ".cargo" }

Get-ChildItem .\target -Recurse -File -Force -ErrorAction SilentlyContinue |
  Measure-Object Length -Sum
Get-ChildItem "$CargoHome\registry\cache" -Recurse -File -Force -ErrorAction SilentlyContinue |
  Measure-Object Length -Sum
```

PowerShell の結果はバイト単位です。容量だけでなく、削除対象のパスが本当に正しいかも確認してください。

## target フォルダーを安全にクリーンアップする

最初に `cargo build`、テスト、コンパイル中の rust-analyzer、workspace から起動しているアプリを停止します。続いて、Cargo が削除する予定のファイルをプレビューします。

```bash
cargo clean --dry-run -v
```

対象に問題がなければ、現在の workspace の target 全体を削除します。

```bash
cargo clean
```

必要なビルドデータを残したい場合は、対象を絞ることもできます。

```bash
# Release profile の成果物だけを削除
cargo clean --release

# 生成したドキュメントだけを削除
cargo clean --doc

# workspace 内の 1 つの package だけを削除
cargo clean -p your-package-name
```

`cargo clean` は Cargo に設定された target の保存先を使います。独自の `target-dir` を指定している workspace では、手作業で `./target` と決めつけるより安全です。

削除後にフォルダーが再び作られるのは正常です。次回のビルドで必要なデータが生成されます。インクリメンタルデータも消えているため、最初のフルビルドは通常より長くかかります。

## Cargo の共有キャッシュを消すタイミング

共有キャッシュの整理を検討してよいのは、次のような場合です。

- 測定した結果、無視できない容量を使っている
- ダウンロードした archive や Git 依存関係が壊れている
- 古い toolchain やプロジェクトの依存関係を当面使わない
- 今すぐ容量が必要で、後から安定したネットワークを利用できる

移動中やオフライン作業の直前、社内 registry に接続できない可能性があるときは避けてください。独自 registry、vendored dependencies、標準以外の `CARGO_HOME` をチームで使っていないかも確認しましょう。

Cargo Home の公式ドキュメントでは、registry と Git のデータは、再展開、checkout、ダウンロードによって復元できるキャッシュとして説明されています。手動で削除する場合は Cargo 関連のプロセスを終了し、正しい Cargo Home を設定して、最後にもう一度サイズを確認します。

```bash
cargo_home="${CARGO_HOME:-$HOME/.cargo}"
du -sh "$cargo_home/registry/cache" "$cargo_home/registry/src" \
  "$cargo_home/git/db" "$cargo_home/git/checkouts" 2>/dev/null
```

そのうえで、自分で選んだキャッシュのサブフォルダーだけを削除します。

```bash
rm -rf "$cargo_home/registry/cache" "$cargo_home/registry/src" \
  "$cargo_home/git/db" "$cargo_home/git/checkouts"
```

このコマンドはゴミ箱を経由しません。`rm -rf ~/.cargo` のように対象を広げないでください。削除後のオンラインビルドでは、依存パッケージの再ダウンロードと展開が発生する場合があります。

Windows では、エクスプローラーで `%CARGO_HOME%` または `%USERPROFILE%\.cargo` を開き、該当するキャッシュのサブフォルダーだけを確認して削除できます。画面で選ぶ方が、`bin`、設定、認証情報を誤って含めるリスクを減らせます。

## Cargo キャッシュとして削除してはいけないもの

次の項目はクリーンアップ対象に含めないでください。

- `.cargo/bin`：`cargo-audit` や `cargo-edit` など、インストール済みのコマンドが入っている
- `.cargo/credentials.toml`：registry のログイントークンが保存されている場合がある
- `.cargo/config.toml`：registry、alias、ネットワーク設定、ビルドターゲットの動作を定義している場合がある
- プロジェクトの `Cargo.toml`、`Cargo.lock`、`build.rs`、`src`
- 管理者が復旧手順を用意していない vendored dependencies や社内向けオフラインミラー

キャッシュかどうか判断できないフォルダーは、確認するだけにとどめましょう。`.cargo` の中にあるという理由だけで、安全に削除できるとは限りません。

## MangoDisk で Rust のビルド成果物を確認する

[MangoDisk のディープクリーンアップ](/ja/docs/features/deep-clean)は、Rust プロジェクトの `target` フォルダーと、OS ごとの Cargo キャッシュ保存先を検出します。`.cargo` 全体を対象にすることはなく、プロジェクトのビルド成果物もデフォルトでは選択されません。

スキャンはローカルで行われます。削除前にパスと実際のサイズを確認できるため、複数の workspace に `target` が残っている場合にも便利です。確認操作とクリーンアップ履歴については、[MangoDisk の安全性ガイド](/ja/docs/safety)をご覧ください。

## よくある質問

### Rust プロジェクトの target フォルダーは削除しても安全ですか？

Cargo に設定されたビルド出力先であり、ビルドが動いていなければ削除できます。プロジェクトのソースコードではなく、再生成できる成果物です。次回はフルビルドになるため、通常より時間がかかります。

### cargo clean で Cargo のダウンロードキャッシュも消えますか？

消えません。`cargo clean` が削除するのは target 内のビルド成果物です。Cargo Home の registry や Git 依存関係キャッシュは対象外です。

### 容量節約や依存関係の修復のために Cargo.lock を消してもよいですか？

削除しないでください。`Cargo.lock` は小さなファイルで、解決済みの依存バージョンを記録しています。削除はディスク整理にならず、選ばれる依存バージョンが変わる可能性があります。

### Cargo キャッシュや target がまた作られるのはなぜですか？

正常な動作です。Cargo はビルド時に成果物を再生成し、不足している依存データを復元します。クリーンアップは古い再生成可能データを消すだけで、キャッシュ機能を無効にするものではありません。

## 参考資料と関連記事

- [Cargo Book：Build Cache](https://doc.rust-lang.org/stable/cargo/reference/build-cache.html)
- [Cargo Book：cargo clean](https://doc.rust-lang.org/cargo/commands/cargo-clean.html)
- [Cargo Book：Cargo Home](https://doc.rust-lang.org/cargo/guide/cargo-home.html)
- [Xcode の Derived Data を安全に削除する方法](/ja/blog/how-to-clear-xcode-derived-data-safely)
- [MangoDisk を開発した理由](/ja/blog/why-i-built-mangodisk)

Rust のビルド成果物と Cargo キャッシュを画面で比べてから整理したい場合は、[MangoDisk をダウンロード](/ja/)してローカルスキャンを確認できます。

Codexのworktreeを使っている場合は、その中にもパッケージやビルド生成物が残っていることがあります。[Codexのディスク使用量を調べて整理する方法](/ja/blog/codex-disk-usage)では、コードや会話履歴を残して、対応する項目を確認する手順を紹介しています。

Node.js も使っているなら、[npm のダウンロードキャッシュを整理する方法](/ja/blog/clean-npm-cache)も参考になります。各プロジェクトにインストールした依存パッケージとは分けて確認しましょう。
