データベースドライバ
デフォルトの組み込みドライバ
Prisma Client のコンポーネントの1つに クエリエンジンがあります。クエリエンジンは、Prisma Client のクエリを SQL ステートメントに変換する役割を担っています。追加の設定を必要としない組み込みドライバを使用して、TCP 経由でデータベースに接続します。
v6.7.0以降、Prisma ORM は queryCompiler
プレビュー機能を備えています。
有効にすると、Prisma Client は Rustベースのクエリエンジンバイナリなしで生成されます。:
generator client {
provider = "prisma-client-js"
previewFeatures = ["queryCompiler", "driverAdapters"]
}
なお、
queryCompiler
と同時にドライバアダプタープレビュー機能が必要です。
ドライバアダプター
Prisma Client は、JavaScript データベースドライバを使用して、ドライバアダプターを介してデータベースに接続し、クエリを実行できます。アダプターは、Prisma Client と JavaScript データベースドライバ間の翻訳者として機能します。
Prisma Client は、クエリエンジンを使用して Prisma Client クエリを SQL に変換し、生成された SQL クエリを JavaScript データベースドライバ経由で実行します。
ドライバアダプターには2つの異なるタイプがあります
注: ドライバアダプターは、Prisma ORM を使用するアプリケーションのエッジデプロイを可能にします。
データベースドライバアダプター
Prisma Client から Node.js ベースのドライバを使用して、データベースドライバアダプターを介してデータベースに接続できます。Prisma は以下のデータベースドライバアダプターをサポートしています
- PostgreSQL
- SQLite
better-sqlite3
libSQL
(Turso)
- MSSQL
サーバーレスドライバアダプター
Neon や PlanetScale などのデータベースプロバイダは、TCP 以外のプロトコル(HTTP や WebSocket など)を使用してデータベースに接続することを可能にしています。これらのデータベースドライバは、サーバーレスおよびエッジ環境でデータベースに接続するために最適化されています。
Prisma ORM は以下のサーバーレスドライバアダプターをサポートしています
- Neon (および Vercel Postgres)
- PlanetScale
- Cloudflare D1
コミュニティで管理されているデータベースドライバアダプター
ご使用のデータベース用の独自のドライバアダプターを構築することもできます。以下は、コミュニティで管理されているドライバアダプターのリストです
ドライバアダプターの使用方法
この機能を使用するには
-
スキーマの
previewFeatures
ブロックを更新して、driverAdapters
プレビュー機能を含めますgenerator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
} -
Prisma Clientを生成する
npx prisma generate
-
特定のデータベースプロバイダで特定のドライバアダプターを使用する方法については、以下のページを参照してください
ドライバアダプターの使用に関する注意点
v6.6.0での新しいドライバアダプターAPI
v6.6.0で、ドライバアダプターを使用する際のPrisma Clientのインスタンス化を簡素化したバージョンを導入しました。ドライバ/クライアントのインスタンスを作成してドライバアダプターに渡す必要がなくなり、代わりにドライバアダプターを直接作成できます(必要に応じてドライバのオプションを渡すこともできます)。
@prisma/adapter-libsql
アダプターを使用する例を次に示します
6.6.0より前
以前のバージョンのPrisma ORMでは、まずドライバ自体をインスタンス化し、そのインスタンスを使用してPrismaドライバアダプターを作成する必要がありました。以下に、LibSQL 用の@libsql/client
ドライバを使用する例を示します
import { createClient } from '@libsql/client'
import { PrismaLibSQL } from '@prisma/adapter-libsql'
import { PrismaClient } from '@prisma/client'
// Old way of using driver adapters (before 6.6.0)
const driver = createClient({
url: env.LIBSQL_DATABASE_URL,
authToken: env.LIBSQL_DATABASE_TOKEN,
})
const adapter = new PrismaLibSQL(driver)
const prisma = new PrismaClient({ adapter })
6.6.0以降
6.6.0のリリース以降、お好みのJSネイティブドライバのオプションを指定して、ドライバアダプターを直接インスタンス化します。
import { PrismaLibSQL } from '@prisma/adapter-libsql'
import { PrismaClient } from '../prisma/prisma-client'
const adapter = new PrismaLibSQL({
url: env.LIBSQL_DATABASE_URL,
authToken: env.LIBSQL_DATABASE_TOKEN,
})
const prisma = new PrismaClient({ adapter })
ドライバアダプターはPrismaスキーマから接続文字列を読み取りません
Prisma ORM の組み込みドライバを使用する場合、接続文字列は Prisma スキーマのdatasource
ブロックのurl
フィールドから読み取られます。
一方、ドライバアダプターを使用する場合、ドライバアダプターが最初に設定されるときに、接続文字列をアプリケーションコードで提供する必要があります。以下に、pg
ドライバと@prisma/adapter-pg
アダプターの場合の例を示します。
import { PrismaClient } from '@prisma/client'
import { PrismaPg } from '@prisma/adapter-pg'
const adapter = new PrismaPg({ connectionString: env.DATABASE_URL })
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,
},
},
// ...
})