🔑

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で開発
  • ngrokCloudflare Tunnel を使ってHTTPSトンネルを構築

🔍 詳細解説:.localhost は Mac でも 127.0.0.1 に向くのか?

結論から言うと、macOS でも .localhost ドメインはすべて 127.0.0.1 に解決されます

これは RFC 2606RFC 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