Prisma Accelerateとはなんだ

2024/08/05に公開

きっかけ

初めてちゃんと開発をしようと思い、使ったことのないNext.jsに四苦八苦しながら、Auth.jsを使って認証機能を追加しようとしていたその時。

Auth.jsではAdapterがあってPrismaとつなげることで簡単にユーザー情報の登録ができるとのことで実際に導入してみた。

https://authjs.dev/getting-started/adapters/prisma

しかし何をどう頑張ってもうまくいかず、なにやらEdgeで動かないみたいなエラーメッセージが出てきた。

そこでどうやらAuth.jsはEdge Function環境にNext.jsをデプロイすることを想定してデフォルトでEdge環境で動くような構成にしなければいけない(みたいな感じ)のことと解釈した。

PrismaをEdgeで使う

ということでPrismaをEdgeで使うような何かをしなければならないということが判明したので、色々と調査をしていく中で今回のメインであるPrisma Accelerateと出会った。

Edge環境においては世界中からアクセスが有るたびにDBとのコネクションが張られてしまう(らしい)からそのまま素直にDB接続しようとしてもコネクションが足りないということでそのまま使えない様になっているとのこと。

解決策としては色々あり、世界中に広がるEdge FunctionsからDBへの接続をプロキシして管理しようというもの。

しかしこれはこれで各WorkerとプロキシサーバーのDCとの物理的な距離の問題で遅延が発生するとのこと。

Prisma Accelerateの登場

ここでPrisma Accelerateを使うことで、プロキシ先に指定しているDBのデータをCDNでキャッシュすることで毎回DBにアクセスせずに基本的にキャッシュから返すことでレスポンスも早いし接続数の管理もできるという代物のよう。

この情報がAuth.jsのドキュメントにあまり書いてなくてかなり困った。。。

使ってみる

使い方は簡単で、まずはPrisma Accelerateのコンソールからアカウントを登録する。

次に接続するDBの情報を入力する。今回はsupabaseを使っているのでsupabaseのコンソールから接続情報を持ってきてそのまま貼り付ける。

これで新たにPrisma Accelerateを経由する接続情報が発行されるので、それを既存のDATABASE_URLと差し替えてあげる。

あとはAccelerateを使うようにPrisma Clientの方も書き換えてあげれば使えるようになる。

まとめ

実際にエラーも消えてお目当ての機能は実装できたのでめでたしめでたし。

問題はローカルで立てているDBに接続できないというものがあるが、これはローカルでPrisma Accelerateをセルフホストできるパッケージがあるらしいので開発中はそれを使うようにしようと思っている。

ひとまず旅は始まったばかりなので少しずつ進んで行きます。

Discussion