node_modulesがディスクを圧迫。Macで見つけて消去する
node_modules フォルダは、今作業していないプロジェクトのものなら、どれも削除して安全です。入っているのはダウンロードした依存関係だけで、インストールのコマンドで作り直されます。ターミナルのコマンド1つで、プロジェクトフォルダの下にあるものをすべてサイズ順に一覧表示できるので、どれを削除する価値があるかがわかります。
パッケージマネージャは、プロジェクトの外にもダウンロードキャッシュを保持しています。これらも、各ツール自身のコマンドで消去できます。
node_modules がこれほど領域を使う理由
npmとYarnでは、プロジェクトごとに、すべての依存関係と、その依存関係が必要とするものすべての完全なコピーが作られます。小さなWebアプリでも、非常に大きなパッケージのツリーを引き込むことがあります。古いプロジェクトが10個あれば、別々のコピーが10個あるということです。
このフォルダは膨大な数の小さなファイルでできてもいて、コピーにも、バックアップにも、インデックスの作成にも時間がかかるのはそのためです。中に自分のものは何もありません。何をインストールするかの一覧は package.json とロックファイルにあり、残しておくべきなのはそちらです。
すべての node_modules フォルダをサイズ順に一覧表示する
下記のコマンドは、フォルダの中から node_modules ディレクトリを探し、それぞれのサイズを測って、最も大きいものが最後になるように一覧を並べ替えます。読み取るだけです。~/Projects は、コードを置いているフォルダに置き換えてください。
対象にするのは、ホームフォルダ全体ではなく、コードのフォルダにしてください。アプリやエディタは、~/Library の中やアプリケーションバンドルの中に独自の node_modules フォルダを持っていて、それらは残り物ではなく、アプリの一部です。削除するとアプリが壊れます。
find ~/Projects -type d -name node_modules -prune -exec du -sh {} + 2>/dev/null | sort -hどれを削除するかを決める
node_modules を削除して失うのは、次のインストールにかかる時間だけです。したがって問題は、どのプロジェクトを近いうちに開くかです。
- 何か月も触っていないプロジェクト:削除します。領域の大半はここにあります。
- 読むだけ、または一度試しただけのクローンしたリポジトリ:削除します。
- 今週作業しているプロジェクト:そのままにします。すぐにインストールし直すことになるだけです。
- ロックファイルのないプロジェクト:まず考えてください。新しくインストールすると、一部のパッケージが以前より新しいバージョンに解決されることがあり、動作が変わる可能性があります。
- プライベートレジストリや、もう公開されていないかもしれないパッケージに依存しているプロジェクト:削除する前に、まだインストールできることを確かめてください。
安全に削除する
まず、そのプロジェクトで実行中の開発サーバやビルドを止めます。次に、Finderでプロジェクトフォルダを開き、node_modules をゴミ箱に入れます。これはやり直しのきく方法です。再インストールに失敗しても、ゴミ箱を空にする前ならフォルダを元に戻せます。
プロジェクトに戻ったら、使っているパッケージマネージャのインストールコマンドを実行します。下記はnpmの場合です。プロジェクトに package-lock.json があれば、npm ci で、そこに記録されているとおりのバージョンがインストールされます。
同じプロジェクトにあるほかのビルド出力も、同じように削除できます。.next、dist、build、.turbo などのフォルダは、次のビルドで作り直されます。
npm installパッケージマネージャのキャッシュを消去する
プロジェクトの外では、各パッケージマネージャが、ダウンロードしたものすべてのキャッシュを保持しています。繰り返しのインストールを速くするためです。これらのキャッシュは大きくなる一方です。下記のコマンドは、消去するための公式に案内されている方法で、どれもそのツールのダウンロードキャッシュだけを削除します。プロジェクトは引き続き動作し、次のインストールでもう一度ダウンロードされます。
- npmは、キャッシュを ~/.npm に保持します。npmが --force を求めるのは、キャッシュを自己修復するものとして扱っているからです。消去せずに確認するには、npm cache verify を実行します。
- Yarn 1はグローバルキャッシュを保持しており、yarn cache clean で空になります。それより新しいバージョンのYarnでは、プロジェクトの中で実行してください。
- pnpmは共有ストアを保持します。pnpm store prune は、Mac上のどのプロジェクトからも参照されなくなったパッケージだけを削除します。
- Bunはグローバルキャッシュを保持しており、bun pm cache rm で空になります。
npm cache clean --force
yarn cache clean
pnpm store prune
bun pm cache rmそもそも使う領域を減らす
pnpmは、パッケージの各バージョンをディスクに一度だけ保存し、それを使うすべてのプロジェクトにリンクします。そのため、同じ依存関係を持つプロジェクトが10個あっても、1個分とほとんど変わりません。node_modules が繰り返し問題になるなら、新しいプロジェクトをpnpmに切り替えるのが、長続きする解決策です。
副作用として、サイズがおかしく見えます。ファイルサイズを合計するツールは、リンクされたパッケージをプロジェクトごとに1回ずつ数えるので、pnpmの node_modules フォルダは、実際に使っている領域よりずっと大きく見えることがあります。
同期されるフォルダにコードを置かないことも役に立ちます。iCloud DriveやDropboxの中に node_modules フォルダがあると、膨大な数の小さなファイルが、何の得もないままアップロードされることになります。
Diskzyでの node_modules の扱い
Diskzyの「Clean up」(クリーンアップ)タブは、node_modules、.build、Pods、仮想環境などのプロジェクトのビルドフォルダを、ディスクのどこにあっても見つけます。プロジェクトが過去14日間に変更されている場合、そのフォルダのチェックは外れたままになるので、作業中のプロジェクトは、自分で選ばないかぎり手を付けられません。
npm、Yarn、pnpm、Bunのキャッシュは一覧に表示され、チェックが入ります。削除したものはすべてゴミ箱に入るので、ゴミ箱を空にするまではフォルダを元に戻せます。
よくある質問
- node_modules は削除しても安全ですか?
- はい、自分のプロジェクトの中のものなら安全です。入っているのはダウンロードした依存関係だけで、npm install、yarn install、pnpm install のいずれかで作り直されます。アプリの中や ~/Library の中にある node_modules フォルダは削除しないでください。
- Macにあるすべての node_modules フォルダを見つけるにはどうすればよいですか?
- コードを置いているフォルダに対して、-name node_modules と -prune を付けて find を実行し、それぞれの結果を du -sh に渡してサイズを確認します。完全なコマンドは、このガイドにあります。
- node_modules を削除するとプロジェクトは壊れますか?
- いいえ。もう一度インストールするまでプロジェクトは動きませんが、インストールすれば以前と同じように動作します。ロックファイルがあれば、同じバージョンがインストールされます。
- npmのキャッシュを消去しても安全ですか?
- はい。キャッシュは、npmがすでにダウンロードしたパッケージのローカルコピーです。足りないものは、次のインストールのときにnpmがレジストリから取得します。
- node_modules フォルダがプロジェクト全体より大きいのはなぜですか?
- すべての依存関係と、その依存関係が依存するものすべてが入っているからです。自分のコードは、たいてい全体のごく一部です。
関連ガイド
- node_modules<project>/node_modules
- npm cache~/.npm/_cacache
- pnpm store~/Library/pnpm/store
- Yarn cache~/Library/Caches/Yarn
- Playwright browsers~/Library/Caches/ms-playwright
アンインストールガイド
Macの空き領域がどこに消えたのかを確認
Diskzyはディスク全体をマップにし、システムデータの内訳を示し、安全なものを消去します。72時間は無料、その後は$9の買い切りでMac 2台まで使えます。
Diskzyを無料で試す