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

Turso

このガイドでは、Prisma ORM と Turso の使用に関する概念、Turso と他のデータベースプロバイダーとの共通点および相違点について説明し、アプリケーションを Turso と統合するための設定プロセスを案内します。

Turso の Prisma ORM サポートは現在、早期アクセス中です。この GitHub ディスカッションでフィードバックをいただけると幸いです。

Turso とは?

Turso は、libSQLSQLite のオープンソースかつオープン貢献フォーク)をベースにしたエッジホスト型の分散データベースであり、データをアプリケーションにより近づけ、クエリのレイテンシーを最小限に抑えることができます。Turso はリモートサーバーにホストすることも可能です。

警告

Turso のサポートは、Prisma ORM バージョン 5.4.2 以降で早期アクセスとして利用可能です。

他のデータベースプロバイダーとの共通点

libSQL は SQLite と 100% 互換性があります。libSQL は SQLite を拡張し、以下の機能と能力を追加します

  • レプリケーションのサポート
  • 自動バックアップのサポート
  • Linuxカーネルなどの他のプログラムの一部としてTursoを埋め込む機能
  • ユーザー定義関数のサポート
  • 非同期I/Oのサポート

libSQL と SQLite の違いについて詳しく知るには、libSQL Manifesto を参照してください。

Prisma ORM を Turso で使用する際の多くの側面は、他のリレーショナルデータベースで Prisma ORM を使用する場合とまったく同じです。引き続き行うことができます

考慮すべき違い

Turso と SQLite の間にはいくつかの考慮すべき違いがあります。Turso と Prisma ORM の使用を決定する際には、以下の点に注意する必要があります

  • リモートおよび組み込み SQLite データベース。libSQL は HTTP を使用してリモート SQLite データベースに接続します。libSQL はリモートデータベースレプリカと組み込みレプリカもサポートしています。組み込みレプリカを使用すると、プライマリデータベースをアプリケーション内にレプリケートできます。
  • スキーマ変更の作成。libSQL は HTTP を使用してリモートデータベースに接続するため、Prisma Migrate と互換性がありません。ただし、prisma migrate diff を使用してスキーママイグレーションを作成し、Turso の CLI を使用してデータベースに変更を適用できます。

Turso データベースへの接続とクエリの方法

次のセクションでは、Turso データベースを作成し、データベースの資格情報を取得してデータベースに接続する方法について説明します。

データベースのプロビジョニングとデータベース資格情報の取得方法

情報

データベースを管理するために Turso CLI がインストールされていることを確認してください。

既存のデータベースがない場合は、次のコマンドを実行してデータベースをプロビジョニングできます

turso db create turso-prisma-db

上記のコマンドは、あなたの現在地にもっとも近いリージョンにデータベースを作成します。

データベースの接続文字列を取得するには、次のコマンドを実行します

turso db show turso-prisma-db

次に、データベースに接続するための認証トークンを作成します

turso db tokens create turso-prisma-db

認証トークンと接続文字列で .env ファイルを更新します

.env
TURSO_AUTH_TOKEN="eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9..."
TURSO_DATABASE_URL="libsql://turso-prisma-db-user.turso.io"

Turso データベースへの接続方法

まず、driverAdapters プレビュー機能フラグを有効にします

generator client {
provider = "prisma-client-js"
previewFeatures = ["driverAdapters"]
}

datasource db {
provider = "sqlite"
url = "file:./dev.db" // will be ignored
}

Prisma Client を生成する

npx prisma generate

libSQL パッケージ用の Prisma ORM ドライバーアダプターをインストールする

npm install @prisma/adapter-libsql

Prisma Client インスタンスを更新する

import { PrismaClient } from '@prisma/client'
import { PrismaLibSQL } from '@prisma/adapter-libsql'

const adapter = new PrismaLibSQL({
url: `${process.env.TURSO_DATABASE_URL}`,
authToken: `${process.env.TURSO_AUTH_TOKEN}`,
})
const prisma = new PrismaClient({ adapter })

プロジェクトで通常通り、完全な型安全性で Prisma Client を使用できます。

prisma.config.ts でドライバーアダプター経由で Prisma Migrate を使用する (早期アクセス)

v6.6.0 以降、prisma.config.ts ファイルを使用すると、prisma db push を使用してデータベーススキーマに変更を加えることができます。

警告

この機能は v6.6.0早期アクセスとして導入され、以下のコマンドをサポートしています

  • prisma db push
  • prisma db pull
  • prisma migrate diff

prisma migrate devprisma migrate deploy などの他のコマンドも近日中に追加される予定です。

1. LibSQL ドライバーアダプターをインストールする

ターミナルでこのコマンドを実行します

npm install @prisma/adapter-libsql

2. 環境変数を設定する

LibSQL アダプターを設定するには、いくつかのシークレットを .env ファイルに追加する必要があります

  • LIBSQL_DATABASE_URL: Turso データベースインスタンスの接続 URL。
  • LIBSQL_DATABASE_TOKEN: Turso データベースインスタンスのトークン。

これらを .env ファイルに追加するか、別のシークレットストアに保存されている場合は直接使用できます

.env
LIBSQL_DATABASE_URL="..."
LIBSQL_DATABASE_TOKEN="..."

3. Prisma 設定ファイルをセットアップする

プロジェクトに prisma.config.ts ファイルがあることを確認してください。次に、マイグレーションドライバーアダプターPrismaLibSQL を使用するように設定します。

prisma.config.ts
import path from 'node:path'
import { defineConfig } from 'prisma/config'
import { PrismaLibSQL } from '@prisma/adapter-libsql'

// import your .env file
import 'dotenv/config'

type Env = {
LIBSQL_DATABASE_URL: string
LIBSQL_DATABASE_TOKEN: string
}

export default defineConfig<Env>({
earlyAccess: true,
schema: path.join('prisma', 'schema.prisma'),

migrate: {
async adapter(env) {
return new PrismaLibSQL({
url: env.LIBSQL_DATABASE_URL,
authToken: env.LIBSQL_DATABASE_TOKEN,
})
}
}
})

4. データベースを移行する

Prisma Migrate は、prisma.config.ts で提供された設定に基づいて、リモート Turso データベースに対してマイグレーションを実行します。

このワークフローで最初のマイグレーションを作成するには、次のコマンドを実行します

npx prisma db push

組み込み Turso データベースレプリカ

Turso は 組み込みレプリカ をサポートしています。Turso の組み込みレプリカを使用すると、プライマリのリモートデータベースのコピーをアプリケーション内に持つことができます。組み込みレプリカは、ローカルの SQLite データベースと同様に動作します。データベースはアプリケーション内にあるため、データベースクエリは高速になります。

組み込みデータベースレプリカの仕組み

アプリが最初にデータベースへの接続を確立するとき、プライマリデータベースがクエリを実行します。

Embedded Replica: First remote read

Turso は (1) アプリケーション内に組み込みレプリカを作成し、(2) プライマリデータベースからレプリカにデータをコピーしてローカルで利用できるようにします。

Embedded Replica: Remote DB Copy

組み込みレプリカは、後続の読み取りクエリを実行します。libSQL クライアントは sync() メソッドを提供しており、これを呼び出すことで組み込みレプリカのデータが最新の状態に保たれるようにすることができます。

Embedded Replica: Local DB reads

組み込みレプリカを使用すると、データがローカルですぐに利用でき、アクセスも高速になるため、この設定は応答性の高いアプリケーションを保証します。

使い慣れているかもしれないリードレプリカのセットアップと同様に、書き込み操作はプライマリのリモートデータベースに転送され、すべての組み込みレプリカに伝播される前に実行されます。

Embedded Replica: Write operation propagation

  1. 書き込み操作の伝播はデータベースに転送されます。
  2. データベースは、1からの更新をサーバーに応答します。
  3. 書き込み操作はデータベースレプリカに伝播されます。

アプリケーションのデータ要件によって、リモートデータベースと組み込みデータベースレプリカの間でデータをどのくらいの頻度で同期すべきかが決まります。たとえば、ミドルウェア関数(ExpressやFastifyなど)または cron ジョブを使用してデータを同期できます。

リモートデータベースと組み込みレプリカ間でデータを同期する方法

Prisma ORM で組み込みレプリカの使用を開始するには、アプリケーションに libSQL の sync() メソッドを追加します。以下の例は、Express ミドルウェアを使用してデータを同期する方法を示しています。

import express from 'express'
const app = express()

// ... the rest of your application code
app.use(async (req, res, next) => {
await libsql.sync()
next()
})

app.listen(3000, () => console.log(`Server ready at http://localhost:3000`))

Prisma Client 拡張機能としても実装できます。以下の例は、作成、更新、または削除操作が実行された後の自動同期を示しています。

const prisma = new PrismaClient().$extends({
query: {
$allModels: {
async $allOperations({ operation, model, args, query }) {
const result = await query(args)

// Synchronize the embedded replica after any write operation
if (['create', 'update', 'delete'].includes(operation)) {
await libsql.sync()
}

return result
}
}
}
})
© 2025 prisma.dokyumento.jp. All rights reserved.