Next.js開発サーバーが止まらない時の解決方法
開発サーバーが止まらない問題
Next.jsで開発中、ターミナルを閉じてしまった後も開発サーバーが動き続けて「ポートが既に使用されています」というエラーが出ることがあります。あるいは、Ctrl+Cが効かない状況に遭遇することもあります。
この記事では、コマンドラインからNext.jsの開発サーバーを確実に停止する方法を3つ紹介します。急いでいる方は、方法2(ポート番号から直接停止)を使ってください。
5秒で解決:最も簡単な方法
まず結論です。以下のコマンドをコピーして実行してください。
lsof -ti:3001 | xargs kill
ポート番号が3000の場合は、以下を使用します。
lsof -ti:3000 | xargs kill
これで解決しない場合や、仕組みを理解したい方は、以下を読み進めてください。
基本知識:プロセスとポート
プロセスは、実行中のプログラムのことです。Next.jsの開発サーバーも一つのプロセスとして動いています。
ポートは、ネットワーク通信の出入り口を表す番号です。http://localhost:3001の3001がポート番号です。Next.jsは通常3000か3001を使います。
停止するには、このプロセスを見つけて終了させる必要があります。
方法1:段階的に停止する(確実だが手順が多い)
プロセスを探す
lsof -ti:3001
このコマンドで、ポート3001を使っているプロセスの番号(プロセスID)が表示されます。例:12345
プロセスを停止する
kill 12345
数字の部分は、実際に表示されたプロセスIDに置き換えます。
この方法は確実ですが、毎回プロセスIDをコピーする手間があります。
方法2:ポート番号から直接停止する(推奨)
lsof -ti:3001 | xargs kill
これは、「ポート3001を使っているプロセスを探して→そのまま停止する」という処理を一度に行います。
|(パイプ)は、左のコマンドの結果を右のコマンドに渡す記号です。xargsは、受け取った数字をkillコマンドに渡す役割をします。
停止できない場合の強制停止
lsof -ti:3001 | xargs kill -9
-9オプションは強制終了の命令です。通常のkillは「丁寧に終了してください」というお願いですが、kill -9は問答無用で停止させます。
方法3:プロセス名で停止する
pkill -f "next dev"
これは、next devという名前のプロセスをすべて停止します。複数のNext.jsプロジェクトを動かしている場合、すべて停止されるので注意してください。
よくあるエラーと対処法
エラー1:「command not found」
lsofコマンドが見つからない場合は、インストールが必要です。
# Ubuntu/Debianの場合
sudo apt-get install lsof
# CentOS/RHELの場合
sudo yum install lsof
Macの場合は最初から入っています。
エラー2:「Operation not permitted」
他のユーザーが起動したプロセスの場合、管理者権限が必要です。
sudo lsof -ti:3001 | xargs kill
エラー3:ポート番号が分からない
Next.jsは通常3000を使います。起動時のメッセージを確認してください。
ready - started server on 0.0.0.0:3001, url: http://localhost:3001
まとめ:状況別の使い分け
| 状況 | 使うコマンド |
|---|---|
| 急いで止めたい | lsof -ti:3001 | xargs kill |
| 確実に止めたい | 方法1(プロセスID確認→kill) |
| 複数のNext.jsを一括停止 | pkill -f "next dev" |
| 普通の方法で止まらない | lsof -ti:3001 | xargs kill -9 |
開発中にこの問題は頻繁に起こります。この記事をブックマークしておくと便利です。