アクセスしたユーザーの国や地域、IPアドレス取得
案件で多言語サイトのデフォルト言語をユーザーごとに出し分けたいという要望があったため
フロント、サーバー側で国や地域、IPアドレスを取得する方法を調査した
JavaScripts で対応
JS単体では端末のIPを取得することはできないがAPIを利用することで取得できる
以下は中でもフリーのサービスを抜粋したもの
1. ipinfo.io
アクセスするとIPを取得して表示してくれるサービス。
JSON形式で情報が返却される。
アカウント作成とアクセス回数に上限がある
ipinfo.io
2. Geolocation API
WiFi、GPS、IPアドレスなどから位置情報を取得するAPI。
JSON形式で情報が返却される。
位置情報の取得にはユーザーの許可が必要なため拒否されれば当然取得できない。
WiFiや緯度経度からの取得はGoogleが提供していることが多いため中国などでは利用できないことがある。
Geolocation API
3. ipify
フリーのIP取得サービス。
JSON形式で情報が返却出来る。
上限は無し。
ipify
API
4. jsonip.com
無料無制限のIP取得サービス。
JSON形式でIPを取得できるがおまけに広告とドキュメントのURLが含まれている。
以前は政治的メッセージも含まれていたがなくなったらしい。
上限なし。
jsonip.com
API
5. JSON Test
フリーのIP等取得サービス。
IPアドレス単体やリクエストヘッダー情報をJSON形式で取得できる。
名前のせいで情報が見つけにくい。
JSON Test
API
6. ipapi.co
フリーと商用ライセンスのあるIP等取得サービス。
アカウント登録が必要。
IPだけでなく国や地域、緯度経度など詳細なデータをJSON形式で取得できる。
珍しくドキュメントもそろっているので親切。
[ipapi.co] (https://ipapi.com/ "ipapi.coの公式")
PHP で対応
PHPはIPアドレスを取得できるが国や地域を取得するにはライブラリかAPIが必要になる(一部有料)
1. IPinfoAPI
IPアドレスを渡すと国や地域のコードをJSON形式で取得できるサービス
上限が毎秒2回まで。
2. Geo IP2
MaxMind社から提供されたデータベースファイルをサーバー側に設置しアクセスしたIPで検索してどの国や地域からアクセスがあったかを調べる。
無償版ライセンスでは国まで、有償版では地域まで取得できるので用途によって使い分け可能。
Geo IP
AWS で対応
AWSのCloudFront-Viewer-Country はIPアドレスから判断したアクセス元の国コードを返却するためAWSを利用していれば対応可能。
[AWS] (https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-cloudfront-headers.html "AWSのドキュメント")
まとめ
-
JavaScriptsは単体ではIPを取得できないがAPIを使用すればIPもしくは国コードなどのアクセス元情報が取得できる。
ただしIPアドレスの取得方法によっては対象外の国や地域があるため注意が必要。 -
PHPはIPアドレスは単体で取得可能だがアクセス元の国や地域のコードを取得するにはライブラリ、APIが必要。
ライブラリのライセンスは詳細な情報が必要であれば有償版、国コードが必要なだけであれば無償版でよい。 -
その案件がAWSを利用しているのであればCloudFront-Viewer-Country で対応可能