データベースドライバ
デフォルトの組み込みドライバ
Prisma Clientのコンポーネントの1つは、Query Engineです。Query Engineは、Prisma ClientクエリをSQLステートメントに変換する役割を担っています。追加のセットアップを必要としない組み込みドライバを使用して、TCP経由でデータベースに接続します。
ドライバアダプター
Prisma Clientは、ドライバアダプターを使用してJavaScriptデータベースドライバを使用してデータベースに接続し、クエリを実行できます。アダプターは、Prisma ClientとJavaScriptデータベースドライバ間の翻訳者として機能します。
Prisma ClientはQuery Engineを使用して、Prisma ClientクエリをSQLに変換し、生成されたSQLクエリをJavaScriptデータベースドライバ経由で実行します。
ドライバアダプターには2つの異なるタイプがあります
注:ドライバアダプターは、Prisma ORMを使用するアプリケーションのエッジデプロイメントを可能にします。
データベースドライバアダプター
データベースドライバアダプターを使用して、Prisma ClientからNode.jsベースのドライバを使用してデータベースに接続できます。Prismaは、次のデータベースドライバアダプターをメンテナンスしています
サーバーレスドライバアダプター
NeonやPlanetScaleなどのデータベースプロバイダーでは、HTTPやWebSocketsなどのTCP以外のプロトコルを使用してデータベースに接続できます。これらのデータベースドライバは、サーバーレスおよびエッジ環境でデータベースに接続するために最適化されています。
Prisma ORMは、次のサーバーレスドライバアダプターをメンテナンスしています
- Neon(およびVercel Postgres)
- PlanetScale
- Cloudflare D1
コミュニティ管理のデータベースドライバアダプター
使用しているデータベース用の独自のドライバアダプターを構築することもできます。以下は、コミュニティ管理のドライバアダプターのリストです
ドライバアダプターの使用方法
この機能を使用するには
-
スキーマの
previewFeatures
ブロックを更新して、driverAdapters
プレビュー機能を含めますgenerator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
} -
Prisma Clientを生成
npx prisma generate
-
特定のデータベースプロバイダーで特定のドライバアダプターを使用する方法の詳細については、次のページを参照してください
ドライバアダプターの使用に関する注意
ドライバアダプターはPrismaスキーマから接続文字列を読み取りません
Prisma ORMの組み込みドライバを使用する場合、接続文字列はPrismaスキーマのdatasource
ブロックのurl
フィールドから読み取られます。
一方、ドライバアダプターを使用する場合、接続文字列は、ドライバアダプターが最初にセットアップされたときにアプリケーションコードで提供する必要があります。以下は、pg
ドライバと@prisma/adapter-pg
アダプターでこれを行う方法です
import { PrismaClient } from '@prisma/client'
import { PrismaPg } from '@prisma/adapter-pg'
import { Pool } from 'pg'
const pool = new Pool({ connectionString: env.DATABASE_URL })
const adapter = new PrismaPg(pool)
const prisma = new PrismaClient({ adapter })
具体的なセットアップ手順については、使用しているドライバアダプターのドキュメントを参照してください。
ドライバアダプターとカスタム出力パス
Prisma 5.9.0以降、ドライバアダプタープレビュー機能をPrisma Clientのカスタム出力パスとともに使用する場合、相対パスを使用してPrisma Clientを参照することはできません。
Prismaスキーマでoutput
が../src/generated/client
に設定されていると仮定しましょう
generator client {
provider = "prisma-client-js"
output = "../src/generated/client"
}
すべきでないことは、そのパスを相対的に参照することです
// what not to do!
import { PrismaClient } from './src/generated/client'
const client = new PrismaClient()
代わりに、リンクされた依存関係を使用する必要があります。
- npm
- pnpm
- yarn
npm add db@./src/generated/client
pnpm add db@link:./src/generated/client
yarn add db@link:./src/generated/client
これで、生成されたクライアントをdb
を使用して参照できるようになります!
import { PrismaClient } from 'db'
const client = new PrismaClient()
ドライバアダプターと特定のフレームワーク
Nuxt
Nuxtでドライバアダプターをエッジ関数環境にデプロイすることは、すぐに使用できるわけではありませんが、nitro.experimental.wasm
構成オプションを追加すると修正されます
export default defineNuxtConfig({
// ...
nitro: {
// ...
experimental: {
wasm: true,
},
},
// ...
})
このサンプルプロジェクトを参照してください。これは、Cloudflare Pagesにデプロイできる完全な例です。