- ローカル開発時の ポート衝突 と 何番ポートを使ったか覚えなければならないつらさ を解決する Vercel Labs のオープンソースユーティリティ
- 各開発サーバーに固有の app.localhost サブドメイン を割り当て、人間と AI エージェントの両方が認識できる URL 体系を提供
next dev で実行すると http://localhost:3000 となり 3000 を覚える必要がありますが、
portless myapp next dev を実行すると http://myapp.localhost:1355 の形でアクセス可能
portless api.myapp pnpm start のように実行すると http://api.myapp.localhost:1355 としてサブドメインアクセスにも対応
- プロキシベースの構造 で動作し、
portless proxy が中央でリクエストをルーティング
- アプリ実行時に自動でプロキシが起動し、各アプリは任意のポート (4000–4999) に割り当て
- ほとんどのフレームワーク (Next.js, Express, Nuxt など) は
PORT 環境変数を自動認識
- Vite、Astro など一部のフレームワークでは 自動フラグ注入機能 により互換性を確保
- HTTP/2 と HTTPS をサポート し、高速なページ読み込みと安全なローカル通信を実現
- ブラウザは HTTP/1.1 をホストごとに 6 接続までに制限
- Vite/Nuxt のように複数の未圧縮ファイルを配信する開発サーバーでは性能低下が発生
- HTTP/2 はすべてのリクエストを単一接続で多重化
- 独自証明書の生成とシステム信頼ストアへの登録を自動化
--cert, --key オプションで カスタム証明書 も適用可能
- コマンド中心の CLI インターフェースを提供
portless <name> <cmd> : 指定した名前でアプリを実行
portless list : アクティブなルート一覧を表示
portless proxy start/stop : プロキシを制御
PORTLESS=0 環境変数でプロキシをバイパスして実行可能
- 状態管理ディレクトリ を通じてルートと PID 情報を保存
- 一般ユーザーモードでは
~/.portless、root モードでは /tmp/portless を使用
PORTLESS_STATE_DIR でパスを再定義可能
- Vite、webpack-dev-server などで API プロキシを設定する際は
Host ヘッダーの書き換えが必要
- 設定が誤っている場合は
508 Loop Detected レスポンスで問題を案内
- Node.js 20 以上、macOS および Linux 環境をサポート
- pnpm + Turborepo ベースのモノレポ構成
- Apache-2.0 ライセンス、TypeScript (約 74%) コードベース
7件のコメント
ワークツリーをサポートするようにアップデートされました
https://github.com/vercel-labs/portless/releases/tag/v0.5.2
これで自動的にワークツリーを認識して、ブランチ名をホストの前に付けてくれます
同一プロジェクトのワークツリーとは相性があまり良くないので、使っていません。
自動で割り当ててくれるのかと思ったら、単に手動で登録する方式なんですね
Caddyを使っているので、あえてこれに乗り換える理由はなさそうです
docker+traefik+mkcertですでにやっていましたが、あれを使うほうがもっと便利そうですね役に立つ記事ですね
これで EADDRINUSE エラーともおさらばですかね?
最近はエージェント経由であれこれ開発してると、いろいろ立ち上がって勝手にぶつかって大騒ぎなんですよね(笑)
Xで話題になっていましたが、Dockerで使う場合は Docker デーモンの PID を強制的に渡せば、それでも動くそうです。
https://github.com/vercel-labs/portless/issues/61