【PlanetScale】Quickstart + α


はじめに

個人開発で使うために無料で試せるサーバーレスなデータベースを色々見ていて、その中で気になった『PlanetScale』というサービスを使ってみました。

今回は

  • アカウントの作成
  • 公式のクイックスタート
  • プラスアルファで試したこと

を書いています。

2023年8月15日時点での情報になりますのでご了承ください。

PlanetScaleとは

公式ドキュメントによると

PlanetScale is a MySQL-compatible serverless database that brings you scale, performance, and reliability — without sacrificing developer experience.

とのことです。サーバーレス(=自分でサーバーを用意や管理しない)でMySQL互換のデータベースを使うことができ、Vitessを利用して作られています。PlanetScaleには以下のような特徴があります。

  • ブランチ機能がある。
  • ダウンタイムなしのスキーマ変更ができる。
  • シャーディングによる水平スケーリングができる。
  • 外部キーの設定やカラム名の変更ができない。
  • 東京リージョンがある。
  • クエリの履歴を確認できる。
  • 自動や手動でのバックアップができる。
  • 無料プランがある。

MySQLでできること全てかできるわけではなく制限があります。
制限については公式ドキュメントに記載があります。

アカウントの作成

今回はGitHubアカウントを使います。
「Continue with GitHub」を押下します。



「Authorize planetscale」を押下します。



「Accept Terms of Service」を押下します。



これでアカウントの作成は完了です。

クイックスタート

アカウント作成後、以下の画面にいる状態です。
「create」のリンクを押下します。



作成するデータベースの情報を入力・選択します。



下までスクロールすると「Create Database」を押下できない状態になっています。
これはクレジットまたはデビットカードの登録がされてないためです。
「Add new card」を押下します。



情報を入力・選択し、「Add card」を押下します。



「Create Database」を押下します。



これでデータベースが作成されました。
productionブランチにコンソールからSQLを実行するために設定をします。
「Settings」を押下します。



"Allow web console access to production branches"のチェックボックスをONにして保存します。実際に使っていくときにはOFFにしておいた方が安全だと思いますが、クイックスタートに従います。



「Console」を押下し、「Connect」を押下して接続します。



SQLを実行します。SQLを書いてEnterキーを押すと実行されます。

CREATE TABLE categories (
  id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name varchar(255) NOT NULL
);
CREATE TABLE products (
  id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
  name varchar(255) NOT NULL,
  image_url varchar(255),
  category_id INT,
  KEY category_id_idx (category_id)
);



テーブルを作成できたか確認します。

SHOW TABLES;



データを挿入し、確認します。

INSERT INTO categories (name)
VALUES  ('Office supplies');
INSERT INTO products (name, image_url, category_id)
VALUES  ('Ballpoint pen', 'https://example.com/500x500', '1');
SELECT * FROM products;
SELECT * FROM categories;



Safe migrationsをONにします。
画像の赤丸の部分を押下します。



"Enable safe migrations"のトグルスイッチをONにして保存します。



これでクイックスタートは終了です。

プラスアルファ

データベースのバージョン確認

書いてある場所がわかりませんでしたので、以下のSQLを実行して確認しました。

SELECT Version();



Safe migrationsがONの状態でのスキーマ変更

Safe migrationsがONならスキーマ変更が防止されるはずということで、実際に変更しようとしたらどうなるか試してみました。結果は画像のようにエラーが出て変更されませんでした。

ブランチの作成

「Branches」を押下し、「New branch」を押下します。



情報を入力・選択し、「Create branch」を押下します。



これでブランチの作成は完了です。

本番ブランチの設定

ブランチには開発ブランチと本番ブランチの2種類があります。
本番ブランチに設定してないブランチは開発ブランチになります。
まずは本番ブランチであるmainブランチを開発ブランチに変更します。
ブランチの一覧からmainブランチを押下します。



画像の赤丸の部分を押下します。



"Promote to production"のトグルスイッチをOFFにします。



mainブランチを開発ブランチに変更したので、次にproductionブランチを本番ブランチに設定します。と言っても「Promote to production」を押下するだけです。



これで本番ブランチの設定は完了です。

デプロイリクエス

デプロイリクエストGitHubのプルリクエストみたいな機能です。
mainブランチに変更を加え、productionブランチにデプロイリクエストします。
mainブランチでproductsテーブルからimage_urlカラムを削除します。



ブランチの一覧からmainブランチを押下すると、差分を確認できます。
赤い四角で囲っている部分からデプロイリクエストを作成します。
画像では入力欄が空ですが、"test"と入力して作成しました。



以下がデプロイリクエストの画面です。



Schema changesタブでは差分を確認できます。
"OK"というコメントを書いて「Approve changes」を押下します。



「Deploy changes」を押下します。



デプロイが完了しました。



反映を確認するために、ブランチの一覧からproductionブランチを押下します。
画像のようにproductsテーブルからimage_urlカラムが削除されていることを確認できました。



データベースの削除

Settingsタブの一番下の「Delete database」を押下します。



入力欄にデータベース名を入力し、「Delete database」を押下します。
※押下すると完全に削除されますのでご注意ください。