IPジオロケーションAPIとは
IPジオロケーションAPIは、IPアドレスから地理情報(国・地域・都市・緯度経度等)を取得するサービスです。ユーザーのIPアドレスからおおよその位置を推定し、コンテンツのローカライズ・地域別価格設定・アクセス制限・不正検知などに活用されます。GPSのような精確な位置情報ではありませんが、ユーザーに位置情報の許可を求めずに大まかな地域を判定できます。
主要なIPジオロケーションAPI
ip-api.com
- 無料プラン:HTTP(非HTTPS)で45リクエスト/分まで無料
- 有料プラン:HTTPS対応・高速・商用利用可能
- レスポンス内容:国・地域・都市・郵便番号・緯度経度・ISP・タイムゾーン・AS番号
- 特徴:シンプルなAPIで学習コストが低い
MaxMind GeoIP2
- 形式:オンラインAPI・ローカルデータベース(mmdbファイル)の両方
- 無料版:GeoLite2(精度はやや低いが無料で商用利用可能)
- 有料版:GeoIP2(より高精度、月額課金)
- 特徴:業界標準のGeoIPサービス、各言語のSDKが充実
ipinfo.io
- 無料プラン:月50,000リクエストまで無料
- 有料プラン:ASNデータ・プライバシー検知(VPN/Proxy判定)等の拡張データ
- 特徴:VPN・プロキシ・Torの検知機能が優れている
ipgeolocation.io
- 無料プラン:月30,000リクエストまで無料
- 特徴:IPのセキュリティ情報(ボット・プロキシ・脅威スコア)も取得可能
基本的な使い方
ip-api.comを使った簡単なIPジオロケーションの実装例:
// サーバーサイドでの実装(Node.js)
async function getLocationByIP(ip) {
const res = await fetch(`http://ip-api.com/json/${ip}?lang=ja&fields=country,regionName,city,lat,lon,timezone`);
const data = await res.json();
if (data.status === 'success') {
return {
country: data.country,
region: data.regionName,
city: data.city,
lat: data.lat,
lon: data.lon,
timezone: data.timezone
};
}
return null;
}
活用例
コンテンツのローカライズ
アクセス元の国・言語を自動判定し、適切な言語・通貨・地域コンテンツを表示します。日本からのアクセスには日本語サイトを、海外からのアクセスには英語サイトを自動表示するような実装に使われます。
地域別コンテンツ・価格設定
アクセス元の地域によって価格・プロモーション・商品ラインナップを変更します。ただし、VPNを使ってアクセスしているユーザーへの誤判定に注意が必要です。
不正アクセス検知
通常は日本からのみアクセスされるサービスに突然海外IPからログインがあった場合、追加認証を要求するなどのセキュリティ強化に活用されます。MaxMind minFraudはIPジオロケーションと組み合わせた不正検知APIです。
アクセス制限(ジオブロッキング)
著作権・ライセンス・法的規制の理由から、特定の国・地域からのアクセスを制限します。ただし、VPNを使ったバイパスは防ぐことができません。
精度の限界と注意事項
- VPN・プロキシ:実際の位置と大きく異なる位置が返る
- モバイルIP:キャリアのゲートウェイIPが返り、実際の都市と異なる場合が多い
- IPv6:IPv6のジオロケーション精度はIPv4より低い場合がある
- 企業・データセンターIP:本社所在地や大都市のDCの位置が返る
ローカルデータベースを使ったオフライン処理
大量のリクエストを処理する場合はAPIに依存せず、ローカルのGeoIPデータベースを使う方が高速・低コストです。MaxMindのGeoLite2データベース(無料)をダウンロードし、Node.js・Python・Goなどのライブラリで処理します。週1回のデータベース更新を自動化することで精度を保てます。
まとめ
IPジオロケーションAPIはユーザーの許可なしに大まかな位置情報を取得できる便利なツールです。コンテンツローカライズ・不正検知・アクセス制限などの用途に有効ですが、精度の限界(VPN・プロキシの影響)を理解した上で適切な用途に絞って活用してください。無料枠内で十分な用途には ip-api.com や ipinfo.io が手軽です。大量処理には MaxMind GeoLite2 のローカルデータベースが効率的です。