なぜnpmはENOTFOUNDを返すのか?
npm ERR! code ENOTFOUND エラーが表示される場合、通常はコンピュータとnpmレジストリ間の通信が途絶えていることを意味します。具体的には、システムのDNSルックアップに失敗しています。これは、ブラウザで「サーバーが見つかりません」と表示される状態の技術的な同等品が、コマンドライン内で発生しているようなものです。
簡単に言うと、コンピュータが虚空に向かって「registry.npmjs.orgはどこ?」と叫んでいるのに、応答がない状態です。これは通常、Wi-Fi接続の切断、古いDNSキャッシュ、または企業内ファイアウォールによる遮断が原因で発生します。
エラーメッセージの確認
ターミナルにはおそらく次のような出力が表示されているはずです:
npm ERR! code ENOTFOUND
npm ERR! errno ENOTFOUND
npm ERR! network request to https://registry.npmjs.org/package-name failed, reason: getaddrinfo ENOTFOUND registry.npmjs.org
解決方法
1. 接続状態のクイックチェック(10秒)
まずは基本から確認しましょう。pingを実行して、外部ネットワークに接続できるかどうかを確認します:
ping registry.npmjs.org
正常な接続であれば、100ms未満で応答が返ってくるはずです。「Ping request could not find host(ホストが見つかりませんでした)」と表示される場合は、インターネット接続が切れているか、ルーターに問題がある可能性があります。
2. DNSキャッシュのクリア
DNSの問題は驚くほど一般的です。コンピュータがレジストリへの古くて壊れたパスを記憶していることがあります。キャッシュをクリア(フラッシュ)することで、新しいルートを探すように強制できます。
Windowsの場合:
ipconfig /flushdns
macOSの場合:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
それでも解決しない場合は、ネットワーク設定をGoogle (8.8.8.8) や Cloudflare (1.1.1.1) などの信頼できるパブリックDNSに切り替えてみてください。
3. npmレジストリURLの確認
設定の単純なタイポ(入力ミス)により、npmが存在しないサーバーを参照している場合があります。次のコマンドで現在の設定を確認してください:
npm config get registry
結果が https://registry.npmjs.org/ でない場合は、公式のデフォルト設定にリセットします:
npm config set registry https://registry.npmjs.org/
4. 企業内プロキシ設定の管理
企業内のネットワーク環境では、このエラーがよく発生します。職場のファイアウォールの内側にいる場合、npmが外部と通信するには特定のプロキシ設定が必要です。逆に、オフィスを離れた後でも「ゴースト」プロキシ設定が有効なままになっていることもあります。
有効なプロキシを確認する:
npm config get proxy
npm config get https-proxy
プロキシをクリアする(自宅ネットワークの場合):
npm config delete proxy
npm config delete https-proxy
プロキシを設定する(オフィスで必要な場合):
npm config set proxy http://username:password@proxy.company.com:8080
npm config set https-proxy http://username:password@proxy.company.com:8080
5. VPNとファイアウォールの切り替え
VPNはDNS解決を横取りすることがよくあります。VPNを使用中の場合は、一旦オフにして npm install を再試行してください。また、一部の強力なセキュリティソフトがNode.jsのプロセスを不審なものとしてフラグを立て、送信トラフィックを密かにブロックしている場合もあります。
6. 強力なキャッシュクリア(最終手段)
ENOTFOUND はネットワークエラーですが、ローカルキャッシュの破損が原因でnpmが不安定になることもあります。次のコマンドでキャッシュを完全にクリアしてください:
npm cache clean --force
接続テスト
installコマンドを何度も繰り返すのではなく、組み込みのnpm pingを使用して修正を確認しましょう:
npm ping
修正が成功すると npm notice PING https://registry.npmjs.org/ 185ms のような応答が返ります。200 OK ステータスが表示されれば、パッケージのダウンロードは問題なく行えるはずです。
予防策とプロのアドバイス
ほとんどの ENOTFOUND エラーは、ネットワーク環境の切り替えによって発生します。新しいサーバーをセットアップしたり、複雑なローカルネットワークのトラブルシューティングを行ったりする際は、すべてのパラメータが正しく設定されているか再確認するようにしています。
私はよく、マシンのIPやゲートウェイの設定を確認するために ToolCraftのサブネット計算機(Subnet Calculator) を使用します。インフラ周りの問題に対処する際、データをプライベートに保ちながら素早く確認できる便利なブラウザツールです。
将来の問題を避けるために、プロキシ設定には環境変数を使用することをお勧めします。これにより、職場のプロキシを .npmrc にハードコードすることを防げます。ハードコードは、後でカフェなどで作業しようとしたときにこのエラーが発生する最も一般的な原因です。

