2022-02-06に更新

サーバーレスMySQLのPlanetScaleをNext.js+Prismaで使ってみた

PlanetScaleというのはMySQL互換のサーバーレスデータベース。つまりどこからでもMySQL接続してデータベースとして利用できるサービス。

接続方法は普通によくあるようなパスワードを使ったデータベースURLで接続可能。そのためだいたいどんなフレームワークでも利用できる。

https://planetscale.com/

無料枠がでかい

すごく気に入った理由の一つとして、無料枠がかなり大きいことがあげられる。2022/1時点で容量10GB、書き込み回数は月100万回、読み込み回数も月1000万回と小さいアプリケーションであれば気にするレベルでないほど十分にある。ちょっとしたアプリをたくさん作っているという人にとってはとても嬉しい無料枠。

というのも同じく無料で使えるHerokuのJawsDBも容量5MB、最大接続数10と、むちゃくちゃ少なく、集客下手だから…と思いつつもちょっと心配になってしまう制限のため、なんかこう、微妙だなぁ、とずっと感じていた。

しかもPlanetScaleは東京リージョンまであるのでびっくり。

コンソールもある

サービス内にコンソールもあるためちょっとした調査とか、個人サービスのデータ調整とかはこれで簡単にできそう。

image.png

あとは現在のスキーマも見れる。

実際に試してみた

ということで実際に使ってみた。Next.jsからPrismaで利用。かんたんな書き込み、取得処理だけで試してみた。

接続方法

PlanetScaleのConnect設定のところでパスワードを設定できる。それにより普通に接続が可能。ここはいろんなライブラリでの接続方法も表示してくれる。Prismaの設定もそのままコピペでできるように教えてくれる。

開発

Prismaを使う場合、開発は普通にローカルのデータベースを使ってやると良さそう。というのもPrismaはShadow databaseというものを用いている。開発時はなんかそれで色々いい感じにしているらしい。ということでそのためにデータベースのCreate, Drop権限が必要。その関係でマイグレーションの作成を行うタイミングでPlanetScaleとの接続ではエラーになってしまう。そのため開発時はローカルだけで完結させておくとスムーズ。

本番に反映させたいときだけPlanetScaleへの接続に変え、 npx prisma db push を実行することでマイグレーションを反映できる。

PlanetScaleはドキュメントも結構しっかり書かれているようで、このあたりの解説もちゃんと書かれている。
https://docs.planetscale.com/tutorials/prisma-quickstart

速さ

クラウドということで速さがちょっと気になったていたが、一つ作ったデータ取得用のAPIでだいたいTTFBが300msくらいだったので十分そうだった。

気をつける点として、Vercelの場合は無料枠だとリージョンがUSAのEASTと決まっているのでPlanetScale側もそれに合わせておく必要がある。一旦東京で作ってみていた時は1.5sかかっていた。遅くて使えないな~と思った場合はこのあたりの設定が間違っている可能性があるかもしれないので気をつけよう。

追記

実際に別途使ってみるとエラーが色々出たので対処法

PrismaでPlanetScaleを使う時のエラーあれこれ

まとめ

実際に作ってみたテストサイトはこちら。
https://simple-planetscale-test.vercel.app/

試したソースコードはこちら
https://github.com/dala00/simple-planetscale-test

まだ実運用したことがないのでどうなるかはわからないが、今のところとても気に入っているのでFirestoreで作っているちょっと大きめのサービスを移行してみようか悩み中…。今後もちょっとしたちいちゃいネタサービスを作るときにも使ってみたい。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント