【Laravel12】Laravel GeoGeniusを使ってみた

Laravel

Laravel Newsで紹介されていたサードパーティのTreewareパッケージLaravel GeoGeniusを使ってみました。

IPから地理的位置情報の検出、タイムゾーン管理、多言語対応、国選択ピッカー、電話番号のバリデーションなどを軽量で柔軟に実装できるパッケージのようです。

GeoGenius Package for Laravel - Laravel News
The GeoGenius package for Laravel is a lightweight, flexible package that handles geolocation, timezone management, mult...
GitHub - devrabiul/laravel-geo-genius: 🌍 Laravel GeoGenius — IP-based geolocation, timezone, multilingual toolkit + country picker & phone validation for Laravel apps
🌍 Laravel GeoGenius — IP-based geolocation, timezone, multilingual toolkit + country picker & phone validation for Larav...

結論

先に書いておきます。

執筆時点(2025/09/20)でのバージョン v1.3には致命的バグがあるため、途中で使うのをやめました。

Laravel Newsって、なんでこんなレベルのパッケージを紹介するんだろう?

やはり、オマイラがContributeして品質担保しろよってことですかね。やだな。

最低限の品質担保は作成者がやってくれ。

一応、ほんの一部ですが使い方と動作確認を以下記載しています。

※2025/09/24追記:パッケージのソースを確認したらテストコードがありませんでした。テストしてない疑惑。。

前提条件

  • PHP 8.0以降(composer.json のrequireから判断。筆者はPHP8.4を使用)
  • Laravel 9以降(たぶん。READMEに書いてくれ。筆者はLaravel12を使用)
  • Laravelインストーラーインストール済
  • Composer 2.xインストール済
  • SQLiteを使っていきます
  • Ubuntu24.04.2 LTS (WSL2 on Windows11)上で作業します

※Laravel 9以降と判断した根拠:下記サイトでPHP 8.0以降に対応しているバージョンが9

Release Notes - Laravel 9.x - The PHP Framework For Web Artisans
Laravel is a PHP web application framework with expressive, elegant syntax. We???ve already laid the foundation ??? free...

パッケージ配布するなら要件は明示しておきましょう。

※Laravelインストーラーは次のコマンドでインストールできます

composer global require laravel/installer

これからやることの概要

  • Laravel新規プロジェクト作成
  • Laravel GeoGeniusインストール
  • アプリケーション作成
  • 動作確認

Laravel新規プロジェクト作成

新規プロジェクト「using-laravel-geo-genius」を作成します。

laravel new using-laravel-geo-genius

各選択は次のようにしました。

  • starter kit: None
  • testing framework: PHPUnit
  • database: SQLite
  • run npm install and npm run build: No

プロジェクトフォルダに入ります。

cd using-laravel-geo-genius

Laravel GeoGeniusインストール

Composerでパッケージをインストールします。

composer require devrabiul/laravel-geo-genius

configとmigrationファイルをpublishします。

php artisan vendor:publish --provider="Devrabiul\\LaravelGeoGenius\\LaravelGeoGeniusServiceProvider"

「config/」「database/migrations/」と「public/packages/」にファイルが設置されています。

マイグレーションファイルを見てみます。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddTimezoneColumnToUsersTable extends Migration
{
    public function up()
    {
        if (!Schema::hasColumn('users', 'timezone')) {
            Schema::table('users', function (Blueprint $table) {
                $table->string('timezone')->after('remember_token')->nullable();
            });
        }
    }

    public function down()
    {
        if (Schema::hasColumn('users', 'timezone')) {
            Schema::table('users', function (Blueprint $table) {
                $table->dropColumn('timezone');
            });
        }
    }
}

既存の「users」テーブルの「remember_token」カラムの後に「timezone」カラムを追加するものになっています。

マイグレーションを実行します。(これもREADMEに書いておけよ。大雑把過ぎだよ。先週作成されたばかりのパッケージのようなので仕方ないんですかね。)

php artisan migrate

アプリケーション作成

ルーティングに直書きしてみます。

▼「routes/web.php」を編集

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});
Route::get("/location", function () {
    return [
        "locateVisitor" => laravelGeoGenius()->geo()->locateVisitor(),
        "getCountry" => laravelGeoGenius()->geo()->getCountry(),
        "getTimezone" => laravelGeoGenius()->geo()->getTimezone(),
        "getLatitude" => laravelGeoGenius()->geo()->getLatitude(),
    ];
});

動作確認

Laravelのビルトインサーバーを起動します。

php artisan serve

WEBブラウザで http://localhost:8000/location にアクセスしてみます。

{
	"locateVisitor": {
		"ip": "***.***.205.161",
		"success": true,
		"city": "********",
		"region": "******** Prefecture",
		"country": "Japan",
		"countryCode": "JP",
		"country_flag": "🇯🇵",
		"latitude": 3*.******,
		"longitude": 1**.******,
		"timezone": "Asia/Tokyo",
		"currency_code": "***.***.205.161"
	},
	"getCountry": "Japan",
	"getTimezone": "Asia/Tokyo",
	"getLatitude": 3*.******
}

あ、致命的バグ発見。。「currency_code」(通貨コード)でIPアドレスが返されている。。

日本円なら「JPY」だよね。テストしたのかな?これでは趣味レベルでしか使えませんね。

先週作成されたばかりだから仕方ないですかね。

だれかやる気のある人、Issueかプルリク投げといてください。

ほんと、Laravel Newsって、何でこんなレベルのパッケージ紹介するの?

アイデアやポリシーが良いから、オマイラContributeして品質担保しろよってことですかね。

え、なんだこれ。どうしようかな。。一旦やめます。

  • 0
  • 0
  • 0
  • 0

コメント

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