Cloudflareは、2017年のWorkersの導入以来、エッジコンピューティングの分野を開拓してきました。D1により、Cloudflareは最近、ネイティブのサーバーレスデータベースをリリースしました。Prisma ORMを使ってD1と対話できるようになることをお知らせできることを嬉しく思います!

D1でデータベースをエッジに
Cloudflare Workersのようなエッジ関数は、世界中に分散された軽量なサーバーレスコンピューティングの一種です。これにより、アプリケーションをエンドユーザーのできるだけ近くにデプロイして実行できます。
D1は、エッジ環境向けのCloudflareのネイティブなサーバーレスデータベースです。SQLiteをベースにしており、Cloudflareでアプリケーションをデプロイする際に使用できます。D1は2022年に最初にリリースされました。
Cloudflare WorkerやD1データベースがどこで実行されるかを指定する必要はありません。それらは必要な場所ならどこでも実行されます。

Cloudflareの地理的分散とコンピューティングおよびデータをアプリケーションユーザーに近づけるという原則に従い、D1は自動読み取りレプリケーションをサポートしています。これは、データベースがどれだけのクエリを受け取り、どこから受け取っているかに基づいて、データベースインスタンスの数と読み取り専用レプリカの場所を動的に管理します。
これにより、読み取りクエリは、クエリが発行された場所から最も近いD1インスタンスに対して実行されます。
Prisma ORMを他のデータベースプロバイダーと組み合わせて読み取りレプリカを使用することも可能ですが、通常はRead Replica Client拡張機能を使用する必要があります。D1を使用する場合、読み取りレプリカは専用のクライアント拡張機能なしで最初からサポートされています。
一方、書き込み操作の場合、変更をすべての読み取りレプリカに伝播させ、データの一貫性を確保するため、クエリは依然として単一のプライマリインスタンスに送信されます。
Prisma ORMがD1をサポート開始 🚀 (プレビュー)
Prismaでは、Cloudflareがアプリケーションの構築とデプロイの未来を築く最前線にいると信じています。
Data DXの改善におけるパートナーとしてのCloudflareについて、私たちの考え方については、このブログ記事で詳しく知ることができます: Developer Experience Redefined: Prisma & Cloudflare Lead the Way to Data DX
D1のサポートは、GitHub上でPrisma ORMに対する最も人気のある機能リクエストの1つでした。
テクノロジープロバイダーとしてのCloudflareを強く信じている当社は、Cloudflare Workers(およびPages)内でPrisma ORMを使用してD1データベースにアクセスできるようになったことをお知らせできることを嬉しく思います。
この機能は現在プレビュー版であるドライバーアダプターに基づいているため、D1サポートもプレビュー版であるとみなしています。
Prisma ORMとD1を始める
以下では、Prisma ORMを介してアクセスされるD1データベースを備えたCloudflare Workerを、完全にゼロからセットアップしデプロイするためのステップバイステップの指示を説明します。
このリリース時点では、Prisma MigrateはD1とまだ完全に互換性がありません。このチュートリアルでは、D1のマイグレーションシステムと
prisma migrate diff
コマンドを組み合わせてマイグレーションを生成および実行します。
前提条件
- お使いのマシンにNode.jsとnpmがインストールされていること
- Cloudflareアカウント
1. Cloudflare Workerを作成する
最初のステップとして、npm create
を使用してCloudflare Workerのプレーンバージョンをブートストラップします(Cloudflareのhello-world
テンプレートを使用)。ターミナルで次のコマンドを実行します
これによりCLIウィザードが起動します。質問が表示されるたびにReturnキーを押して、すべての**デフォルト**オプションを選択します。
ウィザードの最後に、ブラウザに「Hello World」とシンプルに表示する、デプロイされたCloudflare Workerがドメインhttps://prisma-d1-example.USERNAME.workers.dev
に存在することになります。
2. Prisma ORMを初期化する
Workerが配置されたら、Prisma ORMをセットアップしましょう。
まず、プロジェクトディレクトリに移動してPrisma CLIをインストールします。
次に、Prisma ClientパッケージとD1用のドライバーアダプターをインストールします。
最後に、以下のコマンドを使用してPrisma ORMに必要なファイルをブートストラップします。
このコマンドは2つのことを実行しました。
- Prismaスキーマファイルを含む
prisma
という新しいディレクトリを作成しました。 - 通常、Prisma CLIによって読み取られる環境変数を設定するために使用される
.env
ファイルを作成しました。
このチュートリアルでは、Prisma ORMとD1間の接続はバインディングを介して行われるため、.env
ファイルは必要ありません。このバインディングの設定手順は次のステップで説明します。
現在プレビュー版であるドライバーアダプター機能を使用するため、generator
ブロックのpreviewFeatures
フィールドを介して明示的に有効にする必要があります。
schema.prisma
ファイルを開き、generator
ブロックを次のように調整します。
3. D1データベースを作成する
このステップでは、D1データベースをセットアップします。これには一般的に2つのアプローチがあります。CloudflareダッシュボードUIを使用するか、wrangler
CLIを使用する方法です。このチュートリアルではCLIを使用します。
ターミナルを開き、次のコマンドを実行します。
すべてがうまくいけば、次のような出力が表示されるはずです。
これで、CloudflareアカウントにCloudflare Workerへのバインディングを持つD1データベースが作成されました。
コマンド出力の最後の部分をコピーして、wrangler.toml
ファイルに貼り付けます。次のような表示になるはずです。
上記のコードスニペットにある__YOUR_D1_DATABASE_ID__
は、ご自身のD1インスタンスのデータベースIDに置き換える必要があるプレースホルダーであることに注意してください。このIDをターミナル出力から取得できなかった場合は、Cloudflareダッシュボードでも、またはターミナルでnpx wrangler d1 info prisma-demo-db
を実行することでも見つけることができます。
次に、Prisma ORMを使用してD1にクエリを送信できるように、データベースにデータベーステーブルを作成します。
4. データベースにテーブルを作成する
D1には、wrangler d1 migrate
コマンドを介した独自のマイグレーションシステムが付属しています。このマイグレーションシステムは、スキーマ変更用のSQLステートメントを生成するツールを提供するPrisma CLIとうまく連携します。したがって、次のことができます。
- D1のネイティブマイグレーションシステムを使用して、D1インスタンスにマイグレーションファイルを作成および適用する
- Prisma CLIを使用して、スキーマ変更用のSQLステートメントを生成する
以下では、D1のマイグレーションシステムとPrisma CLIの両方を使用して、データベースに対してマイグレーションを作成および実行します。
まず、wrangler
CLIを使用して新しいマイグレーションを作成します。
コマンドがmigrations
という新しいフォルダを作成できるか尋ねられたら、Returnキーを押して確認します。
このコマンドは、migrations
という新しいディレクトリと、その中に0001_create_user_table.sql
という空のファイルを作成しました。
次に、User
テーブルを作成するSQLステートメントをそのファイルに追加する必要があります。schema.prisma
ファイルを開き、以下のUser
モデルを追加します。
次に、上記のUser
モデルと同等のUser
テーブルを作成するSQLステートメントを生成するために、ターミナルで次のコマンドを実行します。
これにより、以前のマイグレーションファイルmigrations/0001_ceate_user_table.sql
に新しいUser
テーブルを作成するSQLステートメントが保存されます。内容は次のとおりです。
次に、wrangler d1 migrations apply
コマンドを使用して、このSQLステートメントをD1に送信する必要があります。このコマンドは2つのオプションを受け入れます。
--local
: D1の**ローカル**バージョンに対してステートメントを実行します。このD1のローカルバージョンは、プロジェクトの.wrangler/state
ディレクトリに配置されるSQLiteデータベースファイルです。このアプローチは、ローカルマシンでWorkerを開発およびテストしたい場合に役立ちます。詳細については、Cloudflareドキュメントを参照してください。--remote
: D1の**リモート**バージョンに対してステートメントを実行します。このバージョンは、デプロイされたCloudflare Workersによって使用されます。詳細については、Cloudflareドキュメントを参照してください。
このチュートリアルでは、両方を行います。Workerをローカルでテストし、その後デプロイします。したがって、両方のコマンドを実行する必要があります。ターミナルを開き、次のコマンドを貼り付けます。
まず、**ローカル**データベースに対してスキーマ変更を実行します。
次に、**リモート**データベースに対して。
マイグレーションを適用するかどうかの確認を求められたら、両方ともReturnキーを押します。
これで、ローカルおよびリモートの両方のD1インスタンスにUser
テーブルが含まれるようになりました。
Workerが実行されたらクエリできるダミーデータも作成しましょう。今回は、SQLステートメントをファイルに保存せずに実行します。
再度、まず**ローカル**データベースに対してコマンドを実行します。
最後に、**リモート**データベースに対して実行します。
これで、ローカルとリモートの両方のデータベースインスタンスにダミーレコードが作成されました。ローカルのSQLiteファイルは.wrangler/state
にあり、リモートのファイルはCloudflareダッシュボードで確認できます。
5. Workerからデータベースをクエリする
Prisma ORMを使用してWorkerからデータベースをクエリするには、次の操作が必要です。
Env
インターフェースにDB
を追加します。PrismaD1
ドライバーアダプターを使用してPrismaClient
をインスタンス化します。- Prisma Clientを使用してクエリを送信し、結果を返します。
src/index.ts
を開き、内容全体を以下に置き換えます。
Workerを実行する前に、次のコマンドでPrisma Clientを生成する必要があります。
6. Workerをローカルで実行する
データベースクエリが配置され、Prisma Clientが生成されたら、Workerをローカルで実行できます。
これで、ブラウザでhttps://:8787
を開くと、データベースクエリの結果を確認できます。
7. Workerをデプロイする
Workerをデプロイするには、次のコマンドを実行します。
以前と同様に、デプロイされたWorkerはhttps://prisma-d1-example.USERNAME.workers.dev
を介してアクセスできます。ブラウザでそのURLに移動すると、リモートのD1データベースからクエリされた以下のデータが表示されるはずです。
おめでとうございます!D1をデータベースとして使用し、Prisma ORMを介してクエリを実行するCloudflare Workerをデプロイしました🎉
今すぐ試す
Prisma ORMでの新しいD1サポートについて、皆様のご意見をお聞かせください!ぜひお試しいただき、GitHubまたはDiscordでフィードバックをお寄せください。Happy coding ✌️
次回の記事をお見逃しなく!
Prismaニュースレターに登録する