メインコンテンツへスキップ

データベースドライバ

デフォルトの組み込みドライバ

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と同時にドライバアダプタープレビュー機能が必要です。

Query flow from the user application to the database with Prisma Client

ドライバアダプター

Prisma Client は、JavaScript データベースドライバを使用して、ドライバアダプターを介してデータベースに接続し、クエリを実行できます。アダプターは、Prisma Client と JavaScript データベースドライバ間の翻訳者として機能します。

Prisma Client は、クエリエンジンを使用して Prisma Client クエリを SQL に変換し、生成された SQL クエリを JavaScript データベースドライバ経由で実行します。

Query flow from the user application to the database using Prisma Client and driver adapters

ドライバアダプターには2つの異なるタイプがあります

: ドライバアダプターは、Prisma ORM を使用するアプリケーションのエッジデプロイを可能にします。

データベースドライバアダプター

Prisma Client から Node.js ベースのドライバを使用して、データベースドライバアダプターを介してデータベースに接続できます。Prisma は以下のデータベースドライバアダプターをサポートしています

サーバーレスドライバアダプター

Neon や PlanetScale などのデータベースプロバイダは、TCP 以外のプロトコル(HTTP や WebSocket など)を使用してデータベースに接続することを可能にしています。これらのデータベースドライバは、サーバーレスおよびエッジ環境でデータベースに接続するために最適化されています。

Prisma ORM は以下のサーバーレスドライバアダプターをサポートしています

コミュニティで管理されているデータベースドライバアダプター

ご使用のデータベース用の独自のドライバアダプターを構築することもできます。以下は、コミュニティで管理されているドライバアダプターのリストです

ドライバアダプターの使用方法

この機能を使用するには

  1. スキーマのpreviewFeaturesブロックを更新して、driverAdaptersプレビュー機能を含めます

    generator client {
    provider = "prisma-client-js"
    previewFeatures = ["driverAdapters"]
    }
  2. Prisma Clientを生成する

    npx prisma generate
  3. 特定のデータベースプロバイダで特定のドライバアダプターを使用する方法については、以下のページを参照してください

ドライバアダプターの使用に関する注意点

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 add db@./src/generated/client

これで、生成されたクライアントをdbを使用して参照できるようになります!

import { PrismaClient } from 'db'

const client = new PrismaClient()

ドライバアダプターと特定のフレームワーク

Nuxt

Nuxtにドライバアダプターを使用してエッジファンクション環境にデプロイする場合、そのままでは動作しませんが、nitro.experimental.wasm設定オプションを追加することで解決します

export default defineNuxtConfig({
// ...
nitro: {
// ...
experimental: {
wasm: true,
},
},
// ...
})
© . All rights reserved.