Laravel Newsで紹介されていたサードパーティのTreewareパッケージLaravel GeoGeniusを使ってみました。
IPから地理的位置情報の検出、タイムゾーン管理、多言語対応、国選択ピッカー、電話番号のバリデーションなどを軽量で柔軟に実装できるパッケージのようです。

結論
先に書いておきます。
執筆時点(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

パッケージ配布するなら要件は明示しておきましょう。
※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


コメント