# Windowsの開発キャッシュ: npm、pip、Gradleが保存するもの

プロジェクトはほとんど増えていないのに、Cドライブが数GB増えていることがあります。npm、pip、Gradleのディレクトリを見つけたことは、丸ごと削除する理由にはなりません。ダウンロードキャッシュ、プロジェクトの依存関係、ビルド出力、保存されたツールのバージョンは仕事が違い、作り直しはそれらの入手元が残っていることに依存します。

## ツールが実際に使っている場所を探す

関連するツールが入ったターミナルで、次のコマンドは内容を消さずに、npmのキャッシュの場所とpipキャッシュの情報を示します。

```powershell
npm config get cache
python -m pip cache info
```

pipの問い合わせは、`python`が選んだ環境を使います。キャッシュの場所を変えているなら、出力に従います。[npmの設定のリファレンス](https://docs.npmjs.com/cli/v11/commands/npm-config/)と[pip cacheのリファレンス](https://pip.pypa.io/en/stable/cli/pip_cache/)が問い合わせを説明しています。1台のPCの既定パスは、すべてのプロジェクトの構成ではありません。

## 4種類のディレクトリを区別する

| 種類 | 例 | 削除前の確認 |
| --- | --- | --- |
| パッケージのダウンロードキャッシュ | npmキャッシュ、pipのHTTPとwheelキャッシュ | あとからのインストールにダウンロードが必要か。特にオフライン |
| プロジェクトの依存関係 | `node_modules`、仮想環境、`vendor` | パッケージ、ロックファイル、入手元、インストール手順が残っているか |
| ビルド出力 | `dist`、`build`、`obj` | 生成された内容か。手で足したものが入っていないか |
| ツールのバージョンとローカルリポジトリ | ダウンロードしたGradleのバージョンと、一部のローカルインストール済みパッケージ | 次の同期やビルドが直接必要とするか |

作り直しには代償があります。ネットワーク、入手できるソース、認証、オフラインの要件が関わります。依存関係のディレクトリは、名前が馴染み深いというだけで、万能のクリーンアップ対象ではありません。

## キャッシュの問題と依存関係の問題は違う

npmのダウンロードキャッシュは内容を検証し、その[ドキュメント](https://docs.npmjs.com/cli/v11/commands/npm-cache/)は壊れたデータの再取得を説明しています。インストールエラーは、キャッシュを空にする十分な理由ではありません。ネットワークの失敗、入手できないロックされたバージョン、依存関係の衝突は、そのあとも変わらないことがあります。

pipは、キャッシュされたHTTP応答と、以前にビルドしたインストール可能なパッケージを含むキャッシュされたwheelを分けます。その[キャッシュのドキュメント](https://pip.pypa.io/en/stable/topics/caching/)が両方を説明しています。`pip cache list`が一覧するのはwheelであり、キャッシュディレクトリのすべてのファイルではありません。仮想環境はインストール済み依存関係を隔離しますが、複数の環境がpipキャッシュを共有し得ます。別の`python`を選んでも、別のキャッシュ場所になる保証はありません。問い合わせの出力を読んでください。

## ロックファイルが記録するのはバージョンであり、パッケージのバックアップではない

オフラインのプロジェクトで`package-lock.json`は残っているが、`node_modules`とダウンロードキャッシュの両方が消えている場合を考えます。バージョンの記録は残りますが、インストールに必要なパッケージは入手できないことがあります。ロックファイルはバージョンの選択を制御します。パッケージファイルや、非公開レジストリへのアクセスは保存しません。

Gradleの[依存関係キャッシュのドキュメント](https://docs.gradle.org/current/userguide/dependency_caching.html)は、オフラインビルドに必要なアーティファクトがローカルに必要な理由を説明しています。[ディレクトリと保持のガイド](https://docs.gradle.org/current/userguide/directory_layout.html)は、バージョン固有のキャッシュ、共有依存関係、Wrapperの配布を分けています。大きな`.gradle`ディレクトリを空にする前に、どの分類が増えたかを特定します。ツールが管理する古い項目と、進行中のプロジェクトがまだ必要な依存関係は、判断が違います。

<figure class="blog-diagram">
  <picture>
    <source media="(max-width: 900px)" srcset="/img/blog/windows-windows-developer-caches-en-mobile.webp" type="image/webp" width="768" height="1500">
    <img src="/img/blog/windows-windows-developer-caches-en.webp" width="1360" height="454" loading="lazy" alt="開発用ストレージには役割が違う">
  </picture>
  <figcaption>4つのディレクトリの役割は、作り直しの代償が違います。ロックファイルが記録するのはバージョンであり、パッケージやツールチェーンは保存しません。</figcaption>
</figure>

## Moleが扱うものと、ツールに残すもの

Mole for Windowsは、認識したnpm、pip、そのほかのキャッシュを一覧します。使用中の内容は保護されたままで、自動では再生しないデータを持つ項目は確認を待ちます。すべてのプロジェクトの依存関係フォルダを一般的なキャッシュとしては扱いません。クリーンアップ項目を選んでも、PC上のすべてのNode.jsやPythonのプロセスを終了する許可にはなりません。

Gradleの`caches`と`wrapper\dists`は、Moleのクリーンアップの範囲の外に残ります。Android Studioの同期と次のビルドが、直接必要とすることがあります。またダウンロードするためだけにバージョンを消さず、保持はGradleに任せます。

プロジェクトの出力は、そのプロジェクトの手順に従って管理します。表はディレクトリの役割を説明するもので、Moleが一覧されたすべてのプロジェクトパスをスキャンして自動削除する意味ではありません。ソース、構成、セッション、ローカルモデルは、開発フォルダにあるというだけでキャッシュにはなりません。

## あとで同じプロジェクトで確認する

必要なものは独立したコピーを残してから、選んだキャッシュを扱います。プロジェクトの元のインストールまたはビルドを繰り返し、必要になったダウンロードをメモします。オフラインの発表や旅行の直前に、依存関係、ツールのバージョン、ダウンロードキャッシュをまとめて空にしないでください。

仮想ディスク、モデル、大きな出力がストレージの大半を占めるなら、[大きなファイルのガイド](/ja/windows/blog/find-large-files-on-windows)を使います。[キャッシュのガイド](/ja/windows/blog/windows-cache-cleanup)は、普通のキャッシュと個人データを分けます。


Canonical: https://mole.fit/ja/windows/blog/windows-developer-caches
