18 ポイント 投稿者 givvemee 2026-01-20 | 6件のコメント | WhatsAppで共有

開発していると、lsof -i :3000 のようなコマンドを数え切れないほど打つことになります。
「このポート、何が使っているんだろう?」「さっきのサーバー、止めていない気がするけど...」

ports-cliは、現在開いているすべてのポートを、プロセス名やプロジェクトのパスと一緒に見やすく表示してくれるCLIツールです。

主な機能

  • ひと目で確認: 開いているポート、プロセス名、プロジェクトのパスを表形式で表示
  • Node.jsプロジェクト認識: package.json の name を読み取り、node の代わりに実際のプロジェクト名を表示
  • ユーザープロセスのフィルタリング: -u オプションでシステムプロセスを除外し、自分が起動したものだけを確認
  • 終了: ports bye 3000 でそのポートのプロセスを即座に kill

インストール

brew tap givvemee/tap  
brew install ports-cli  

使い方

ports              # すべてのリスニングポートを表示  
ports -u           # 自分が起動したプロセスだけ  
ports bye 3000     # 3000番ポートのプロセスを終了  

出力例

  
PORT     PROCESS                  PATH  
----     -------                  ----  
3000     my-app                   ~/Documents/GitHub/my-app  
5432     postgres                 -  
8080     test-server              ~/Documents/GitHub/test-server  

macOS専用で、Bashスクリプトとして追加の依存関係なしに軽量に動作します。

フィードバック歓迎です。 :)

6件のコメント

 
channprj 2026-01-26

お、便利な機能がいろいろありますね。 👍🏻

macOS の場合は別途インストールせずに、以下のコマンドで手軽に確認することもできます。
~/.zshrc に入れておけばOKです。

(参考までに共有します!)

alias portcheck="printf "\033[4;37m%-15s %-8s %-20s %s\033[0m\n" "COMMAND" "PID" "PORT" "DIR"; sudo lsof -iTCP -sTCP:LISTEN -n -P | awk 'NR>1 {print $2, $1, $9}' | sort -u | while read pid cmd port; do dir=$(sudo lsof -p "$pid" -a -d cwd -F n 2>/dev/null | tail -1 | cut -c2-); printf "\033[1;32m%-15s\033[0m \033[1;36m%-8s\033[0m \033[1;33m%-20s\033[0m %s\n" "$cmd" "$pid" "$port" "$dir"; done"

 
givvemee 2026-01-27

portcheck のエイリアスを作って使っていたんですね。こういう方法もありますね。ありがとうございます!

 
channprj 2026-01-27

ダブルクォートの問題があったため、再共有します。

alias portcheck='printf "\033[4;37m%-36s %-8s %-22s %s\033[0m\n" "COMMAND" "PID" "LISTEN" "CWD"; sudo lsof -nP -iTCP -sTCP:LISTEN -F pcn 2>/dev/null | awk '"'"'BEGIN{pid=cmd=name=""}/^p/{pid=substr($0,2)}/^c/{cmd=substr($0,2)}/^n/{name=substr($0,2);if(pid&&cmd&&name)print pid"\t"cmd"\t"name}'"'"' | sort -u | while IFS=$'"'"'\t'"'"' read -r pid cmd name; do dir=$(sudo lsof -n -p "$pid" -a -d cwd -F n 2>/dev/null | sed -n '"'"'s/^n//p'"'"' | tail -1); [ -z "$dir" ] && dir="-"; printf "\033[1;32m%-36.36s\033[0m \033[1;36m%-8s\033[0m \033[1;33m%-22s\033[0m %s\n" "$cmd" "$pid" "$name" "$dir"; done'

 
chcv0313 2026-01-22

sudo netstat -tnlp と比べて何が優れているのか気になります

 
channprj 2026-01-26

使ってみれば分かりますが、もう少し整理して表示してくれます。
ユーザー自身が使用中のプロセスだけを見られるようにするフィルター機能もありますね。

 
yshrust 2026-01-21

おお、さっそくインストールして使ってみましたが、シンプルで使いやすいですね!!
ありがとうございます(笑)