【ITニュース解説】🌍 3 Ways to Detect a User’s Country on Your Website

2025年09月05日に「Dev.to」が公開したITニュース「🌍 3 Ways to Detect a User’s Country on Your Website」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

Webサイトでユーザーの国を判別する方法は3つ。CDNヘッダーは高速だがCDNが必要。IP Geolocation APIは汎用的で国以外の情報も取得可能。ブラウザGeolocation APIは高精度だがユーザーの許可と追加のAPIが必要。速度、プライバシー、精度で最適な方法を選ぼう。

ITニュース解説

Webサイトでユーザーの国を特定する方法はいくつかあり、ユーザーエクスペリエンスの向上、GDPRなどの法令遵守、マーケティング効果の向上に役立つ。この記事では、軽量でプライバシーに配慮した3つの方法を比較検討する。

1つ目の方法は、CDNヘッダーを利用する方法だ。CDN(コンテンツデリバリーネットワーク)を利用している場合、HTTPヘッダーに国コードが含まれている場合がある。例えば、CloudflareではCF-IPCountry、AWS CloudFrontではCloudFront-Viewer-Country、FastlyではFastly-Geo-Country-Codeといったヘッダーを利用できる。CDNはユーザーのIPアドレスをエッジで検出し、ISO国コードをリクエストヘッダーに挿入する。バックエンドはこのヘッダーを読み取り、応答を調整できる(ローカライズされたコンテンツの表示やリダイレクトなど)。この方法の利点は、高速でプライバシーに配慮されており、多くのCDNプランで無料であることだ。ただし、CDNを利用する必要があり、サーバーサイドレンダリングに最適で、精度はCDNのIPデータベースに依存する。エッジでのパーソナライズ、geoルーティング、国固有のリダイレクトに適している。

2つ目の方法は、IP Geolocation APIを利用する方法だ。これは、CDNの有無にかかわらず、サーバーまたはクライアントで簡単に統合できる。IP Geolocation APIは、リクエスターのパブリックIPアドレスを検索し、国、ISOコード、タイムゾーンなどのメタデータを返す。Geoapifyなどのサービスを利用できる。Geoapify IP Geolocation APIへのリクエスト例は以下の通りだ。 GET https://api.geoapify.com/v1/ipinfo?apiKey=YOUR_API_KEY 応答例は以下の通りだ。

1{
2  "ip": "93.109.164.24",
3  "city": {
4    "name": "Nicosia",
5    "names": { "en": "Nicosia" }
6  },
7  "continent": {
8    "code": "EU",
9    "name": "Europe",
10    "names": { "en": "Europe", "fr": "Europe", "ru": "Европа" }
11  },
12  "country": {
13    "iso_code": "CY",
14    "name": "Cyprus",
15    "name_native": "Κύπρος",
16    "capital": "Nicosia",
17    "currency": "EUR",
18    "flag": "🇨🇾",
19    "languages": [
20      { "iso_code": "el", "name": "Greek", "name_native": "Ελληνικά" },
21      { "iso_code": "tr", "name": "Turkish", "name_native": "Türkçe" }
22    ]
23  },
24  "location": { "latitude": 35.17284, "longitude": 33.35397 }
25}

Node.jsでのサーバーサイドでの使用例は以下の通りだ。

1import fetch from "node-fetch";
2
3export async function detectCountry(req, res) {
4  const apiKey = process.env.GEOAPIFY_KEY;
5  const url = `https://api.geoapify.com/v1/ipinfo?apiKey=${apiKey}`;
6
7  const r = await fetch(url);
8  const data = await r.json();
9
10  const country = data?.country?.name || "Unknown";
11  const flag = data?.country?.flag || "";
12  res.json({ country, flag, ip: data?.ip });
13}

ブラウザでのクライアントサイドでの使用例は以下の通りだ。APIキーを公開しないように、サーバーサイドでリクエストをプロキシすることを推奨する。

1fetch(`https://api.geoapify.com/v1/ipinfo?apiKey=${apiKey}`)
2  .then(r => r.json())
3  .then(data => {
4    document.documentElement.setAttribute("Country code: ", data.country.iso_code);
5    // toggle UI, load translations, etc.
6  });

この方法の利点は、あらゆるアーキテクチャで動作し、国以外の豊富なメタデータを提供し、プライバシーに配慮していることだ。ただし、ネットワーク呼び出しが追加され、高いボリュームでは有料プランが必要になる場合がある。結果をIPごとにキャッシュすることで、レイテンシとコストを削減できる。APIが失敗した場合に備えて、安全なロケールにフォールバックするロジックを実装し、GDPRに配慮して、不要な限り生のIPアドレスを保存しないようにする。

3つ目の方法は、ブラウザのGeolocation APIとReverse Geocoding APIを利用する方法だ。Geolocation APIは正確な座標を提供するが、国を取得するにはReverse Geocoding APIが必要になる。まず、Geolocation APIを使用して座標を取得する。

1navigator.geolocation.getCurrentPosition(
2  (pos) => {
3    const { latitude, longitude } = pos.coords;
4    console.log(latitude, longitude);
5  },
6  (err) => {
7    console.error("User denied or unavailable:", err);
8  }
9);

このAPIを使用すると、ブラウザはユーザーに位置情報の許可を求める。次に、Geoapify Reverse Geocoding APIを使用して座標を逆ジオコーディングする。 GET https://api.geoapify.com/v1/geocode/reverse?lat=35.17284&lon=33.35397&apiKey=YOUR_API_KEY この方法の利点は、非常に正確であり、正確な位置を必要とするアプリに適していることだ。ただし、ユーザーの許可が必要であり、多くのユーザーが拒否する可能性があり、追加のReverse Geocoding API呼び出しが必要になる。地図アプリケーション、ロケーションベースのサービス、チェックイン、配達に適している。

これらの3つの方法を比較すると、CDNヘッダーは高速なサーバーサイドのパーソナライズに適しており、IP Geolocation APIは汎用的な使用に適しており、ブラウザのGeolocation APIは地図アプリケーションに適している。最適な方法は、アプリケーションの速度、プライバシー、精度のニーズによって異なる。

【ITニュース解説】🌍 3 Ways to Detect a User’s Country on Your Website | いっしー@Webエンジニア