PlanetScaleに入門したい

いい感じにハンズオンの記事にまとめたのはこちらです!

PlanetScaleとは
サーバレスのDBをいい感じにしてくれるやつ(言葉知らなすぎて説明できない)
いつもの通り,とにかくモダンということで触りたいです
モダンすぎて日本語のソースもほとんどなくてかなりしんどいのですが,行けるとこまで頑張ります!
前提知識
私はReact,TypeScriptを普段使っているフロントエンドエンジニアです.
SQLやDBやバックエンドはエアプです.(最近興味があって勉強中)

サインアップ
公式から簡単にできます.
GitHubのアカウントでログインします.
ちなみに僕は,開発系ものものはGitHub>Google>Emailの優先順位で使用しているので,ここのサイトなにでアカウント作ったっけな...ってなることも少ないです.
サインアップしたので,Getting Startedしたい
サインアップしたらなんかいろいろ説明してくれてます.
英語だし,おしゃれすぎるし,モダンすぎるし,で何も頭に入ってきませんでした.
改めてDocumentを見たりしてみます.
Quick Startはできそう
こちらページに書いてあるのは,とりあえず,このサイトで新しくDBを作ってSQLを叩いてデータを操作してみようみたいなものみたいです.
Organizationの配下にDBが存在するという構成のようで,2021/11/29現在では無料プランでは1Organizationにつき1DBしか作成できないようです.
まずはOrganizationを作成し,その中に一つDBを作ってみました.
Branchのタグからmainを押すとConsoleというのがあるので,そこを開き,Documentの通り,
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,
`email` varchar(255) NOT NULL,
`first_name` varchar(255),
`last_name` varchar(255)
);
としてEnterを押します.
これでテーブルができたみたいですね.
その後もDocumentの通りにSQLで命令を書いてみました.
ハリーポッターが召喚されたみたいでなによりです.

ブランチを新しくつくる
どうやらmainを直接いじれるのはGitと同じでやばいようなので,mainをproductionにして,他にブランチを作ったほうが良さげなようなので,新しくブランチをproductionとして作成しました.
mainをproductionにしてほしそうなので,ボタンを押してみます.
mainが保護され直接いじれなくなったみたいですね.

このあとどうすれば...
とりあえずこのDBを使って開発をしたいので,DBと接続するのが良いのかなと思いました
いかにもな箇所はここですかね.
CLIを使っていくのでインストールする必要がありそうです.
こちらを確認します.
今回はhomebrewで入れます.
brew install planetscale/tap/pscale
終わったら
pscale --version
でインストールされていることを確認したらログインしましょう.
pscale auth login
コマンドを叩いた瞬間に最先端すぎて何が起きたかわかりませんでしたが,無事にログインできたようです.
pscale shell sample-db main
こちら叩くとmysqlがないよと言われたので入れます.
brew install mysql-client
もう一度叩くとDBがつながったみたいです.

ここまでの考察
これはおそらく,クラウド上にSQL(今回はMySQL?)のDBができたってことでしょうか.
なので,DBと接続するときはローカルでDBを起動する代わりにこのDBを使うことができるということなんですかね.
この仮定が正しいとして,DocumentにConnect Node Appというのがあったので,それを使ってデータを呼び出したりしてみようかと思います.

Node.jsのアプリとDBを接続?する
DocumentにNodeAppのサンプルをクローンするようにあったので,やってみます.
git clone https://github.com/planetscale/express-example.git
依存関係をインストールします.expressとmysqlがありますね.
yarn install
その後に
pscale connect sample-db main --execute 'node app.js'
とするだけでDBと接続できます.
main.js
内の記述を
app.get('/', (req, res) => {
/* 第一引数はSQLのコマンド */
connection.query('SELECT * FROM users', function (err, rows, fields) {
if (err) throw err;
res.send(rows);
});
});
のようにしてあげることで,先に登録したハリーポッターのusersのデータを引っ張ることができました!!
余談
もう一つの方法
pscale password create sample-db main production-password
でパスワードを生成してからそれを使用して
"mysql://<USERNAME>:<PLAIN TEXT PASSWORD>@<ACCESS HOST URL>/<your-db-name>?ssl=true"
といった形式をprocess.env.DATABASE_URL
に入れてあげることでもDBと接続できるようです!
Documentにも書いてあります!

というわけで
これでクラウドのDBを自分の作成したアプリと紐付けることができて,あとはSQLがかければ,データの読み書きをすることができそうです!SQLがかければ...
あとは,今回は自動的にMySQLになったのですが,これをPostgresSQLとかにする方法とか知りたいですね.
とりあえず次はPrismaを使ったチュートリアルを試してみます.