港 minato

localhost のポートを、どのプロジェクトのどの開発サーバーかで一覧する CLI。
設定ファイルからポートの台帳を作り、別のアプリが同じ番号を宣言していたら知らせ、空いている番号を提案する。依存ゼロ。

GitHub つかいかた
$ minato conflicts
⚠ 衝突 5 件 — 同じポートを別のアプリが宣言している
  5380
    - maai               ~/ranzo_project/maai/vite.config.js:4
    - sora-shirabe       ~/ranzo_project/sora-shirabe/package.json:7
  5410
    - kemuri-ate         ~/ranzo_project/kemuri-ate/vite.config.js:4  strictPort なし→黙ってずれる
    - kemuri-so          ~/ranzo_project/kemuri-so/vite.config.js:4  strictPort なし→黙ってずれる
  5730
    - denpa-scope        ~/ranzo_project/denpa-scope/server.js:12  既定値
    - sokomi             ~/ranzo_project/sokomi/vite.config.js:4

$ minato suggest --next
5970
範囲 5000-5999・10 刻み。台帳の番号、strictPort なしの宣言の +1〜+2、5000/7000(AirPlay)、5173/4173(Vite 既定)を避けた
127.0.0.1 と :: で実際に bind できることを確かめた

なぜ

アプリを何十本も作っていると、ポート番号はいつのまにか重なる。実際、手元の 130 あまりのプロジェクトを走査したら 5 か所で重複していた。 片方が strictPort なしだと Vite は黙って次の番号にずれるので、気づかないまま「開いたら別のアプリだった」が起きる。 港は、各リポジトリの vite.config・package.json・.env・サーバーのコードから台帳を作り、lsof で今の待ち受けと突き合わせる。

つかいかた

git clone https://github.com/Jinshin2534/minato && cd minato && npm link

minato                    # 台帳 + 稼働状況 + 衝突 + 空き候補
minato conflicts          # 衝突だけ(あれば終了コード 1)
minato suggest            # 空いているポートを3つ(bind して確かめる)
minato suggest --next     # いちばん大きい番号の次の区切り
minato who 5173           # 宣言しているアプリと、いま使っているプロセス
minato live --all         # いま待ち受けているポート

# 走査するフォルダ(既定 ~/ranzo_project:~/orca/workspaces)
MINATO_ROOTS=~/code:~/work minato

何を拾うか

場所例確度
vite.config.*server: { port: 5410 }・preview・strictPort宣言
package.json の scriptsvite --port 5380・-p 3020・PORT=3030宣言
.envPORT=3000・API_PORT=8080宣言
サーバーのコードprocess.env.PORT ?? 5460既定値
同上.listen(4000)推定
どこにも書いていない Vite アプリ—暗黙(5173)

正直さのための作り

しくみ