2023年10月6日

Prisma ORMでのサーバーレスデータベースドライバーのサポートがプレビュー版で利用可能に

Prismaは、NeonPlanetScaleのサーバーレスデータベースドライバーのプレビューサポートをリリースします。この機能により、Prismaユーザーは、長期間にわたるTCP接続なしで、既存のデータベースドライバーを利用してデータベースと通信できるようになります!

Support for Serverless Database Drivers in Prisma ORM Is Now in Preview

サーバーレスデータベースドライバーとは?

従来、データベースドライバーはデータベースと通信するために、長期間にわたるTCP接続を確立します。TCP接続には開始時にある程度のオーバーヘッドがあるものの、継続的な通信にはほとんどオーバーヘッドがないため、サーバー型デプロイメントには理想的です。

しかし、長期間にわたる接続はサーバーレス環境で問題を引き起こす可能性があります。サーバーレス関数の短命な性質を考えると、接続の追跡、アイドル状態の接続のクローズ、ゾンビの処理、そしてデータベースが過負荷にならないように内部接続プールを維持することは骨の折れる作業になる可能性があります。さらに、多くのクラウドプロバイダーが任意のTCP接続を禁止するようになっているため、TCP接続に依存する既存のデータベースを使用することが難しくなっています。

Using a traditional database with serverless functions can quickly lead to an overwhelmed database.

サーバーレス関数はデータベース接続をすぐに使い果たしてしまう

上記の問題への対応として、Prismaはサーバーレス関数で動作するアプリにより良い体験を提供するために、Prisma Accelerateを開発しました。さらに、いくつかのデータベースプロバイダーも独自のデータベースドライバーライブラリを開発しました。これらのドライバーは、従来のTCP接続ではなく、HTTPやWebSocketなどの異なるプロトコルを使用しており、急速に進化するサーバーレス環境に理想的です。

では、これらのサーバーレスドライバーはPrismaにどのように適合するのでしょうか?

Prisma ORMがサーバーレスドライバーをサポート

最初のリリース以来、Prisma ORMの重要な部分を占めてきたのがクエリエンジンです。Rustで書かれたクエリエンジンは、Prisma Clientのクエリを信頼性高く効率的にSQLステートメントに変換し、それを付属のデータベースドライバー経由で実行することを可能にします。このシステムはこれまでうまく機能してきましたが、数ヶ月前、JavaScriptで書かれたサーバーレスデータベースドライバーが特別なエンドポイントとHTTP経由で通信するという新しいデータベースプロバイダーの傾向に気づきました。私たちのチームは、これらの新しいエンドポイントと通信するRustベースの実装を構築することは、途方もない作業になるだろうと認識していました。

A diagram showing Prisma Client using Prisma's Query Engine to open long-lived TCP connections to a database

ドライバーアダプターなしでデータベースと通信する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を利用するコードベースでより多くのプロバイダーを使用できるという、両方の利点を提供できるようになります。

A diagram showing Prisma Client using Prisma's Query Engine translate queries but a separate database driver to communicate.

ドライバーアダプターとサーバーレスデータベースドライバーを使用してデータベースと通信するPrisma Client。

今や、唯一の要件はHTTPまたはWebSocketリクエストを作成する能力であり、Function-as-a-Service (FaaS) デプロイメントを劇的に簡素化します。

Prisma ORMをサーバーレスデータベースドライバーと併用する方法

PrismaをNeonまたはPlanetScaleのサーバーレスデータベースドライバーと連携させるのは簡単です

  1. データベースドライバーを通常どおりセットアップする
  2. 対応するPrismaドライバーアダプターに渡す
  3. そのドライバーアダプターでPrisma Clientを作成する

まず、prisma@prisma/clientを少なくともバージョン5.4.1にインストールします。dotenvもインストールして、.envファイルで定義された環境変数がprocess.env経由でスクリプト内で利用できるようにします。

これで、以下のようにPrisma Clientをセットアップできます。

@neondatabase/serverlessでNeonを使用する

The logo of neon.tech

Neonでデータベースを作成した後、@prisma/adapter-neonドライバーアダプター、Neonのサーバーレスデータベースドライバー@neondatabase/serverless、およびNeonで使用するためのWebSocket接続を設定するためのwsをインストールする必要があります。

次に、Neonデータベース接続文字列.envファイルにコピーされていることを確認してください。接続文字列はpostgres://で始まります。

これで、schema.prismaのデータソースでこの環境変数を参照できるようになります。driverAdaptersプレビュー機能も必ず含めてください。

これで、npx prisma generateを実行してPrisma Clientを再生成し、プレビュー機能をアプリで利用できるようにします。

上記の設定が完了したら、スクリプトを続行できます

  1. パッケージをインポート
  2. Neonサーバーレスデータベースドライバーをセットアップ
  3. Prisma NeonアダプターをNeonサーバーレスデータベースドライバーでインスタンス化
  4. ドライバーアダプターをPrisma Clientインスタンスに渡す

これで、あなたのコードはWebSocket接続やメッセージパイプラインなど、Neonサーバーレスドライバーの組み込みの利点を享受しつつ、Prismaが接続の作成と破棄、エラー処理、型安全性をカバーします。Neonサーバーレスドライバーのサポートについてフィードバックがございましたら、専用のGitHubイシューにコメントを残してください。今後の開発に活用させていただきます。

@planetscale/databaseでPlanetScaleを使用する

The logo of planetscale.com

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プレビュー機能をお試しいただき、NeonPlanetScaleに関するGitHubディスカッション、またはDiscordでフィードバックをお寄せください。

次の投稿をお見逃しなく!

Prismaニュースレターに登録する

© 2025 prisma.dokyumento.jp. All rights reserved.