Prismaは、NeonとPlanetScaleのサーバーレスデータベースドライバーのプレビューサポートをリリースします。この機能により、Prismaユーザーは、長期間にわたるTCP接続なしで、既存のデータベースドライバーを利用してデータベースと通信できるようになります!
サーバーレスデータベースドライバーとは?
従来、データベースドライバーはデータベースと通信するために、長期間にわたるTCP接続を確立します。TCP接続には開始時にある程度のオーバーヘッドがあるものの、継続的な通信にはほとんどオーバーヘッドがないため、サーバー型デプロイメントには理想的です。
しかし、長期間にわたる接続はサーバーレス環境で問題を引き起こす可能性があります。サーバーレス関数の短命な性質を考えると、接続の追跡、アイドル状態の接続のクローズ、ゾンビの処理、そしてデータベースが過負荷にならないように内部接続プールを維持することは骨の折れる作業になる可能性があります。さらに、多くのクラウドプロバイダーが任意のTCP接続を禁止するようになっているため、TCP接続に依存する既存のデータベースを使用することが難しくなっています。

サーバーレス関数はデータベース接続をすぐに使い果たしてしまう
上記の問題への対応として、Prismaはサーバーレス関数で動作するアプリにより良い体験を提供するために、Prisma Accelerateを開発しました。さらに、いくつかのデータベースプロバイダーも独自のデータベースドライバーライブラリを開発しました。これらのドライバーは、従来のTCP接続ではなく、HTTPやWebSocketなどの異なるプロトコルを使用しており、急速に進化するサーバーレス環境に理想的です。
では、これらのサーバーレスドライバーはPrismaにどのように適合するのでしょうか?
Prisma ORMがサーバーレスドライバーをサポート
最初のリリース以来、Prisma ORMの重要な部分を占めてきたのがクエリエンジンです。Rustで書かれたクエリエンジンは、Prisma Clientのクエリを信頼性高く効率的にSQLステートメントに変換し、それを付属のデータベースドライバー経由で実行することを可能にします。このシステムはこれまでうまく機能してきましたが、数ヶ月前、JavaScriptで書かれたサーバーレスデータベースドライバーが特別なエンドポイントとHTTP経由で通信するという新しいデータベースプロバイダーの傾向に気づきました。私たちのチームは、これらの新しいエンドポイントと通信するRustベースの実装を構築することは、途方もない作業になるだろうと認識していました。

ドライバーアダプターなしでデータベースと通信するPrisma Client。
また、Prisma ORMは多くのデータベースエンジンやプロバイダーと連携しますが、これらのデータベースには直接的なTCP接続、またはPrisma Accelerateのような接続プーラーを介してのみ接続可能でした。本日、これらの問題は、サポートされているデータベースへの接続時に既存のJavaScriptデータベースドライバーを使用できるようにするドライバーアダプターの導入により解決されました。
本日、2つのドライバーアダプター、@prisma/adapter-neon
と@prisma/adapter-planetscale
をリリースします。これらのアダプターは、Prisma ClientとJavaScriptサーバーレスデータベースドライバー間の*翻訳者*として機能します。データベースドライバーとドライバーアダプターを使用している場合、アプリは機能するためにデータベースへの直接的なTCP接続を必要とせず、代わりにHTTPまたはWebSocket接続を介してデータベースと通信します。PrismaはRustエンジンを使用してPrisma ClientのクエリをSQLに変換し、これらのドライバーを介してクエリを実行します。この設定により、実証済みのクエリエンジンと、Prismaを利用するコードベースでより多くのプロバイダーを使用できるという、両方の利点を提供できるようになります。

ドライバーアダプターとサーバーレスデータベースドライバーを使用してデータベースと通信するPrisma Client。
今や、唯一の要件はHTTPまたはWebSocketリクエストを作成する能力であり、Function-as-a-Service (FaaS) デプロイメントを劇的に簡素化します。
Prisma ORMをサーバーレスデータベースドライバーと併用する方法
PrismaをNeonまたはPlanetScaleのサーバーレスデータベースドライバーと連携させるのは簡単です
- データベースドライバーを通常どおりセットアップする
- 対応するPrismaドライバーアダプターに渡す
- そのドライバーアダプターでPrisma Clientを作成する
まず、prisma
と@prisma/client
を少なくともバージョン5.4.1
にインストールします。dotenv
もインストールして、.env
ファイルで定義された環境変数がprocess.env
経由でスクリプト内で利用できるようにします。
これで、以下のようにPrisma Clientをセットアップできます。
@neondatabase/serverless
でNeonを使用する

Neonでデータベースを作成した後、@prisma/adapter-neon
ドライバーアダプター、Neonのサーバーレスデータベースドライバー@neondatabase/serverless
、およびNeonで使用するためのWebSocket接続を設定するためのws
をインストールする必要があります。
次に、Neonデータベース接続文字列が.env
ファイルにコピーされていることを確認してください。接続文字列はpostgres://
で始まります。
これで、schema.prisma
のデータソースでこの環境変数を参照できるようになります。driverAdapters
プレビュー機能も必ず含めてください。
これで、npx prisma generate
を実行してPrisma Clientを再生成し、プレビュー機能をアプリで利用できるようにします。
上記の設定が完了したら、スクリプトを続行できます
- パッケージをインポート
- Neonサーバーレスデータベースドライバーをセットアップ
- Prisma NeonアダプターをNeonサーバーレスデータベースドライバーでインスタンス化
- ドライバーアダプターをPrisma Clientインスタンスに渡す
これで、あなたのコードはWebSocket接続やメッセージパイプラインなど、Neonサーバーレスドライバーの組み込みの利点を享受しつつ、Prismaが接続の作成と破棄、エラー処理、型安全性をカバーします。Neonサーバーレスドライバーのサポートについてフィードバックがございましたら、専用のGitHubイシューにコメントを残してください。今後の開発に活用させていただきます。
@planetscale/database
でPlanetScaleを使用する

PlanetScaleの利用を開始した後、PlanetScaleサーバーレスドライバーを使用してデータベースに接続できます。@prisma/adapter-planetscale
ドライバーアダプター、@planetscale/database
サーバーレスドライバー、およびPlanetScaleドライバーにfetch
関数を提供するためのundici
をインストールする必要があります。
次に、PlanetScaleデータベース接続文字列が.env
ファイルにコピーされていることを確認してください。接続文字列はmysql://
で始まります。
これで、schema.prisma
のデータソースでこの環境変数を参照できるようになります。driverAdapters
プレビュー機能も必ず含めてください。
これで、npx prisma generate
を実行してPrisma Clientを再生成し、プレビュー機能をアプリで利用できるようにします。
これで、Prisma ClientインスタンスはPlanetScaleのdatabase-js
を使用するようになり、接続の信頼性とパフォーマンスを向上させることができます。Prismaの接続プールではなくHTTPリクエストを使用しますが、Prismaは引き続きエラー処理と型安全性を担当します。PlanetScaleサーバーレスドライバーのサポートについてフィードバックがございましたら、専用のGitHubイシューにコメントを残してください。今後の開発に活用させていただきます。
データベースドライバーとドライバーアダプターのセットアップは、既存の「始める」ガイドとは異なりますが、Prisma Clientは非常に使い慣れたものに感じられるでしょう。ただし、現在は選択したデータベースクライアントの利点を活用し、TCP接続を使用せずにデータベースと通信します。
まとめ
PrismaユーザーがNeonおよびPlanetScaleのサーバーレスデータベースドライバーを活用できるようになり、大変嬉しく思います。これらのドライバーは、サーバーレス環境や長期間のTCP接続が不可能な領域に最適です。
Prisma Clientと新しいドライバーアダプター機能は、現時点ではCloudFlare WorkersやVercel Edge FunctionsのようなEdge Functionsデプロイメントをサポートしていません。Edge Functions環境でNeonまたはPlanetScaleサーバーレスドライバーをテストしたい場合は、こちらのアンケートにご回答ください。Edge関数のサポートに関する早期アクセスについても検討させていただきます。近日中に新しい情報をお届けします。
皆様のご意見をお聞かせください!driverAdapters
のプレビュー機能をお試しいただき、NeonとPlanetScaleに関するGitHubディスカッション、またはDiscordでフィードバックをお寄せください。
次の投稿をお見逃しなく!
Prismaニュースレターに登録する