0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「npm installが遅すぎる」を5分で解決する方法7選

Last updated at Posted at 2025-10-31

はじめに

npm installが遅くてイライラしたことはありませんか?インストールだけで数分待たされるのは開発効率の大敵です。

この記事では、すぐに実践できる高速化テクニックを7つ厳選して紹介します。

特に効果が高い方法から順に解説していくので、まずは気になるものから試してみてくださいね!

1. 【最速】pnpmに乗り換える

なぜ速いのか

pnpmは、パッケージをシンボリックリンクで管理することで、npmの3倍以上の速度を実現します。

同じパッケージを複数のプロジェクトで使い回せるため、ディスク容量も大幅に節約できますよ!

導入方法

# pnpmをインストール
npm install -g pnpm

# 既存プロジェクトで使う
pnpm install

注意点

  • package.jsonはそのまま使えます
  • ロックファイルがpnpm-lock.yamlに変わります
  • 一部のツールでシンボリックリンクに対応していない場合があります(極めて稀なケース)

互換性チェック: まずは小規模なプロジェクトで試してから、本番環境に導入しましょう。

2. Bunで開発環境を一新する

Bunとは

Bunは2023年に登場した次世代のJavaScriptランタイムです。パッケージマネージャー機能も内蔵しており、npmの10倍以上の速度を誇ります。

導入方法

# Bunをインストール(macOS/Linux)
curl -fsSL https://bun.sh/install | bash

# Windows
powershell -c "irm bun.sh/install.ps1 | iex"

# プロジェクトで使う
bun install

# インストールの確認
bun --version
bun --revision

メリット

  • インストールが圧倒的に速い
  • TypeScriptをそのまま実行できる
  • テスト、バンドラーも統合されている

注意点

比較的新しいツールなので、以下の点に注意が必要です。

  • すべてのnpmパッケージとの互換性が保証されているわけではありません
  • 企業の本番環境では、十分な検証期間を設けることをおすすめします
  • コミュニティはまだ成長途中です

推奨: 新規プロジェクトや個人開発で試してみるのがベストです。

3. npm ciを活用する

npm installとの違い

npm ciCI環境専用に設計されたコマンドで、次の特徴があります。

  • package-lock.jsonだけを見て依存関係を解決(package.jsonは見ない)
  • node_modulesを毎回削除してクリーンインストール
  • 10〜30秒ほど高速化が期待できる

使い方

# 通常のインストールの代わりに
npm ci

# 本番環境用(開発依存パッケージを除外)
npm ci --omit=dev

使うべきタイミング

  • CI/CD環境
  • クリーンな状態でインストールしたいとき
  • package.jsonとpackage-lock.jsonの整合性を保ちたいとき

重要: ローカル開発では従来通りnpm installを使いましょう。

4. キャッシュを活用する(CI環境)

~/.npmをキャッシュする方法

CI環境では、npmのキャッシュディレクトリをキャッシュすることで大幅に高速化できます。

GitHub Actionsでの設定例

- name: Setup Node.js
  uses: actions/setup-node@v4
  with:
    node-version: 20
    cache: 'npm'  # この1行を追加するだけ

- name: Install dependencies
  run: npm ci

より詳細な設定

- name: Setup Node.js
  uses: actions/setup-node@v4
  id: setup_node
  with:
    node-version: 20

- name: Cache npm directory
  uses: actions/cache@v4
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-node-

- name: Install dependencies
  run: npm ci

node_modulesをキャッシュする方法

より高速化を狙う場合は、node_modulesそのものをキャッシュできます。

- name: Setup Node.js
  uses: actions/setup-node@v4
  id: setup_node
  with:
    node-version: 20

- name: Cache node_modules
  uses: actions/cache@v4
  id: cache
  with:
    path: node_modules
    key: ${{ runner.arch }}-${{ runner.os }}-node-${{ steps.setup_node.outputs.node-version }}-npm-${{ hashFiles('**/package-lock.json') }}

- name: Install dependencies
  if: steps.cache.outputs.cache-hit != 'true'
  run: npm ci

ポイント: キャッシュキーにNode.jsのバージョンとCPUアーキテクチャを含めることで、環境の違いによる問題を防げます。

5. Dockerでの高速化テクニック

問題点

Dockerコンテナ内でnpm installを実行すると、バインドマウントによるファイル同期が原因で遅くなります。

解決策:ボリュームマウントを使う

version: '3.9'
services:
  app:
    build: .
    volumes:
      - .:/app                    # ソースコードをバインドマウント
      - node_modules:/app/node_modules  # node_modulesはボリュームマウント

volumes:
  node_modules:  # 名前付きボリュームを定義

なぜ速くなるのか

node_modulesをボリュームマウントすることで、ホストとの同期が不要になり、コンテナ内のみで完結します。これにより大量のファイルI/Oが劇的に改善されます。

注意: node_modulesはホスト側には作成されないため、IDEの補完機能を使いたい場合は別途対応が必要です。

6. WSL2での高速化(Windows環境)

問題:npm installが固まる

WSL2環境でnpm installが異常に遅い、または固まってしまう場合があります。

解決策:DNSを変更する

手順1: wsl.confを編集

sudo nano /etc/wsl.conf

以下を追加します。

[network]
generateResolvConf = false

手順2: resolv.confを書き換え

# シンボリックリンクを削除
sudo rm /etc/resolv.conf

# GoogleのDNSを設定
sudo nano /etc/resolv.conf

以下を記述します。

nameserver 8.8.8.8
nameserver 8.8.4.4

手順3: WSLを再起動

# PowerShellで実行
wsl --shutdown

なぜこれで解決するのか

WSL2のデフォルトDNS設定が原因で名前解決に時間がかかることがあります。GoogleのパブリックDNSに切り替えることで、この問題を回避できます。

7. オフラインモードを活用する

ローカル開発での高速化

一度インストールしたパッケージは、npmのキャッシュに保存されます。オフラインモードを使うことで、ネットワークアクセスをスキップできます。

# キャッシュを優先的に使う
npm install --prefer-offline

# 完全にオフラインモード(キャッシュのみ)
npm install --offline

CI環境での活用

# キャッシュディレクトリを指定
npm ci --prefer-offline --cache /path/to/cache

注意: 初回はキャッシュがないため効果はありません。2回目以降で威力を発揮します。

速度比較まとめ

実際のベンチマーク結果を参考に、各手法の効果をまとめました。

手法 速度改善効果 導入難易度 おすすめ度
pnpm ★★★★★ ★★☆☆☆ ★★★★★
Bun ★★★★★ ★★★☆☆ ★★★★☆
npm ci ★★★☆☆ ★☆☆☆☆ ★★★★★
キャッシュ活用(CI) ★★★★☆ ★★☆☆☆ ★★★★★
Docker最適化 ★★★★☆ ★★★☆☆ ★★★★☆
WSL2 DNS設定 ★★★★☆ ★★☆☆☆ ★★★☆☆
オフラインモード ★★☆☆☆ ★☆☆☆☆ ★★★☆☆

※環境やプロジェクト規模により効果は変動します

まとめ:どの方法を選ぶべきか

すぐに試せる方法

  1. CI環境を使っている場合: npm ciに変更して、キャッシュを設定する
  2. ローカル開発: --prefer-offlineオプションを試す
  3. WSL2ユーザー: DNS設定を変更する

本格的に高速化したい場合

  1. 新規プロジェクト: Bunを検討する
  2. 既存プロジェクト: pnpmに移行する
  3. Docker環境: ボリュームマウントで最適化する

チーム開発での導入

チーム全体で新しいツールを導入する際は、次の手順がおすすめです。

  1. まず小規模なプロジェクトで検証する
  2. 開発者向けのドキュメントを整備する
  3. 段階的に本番環境へ展開する

特にpnpmは、npmとの互換性が高く、移行リスクが低いため最初の選択肢として最適です。

参考リンク

この記事が、あなたの開発環境の高速化に役立てば幸いです。実際に試してみて、体感速度を確かめてみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?