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

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

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

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

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

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

データベースの作成
確認メールの”Confirm email”ボタンをクリックするとWelcomeページにリダイレクトされます。画面上に表示されている”See how PlanetScale works”のボタンをクリックするとPlanetScaleについての説明画面が5画面ほど続きます。PlanetScaleについての説明が必要ない場合はボタンの下にある”Ready to create or import a database instead?”のcreateのリンクをクリックしてください。ここでも説明画面はスキップしてデータベースの作成に進みます。

データベースの作成画面が表示されます。

Nameを入力後、RegionではTokyoを選択することができます。データベースの作成はコマンドラインでも行うことができます。

作成が開始されると以下のWeb Consoleの画面が表示されます。Web Console画面の左上にOverview, Settingsなどのリンクが存在しデータベースの作成やプランの確認などを行うことができます。さらにWeb Consoleからデータベースに対してQueryを実行することもできます。
中央の左側にに”Ready to connect to your database?”のリンクか”Connect”ボタンをクリックしてください。”Ready to connect to your database?”はしばらくすると消えます。

接続はLaravel以外にはさまざまな言語やツールによって接続することができるので適切なものを選択します。ここでは”Laravel”を選択します。

.envファイルに設定することができる環境変数が表示されます。動作確認を行う場合は各自が取得した情報を利用してください。

PlanetScale上でのデータベースの作成は完了です。
Laravel環境の構築
PlanetScaleに接続するためのにローカルPC上でlaravel newコマンドを実行してLaravelプロジェクトを作成します。
% laravel new laravel_planetscale
プロジェクト作成後にlaravel_planetscaleのフォルダに移動します。
% cd laravel_planetscale
Laravelからの接続設定
.envファイルを開いて先ほど設定されていた情報を.envファイルに設定します。
DB_CONNECTION=mysql
DB_HOST=vctsig3fp8a5.ap-northeast-2.psdb.cloud
DB_PORT=3306
DB_DATABASE=laravel9
DB_USERNAME=56qae8nbc9tk4
DB_PASSWORD=pscale_pw_-nr-cQ97byteOAZikpH7sJl3tg-lq1bI4KBydK-4HiQ
MYSQL_ATTR_SSL_CA=/etc/ssl/cert.pem
テーブルを作成するためにphp artisan migrateコマンドを実行します。
% php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (136.61ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (95.38ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (100.85ms)
Migrating: 2019_12_14_000001_create_personal_access_tokens_table
Migrated: 2019_12_14_000001_create_personal_access_tokens_table (147.38ms)
テーブルの作成は問題なく作成することができました。実際に作成できているか確認するためにPlanetScaleのデータベースのOverviewを確認します。
Overview画面をリロードしてもすぐにテーブル作成の情報が反映されているわけではないのでLaravel上でテーブルを作成してもTablesの数は0のままです。情報を反映させるため表示されているTablesをクリックします。

画面には”Refresh Schema”というボタンがあるのでボタンをクリックするとphp artisan migrateコマンドで作成したテーブルのSQLが表示されます。

Overview画面に戻るとテーブルの数が0から5に増えていることが確認できます。

テーブルに挿入されているデータを確認するためコンソールタブをクリックします。コンソールでselect文を利用してmigrationsテーブルにアクセスを行います。Consoleへの移動はOverviewの画面でTablesをクリックするとSchemaに移動するので上部のメニューに表示されるConsoleをクリックします。

ローカル環境のLaravelからクラウド上にあるPlanetScaleのMySQLにアクセスできることが確認できました。
コンソールからSQL文を利用してMySQLのバージョンも確認することができます。

Laravel9からPlanetScaleの接続を確認することができました。
コマンドラインの利用方法
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:
audit-log List audit l
//略
MySQLのClientもbrewコマンドを利用してインストールします。
% brew install mysql-client
データベースの情報を見るためにコマンドを実行してもエラーになります。
% pscale db ls
Error: not authenticated yet. 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
---------- -------------- -------------- -------
laravel9 1 hours ago 1 hours ago
コマンドラインからのログアウト
ログアウトを行いたい場合はpscale auth logoutボタンを実行後に表示されるメッセージの後に”Enter”ボタンを押すとログアウトできます。
% pscale auth logout
Press Enter to log out of the PlanetScale API.
データベースの作成/削除
データベースの作成もコマンドラインから行うことができます。データベースを作成する場合はオプsヒョンの–regionを設定しない場合はus-east-4に作成されました。
% pscale db create laravel9
Database laravel9 was successfully created
作成したデータベースの情報はdatabase showコマンドで確認することができます。
% pscale database show laravel9
NAME CREATED AT UPDATED AT NOTES
---------- ---------------- ---------------- -------
laravel9 12 minutes ago 11 minutes ago
オプションの–webをつけて実行するとブラウザのタブが起動してブラウザ上でデータベースの情報を確認することができます。
% pscale database show laravel9 --web
データベースの削除も行うことができます。
% pscale database delete laravel9
? Please type laravel9 to confirm: laravel9
Database laravel9 was successfully deleted.