IPジオロケーション対ブラウザのデバイス位置情報
ブラウザのデバイスGeolocation API(navigator.geolocation)はユーザーに許可を求め、デバイスが実測した精密な位置情報を返すことができます。一方、IPジオロケーションは許可を必要とせずすべてのリクエストで動作しますが、接続のネットワークアドレスから位置を推定するにとどまります。両者は異なる課題を解決するものであり、互いに置き換えられるものではありません。
許可と情報源
navigator.geolocation.getCurrentPosition()(すべての主要ブラウザに実装されているW3C Geolocation API)は、オリジンごとの明示的な許可プロンプトと、最新のブラウザでは安全な(HTTPSの)コンテキストを必要とします。許可されると、デバイスが利用できるものに応じて、GPS、Wi-Fi測位、携帯基地局の三角測量、あるいはフォールバックとしてIPを使用することがあります。IPジオロケーションは許可プロンプトもデバイス側の協力も必要としません—GET /v1/geoのようなAPIは接続してきたリクエストから直接読み取ります—ただし、利用できる情報はネットワークアドレスだけです。
精度
許可されたデバイス位置情報には通常、メートル単位の明示的な精度半径が含まれ、GPSを搭載し空がよく見える場所にあるスマートフォンでは数メートルの精度になることもあります。IPジオロケーションはデバイスではなくネットワーク範囲に解決されます—国レベルの結果はおおむね信頼できますが、都市レベルの結果はあくまで推定であり、Watch-IPを含むいかなるプロバイダーも、基盤データがそこまで精密でないため、メートル単位の精度数値を返すことはありません。都市レベルの不確実性についての詳しい内訳は精度についての記事をご覧ください。
失敗時の状態
デバイスの位置情報取得は失敗したり拒否されたりすることがあります:ユーザーが許可プロンプトを拒否する、ブラウザがブロックするよう設定されている、デスクトップ機に意味のある位置情報用ハードウェアがない、あるいはリクエストがタイムアウトする場合です。PERMISSION_DENIED、POSITION_UNAVAILABLE、TIMEOUT(このAPI自身のエラーコード)は、例外ではなく、想定される個別の結果として処理してください。IPジオロケーションは失敗の仕方が異なります—解決可能なはずのフィールドが単にnullになる、あるいは指定IPのルックアップではfound: falseになるだけで、ユーザーに許可プロンプトが表示されることは一切ありません。
使い分け
ユーザーの実際の位置が必要で、許可を求めることが正当化できる場合(地図、店舗検索、段階的なナビゲーションなど)にはデバイスの位置情報を使用してください。国や通貨の初期値の設定、アナリティクスのルーティング、あるいは許可を求める前や求める代わりにロケールを(強制ではなく)提案するといった、摩擦の少ないデフォルト用途にはIPジオロケーションを使用してください。よくあるパターンとして、IPジオロケーションを許可不要のデフォルトとして使い、実際に精密さが必要なタスクについてのみ、ユーザーが明示的にトリガーするアップグレードとしてデバイスの位置情報を提供する方法があります。
この記事が主張していないこと
これは2つの異なるブラウザの仕組みについての一般的な比較であり、Watch-IPがデバイスGeolocation APIを実装またはラップしているという主張ではありません—実際にそうしていません。GET /v1/geoはIPベースのみです。アプリケーションでデバイスの位置情報も必要な場合は、ブラウザのAPIを直接呼び出し、両者の結果を無理に一致させようとせず、それぞれ独立したものとして扱ってください。
情報源
Watch-IP編集チームによる執筆(2026年9月6日)。apps/web/lib/cf.tsおよびapps/api/src/routes/geo.tsを基にレビュー済み。