メインコンテンツまでスキップ

第06章:.localhostの最強さを知る💪🏠

この章はひとことで言うと、**「ローカル用の“名前”を、いちばん安全&ラクに整える方法」**を体に入れる回だよ〜🏠✨ ここが固まると、後の「入口1個(80/443)+中で振り分け」🚪➡️🏘️ がめちゃ気持ちよく進むよ😆💨


1) .localhostって何者?👀🔍

.localhost は、ローカル開発で使うために“特別扱い”される予約ドメインだよ🧠✨ RFCでは **「localhost. と、その配下(.localhost にぶら下がる名前全部)」**が特別で、

  • app1.localhost みたいな名前でもOK
  • IPv4/IPv6の問い合わせはループバック(自分のPC)に解決されると考えてよい
  • 名前解決の仕組みは、localhost系を“特別扱い”してループバックを返すべき

…という整理になってるよ📜✨ (RFC エディタ)


2) .localhostが「最強」な理由 3つ💪✨

理由A:hosts編集なしで “それっぽいURL” が作れる🪄📝

front.localhost / api.localhost / admin.localhost …みたいに、プロっぽいURLがすぐ使えるよ😎✨ (hostsファイル編集を挟まないから、ミスも減る🙏)

理由B:うっかり外のDNSに飛びにくい🧯🌍

「実在するドメイン」と違って、ローカル専用として扱われる前提があるから、 “うっかり本物のインターネット側に問い合わせちゃった”事故を避けやすいよ🛡️ (RFC エディタ)

理由C:ブラウザが “開発に都合のいい安全判定” をしてくれることが多い🔐✨

最近のWeb機能は「安全なコンテキスト(secure context)」が必要なものが増えがち😵‍💫 そこで嬉しいのが、ブラウザ側の仕様で http://localhosthttp://*.localhost を “潜在的に信頼できる” 扱いにできる点!🚀 (ユーザーエージェントが localhost をループバックに解決するルールに従うことが条件、という整理) (W3C) MDN側でも、http://localhost / http://*.localhost が開発に便利な「trustworthy origin」扱いになり得る、と説明されてるよ🧠✨ (MDN Web Docs)


3) まず体感しよう:名前解決チェック🪟🧪

実験1:PowerShellで「どこに解決されてる?」を見る👀

PowerShellでこれ👇(そのままコピペでOK)✨

Resolve-DnsName localhost
Resolve-DnsName app1.localhost
Resolve-DnsName api.localhost

ポイント👇

  • 127.0.0.1(IPv4)や ::1(IPv6)が出たら勝ち🎉
  • ::1 が出るのは正常だよ(IPv6ループバック)🙂✨

実験2:pingでもOK(ざっくり確認)🏓

ping app1.localhost

4) 5分で「.localhostにアクセスできた!」を作る🐳🚀

ここでは Dockerで“80番にHello”を出して、http://○○.localhost で開けるところまで一気に行くよ🎉 (まだリバプロは使わない、超ミニ成功体験!)

手順A:とりあえず1個出す📦✨

docker run --rm -p 80:80 traefik/whoami

手順B:ブラウザで開く🌐

  • http://localhost/
  • http://app1.localhost/
  • http://api.localhost/

どれでも同じ画面が出たらOK!🎉 (まだ振り分けてないからね😆)

うまくいかない時の“最速チェック”⚡

  • 80番が他のアプリに取られてる可能性が高いよ🧨 代わりに 8080 で試す👇

    docker run --rm -p 8080:80 traefik/whoami

    その場合は http://app1.localhost:8080/ で開いてね🧩


5) 設計が超入門でも分かる「効き目」🧠✨

.localhost を使うと、頭の中がこう整理されるよ👇

  • 入口の見た目(URL)front.localhost / api.localhost …👀
  • 中身の実体(コンテナ/サービス)front / api …🐳
  • 入口は将来“1個”にできる:リバースプロキシが受けて中へ振る🚪➡️🏠

つまり、先に URL設計だけ先回りで整う のが強いのよ〜😆✨


6) よくある落とし穴と回避ワザ🕳️🛟

落とし穴A:ポート80が埋まってる😇🔒

Windowsだと、IISとか別の常駐ソフトが掴んでることがあるよ💦 チェック👇

Get-NetTCPConnection -LocalPort 80 -State Listen

埋まってたら、いったん 8080 で進めてもOK🙆‍♂️(後で直せる!)


落とし穴B:::1(IPv6)に行ってアプリが反応しない🌀

たまに「IPv6では待ち受けてない」アプリがあるよ🥲 対策はシンプル👇

  • まずは http://127.0.0.1 で試す(切り分け)🧪
  • もしくはアプリ側を IPv6 でも待ち受ける設定にする(後ででOK)🙂

落とし穴C:Cookieをサブドメイン間で共有しようとして沼る🍪🫠

結論:最初は “Domain属性を付けない(host-only cookie)” が正義✅✨ MDNでも、Domainを省略したCookieは「発行したホストだけに送られる」って整理だよ📘 (MDN Web Docs)

そして重要ポイント👇

  • Domain=localhost みたいな “ドメインCookie”は制限されやすい(特に「レジストリ管理ドメインじゃない」扱い)という説明があるよ🧠 (Google Groups)

  • なので入門のうちは Cookie共有が必要な設計にしないのが安全🛟

    • 例:まずは api.localhost にログイン、フロントは api.localhost 経由で通信(同一オリジン寄せ)🧹✨
    • これ、後の章でやる「入口でまとめてCORS減らす」に直結するよ🔥

落とし穴D:Windows更新で localhost が変になることがある🪟⚠️

2025年の更新で、HTTP.sys を使うIIS系が http://localhost/ を含む接続で不具合になるケースが案内されてたよ(ERR_CONNECTION_RESETなど)🧯 この問題は 後続アップデート(KB)で対処という流れになってるので、まずは Windows Update → 再起動 が最優先になるよ🔄✨ (マイクロソフトサポート)


7) ミニ課題 3つ🎯✨

課題1:3つの名前を解決してみよう🧪

  • front.localhost
  • api.localhost
  • admin.localhost

PowerShellの Resolve-DnsName で、127.0.0.1 / ::1 が返るのを確認✅

課題2:Dockerで http://api.localhost/ を開けるようにしよう🐳

さっきの traefik/whoami を使ってOK! 「開けた!」のスクショ撮っておくと、後で詰まった時に超助かるよ📸✨

課題3:命名ルールの“たたき台”をメモ📝

例👇

  • front.localhost(UI)
  • api.localhost(REST/GraphQL)
  • admin.localhost(管理画面)

この3つだけでも、今後の章がスムーズになるよ〜🚀✨


8) AIに投げると爆速になる質問テンプレ🤖⚡

そのまま貼れるやつ置いとくね👇(Copilot/Codex向け)✨

いま Windows + Docker でローカル開発してる。
front.localhost / api.localhost / admin.localhost を使って整理したい。
まずは「.localhost がループバックに解決される前提」で、
名前解決チェックの手順と、よくある失敗(80番競合、IPv6(::1)、Cookie Domain)を
初心者向けに短く整理して。
http://app1.localhost が開けない。原因の切り分け手順を
「名前解決」「ポート競合」「コンテナ起動」「待ち受けアドレス」「ブラウザキャッシュ」
の順でチェックリスト化して。
ローカルで Cookie を使う。Domain属性を付けるべきか迷ってる。
localhost / *.localhost で起きがちな制限を踏まえて、
最初に安全な設計(host-only cookie中心)で進める方針を提案して。

次の章(第7章)に行くと、**「サブドメイン運用のコツ」**で、.localhost をプロジェクト増殖に耐える形へ育てていくよ🌱✨ この第6章のゴールは「.localhost最高!が体感で分かった!」まででOK〜😆🏠💪