ローカルホスト(localhost)の仕組み¶
1. ローカルホストとは¶
localhost とは、自分自身のコンピュータを指す特別なホスト名。 ネットワーク上の他のマシンではなく、「今使っているこのPC」を意味する。
2. IPアドレスとの関係¶
| ホスト名 | IPアドレス | プロトコル |
|---|---|---|
| localhost | 127.0.0.1 | IPv4 |
| localhost | ::1 | IPv6 |
127.0.0.1は ループバックアドレス と呼ばれる127.0.0.0/8(127.0.0.1 〜 127.255.255.255)の範囲はすべてループバック用に予約されている- どのPCでも共通。世界中のどのマシンでも
127.0.0.1は「自分自身」
3. 名前解決の仕組み¶
localhost → 127.0.0.1 の変換は hostsファイル で定義されている。
hostsファイルの中身(例):
名前解決の優先順位: 1. hostsファイル(ローカル) 2. DNSキャッシュ 3. DNSサーバーへの問い合わせ
→ localhost はhostsファイルで解決されるため、DNSサーバーへの問い合わせは発生しない
4. ループバックインターフェース¶
通常の通信 vs ループバック通信¶
- 物理的なネットワーク機器を経由しない
- OSのネットワークスタック内で完結する
- そのため非常に高速(遅延ほぼゼロ)
- ネットワークが切断されていても動作する
図解¶
┌─────────────────────────────────┐
│ あなたのPC │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ ブラウザ │ │ サーバー │ │
│ │ (クライ │ │ (Node.js │ │
│ │ アント) │ │ 等) │ │
│ └────┬─────┘ └─────┬────┘ │
│ │ │ │
│ │ localhost:3000 │ │
│ ▼ ▼ │
│ ┌──────────────────────────┐ │
│ │ ループバックインターフェース │ │
│ │ (127.0.0.1) │ │
│ └──────────────────────────┘ │
│ │
│ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
│ 物理NIC(使わない) │
└─────────────────────────────────┘
5. ポート番号¶
localhost単体ではサーバーを特定できない。ポート番号で区別する。
http://localhost:3000 → Webアプリ(React等)
http://localhost:8080 → APIサーバー
http://localhost:5432 → PostgreSQL
http://localhost:6379 → Redis
- ポートは
0〜65535の範囲 0〜1023は ウェルノウンポート(HTTP=80, HTTPS=443 等)で管理者権限が必要1024〜49151は 登録済みポート(一般的なアプリが使う)49152〜65535は 動的ポート(OSが一時的に割り当てる)
ポートの仕組み¶
1つのPCで複数のサーバーを同時に動かせる理由:
┌────────────────────────────────────┐
│ 127.0.0.1 │
│ │
│ :3000 → React開発サーバー │
│ :5000 → Flask APIサーバー │
│ :5432 → PostgreSQL │
│ :8080 → Spring Bootアプリ │
│ │
│ ※同じポートを2つのアプリで使うことは │
│ できない(ポート競合エラー) │
└────────────────────────────────────┘
6. 0.0.0.0 と 127.0.0.1 の違い¶
開発中にサーバー起動時、バインドアドレスの選択が重要:
| アドレス | 意味 | アクセス範囲 |
|---|---|---|
127.0.0.1 | ループバックのみ | 自分のPCからのみ |
0.0.0.0 | すべてのインターフェース | 同一LAN内の他の端末からもアクセス可能 |
# 自分だけアクセスできる(安全)
app.run(host="127.0.0.1", port=5000)
# 同一ネットワーク内の他のデバイスからもアクセス可能
# スマホでの動作確認等に便利だが、セキュリティに注意
app.run(host="0.0.0.0", port=5000)
7. 開発での活用例¶
Web開発¶
# React開発サーバー
npm start
# → http://localhost:3000 で開発中のサイトを確認
# Python Flask
flask run
# → http://localhost:5000
# Next.js
npm run dev
# → http://localhost:3000
データベース接続¶
# PostgreSQLへのローカル接続
connection = psycopg2.connect(
host="localhost",
port=5432,
database="mydb",
user="postgres",
password="password"
)
Docker¶
→http://localhost:8080 でコンテナ内のWebサーバーにアクセス 8. トラブルシューティング¶
よくある問題¶
| 症状 | 原因 | 対処法 |
|---|---|---|
| 接続できない | サーバーが起動していない | プロセス確認: netstat -an \| findstr :3000 |
| ポート競合 | 同じポートを別アプリが使用中 | 使用中のポートを確認して停止 or 別ポートを使う |
ERR_CONNECTION_REFUSED | サーバーがそのポートでリッスンしていない | ポート番号・バインドアドレスを確認 |
| WSLからホストにアクセスできない | WSLとWindowsはネットワークが分離 | host.docker.internal や ホストIPを使う |
ポート使用状況の確認コマンド¶
9. セキュリティ上の注意¶
localhostはファイアウォールを通過しない → 外部から直接アクセスされない- ただし
0.0.0.0でバインドするとLAN内に公開されるため注意 - 開発用サーバーを本番環境で使わない(セキュリティ機能が不十分)
- ローカルで動いているからといって安全とは限らない(SSRF攻撃など)