LoginSignup
4
3

More than 3 years have passed since last update.

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

Posted at

MaxMindのGeoLite2を使ってIPアドレスからロケール情報を取得するLaravelパッケージを使ってみます。

試すのはこちら。
danielme85/laravel-geoip2

この記事の説明はパッケージのリポジトリのREADMEとほぼ同じ内容ですが、Laravel6での説明が無かったので確認したものです。

以下Laravel6.2で動作確認しています。

概要

以下のような流れです。

  1. パッケージインストール
  2. ライセンスキー取得、設定
  3. configのコピー
  4. GeoIPデータのダウンロード
  5. 動作確認

成功すると以下のようなコードで国コードが取得できます。

use danielme85\Geoip2\Facade\Reader;

$reader = Reader::connect();
$result = $reader->city('xxx.xxx.xxx.xxx'); // グローバルIPを指定
echo $result->country->isoCode; // 「JP」「US」などが出力される

パッケージインストール

composerでインストールします。

> composer require danielme85/laravel-geoip2

GeoLite2のライセンスキー取得

下記サイトからMaxMindのアカウントを作成、ダッシュボードからライセンスキーを取得します。
無料です。
GeoLite2 Free Downloadable Databases « MaxMind Developer Site

画面付きのライセンスキー取得の説明は以下。
LaravelでIPアドレスを元にロケール判別する – mrkmyki@フリーランスブログ

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

Laravelの.envに取得したライセンスキーを設定します。

.env
GEOIP2_LICENSE=XXXXX

configファイルの配置

laravel-geoip2のconfigを自分のプロジェクトにコピーします。

> php artisan vendor:publish --provider="danielme85\Geoip2\Geoip2ServiceProvider"

GeoIPデータのダウンロード

IPアドレスのデータベースファイルをダウンロードします。
ダウンロードファイルは30MB、解凍後のファイルは60MBほどあります。

> php artisan geoip:download

storage/app/geoip2/GeoLite2-City.mmdbにファイルがダウンロードされます。

実際に運用する際には定期的にどこかでダウンロードしておいてWebサーバに配置する感じでしょうか。

動作確認

以上で動くようになりました。

use danielme85\Geoip2\Facade\Reader;

$reader = Reader::connect();
$result = $reader->city('xxx.xxx.xxx.xxx'); // グローバルIPを指定
echo $result->country->isoCode; // 「JP」「US」などが出力される

国コードの他に、都道府県、市区町村、郵便番号などが取得できます。
精度は完璧ではありませんが、市区町村まではほぼ合ってそうです。

アクセス制限やマーケティングデータの収集、ロケールごとの言語やページの切り替えに使えると思います。

以上です。


他、ロケール判別について調べた事を少し書いています。
LaravelでIPアドレスを元にロケール判別する

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3