PortKiller — macOSメニューバーでポート占有プロセスを強制終了するツール

Tool

概要

PortKillerは、開発作業中に衝突を起こす「既に使用中のポート」を素早く特定してプロセスを終了できる、macOS向けのメニューバーアプリです。Swift(Swift 6)でネイティブ実装され、macOS 15.0以上をサポートします。メニューバー常駐で手軽に起動でき、開放ポートの一覧表示、対応するPIDの確認、プロセスの強制終了を行えます。開発者がローカルでサーバーを立ち上げられないときの即席対処や、CI前のポート競合確認に便利なツールです。

GitHub

リポジトリの統計情報

  • スター数: 7
  • フォーク数: 1
  • ウォッチャー数: 7
  • コミット数: 5
  • ファイル数: 9
  • メインの言語: Swift

主な特徴

  • macOSメニューバー常駐の軽量UIで即アクセス可能
  • 開放ポートをスキャンしてプロセス(PID)を特定
  • 選択したプロセスを終了(kill)する操作をワンクリックで実行
  • Swift 6 / Swift Package Manager / MITライセンスで開発・配布

技術的なポイント

PortKillerはユーティリティとしてのシンプルさに重点を置いた設計です。コードベースはSwiftで書かれ、Package.swiftが含まれていることからSwift Package Manager(SPM)で管理できる構成になっています。ターゲットはmacOS 15.0以上と明記されており、最新のmacOS APIやSwiftUI/Swiftのランタイム機能を利用しやすい環境を前提としています。

ポート検出とプロセス特定の実装には2つの典型的手法が考えられます。1つはシステムユーティリティ(lsofやnetstat)をProcess(subprocess)で呼び出して出力をパースする方法、もう1つは低レイヤのSocket/Darwin APIやlibprocを直接利用する方法です。どちらを用いるにせよ、出力のパースやPID抽出、ユーザー確認ダイアログ、エラーハンドリング(既にプロセスが消えている、権限不足など)を丁寧に扱う必要があります。プロセス終了は通常SIGTERM→必要ならSIGKILLの順でシグナルを送る実装が安全ですが、root権限や管理者権限が必要な場合はAuthorization Servicesや一時的な権限昇格(正しくはユーザーに確認の上で)を要します。

UIはメニューバーに常駐するため、軽量で即時に状態を示す設計が望まれます。macOSのメニューバーAPI(NSStatusBarあるいは新しいMenuBarExtra系のSwiftUIラッパー)を使って、ポートごとの情報(ポート番号、ローカル/リモート、PID、実行中バイナリ名)を一覧化し、選択アクションで確認ダイアログ→killを行う流れが自然です。非同期処理とUI更新にはSwiftのConcurrency(async/await)やCombineが活躍します。

配布はGitHub Releasesを使ったバイナリ配布や、SIPやサンドボックス要件を考慮したパッケージングが考えられます。オープンソース(MIT)なので、拡張としてポートスキャンの自動化、ホワイトリスト設定、権限管理の改善、ターミナルコマンドとの連携などが追加可能です。ログや操作履歴の保存、i18n対応、macOSのアクセシビリティ対応も実運用での検討ポイントです。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .github: dir
  • .gitignore: file
  • CONTRIBUTING.md: file
  • LICENSE: file
  • Package.swift: file

…他 4 ファイル

まとめ

ローカル開発でのポート競合を即解消できる、シンプルで実用的なmacOSメニューバー向けユーティリティです。

リポジトリ情報:

READMEの抜粋:

PortKiller

License: MIT macOS Swift GitHub Release

A native macOS menu bar application for finding and killing processes running on open por…