ポート番号とは何か?開発でよく使う番号の意味
ポート番号は、同じPCやサーバーの中で、どのサービスに通信を届けるかを決める番号です。IPアドレスが建物の住所なら、ポート番号は部屋番号に近い役割を持ちます。
開発で重要なのは、URLや接続先に出てくる :3000 や :5432 がただの飾りではないことです。ここを見れば、Webアプリなのか、データベースなのか、ローカル開発用サーバーなのかをかなり早く判断できます。
http://localhost:3000は開発用Webサーバーでよく見るhttp://localhost:5173は Vite の開発サーバーでよく見るlocalhost:5432は PostgreSQL の接続先として定番localhost:3306は MySQL の接続先として定番localhost:6379は Redis の接続先として定番
ここがポイント: ポート番号は「通信の種類」ではなく、「そのマシン上のどの待受先に接続するか」を決める番号です。同じ
localhostでも、ポートが違えば別のアプリにつながります。
まず押さえたい基本
ポート番号は 0 から 65535 まで使えます。IANA はこの範囲を大きく3つに分けています。
0から1023: Well-Known Ports1024から49151: Registered Ports49152から65535: Dynamic/Private Ports
実務では、この分類を暗記するよりも次の理解が先です。
80や443は広く知られた標準的な番号3000や5173は開発ツールがデフォルトで使うことが多い番号5432や3306はデータベース製品の既定値として定着している番号- 空いていなければ別番号に変えてよいことも多い
つまり、ポート番号には標準と慣習の両方があるということです。
開発でよく使うポート番号
ここでは、初心者が画面やエラーメッセージで遭遇しやすい番号に絞ります。
80 と 443
80 は HTTP、443 は HTTPS の既定ポートです。ブラウザで URL にポート番号を書かなくても、HTTP なら 80、HTTPS なら 443 が暗黙に使われます。
たとえば次の2つは意味がほぼ同じです。
http://example.com
http://example.com:80
https://example.com
https://example.com:443
これが分かっていると、リバースプロキシや本番環境の設定を読むときに混乱しにくくなります。
3000
3000 は Web アプリのローカル開発で非常によく使われる番号です。特に Next.js は開発時の既定ポートとして 3000 を使います。
next dev
起動後の確認先:
http://localhost:3000
3000 は HTTP の標準ポートではありません。あくまで開発しやすい慣習的な番号です。そのため、別のアプリが使っていれば 3001 や 4000 に変更することも普通にあります。
5173
5173 は Vite の開発サーバーで既定値として使われます。フロントエンド開発で最近よく見る番号です。
npm run dev
Vite 系プロジェクトでは次のような URL が出やすくなります。
http://localhost:5173
以前から 3000 を使う開発環境に慣れていると、「なぜ 5173 なのか」と感じがちですが、これは Vite 側の既定値です。プロジェクトをまたいで画面を見分ける手がかりにもなります。
8000
8000 は簡易サーバーや検証用サーバーでよく使われます。Python の http.server は既定で 8000 を使います。
python -m http.server
アクセス先:
http://localhost:8000
静的ファイルを一時的に配るだけなら、学習用にも検証用にも便利です。ただし、Python の公式ドキュメントでも本格運用向けではない点に注意が必要です。
8080
8080 は HTTP の代替ポート として非常によく見かけます。特に次の場面で出ます。
- 80番ポートを直接使いたくないローカル開発
- Docker でコンテナの
80をホストの8080に割り当てるとき - Java 系や各種アプリサーバーのローカル確認
Docker では次の形が典型です。
docker run -d -p 8080:80 nginx
この場合、ブラウザは localhost:8080 にアクセスしますが、コンテナの中では 80 を使っています。
5432 / 3306 / 6379
この3つは、アプリ開発で接続エラーの原因になりやすい番号です。
5432: PostgreSQL の既定ポート3306: MySQL の既定ポート6379: Redis の既定ポート
接続設定でよく見る例は次のとおりです。
DB_HOST=localhost
DB_PORT=5432
DB_HOST=localhost
DB_PORT=3306
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
この番号を知っていると、.env や Docker Compose、クラウド接続設定を読む速度がかなり上がります。逆に知らないと、ホスト名は合っているのにポートだけ違って接続できない、という初歩的な詰まり方をしやすくなります。
ポート番号はどこで見るのか
実務では、ポート番号は説明文より先に設定ファイルやURLで目に入ります。
よくある場所は次のとおりです。
- ブラウザのURL:
http://localhost:5173 .envファイル:PORT=3000- Docker Compose:
8080:80 - データベース接続設定:
localhost:5432 - 起動ログ:
Listening on port 3000
URL の読み方
http://localhost:3000/users
このURLは次のように分けて読めます。
http: 通信方式localhost: 接続先ホスト3000: 接続先ポート/users: パス
同じ localhost でも、3000 と 5432 はまったく別の相手です。ここを読み違えると、ブラウザ向けのサーバーにDBクライアントでつなごうとして失敗する、といった混乱が起きます。
よくある失敗
開発初期は、ポート番号そのものより「競合」や「思い込み」で詰まることが多いです。
ポートがすでに使われている
典型例です。別のアプリが 3000 を使っていると、起動時にエラーになります。
よくある対処:
- 既存プロセスを止める
- アプリのポートを
3001などに変更する - Vite のように自動で次の空きポートへ移る挙動を理解しておく
Vite は既定の 5173 が使えないと、別の空きポートを試します。画面が開かないときは、まずターミナルに表示された実際のURLを確認したほうが早いです。
localhost なのに開けない
原因は1つではありません。
- アプリが起動していない
- ポート番号が違う
127.0.0.1だけで待ち受けていて、別ホスト名ではつながらない- Docker でコンテナ側ポートしか開いておらず、ホスト側に公開していない
本番用の番号とローカル用の番号を混同する
たとえばローカルでは 3000 で動かしていても、本番ではリバースプロキシの背後で 443 だけを外部公開していることがあります。
読者が混乱しやすい点をまとめると次のとおりです。
- ローカルの開発ポートと公開ポートは同じとは限らない
- Docker のホスト側ポートとコンテナ側ポートは別物
- デフォルトポートを書き換えている現場も多い
実務での使いどころ
ポート番号の知識は、ネットワーク専門職でなくても役に立ちます。特に次の場面では、意味が分かるだけで調査時間が短くなります。
ログを読むとき
Server started on http://localhost:3000
この1行を見て、「ブラウザで確認する開発サーバーだな」と分かるようになります。
接続エラーを切り分けるとき
connection refused 127.0.0.1:5432
この時点で、まず PostgreSQL 側の起動やポート設定を見るべきだと判断できます。アプリ本体のバグ探しから始めなくて済みます。
Docker やクラウド設定を読むとき
-p 8080:80
これは「ホストの 8080 に来た通信を、コンテナの 80 に流す」という意味です。左右の数字の役割が逆に見えて混乱しやすいので、ここは早めに慣れておく価値があります。
覚え方のコツ
全部を暗記する必要はありません。まずは役割ごとに押さえると実用的です。
- Webの標準:
80,443 - ローカル開発のWeb:
3000,5173,8000,8080 - データベースやキャッシュ:
5432,3306,6379
迷ったら、「その番号は標準なのか、ツールの既定値なのか、現場の慣習なのか」を分けて考えると整理しやすくなります。
代替手段と使い分け
ポート番号は固定でなければならない、というものではありません。実際の現場では次のように使い分けます。
- 1台で複数アプリを同時に動かすなら、
3000と3001のように分ける - HTTPS の検証が必要なら、ローカルでも
443相当の設定や開発用 HTTPS を使う - Docker では外から見せる番号と中で使う番号を分離する
- データベースの既定ポートを変更する場合は、アプリ側設定も必ずそろえる
大事なのは番号そのものより、どこで待ち受けていて、どこから見えているかです。
まとめ
ポート番号は、開発中に出てくる :3000 や :5432 の意味を読み解くための基本です。これが分かると、URL、起動ログ、接続エラー、Docker 設定の見え方が一段変わります。
最後に、まず押さえたい番号だけ再確認しておきます。
80/443: HTTP と HTTPS の既定値3000: Next.js などでよく見る開発用ポート5173: Vite の既定値8000: Python の簡易HTTPサーバーで既定値8080: HTTP の代替や Docker の公開ポートでよく使う5432/3306/6379: PostgreSQL / MySQL / Redis の既定値
次にログやURLでポート番号を見たら、「どのサービスに向かっている通信か」まで読み取れるかを意識してみてください。そこが分かると、エラー調査の出発点がかなり正確になります。
参照リンク
- IANA Service Name and Transport Protocol Port Number Registry
- MDN: Port
- MDN: URL.port
- MDN: Host header
- Next.js CLI docs
- Vite Server Options
- Vite Getting Started
- Python docs: http.server
- Docker Docs: Publishing and exposing ports
- PostgreSQL docs: runtime-config connection
- PostgreSQL docs: frontend/backend protocol
- MySQL Port Reference
- Redis CLI docs
