Open8

PlanetScaleに入門したい

Knob/のまど先生Knob/のまど先生

PlanetScaleとは

サーバレスのDBをいい感じにしてくれるやつ(言葉知らなすぎて説明できない)
https://planetscale.com/
https://jp.techcrunch.com/2021/06/24/2021-06-23-planetscale-raises-30m-series-b-for-its-database-service/

いつもの通り,とにかくモダンということで触りたいです
モダンすぎて日本語のソースもほとんどなくてかなりしんどいのですが,行けるとこまで頑張ります!

前提知識

私はReact,TypeScriptを普段使っているフロントエンドエンジニアです.
SQLやDBやバックエンドはエアプです.(最近興味があって勉強中)

Knob/のまど先生Knob/のまど先生

サインアップ

公式から簡単にできます.
GitHubのアカウントでログインします.
ちなみに僕は,開発系ものものはGitHub>Google>Emailの優先順位で使用しているので,ここのサイトなにでアカウント作ったっけな...ってなることも少ないです.

サインアップしたので,Getting Startedしたい

サインアップしたらなんかいろいろ説明してくれてます.

英語だし,おしゃれすぎるし,モダンすぎるし,で何も頭に入ってきませんでした.

改めてDocumentを見たりしてみます.
https://docs.planetscale.com/

Quick Startはできそう

https://docs.planetscale.com/tutorials/planetscale-quick-start-guide
こちらページに書いてあるのは,とりあえず,このサイトで新しく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で命令を書いてみました.

ハリーポッターが召喚されたみたいでなによりです.

Knob/のまど先生Knob/のまど先生

ブランチを新しくつくる

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

mainをproductionにしてほしそうなので,ボタンを押してみます.

mainが保護され直接いじれなくなったみたいですね.

Knob/のまど先生Knob/のまど先生

このあとどうすれば...

とりあえずこのDBを使って開発をしたいので,DBと接続するのが良いのかなと思いました

いかにもな箇所はここですかね.

CLIを使っていくのでインストールする必要がありそうです.
こちらを確認します.
https://github.com/planetscale/cli#installation

今回はhomebrewで入れます.

brew install planetscale/tap/pscale

終わったら

pscale --version

でインストールされていることを確認したらログインしましょう.

pscale auth login

コマンドを叩いた瞬間に最先端すぎて何が起きたかわかりませんでしたが,無事にログインできたようです.

pscale shell sample-db main

こちら叩くとmysqlがないよと言われたので入れます.

brew install mysql-client

もう一度叩くとDBがつながったみたいです.

Knob/のまど先生Knob/のまど先生

ここまでの考察

これはおそらく,クラウド上にSQL(今回はMySQL?)のDBができたってことでしょうか.

なので,DBと接続するときはローカルでDBを起動する代わりにこのDBを使うことができるということなんですかね.

この仮定が正しいとして,DocumentにConnect Node Appというのがあったので,それを使ってデータを呼び出したりしてみようかと思います.

Knob/のまど先生Knob/のまど先生

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にも書いてあります!

https://docs.planetscale.com/tutorials/connect-nodejs-app#using-a-connection-string

Knob/のまど先生Knob/のまど先生

というわけで

これでクラウドのDBを自分の作成したアプリと紐付けることができて,あとはSQLがかければ,データの読み書きをすることができそうです!SQLがかければ...

あとは,今回は自動的にMySQLになったのですが,これをPostgresSQLとかにする方法とか知りたいですね.

とりあえず次はPrismaを使ったチュートリアルを試してみます.