2つの道具、2つのキャッシュ モデル
npm は %LOCALAPPDATA%\npm-cache にコンテンツアドレス方式のキャッシュを保持します。これまでにダウンロードしたすべての tarball に加え、ログと、使い捨てパッケージ実行のための _npx キャッシュです。インストール済みプロジェクトの動作に必要なものは1つもありません。将来のインストールを速く、オフラインでも動くようにするためだけの存在です。pnpm の考え方は違います。単一のストア(最近のバージョンでは %LOCALAPPDATA%\pnpm\store)が実ファイルを保管し、各プロジェクトの node_modules はそこへのハードリンクで組み上げられます。だから pnpm プロジェクトは npm のようにディスク使用量を倍増させませんし、その代わりストア自体は上限なく育ちます。新しいパッケージ バージョンは、刈り取るまで永久にそこへ沈着します。
結果はおなじみの驚きです。古いプロジェクトを削除しても容量が戻らない。ストアのハードリンクがデータを生かし続けるからです。見るべきはプロジェクト フォルダーではなく、ストアです。
知っておくべき掃除コマンド
ここにあるものはすべて設計上安全です。キャッシュはキャッシュであり、ツールが要求に応じて再構築します:
- npm cache clean --force — npm キャッシュ全体を消去。次のインストールで必要な分を再ダウンロードします
- npm cache verify — 穏やかな選択肢:全消去ではなくガベージコレクションと整合性チェックを行います
- pnpm store prune — どのプロジェクトからもリンクされなくなったパッケージをストアから除去します
- %LOCALAPPDATA%\npm-cache\_npx を削除 — npx 実行の使い捨てキャッシュ。いつ消しても安全です
- npm config set cache D:\dev\npm-cache — キャッシュをシステム ドライブからデータ用ドライブへ恒久的に移動
- まず計測を:AppData のサイズ スキャンは盲目的な削除に勝ります — npm-cache と pnpm ストアが例の2人の常連容疑者です
NTFS ハードリンクの落とし穴
ここが全員を悩ませる箇所です。NTFS では、ファイルのデータはそれを指す最後のハードリンクが消えるまで解放されません。node_modules を掃除した直後に pnpm ストアを削除すれば、期待どおりの容量が空きます。プロジェクトがまだリンクしているうちにストアを消せば、何も空きません。バイトは node_modules が存在する限りディスクに残り、エクスプローラーは事実上空の抜け殻であるストア エントリーを表示し続けます。つまり順番がものを言います。先にプロジェクト(かその node_modules)を片付け、それから pnpm store prune です。毎月これを実行して最も得をするのは CI ランナーと大量のリポジトリをさばくマシンで、単一プロジェクトのノートPCではストアが注目に値することはめったにありません。
よくある質問
AppData の npm-cache フォルダーは削除しても安全?
はい。中にあるのはダウンロード済み tarball とログだけで、npm は次のインストールで必要なものを再ダウンロードします。npm cache clean --force を使うか、フォルダーごと削除してください。
pnpm のストアは Windows のどこにありますか?
最近の pnpm では %LOCALAPPDATA%\pnpm\store です。pnpm store path で確認できます。掃除はフォルダー手動削除ではなく pnpm store prune で。
購入前にライセンスの内容をご確認ください。
一度限りの 30 分試用では基本ツールを利用できます。PRO 機能は有料ライセンスを有効にするまでロックされています。
次に読む記事
お問い合わせ: [email protected]