LaravelでIPアドレスを元にロケール判別する

Laravel PHP フレームワーク プログラミング

LaravelでIPアドレスを元にロケール判別する方法について調べた事をまとめます。

IPアドレスによるロケール判別の基礎

IPアドレスは地域インターネットレジストリ- Regional Internet Registry(RIR) -(Wikipedia参照)という団体によって管理されており、IPアドレスは地域ごとに割り当てられています。

この団体が管理するデータベースを使うことで、IPアドレスから地域を判別する事が可能になります。

IPアドレスによるロケール判別ができるサービス

IPアドレスを検索するサービスが民間、個人で提供されています。

以下その1例です

その他、個人で運営しているウェブサイトもちらほら存在します。

仕組みとしてはRIRで提供されているデータベースと照合するという方法になっている思われます。

IPアドレスによるロケール判別API

自分のアプリケーションで実装する場合もRIRからデータを取得し、IPアドレスを照合するという方法で実装できそうですが、楽できる方法があるなら利用したいところです。

有名なのがMaxMindが提供しているGeoLite2というデータベースおよびAPIです。

GeoLite2 Free Downloadable Databases « MaxMind Developer Site

有料版もありますが、無料版でも地域の特定には十分と思われます。

ライセンス表記すれば商用利用も可という事で、これを使うのが楽そうです。

PHPライブラリは以下となっています。

maxmind/GeoIP2-php: PHP API for GeoIP2 webservice client and database reader

Laravel用 GeoLite2 パッケージ

GeoLite2のAPIをLaravelで簡単に使えるようにパッケージを作っている方がいらっしゃいました。

danielme85/laravel-geoip2: Service provider and DB downloader for Maxminds PHP API GeoIP2.

こちらを利用させて頂きます。

使い方はREADMEにある通りなのですが、英語なのでいちおう翻訳しつつ説明します。

以下、Laravel6.2で動作確認済です。

インストール

composer.jsonに以下を追加します。

またはコマンドでインストールします。

GeoLite2のライセンスキー取得

GeoLite2のウェブサイトからライセンスを取得します。

danielme85/laravel-geoip2: Service provider and DB downloader for Maxminds PHP API GeoIP2.

「SIGN UP FOR GEOLITE2のボタンをクリック。

必要事項を記入していきます。

メールで届いたリンクをクリックするとパスワード登録フォームが表示されます。


パスワードを設定したらログインします。

ログインするとこんな画面になります。

左側のメニューの「My License Key」を選択し、「Generate new license key」ボタンをクリック。

「License key description」にキーの名前をを入れます。

「Will this key be for GeiIP Update?」はYesにしておきます。データベースを自動更新するツールがあるようで、このライセンスキーを更新ツールに使うか聞かれているようです。

「Generate a license key and config file for use with geoipupdate version 3.1.1 or newer」にチェックを入れます。新しいバージョンのツールを使うか、古いバージョンを使っているかを選ぶようです。

Confirmを押すとライセンスキーが発行されます。


.envにGEOIP2のライセンスキーを設定する

Laravelの.envファイルにGeoIP2のライセンスキーを設定します。

configファイルの配置

以下のコマンドでlaravel-geoip2の設定ファイルを自分のプロジェクトに配置します。

コピーされた設定ファイルは以下のようになっています。

GeoIPデータのダウンロード

下記コマンドでGeoIPデータをダウンロードします。

storage/app/geoip2以下にgeoipファイルがダウンロードされます。

動作確認

以下のようにして国コードを取得できます。

IPアドレスから「JP」や「US」といった国コードを取得できるようになりました。

他にも都道府県、市区町村、郵便番号なども取得できます。

郵便番号は多少ズレます。

国コードと言語コード

国コードが決まっても、言語が決まるわけではありません。その逆も然りです。

日本の場合は日本=日本語として問題ありませんが、国によっては複数の公用語を持っている場合があります。

複数の国で使われている言語もあります。英語がその代表です。

言語の決定についてはある程度ルールを決めて自動的に言語を割り当てるか、ユーザーが選択可能にするか、アプリケーションごとの検討事項になると思います。

ロケール判別について調べた事は以上です。

コメント/ピンバック

タイトルとURLをコピーしました