LaravelでIPアドレスからユーザーの位置情報を取得する

LaravelでIPアドレスからユーザーの位置情報を取得する

LaravelでIPアドレスからユーザーの位置情報を取得するのに便利なライブラリ”Laravel Geoip“の使用方法を紹介します。

インストール

composerを用いてtorann/geoipをインストールします。

$ composer require torann/geoip

config/app.phpにサービスプロバイダーとファザードを追加します。

'providers' => [
    ...

    \Torann\GeoIP\GeoIPServiceProvider::class,
]

...

'aliases' => [
    ...

    'GeoIP' => \Torann\GeoIP\Facades\GeoIP::class,
];

artisanコマンドより、コンフィグファイルを生成します。

$ php artisan vendor:publish --provider="Torann\GeoIP\GeoIPServiceProvider" --tag=config

キャッシュ設定

キャッシュの設定は三種類から選べます。

  • all すべての場所がキャッシュされます
  • some 要求しているユーザーのみをキャッシュします
  • none キャッシュは完全に無効になります
// config/geoip.php
'cache' => 'all',

Usage

位置情報の取得

位置情報の取得は、geoip関数を使用します

geoip($ip = null);

戻り値

\Torann\GeoIP\Location {

    #attributes:array [
        'ip'           => '232.223.11.11',
        'iso_code'     => 'US',
        'country'      => 'United States',
        'city'         => 'New Haven',
        'state'        => 'CT',
        'state_name'   => 'Connecticut',
        'postal_code'  => '06510',
        'lat'          => 41.28,
        'lon'          => -72.88,
        'timezone'     => 'America/New_York',
        'continent'    => 'NA',
        'currency'     => 'USD',
        'default'      => false,
    ]
}

ユーザーのIPアドレスの取得

getClientIPメソッドよりユーザーのIPアドレスの取得できます。

geoip()->getClientIP($ip)

サービスデータの更新

一部のサービスでは、ローカルファイルを更新する必要がある場合があります。たとえば、MaxMindデータベースサービスはリモートデータベースをフェッチし、それをローカルファイルシステムに保存します。

$ php artisan geoip:update

キャッシュクリア

一部のキャッシュドライバは、保存されている場所をクリアする機能を提供します。(キャッシュのクリアにはキャッシュタグが必要なため、fileまたはdatabaseキャッシュドライバーを使用する場合はサポートされません。)

$ php artisan geoip:clear

This cache store does not support tagging

Laravel8等で”This cache store does not support tagging”とエラーが表示された場合、cache_tagsを無効化することで、エラーを回避することができます。

// config/geoip.php
'cache_tags' => []、

参考サイト