lsofでのプロセス検索に別れを告げ、ポートを整理整頓する方法
よくある状況ですね。ローカルサーバーを起動すると、ターミナルおなじみのエラー Error: listen EADDRINUSE: address already in use :::3000 が出力されます。昨日動かしたワーカーが正常に終了していなかった、バックグラウンドプロセスがスタックしている、あるいはDockerコンテナが要求されたソケットを静かに占有している、などです。

通常、ここから定型的な作業が始まります。ターミナルを開き、macOSなら lsof -i :3000 の構文、Windowsなら netstat -ano でgrepして、PIDをコピーして、kill -9 を入力します。 десятокのマイクロサービスを抱えている場合、ターミナルは繰り返しコマンドの墓場と化してしまいます。
PortPalプロジェクトは、この小さくしかし持続的な問題を解決します。使用中のポートを表示し、スタックを識別し、ボタンを1つで冗長なプロセスを終了できる軽量なデスクトップダッシュボードです。
内部構造と必要性
同様のユーティリティの多くは、システムコマンドの単純なラッパーか、5行のリストを表示するだけに使用中のRAMを消費する重いElectronを引っ張っています。
PortPalの開発者たちはより効率的な方法を選び、Tauri 2、Rust、React 19でアプリケーションを構築しました。Rustにより、バックエンドはバックグラウンドでCPUにほとんど負荷をかけず、ネイティブウィンドウが即座に開きます。
このツールは日常的なタスクを複数解決します:
- ハングしているローカルポートを見つけ、プロセスのメタデータを抽出します。
- ファイルコンテキストとデフォルトポートに基づいて環境を認識します。
- プロセスを強制停止または再起動するのを支援します。
- サービス間のネットワーク接続をグラフとして可視化します。
主な機能
乾燥した数字ではなくプロジェクト認識
標準的なシステムモニターはPIDとバイナリ名のみを表示します(例:node や python)。5つの異なるNode.jsプロジェクトが実行されている場合、ターミナル出力だけで区別することは不可能です。
PortPalはよりスマートに動作します。ソケット番号だけでなく、動作ディレクトリもスキャンします。プログラムはマニフェストファイル(package.json、requirements.txt、Cargo.toml)を探して、ポート番号を一般的な開発環境と照合します:
結果として、パネルには明確なカードが表示されます:フロントエンドがポート5173で実行され、データベースが5432でリッスンしているかを即座に確認できます。
インタラクティブな接続マップ
インターフェースで最も興味深い詳細は、D3.jsライブラリで構築されたトポロジカルマップです。

平面的なテーブルではなく、ノードを持つ物理シミュレーションが得られます。ノードは技術に応じて色分けされています:データベースは青、Viteバンドラーは紫、Node.jsバックエンドは緑です。ノードは画面上でドラッグでき、マウスホイールでズームでき、アクティブなネットワークリンクをリアルタイムで検査できます。複数のマイクロサービスを持つシステムを開発している場合、このようなグラフは誰が現在誰と接続しているかを素早く理解するのに役立ちます。
ワンクリック管理と緊急ボタン
各プロセスの横には終了ボタンがあります。バツ印をクリック — プロセスは即座に終了し、ソケットが解放されます。
ポートがクラッシュしたスクリプトに占有されており、PortPalがそれを記憶している場合、近くには再起動ボタンが残っています。別のターミナルでコマンドを再実行します。
インターフェースでは、ポートは開発プロセスとシステムサービスの2つのグループに分けられています。誤ってシステムサービスを終了させるのは難しいです。そして、勤務終了時に実行中のローカルサーバーの群れを一度に閉じたい場合のために、Dev FrameworksグループにはKill Allボタンがあります。
バックグラウンド動作とシステムトレイ
PortPalは通知エリアに最小化されます。トレイアイコンはポート競合の存在に応じて色が変わります。ウィンドウが閉じられている間、バックグラウンドスレッドはイベントを記録します:新しいプロセスが上がった時、どのソケットが解放された時、どこでトラフィックスパイクが発生した時です。すべてのタイムスタンプを含む履歴は、別のログスタブに保存されます。
アーキテクチャとスタック
このプロジェクトの技術スタックは現代的です:
重いフロントエンドコンポーネントライブラリを捨て、ネイティブWebviewを使用することで、アプリケーションは軽量で、継続的なソケットスキャン中最少限のリソースしか消費しません。
起動方法
開発者はリポジトリのリリースページに готовыеビルドを公開しています:
- Windows向けには、.exe と .msi が利用可能です。
- macOS向けには、Apple SiliconチップとIntelプロセッサ用のビルドが用意されています。
- Linux向けには、.deb パッケージと汎用 .AppImage 形式があります。
ユーティリティをソースからビルドするか、独自の検出ルールを追加したい場合は、Rust 1.70以上とNode.js 18+が必要です:
開発モードでは、ViteによるReactコンポーネントのホットリローディングが、Rust部分のコンパイルと並行して動作します。
個人的な感想
このプロジェクトはまだ若く、現在のバージョンは0.2ですが、すでに日常的に使えるツールの姿をしています。基本的なポートテーブルとカードは高速に動作します。D3.jsマップは最初は装飾のように思えますが、APIゲートウェイ、データベース、数クライアントを同時にデバッグする際には本当に役立ちます。
小さな欠点としては、自動フレームワーク認識のデータベースが限られていることです。9211のような非標準ポートでカスタムサービスを実行している場合、PortPalはコンテキストを手動でバインドするまでそれを通常のプロセスとして表示します。しかし、MITライセンスの下でオープンソースであるため、コード内の署名リストに追加するのは簡単です。
誰が役立つか:ウェブ開発者、フルスタックエンジニア、そして定期的に десятокのローカルマイクロサービスを扱っていて、ソケットクリーンアップコマンドを覚えるのに厌倦しているすべての人。
関連プロジェクト