node_modules はなぜ重いのか:依存関係の木構造を理解する

入門 | 6分 で読める | 2026.07.09

公式ドキュメント

まず結論

node_modulesが大きいのは、自分で追加したパッケージだけでなく、そのパッケージが必要とする依存関係も入るためです。

アプリの直接依存A・Bと、その先の推移的依存C・D・Eがnode_modulesに含まれる図

直接依存と推移的依存

package.jsonに自分で書いたものを直接依存と呼びます。たとえばastroを追加すると、Astroが必要とする多くのパッケージも一緒に入ります。これが推移的依存です。

自分のアプリ
└─ astro(直接依存)
   └─ 別のパッケージ(推移的依存)

複数のパッケージが同じ依存先を必要とすることもあります。版の条件が合えば共有され、合わなければ複数の版が必要になることがあります。

Gitに入れない理由

node_modulesはlockfileから再作成できます。ファイル数が多く環境差も出やすいため、通常は.gitignoreに入れ、package.jsonとlockfileを共有します。

壊れた時の確認

依存関係がおかしいと感じたら、まず使うパッケージマネージャーとlockfileを確認します。次に、プロジェクトのディレクトリで依存関係を入れ直します。別のプロジェクトやホームディレクトリを対象にしないよう、現在地を確認してから操作します。

pwd
npm ci

npm ciにはlockfileが必要です。日常の依存追加にはnpm installを使います。

まとめ

node_modulesは依存関係の展開結果です。直接依存だけを見て容量を判断せず、lockfileで再現し、Gitには通常含めません。

参考リソース

次に読む記事

← 一覧に戻る
PR
PR
PR
PR