LaravelからPlanetScaleのMySQLに接続する方法

PlatnetScaleはクラウドベースでMySQLを利用することができるサービスでデータベース用のサーバを準備する必要がなく(Serverless)ネットワーク越しにデータベースを利用することができます。
本文書ではPlanetScaleへのユーザ登録の方法、データベースの作成方法を確認して、ローカルPC(mac OS)のLaravel 10からPlanetScaleのMySQLデータベースヘの接続方法を確認していきます。Laravelを利用した経験のある人を前提にしているためLaravelプロジェクトの作成などについての詳細な説明は行っていません。
目次
PlanetScaleへのユーザ登録
PlanetScaleを利用するためにはユーザ登録を行う必要があります。PlanetScaleのホームページにアクセスすると右上または中央に”Get started”のボタンが表示されているのでボタンをクリックします。

ユーザ登録を行う前に利用料金が気になる人は上部にあるメニューの中にPricingがあるので料金を確認しておきましょう。HobbyからEnterpriceまで4つのプランが提供されています。Hobbyの料金は”Free”なので本文書ではHobbyのプランを利用することになります。ユーザ登録の中でプランを選択することはなく”Free”プランで登録され管理画面の中でプランの”Upgrade”を行うことができます。プランによって利用できるデータベースの数などに制限があります。右上の”Get started”ボタンをクリックしてユーザの登録を行います。

ユーザ登録にはEmailまたはGitHubのアカウントから行うことができます。本文書ではEmailを利用して登録を行います。

入力が完了すると入力したメールアドレスにメールが送信されます。

メールを確認するとシンプルな確認メールが届きます。”Confirm email”ボタンをクリックします。

データベースの作成
クリックするとPlanetScaleのOverview画面にリダイレクトされ以下の画面が表示されます。データベースを新規作成するので”Create a new database”ボタンをクリックします。

データベースの作成画面が表示されます。Organizationはアカウントを作成すると自動でユーザ名で作成せれるのでそのまま選択します。Organizationの追加、変更は可能です。データベース名に任意の名前をつけてプランタイプを選択します。
デフォルトではHobbyプランが選択されていないので無料で利用する場合には必ずHobbyを選択してください。

さらに画面をスクロールすると選択したプランによってCluster sizeの各種選択ができますがHobbyプランでは選択できなくなっています。
データベースを作成するためには”Please add a credit or debit card to this organization”と表示されており、”Add new card”ボタンをクリックしてクレジットカード情報を入力する必要があります。それまでは”Create database”ボタンをクリックすることができません。

“Add new card”ボタンをクリックすると入力画面が表示されます。

クレジットカード情報を入力すると”Create Database”がクリックできるようになります。

データベースに接続する予定の言語またはフレームワークの一覧が表示されます。接続を行う言語またはフレームワークをクリックしてくだい。

本文書ではこれから接続設定を行うLaravelをクリックします。クリックするとデータベースのパスワード名の入力フォームが表示されます。パスワード名が入力された状態で表示されますが変更することは可能です。”Create password”ボタンをクリックします。

接続に必要なUsernameとPasswordが表示されます。その下にLaravelの.envファイルに設定する情報が表示されます。

さらにスクロールするとデータベースへの接続をチェックするためにルーティングの設定方法が記述されているので後ほど利用します。”Go to your database overview”ボタンをクリックします。

Overview画面で作成したtest_dbの情報を確認することができます。

Laravel環境の構築
PlanetScaleに接続するためのにローカルPC上でlaravel newコマンドを実行してLaravelプロジェクトを作成します。
% laravel new laravel_planetscale
プロジェクト作成後にlaravel_planetscaleのフォルダに移動します。
% cd laravel_planetscale
Laravelからの接続確認
.envファイルを開いて先ほど設定されていた情報を.envファイルに設定します。
DB_CONNECTION=mysql
DB_HOST=aws.connect.psdbdb.cloud
DB_PORT=3306
DB_DATABASE=test_db
DB_USERNAME=pxl1a8ppt4uk1lxteajz
DB_PASSWORD=pscale_pw_HxPyixAbZ7u4FGHSGgFKMgW1mxW3lHgc4F0ebCToMKr
MYSQL_ATTR_SSL_CA=/etc/ssl/cert.pem
web.phpファイルにPlanetScale上に作成したデータベースへの接続用のコードを記述します。
>?php
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('/test-database', function () {
try {
DB::connection()->getPdo();
print_r("Connected successfully to: " . DB::connection()->getDatabaseName());
} catch (\Exception $e) {
die("Could not connect to the database. Please check your configuration. Error:" . $e );
}
});
php artisan serveコマンドで開発サーバの起動を行います。
% php artisan serve
INFO Server running on [http://127.0.0.1:8000].
Press Ctrl+C to stop the server
ブラウザからhttp://127.0.0.1:8000/test-databaseにアクセスを行います。

接続情報に誤りがあると”Could not connect to the database. Please check your configuration. Error:PDOException: SQLSTATE[HY000] [1045] Access denied for user”のメッセージとスタックトレースが表示されるので.envファイルを修正してください。
テーブルの作成
Laravelではデフォルトでデータベーステーブルを作成するためのmigrationファイルが準備されているのでphp artisan migrateコマンドを実行するだけでテーブルを作成することができます。
% php artisan migrate
INFO Preparing database.
Creating migration table ................................................. 117ms DONE
INFO Running migrations.
2014_10_12_000000_create_users_table ...................................... 149ms DONE
2014_10_12_100000_create_password_reset_tokens_table ...................... 178ms DONE
2019_08_19_000000_create_failed_jobs_table ................................ 145ms DONE
2019_12_14_000001_create_personal_access_tokens_table ..................... 220ms DONE
テーブルの作成は問題なく作成することができました。実際に作成できているか確認するためにPlanetScaleのデータベースのOverviewを確認します。
Tablesの値が5になっていることが確認できます。

Tables 5をクリックすると作成したテーブルの情報を確認することができます。5つのテーブルが作成されていることが確認できます。

Web Consoleへのアクセス
Web Console画面ではコマンドラインを利用してデータベースにアクセスすることができるためテーブルに挿入されているデータを確認するためメニューのConsoleタブをクリックします。
しかし”There are no branches you’re able to connect to”のメッセージが表示されます。デフォルトではProduction BranchesではWeb Consoleにアクセスできないようになっています。

Web Console画面へのアクセスを行うためデータベースのSetting画面に移動して”Allow web console access to production branches”のチェックを行い、”Save database settings”ボタンをクリックします。

設定変更するとWeb Consoleへのアクセスが可能となります。

コンソールでselect文を利用してmigrationsテーブルにアクセスを行います。

コンソールからSQL文を利用してMySQLのバージョンも確認することができます。

GUIを利用した接続
TablePlusなどのデータベース管理ソフトを利用してPlanetSacle上のデータベースにアクセスすることができます。TablePlusの接続に利用する接続情報を確認するためにOverview画面の”Connect”ボタンをクリックします。

Connect withで”General”を選択します。表示される情報が接続するために必要な情報です。

TablePlusで接続先にMySQLを選択してMySQL Connection画面で必要な情報を入力します。パスワードは.envファイルに保存したものを利用してください。

“Connect”ボタンをクリックすると接続ができます。

GUIのデータベース管理ソフトウェアを利用してテーブルの内容を確認することができます。
コマンドラインの利用方法
PlanetScaleはコマンドラインも用意されており、コマンドを利用して設定を変更することができます。コマンドラインを利用するためにはインストールが必要となります。
macOSでのインストール方法
macOSではHomebrewを利用してインストールを行います。Homebrewをインストールを行っていない場合にはインストールを行う必要があります。
brewコマンドを利用してインストールを行います。
% brew install planetscale/tap/pscale
インストールが完了するとpscaleコマンドを利用することが可能となり、helpのオプションをつけて実行すると下記のメッセージが表示されます。
% pscale --help
pscale is a CLI library for communicating with PlanetScale's API.
Usage:
pscale [command]
Available Commands:
api Performs authenticated calls against the PlanetScale API. Useful for scripting.
//略
MySQLのClientもbrewコマンドを利用してインストールします。
% brew install mysql-client
データベースの情報を見るためにコマンドを実行してもエラーになります。
% pscale db ls
Error: the access token has expired. Please run 'pscale auth login'
コマンドラインからのログイン
PlanetScaleのWeb Consoleにログインした状態からpscale auth loginコマンドを実行します。
% pscale auth login
Confirmation Code: KUXRARR4
If something goes wrong, copy and paste this URL into your browser: https://auth.planetscale.com/oauth/device?user_code=KUXRARR4
⠦
コマンドを実行するとブラウザのタブが自動で起動してPlanetScaleのログイン画面(Web Consoleからログアウトしている場合)が表示されます。
サインインするとブラウザ上にConfirmation Codeが表示されます。

コマンド実行時と同じコードになっているかを確認し同じ場合は”Confirm code”ボタンをクリックします。画面には以下が表示されます。

コマンドを実行したコンソールを確認するとログインが完了していることがメッセージからわかります。
% pscale auth login
Confirmation Code: KUXRARR4
If something goes wrong, copy and paste this URL into your browser: https://auth.planetscale.com/oauth/device?user_code=KUXRARR4
Successfully logged in.
ログイン後に先程失敗したpscale db lsコマンドを実行します。PlanetScale上のデータベースの情報を取得することができます。
% pscale db ls
NAME CREATED AT UPDATED AT NOTES
--------- ------------- ---------------- -------
test_db 8 hours ago 30 minutes ago
コマンドラインからのログアウト
ログアウトを行いたい場合はpscale auth logoutボタンを実行後に表示されるメッセージの後に”Enter”ボタンを押すとログアウトできます。
% pscale auth logout
Press Enter to log out of the PlanetScale API.
データベースの作成/削除
データベースの作成もコマンドラインから行うことができます。しかりFreeプランでは追加のデータベースを作成できません。Yesを選択すると追加データベースを作成できますがコストがかかります。クレジットカードを入力しているので誤って”Yes”を選択しないようにしてください。
% pscale db create laravel10
Organization [johndoe10] does not have any free databases remaining
If you choose to continue, this database will be created on the Scaler plan. The monthly cost is $29.
作成したデータベースの情報はdatabase showコマンドで確認することができます。
% pscale database show test_db
NAME CREATED AT UPDATED AT NOTES
---------- ---------------- ---------------- -------
test_db 12 minutes ago 11 minutes ago
オプションの–webをつけて実行するとブラウザのタブが起動してブラウザ上でデータベースの情報を確認することができます。
% pscale database show test_db --web
データベースの削除も行うことができます。
% pscale database delete test_db
? Please type test_db to confirm: test_db
Database test_db was successfully deleted.