RDBを使ったサービスを作りたい。
でもAWSやGCPだといくらかかるか分からないし、Herokuは無料だと使わないとDB止まってしまうし。。
そんな中で手軽にRDBのMySQLを使えるサービスが「PlanetScale」 です!
この記事を書く2週間ぐらい前まで私は知らなかったサービスだったのですが、
Slack,Figma,GitHubなどなど、名だたる企業がPlanetScaleを利用しています!
まさにノリにノッている企業なんですね。
YouTubeで最初に開発されたMySQL用のオープンソースのデータベースクラスタリングシステムVitessを提供するPlanetScaleは米国時間6月23日、Insight Partnersが率いるシリーズBのラウンドで3000万ドル(約33億円)を調達したことを発表した。その他にもa16zとSignalFireが参加している。Crunchbaseによると、これで同社の調達総額は5500万ドル(約61億円)になる。
データベースクラスタリングのPlanetScaleはシンプルで使いやすい開発者体験を実現 | TechCrunch Japan
RDBにブランチという概念を持ち込んだり次世代感がすごいなぁ、というのが私の最初の印象で
2022/01/29現在無料で試せるという事もあり使ってみました。
少し触ってみた感想としては、
UI/UX共に非常に洗練されていて使いやすく分かりやすい。
RDBが必要な場面で個人・企業問わず選択肢の1つになる。
と感じました!
個人的にすごくおすすめ!仕事で使ってみたいなぁ🙂
検証した環境
1 | pscale | 0.89.0 |
PlanetScaleとは

トップページにデカデカと書いてあるように、
The MySQL-compatible serverless database platform.
自分でサーバを用意せずにMySQLを利用出来るサービスです。
これだけであれば昨今のサービスによくあるじゃん、という感じがしますが、
内部的に利用されているVitess(ヴィテス)というオープンソースがすごい!
VitessとMySQLは、オープンソースで使えるシステムです。PlanetScaleは、Kubernetesオペレータを提供し、Vitessのデプロイ、モニターおよび管理を行うソフトウェアです。
元YouTubeのVitessデータベース開発者が手がける高性能Vitess、PlanetScale – TECHBLITZより引用
名だたる企業が使ってる実績はもちろん
YouTubeのDBを支えていた技術がVitess、でありその技術を使ったサービスがPlanetScale、といえばその威力が伝わると思います。
Vitessに関しては以下のページがわかりやすかったです
料金について

月のストレージ容量、読み書き数、コネクション数などに応じて無料プランが使えます。
とりあえずRDBを試したい!という状況であれば十分無料プランでも使えそう
しかも無料でも噂のブランチを3つまで使えます。
さらに無料プランの場合クレジットカード登録いりません!
「何か操作ミスったらお金がかかっちゃうんじゃないか?」という不安は持たなくて済むのはありがたいですね ☺️
可用性はどうなんだろ?
と思って調べてみたのですが特に明記されているページが見つかりませんでした。
ただ、以下のページに高可用性・安全性が高い事が記されていて、
何より、YouTube・Slackといった超一流サービスを支えているというのが安心して使える証拠かなと感じました。
無料プランの注意点としては、
Limit one database per organizationと書かれているので、
実質無料プランはデータベースが1つしか作れないと考えた方がいいでしょう。
「まずは試しにDBを作ってみて…」と適当なデータベースを作ると泣きを見る事になりそうなので注意です!
PlanetScaleを始めてみる
「Get Started」から始めます。
GitHubで手軽に登録出来るので私はそちらで登録してみます

認証用メールがGitHubに登録しているメールアドレス宛に届き、
後はメールに来たリンクを踏めば認証は完了!

早速利用出来るようになります!

サービスが利用出来るまで登録慣れている人であれば1分もかからず出来ます。
PlanetScaleを使ってみる
せっかくGUIもCLIも用意されているのでどちらも使ってみます。
DBのcreateはせっかくなのでGUIから

AWSやGCPのようにリージョンが選択出来ます。
Asia Pacific Tokyoが選択出来るのは嬉しいですね
上記で「create database」を実行すると

作成したデータベースの利用状況を確認出来るダッシュボード画面が表示されます。
更に最初に作成されるmainブランチを選択すると、タブに「Console」という項目があり、

web上でコマンドを実行する事まで可能。
Beta版とはいえいたれりつくせり感がすごい…!!
CLIを使ってみる
pscale
というコマンドが公式から提供されています。
せっかくなのでこちらも使ってみます。

導入方法は公式を参考に。
Macの場合Homebrewで簡単に導入出来ます
$ brew install planetscale/tap/pscale
# mysqlの操作を行うため mysql-client も
$ brew install mysql-client
# インストール出来た事の確認
$ pscale version
pscale version 0.89.0 (build date: 2022-01-24T18:17:47Z commit: 6405542)
接続する
まずCLIから接続出来るように認証を行います
$ pscale auth login
Confirmation Code: ABCDEFGHI
If something goes wrong, copy and paste this URL into your browser: https://auth.planetscale.com/oauth/device?user_code=ABCDEFGHI
ブラウザが立ち上がり、Confirmation Codeを入力します。
が、自分で入力する必要なくブラウザ上で自動入力してくれます!

新規登録時もそうだった点としてPlanetScaleはUIはもちろんUXも非常に洗練されています!
DBの操作をする
DBに接続して操作してみます。
sample_db
というDBがある前提で書いていきます
データベースの一覧を確認
# DBの一覧を確認
$ pscale db ls
NAME CREATED AT UPDATED AT NOTES
---------- ------------ ------------ -------
sample_db 2 days ago 2 days ago
テーブルを作ってみます
# PlanetScaleで作成したDBに接続する
$ pscale shell sample_db main
sample_db/main>
# 試しにテーブルを作成してみる
sample_db/main> CREATE TABLE `users` (
-> `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> `email` varchar(255) NOT NULL,
-> `first_name` varchar(255),
-> `last_name` varchar(255)
-> );
sample_db/main> show TABLES;
+---------------------+
| Tables_in_sample_db |
+---------------------+
| users |
+---------------------+
簡単。。🤤
ここまで非常にスムーズに出来ました。
アプリケーションからの接続
ここも考えられています!
コマンドで特定のDBのブランチに対して
user名・パスワードの組み合わせを発行する事が出来ます。
# pscale password create <DATABASE_NAME> <BRANCH_NAME> <PASSWORD_NAME>
$ pscale password create sample_db main production-password
Password production-password was successfully created in sample_db/main.
Please save the values below as they will not be shown again
NAME BRANCH USERNAME ACCESS HOST URL ROLE ROLE DESCRIPTION PASSWORD
--------------------- -------- -------------- ---------------------------------------- -------- ------------------ -------------------------------------------------------
production-password main abcdefg hogehoge.ap-northeast-2.psdb.cloud writer Can Read & Write pscale_pw_xxxxxxxx
公式に以下のように書かれているため、
- host: The value for “ACCESS HOST URL” in the above step
- port: 3306
- user: The value for “USERNAME” in the above step
- password: The value for “PLAIN TEXT” in the above step
- database: <DATABASE_NAME>
これらの情報を使うことで接続が出来ます。
私はDBのGUIクライアントアプリとしてTablePlusを使っていて先ほどの設定の場合以下のようになります

接続すると、先ほど作成したusersテーブルも無事見られました!
