開発サーバーが止まらない問題

Next.jsで開発中、ターミナルを閉じてしまった後も開発サーバーが動き続けて「ポートが既に使用されています」というエラーが出ることがあります。あるいは、Ctrl+Cが効かない状況に遭遇することもあります。

この記事では、コマンドラインからNext.jsの開発サーバーを確実に停止する方法を3つ紹介します。急いでいる方は、方法2(ポート番号から直接停止)を使ってください。

5秒で解決:最も簡単な方法

まず結論です。以下のコマンドをコピーして実行してください。

lsof -ti:3001 | xargs kill

ポート番号が3000の場合は、以下を使用します。

lsof -ti:3000 | xargs kill

これで解決しない場合や、仕組みを理解したい方は、以下を読み進めてください。

基本知識:プロセスとポート

プロセスは、実行中のプログラムのことです。Next.jsの開発サーバーも一つのプロセスとして動いています。

ポートは、ネットワーク通信の出入り口を表す番号です。http://localhost:30013001がポート番号です。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

開発中にこの問題は頻繁に起こります。この記事をブックマークしておくと便利です。

参考記事