はじめに
この記事では、macのコマンドラインを使って、現在起動しているローカルサーバーを確認する方法を解説します。
この記事で分かること
- lsof、netstat、psコマンドの基本的な使い方
- 特定のポートで起動しているプロセスの確認方法
- 不要なサーバープロセスを安全に終了する方法
想定する読者
- Web開発でローカルサーバーを使用している方
- ポート番号の競合で困った経験がある方
- ターミナル操作の基本を理解している方
ローカルサーバーの確認が必要になる場面
開発中に以下のような場面に遭遇することがあります。
ポートの競合が発生したとき
Error: listen EADDRINUSE: address already in use :::3000
このようなエラーが出た場合、既に同じポート番号を使用しているプロセスが存在します。
どのプロセスがサーバーを起動しているか知りたいとき
複数のプロジェクトを並行して開発していると、どのプロセスがどのポートを使っているか分からなくなることがあります。
不要なサーバープロセスを終了させたいとき
ターミナルを誤って閉じてしまい、バックグラウンドでサーバーが起動し続けている場合などです。
主な確認方法
方法1: lsofコマンドを使う
lsofは「list open files」の略で、開いているファイルやネットワーク接続を表示するコマンドです。
基本的な使い方
全てのネットワーク接続を確認する場合:
sudo lsof -i -P
-
-i: インターネット接続を表示 -
-P: ポート番号を数値で表示
特定のポート番号で確認する
ポート3000で起動しているプロセスを確認する場合:
sudo lsof -i :3000
実行例と結果の見方
$ sudo lsof -i :3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 12345 user 21u IPv6 0x1234567890abcdef 0t0 TCP *:3000 (LISTEN)
結果の各項目の意味:
- COMMAND: プロセス名(この例ではnode)
- PID: プロセスID(この例では12345)
- USER: 実行ユーザー
- FD: ファイルディスクリプタ
- TYPE: 接続タイプ
- NODE: プロトコル(TCPやUDP)
- NAME: ポート番号と状態
方法2: netstatコマンドを使う
netstatはネットワーク接続の状態を表示するコマンドです。
基本的な使い方
netstat -an | grep LISTEN
-
-a: 全ての接続を表示 -
-n: ホスト名やポート名を数値で表示 -
grep LISTEN: 待ち受け状態のものだけを抽出
オプションの説明
より詳細な情報を得たい場合:
netstat -anvp tcp | grep LISTEN
-
-v: 詳細表示 -
-p tcp: TCPプロトコルのみを表示
実行例と結果の見方
$ netstat -an | grep LISTEN
tcp4 0 0 *.3000 *.* LISTEN
tcp6 0 0 *.8080 *.* LISTEN
この結果から、ポート3000と8080で何かが待ち受けていることが分かります。
方法3: psコマンドと組み合わせる
psコマンドでプロセス一覧を取得し、grepで絞り込む方法です。
プロセス名から検索する方法
Node.jsのプロセスを検索する場合:
ps aux | grep node
-
aux: 全てのプロセスを詳細表示 -
grep node: nodeを含むプロセスのみを抽出
grepと組み合わせた使用例
$ ps aux | grep node
user 12345 0.5 1.2 123456 78910 ?? S 10:00AM 0:01.23 node server.js
user 12346 0.0 0.0 123456 890 ?? S 10:00AM 0:00.01 grep node
2行目のgrep自身のプロセスは無視します。実際のサーバープロセスは1行目です。
よくある使用例
実際の開発現場でよく使われる例を紹介します。
Reactの開発サーバー(ポート3000)を確認
# ポート3000を使用しているプロセスを確認
sudo lsof -i :3000
# または
netstat -an | grep 3000
Reactの開発サーバーはデフォルトでポート3000を使用します。
Node.jsのExpressサーバーを確認
# Node.jsプロセスを全て表示
ps aux | grep node
# 特定のポートで確認
sudo lsof -i :8080
Pythonのローカルサーバーを確認
# Pythonプロセスを確認
ps aux | grep python
# ポート8000を確認(Pythonのデフォルト)
sudo lsof -i :8000
サーバープロセスを終了する方法
不要なサーバープロセスを見つけたら、適切に終了させましょう。
killコマンドの使い方
PIDが12345のプロセスを終了する場合:
# 通常の終了
kill 12345
# 強制終了(プロセスが応答しない場合)
kill -9 12345
実際の手順:
# 1. ポート3000のプロセスを確認
$ sudo lsof -i :3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 12345 user 21u IPv6 0x1234567890abcdef 0t0 TCP *:3000 (LISTEN)
# 2. PID 12345を終了
$ kill 12345
# 3. 確認
$ sudo lsof -i :3000
# 何も表示されなければ成功
安全な終了方法
- まず通常の
killコマンドを試す - プロセスが終了しない場合のみ
kill -9を使う - 終了後、再度確認して完全に停止したことを確かめる
注意点: kill -9は強制終了のため、保存されていないデータが失われる可能性があります。通常はkillコマンドで十分です。
まとめ
コマンドの使い分け
| コマンド | 用途 | メリット |
|---|---|---|
| lsof | 特定のポートを確認 | シンプルで分かりやすい |
| netstat | 全体の接続状況を確認 | 一覧性が高い |
| ps | プロセス名から検索 | 詳細な情報が得られる |
トラブルシューティングのポイント
-
ポート競合が起きたら: まず
lsofで該当ポートを確認 -
複数サーバーが起動している場合:
netstatで一覧表示 -
プロセス名が分かっている場合:
psとgrepを組み合わせる
これらのコマンドを使いこなすことで、ローカル開発環境のトラブルを迅速に解決できるようになります。