🌐
ローカル開発用ドメインの選び方:localhost vs .localhost vs lvh.me 2025年版
はじめに
最近OmniAuthを使った認証を実装する際に、「ローカル開発用のドメインって何が正解?」という疑問が出ました。
昔私は lvh.me をよく使っていましたが、最近は .localhost ドメインが一般的になってきています。この記事では、それぞれの特徴や現在のおすすめをまとめます。
🔒 ローカル開発でも気をつけたい認証の前提
多くのOAuthプロバイダー(Google, GitHubなど)は、リダイレクトURLにHTTPSや特定のドメインを要求してきます。そのため、ローカル開発でもなるべく本番環境に近いドメイン構成が求められます。
✅ ローカル用ドメインの比較
| ドメイン名 | 特徴 | 評価 |
|---|---|---|
localhost |
最もシンプル。127.0.0.1に解決される。 | 👍 安定して使える |
.localhost(例: auth.localhost) |
サブドメイン付きで便利。最近のブラウザでは安全扱い。 | 👍 推奨 |
lvh.me |
ワイルドカードで127.0.0.1に向くが、メンテされていない。 | ⚠️ 古く非推奨 |
nip.io(例: 127.0.0.1.nip.io) |
外部の無料DNSサービス依存。サブドメインも可。 | 🆗 選択肢の一つ |
sslip.io |
nip.ioと似たIPベースDNS。こちらも無料サービス依存。 | 🆗 補助的に使える |
🚀 今のおすすめは .localhost
以下の理由から、現在は auth.localhost のような .localhost サブドメインを使うのが一般的です。
- ブラウザレベルで
*.localhostは全て 127.0.0.1 に解決される(最近のOS・ブラウザは対応済) - Google OAuth などでも
http://auth.localhost:3000/callbackのようなリダイレクトURIが許容される -
.localhostは特別なTLDとして予約されており、安全に使用可能
🔐 HTTPSが必要なケース
一部のプロバイダーはリダイレクトURIにHTTPSを必須とします。その場合は以下のような方法で対応します。
-
mkcertを使ってローカル開発用のSSL証明書を生成し、HTTPSで開発 -
ngrokや Cloudflare Tunnel を使ってHTTPSトンネルを構築
🔍 詳細解説:.localhost の実際の挙動について
結論から言うと、macOS でも .localhost ドメインはブラウザレベルで 127.0.0.1 に解決されます。
これは RFC 2606 や RFC 6761 によって定義されており、.localhost は**特別に予約されたトップレベルドメイン(TLD)**です。
✅ 仕様のポイント
-
.localhostドメインはブラウザやアプリケーションレベルで特別扱いされる -
localhost,foo.localhost,api.localhostなど、すべてが127.0.0.1にマッピングされる - Safari や Chrome、curl などのツールも
.localhostを安全なローカルドメインとして扱う
⚠️ 重要な注意点:DNSレベルとブラウザレベルの違い
.localhost の解決には、DNSレベルとブラウザレベルで異なる挙動があります:
📍 DNSレベルでは
-
.localhostは必ずしも解決されない(VPN や DNS 設定に依存) -
digやnslookupなどのDNSツールでは解決されない場合が多い - 外部DNSサーバーや企業のネットワーク設定による影響を受ける
📍 ブラウザレベルでは
- RFC 6761 に従って
.localhostを127.0.0.1として扱う - Chrome、Safari、Firefox などの主要ブラウザが対応
- 実際の開発では、ブラウザでの動作が重要なので問題になることは少ない
💻 動作確認方法(macOS)
以下のコマンドをターミナルで試してみてください:
# DNSレベルでは解決されない可能性がある
dig auth.localhost
# ブラウザでは正常に動作する
curl http://auth.localhost:3000
🎯 まとめ
| 使用目的 | 推奨ドメイン |
|---|---|
| ローカル開発(基本) |
localhost / *.localhost
|
| サブドメインが必要 |
app.localhost など |
| HTTPSが必須なOAuth |
ngrok or mkcert + .localhost
|
lvh.me |
⚠️ 現在は非推奨 |
おまけ:Google OAuth 設定例
承認済みのリダイレクト URI:
http://auth.localhost:3000/auth/google_oauth2/callback
Discussion