🔑
OmniAuth実装時のローカルドメインは .localhost?それとも lvh.me?
はじめに
最近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
は Mac でも 127.0.0.1 に向くのか?
🔍 詳細解説:結論から言うと、macOS でも .localhost
ドメインはすべて 127.0.0.1
に解決されます。
これは RFC 2606 や RFC 6761 によって定義されており、.localhost
は**特別に予約されたトップレベルドメイン(TLD)**です。
✅ 仕様のポイント
-
.localhost
ドメインは DNS を使わずローカルで解決される -
localhost
,foo.localhost
,api.localhost
など、すべてが127.0.0.1
にマッピングされる - Safari や Chrome、curl などのツールも
.localhost
を安全なローカルドメインとして扱う
💻 動作確認方法(macOS)
以下のコマンドをターミナルで試してみてください:
dig auth.localhost
🎯 まとめ
使用目的 | 推奨ドメイン |
---|---|
ローカル開発(基本) |
localhost / *.localhost
|
サブドメインが必要 |
app.localhost など |
HTTPSが必須なOAuth |
ngrok or mkcert + .localhost
|
lvh.me |
⚠️ 現在は非推奨 |
おまけ:Google OAuth 設定例
承認済みのリダイレクト URI:
http://auth.localhost:3000/auth/google_oauth2/callback
Discussion