📋 この記事の対象
開発マシン(Windows 10/11)で Docker・Node.js・WSL2 を日常的に使っていると、気づかないうちに C ドライブが圧迫されます。
「何もインストールしていないのに残り 10GB…」という状態になる前に、定期的にクリーンアップしましょう。
🔍 容量を食っている犯人たち
| 犯人 | 典型的なサイズ | 場所 |
|---|---|---|
| Docker イメージ・ビルドキャッシュ | 10〜50 GB+ | %LOCALAPPDATA%\Docker\wsl |
| node_modules | プロジェクトあたり 200MB〜1GB | 各プロジェクト直下 |
| npm / pnpm キャッシュ | 1〜10 GB | %APPDATA%\npm-cache / %LOCALAPPDATA%\pnpm |
| WSL2 仮想ディスク | 10〜60 GB+ | %LOCALAPPDATA%\Packages\...\ext4.vhdx |
| Windows Update 残骸 | 1〜10 GB | C:\Windows\SoftwareDistribution |
| Temp ファイル | 1〜5 GB | %TEMP% |
| NuGet キャッシュ | 1〜5 GB | %USERPROFILE%\.nuget\packages |
| Playwright ブラウザ | 500MB〜1.5 GB | %LOCALAPPDATA%\ms-playwright |
🔧 クリーンアップ手順
1) まず現状把握
# C ドライブの空き容量
Get-PSDrive C | Select-Object Used, Free, @{N='FreeGB';E={[math]::Round($_.Free/1GB,1)}}
# 大きなフォルダを探す(ユーザーフォルダ配下)
# TreeSize Free や WizTree を使うと視覚的に確認できる
おすすめツール: WizTree(無料・高速)でどこが大きいか一目瞭然。
2) Docker のクリーンアップ
Docker は放置すると最も容量を食います。
# 未使用のコンテナ・イメージ・ボリューム・ネットワークを一括削除
docker system prune -a --volumes
# どれくらい使っているか確認
docker system df
| コマンド | 削除対象 |
|---|---|
docker system prune | 停止コンテナ、未使用ネットワーク、ダングリングイメージ |
docker system prune -a | 上記 + 全未使用イメージ |
docker system prune -a --volumes | 上記 + 未使用ボリューム(DB データ等も消えるので注意) |
docker builder prune | ビルドキャッシュのみ削除 |
注意:
--volumesを付けると DB のデータボリュームも消えます。必要なデータがある場合は外してください。
3) Node.js / npm / pnpm のクリーンアップ
# npm キャッシュの削除
npm cache clean --force
# npm キャッシュのサイズ確認
npm cache ls 2>$null | Measure-Object | Select-Object Count
# pnpm を使っている場合
pnpm store prune
# グローバルの不要パッケージを確認
npm ls -g --depth=0
古いプロジェクトの node_modules 一括削除
長期間触っていないプロジェクトの node_modules を削除すると大幅に空きます。
# 指定フォルダ配下の node_modules を検索(削除前の確認)
Get-ChildItem -Path "C:\Users\$env:USERNAME\Projects" -Recurse -Directory -Filter "node_modules" |
Select-Object FullName, @{N='SizeMB';E={
[math]::Round((Get-ChildItem $_.FullName -Recurse -File | Measure-Object Length -Sum).Sum/1MB, 0)
}} | Sort-Object SizeMB -Descending
# 確認後、一括削除(npx npkill を使うと対話的に選べる)
npx npkill
npkill は node_modules を一覧表示し、スペースキーで選択削除できる便利ツールです。
npm installで復元できるので安心して消せます。
4) WSL2 仮想ディスクの圧縮
WSL2 の仮想ディスク(ext4.vhdx)は ファイルを消しても自動で縮小されません。手動で圧縮が必要です。
# WSL を停止
wsl --shutdown
# 仮想ディスクの場所を確認(Docker Desktop の場合)
ls "$env:LOCALAPPDATA\Docker\wsl\data\ext4.vhdx"
# 圧縮(管理者 PowerShell)
Optimize-VHD -Path "$env:LOCALAPPDATA\Docker\wsl\data\ext4.vhdx" -Mode Full
# Hyper-V が無い環境では diskpart を使用
# diskpart
# select vdisk file="C:\Users\{ユーザー名}\AppData\Local\Docker\wsl\data\ext4.vhdx"
# compact vdisk
# exit
5) Windows 標準のクリーンアップ
# ディスククリーンアップ(管理者)
cleanmgr /d C /sageset:1
# → Windows Update のクリーンアップ、一時ファイル等にチェックを入れて実行
# Temp フォルダの削除
Remove-Item "$env:TEMP\*" -Recurse -Force -ErrorAction SilentlyContinue
# Windows Update キャッシュ(管理者)
Stop-Service wuauserv
Remove-Item "C:\Windows\SoftwareDistribution\Download\*" -Recurse -Force
Start-Service wuauserv
6) その他の開発ツール
# NuGet キャッシュ(.NET 開発者向け)
# ⚠️ 下記の注意を必ず読んでから実行すること
dotnet nuget locals all --clear
# Playwright ブラウザの古いバージョン削除
# (プロジェクトで使っているバージョン以外)
npx playwright install --dry-run # 確認
# Gradle キャッシュ(Java/Android 開発者向け)
Remove-Item "$env:USERPROFILE\.gradle\caches" -Recurse -Force -ErrorAction SilentlyContinue
⚠️ NuGet キャッシュ削除の注意:
dotnet nuget locals all --clearを実行すると、ローカルにキャッシュされた すべての NuGet パッケージが消えます。次回ビルド時にパッケージの再ダウンロードが必要になりますが、オフライン環境や社内プロキシ経由の場合、パッケージが取得できずビルドエラーになることがあります。実行前に以下を確認してください:
- NuGet のパッケージソース(
nuget.orgや社内フィード)にアクセスできるか- 既存プロジェクトで
dotnet restoreが通るか(1 つ試してから全削除する)安全策: 全削除ではなく、
http-cacheのみ削除するとリスクが低いです。dotnet nuget locals http-cache --clear
📅 定期クリーンアップのおすすめ頻度
| 作業 | 頻度 | 効果 |
|---|---|---|
docker system prune -a | 週 1 回 | 大(10GB+ 回復することも) |
npx npkill(古い node_modules) | 月 1 回 | 中〜大 |
npm cache clean --force | 月 1 回 | 小〜中 |
| WSL2 vhdx 圧縮 | 月 1 回 | 中(Docker 使用時) |
| Windows ディスククリーンアップ | 月 1 回 | 小〜中 |
⚠️ 削除してはいけないもの
C:\Users\{ユーザー名}\.ssh— SSH 鍵(消すとリモート接続不可)C:\Users\{ユーザー名}\.gitconfig— Git 設定C:\Users\{ユーザー名}\.aws— AWS 認証情報- Docker ボリューム(名前付き) — DB データが入っている可能性あり
C:\Windows\WinSxS— Windows システムフォルダ(絶対に手動削除しない)
❓ よくある質問
Q1. node_modules を消しても大丈夫?
npm install / pnpm install で復元できます。package.json と package-lock.json さえあれば問題ありません。
Q2. Docker イメージを全部消してしまった
docker compose pull や docker compose build で再取得・再ビルドできます。初回は時間がかかりますが、データの損失はありません。
Q3. WSL2 の vhdx を圧縮しても小さくならない
WSL 内でまず不要ファイルを削除してから圧縮してください。WSL 内で sudo apt clean && sudo apt autoremove を実行すると効果的です。
Q4. どうしても容量が足りない
D ドライブがある場合、Docker Desktop の設定で「データディレクトリ」を D ドライブに移動できます。WSL2 のディストリビューションも wsl --export / wsl --import で移動可能です。