【Laravel11】AdminerでSQLiteを操作する

こんにちは、フリーランスエンジニアの太田雅昭です。

LaravelのAdminer

LaravelでAdminerを使うには、以下のライブラリを使用します。

GitHub – senaranya/laravel-adminer: Adminer for Laravel 5.5+

Adminer for Laravel 5.5+. Contribute to senaranya/laravel-adminer development by creating an account on GitHub.

問題

SQLiteは、普通に使うことができません。Adminerは現在、すべてのdbでパスワードを要求します。しかしSQLiteはパスワードレスのため、エラーになって使えません。

そのためAdminerの提供するプラグイン(後述)を、laravel-adminerに統合する必要があります。

手順

composerではインストールしません。

リポジトリから直接ファイルをダウンロードし、適切な場所に設置します。今回は、ルートに設置しました。

/aranyasen/laravel-adminer

以下のファイルを保存します。Adminerのサイトで紹介されているプラグインです。パスワードは要求するが、dbには渡さないようにするそうです。

https://raw.githubusercontent.com/vrana/adminer/master/plugins/login-password-less.php

保存先は以下のようにします。

/aranyasen/laravel-adminer/src/plugins/AdminerLoginPasswordLess.php

プラグインを追加します。/aranyasen/laravel-adminer/src/plugins/adminer-with-plugins.phpに追記します。

$plugins = [
    ... // 他のプラグイン
    new AdminerLoginPasswordLess(password_hash('password', PASSWORD_DEFAULT)),
];

あとはroutes/web.phpを以下のようにします。

use Illuminate\Support\Facades\Config;

Route::any('/adminer', function () {
    if (! isset($_GET['db'])) {
        $databaseConnection = Config::get('database.default');

        $databaseDriver = Config::get("database.connections.$databaseConnection.driver");
        if ($databaseDriver === "mysql") {
            $databaseDriver = "server";
        }

        $_POST['auth']['driver'] = $databaseDriver;
        $_POST['auth']['server'] = Config::get("database.connections.$databaseConnection.host") . ':' .
            Config::get("database.connections.$databaseConnection.port");
        $_POST['auth']['db'] = Config::get("database.connections.$databaseConnection.database");
        $_POST['auth']['username'] = Config::get("database.connections.$databaseConnection.username");
        $_POST['auth']['password'] = Config::get("database.connections.$databaseConnection.password");
    }
    require base_path('aranyasen/laravel-adminer/src/adminer-with-plugins.php');
})->withoutMiddleware(VerifyCsrfToken::class);

これで、/adminerにアクセスすれば使えるようになります。パスワードには「password」を入力してください。

なおセキュリティのため、上記ルートは適切なアクセス制限をかけることをお勧めします。