できない.dev

Next.js の dev server が起動できない

Next.js の next dev が起動できないときは、ポート競合・Node.js バージョン・.next キャッシュ破損の 3 点を順に切り分ける。
占有プロセス確認・対応 Node 確認・キャッシュ削除で大半は復旧する。

公開: 更新:

実行例あり(2026-10-05 に実環境で検証)

要約

next dev が起動できないときは ポート競合 → Node バージョン → .next キャッシュ の順で切り分ける。
多くの場合、占有プロセスを止めるか .next を消すだけで復旧する。next.config.js を最小構成に戻して問題を二分するのも有効。

実行例

ポート 3000 が使用中の状態で next dev -p 3000 を実行すると Failed to start server と EADDRINUSE で失敗し、-p 3001 に変えると Next.js 16.3.8 が起動して curl が 200 を返した。
Node.js 18 で起動すると >=20.9.0 が必要だと案内され、終了コード 1 で止まった。

$ npx next dev -p 3000 2>&1 | head -n 3
⨯ Failed to start server
Error: listen EADDRINUSE: address already in use :::3000
    at <unknown> (Error: listen EADDRINUSE: address already in use :::3000)
$ npx next dev -p 3001 > dev.log 2>&1 &
$ cat dev.log
▲ Next.js 16.3.8 (Turbopack)
- Local:         http://localhost:3001
- Network:       http://172.17.0.6:3001
✓ Ready in 216ms
✓ Running next.config took 7ms
 
 GET / 200 in 756ms (next.js: 677ms, application-code: 79ms)
$ curl -s -o /dev/null -w '%{http_code}\n' http://localhost:3001
200
$ npx -y node@18 node_modules/next/dist/bin/next dev -p 3005
You are using Node.js 18.20.8. For Next.js, Node.js version ">=20.9.0" is required.
$ echo $?
1
$ node -v
v20.20.2

— 2026-10-05 時点の出力

検証環境

検証日
実行環境
node:20 Debian GNU/Linux 12 (bookworm)
バージョン
  • Node.js 20.20.2
  • npm 10.8.2
  • Python 3.11.2
  • Git 2.39.5

この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。

よくある原因

  1. ポート 3000 が既に使われている: 別ターミナルの next dev が残っている、または Vite / Docker / 別アプリが占有している。
    ただし -p も PORT も付けない next dev は、⚠ Port 3000 is in use by an unknown process, using available port 3001 instead. と出して空いているポートで起動する(Next.js 16.3.8 で確認)。listen EADDRINUSE で起動に失敗するのは、next dev -p 3000 や PORT=3000 でポートを明示したとき
  2. Node.js バージョンが対応外: Next.js は公式ドキュメント(新しいタブで開く)で対応 Node を明記している。
    範囲外は起動失敗の原因
  3. .next キャッシュ破損: ブランチ切替直後や依存更新後にビルドキャッシュが矛盾する
  4. 依存破損: node_modules の不整合、lockfile と package.json の不一致
  5. next.config.js の問題: 文法エラーや、削除された旧オプション(swcMinify など)の残置

解決策

1. ポート競合を確認する

lsof -i :3000                  # macOS / Linux
netstat -ano | findstr :3000   # Windows

該当プロセスを終了するか、別ポートで起動する。

npx next dev -p 3001

2. Node.js バージョンを確認する

node -v

Next.js の CLI ドキュメント(新しいタブで開く) で必要バージョンを確認し、nvm や volta で切替える。

nvm use 20

3. キャッシュと依存を作り直す

rm -rf .next node_modules package-lock.json
npm install
npm run dev

.next 削除だけで直ることも多い。
まず .next を試し、ダメなら node_modules まで広げる。

4. next.config.js を切り分ける

最小構成にして起動を試す。

/** @type {import('next').NextConfig} */
const nextConfig = {};
module.exports = nextConfig;

起動できれば、削った設定を 1 つずつ戻して原因オプションを特定する。
各オプションのサポート状況は公式の設定リファレンス(新しいタブで開く)で確認する。

この記事は役立ちましたか?