2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【macOS】ローカルサーバーの起動状況をコマンドラインで確認する方法

Posted at

はじめに

この記事では、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
# 何も表示されなければ成功

安全な終了方法

  1. まず通常のkillコマンドを試す
  2. プロセスが終了しない場合のみkill -9を使う
  3. 終了後、再度確認して完全に停止したことを確かめる

注意点: kill -9は強制終了のため、保存されていないデータが失われる可能性があります。通常はkillコマンドで十分です。

まとめ

コマンドの使い分け

コマンド 用途 メリット
lsof 特定のポートを確認 シンプルで分かりやすい
netstat 全体の接続状況を確認 一覧性が高い
ps プロセス名から検索 詳細な情報が得られる

トラブルシューティングのポイント

  1. ポート競合が起きたら: まずlsofで該当ポートを確認
  2. 複数サーバーが起動している場合: netstatで一覧表示
  3. プロセス名が分かっている場合: psgrepを組み合わせる

これらのコマンドを使いこなすことで、ローカル開発環境のトラブルを迅速に解決できるようになります。

参考資料

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?