Prisma Postgres ↗ は、マネージドのサーバーレス PostgreSQL データベースです。コネクションプーリング、キャッシュ、リアルタイムサブスクリプション、クエリ最適化の推奨などの機能をサポートします。
このチュートリアルでは、次の内容を学びます。
- Prisma ORM ↗ を使って Cloudflare Workers プロジェクトをセットアップする
- Prisma CLI から Prisma Postgres インスタンスを作成する
- Prisma Postgres でデータをモデル化し、マイグレーションを実行する
- Workers からデータベースをクエリする
- Worker を Cloudflare にデプロイする
このガイドを進めるには、次のものが必要です。
- Node.js
v18.18以上がインストールされていること - 有効な Cloudflare アカウント ↗
- コマンドラインインターフェース(CLI)アプリケーションのインストールと利用の基本知識
まず C3 を使い、コマンドラインで Worker プロジェクトを作成します。
npm create cloudflare@latest prisma-postgres-worker -- --type=hello-world --ts=true --git=true --deploy=false次にプロジェクトへ移動します。
cd ./prisma-postgres-worker最初の src/index.ts には、シンプルなリクエストハンドラーが入っています。
export default {
async fetch(request, env, ctx): Promise<Response> {
return new Response("Hello World!");
},
} satisfies ExportedHandler<Env>;このステップでは、CLI を使って Prisma ORM と Prisma Postgres データベースをセットアップします。続けて、データベースにテーブルを作り、クエリ用の Prisma クライアントを生成するヘルパースクリプトを作成して実行します。
Prisma CLI を開発用依存関係としてインストールします。
npm i -D prismayarn add -D prismapnpm add -D prismabun add -d prismaPrisma Postgres では Prisma Accelerate クライアント拡張 ↗ が必要なので、インストールします。
npm i @prisma/extension-accelerateyarn add @prisma/extension-acceleratepnpm add @prisma/extension-acceleratebun add @prisma/extension-accelerate.dev.vars から環境変数を読み込むために、dotenv-cli パッケージ ↗ をインストールします。
npm i -D dotenv-cliyarn add -D dotenv-clipnpm add -D dotenv-clibun add -d dotenv-cliアプリケーションで Prisma を初期化します。
npx prisma@latest init --dbyarn dlx prisma@latest init --dbpnpx prisma@latest init --dbまだ Prisma Data Platform ↗ のアカウントがない場合、またはログインしていない場合は、利用可能な認証プロバイダーのいずれかでログインするよう求められます。ブラウザが開き、ログインまたはアカウント作成ができます。完了したら CLI に戻ります。
ログイン後(またはすでにログイン済みの場合)、CLI でプロジェクト名とデータベースのリージョンを選びます。
コマンドが終了すると、次のものが作成されています。
- Platform Console ↗ 上のプロジェクトと、その中の Prisma Postgres データベースインスタンス
- データベーススキーマを定義する
schema.prismaが入ったprismaフォルダー - プロジェクトルートの
.envファイル。Prisma Postgres のデータベース URLDATABASE_URL=<your-prisma-postgres-database-url>が入っています
Cloudflare Workers は .env ファイルをサポートしません。作成された .env の代わりに、.dev.vars というファイルを使います。
アプリケーションルートの .env ファイルを .dev.vars にリネームします。
mv .env .dev.varsprisma フォルダーの schema.prisma を開き、次の User モデルをデータベースに追加します。
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id Int @id @default(autoincrement())
email String
name String
}次に、package.json の scripts セクションに、次のヘルパースクリプトを追加します。
"scripts": {
"migrate": "dotenv -e .dev.vars -- npx prisma migrate dev",
"generate": "dotenv -e .dev.vars -- npx prisma generate --no-engine",
"studio": "dotenv -e .dev.vars -- npx prisma studio",
// Additional worker scripts...
}マイグレーションスクリプトを実行して、変更をデータベースに適用します。
npm run migrate求められたら、マイグレーション名を入力します(例: init)。
これらの手順が終わると、Prisma ORM のセットアップが完了し、Prisma Postgres データベースに接続されています。
src/index.ts を次のコードに置き換えます。
import { PrismaClient } from "@prisma/client/edge";
import { withAccelerate } from "@prisma/extension-accelerate";
export interface Env {
DATABASE_URL: string;
}
export default {
async fetch(request, env, ctx): Promise<Response> {
const path = new URL(request.url).pathname;
if (path === "/favicon.ico")
return new Response("Resource not found", {
status: 404,
headers: {
"Content-Type": "text/plain",
},
});
const prisma = new PrismaClient({
datasourceUrl: env.DATABASE_URL,
}).$extends(withAccelerate());
const user = await prisma.user.create({
data: {
email: `Jon${Math.ceil(Math.random() * 1000)}@gmail.com`,
name: "Jon Doe",
},
});
const userCount = await prisma.user.count();
return new Response(`\
Created new user: ${user.name} (${user.email}).
Number of users in the database: ${userCount}.
`);
},
} satisfies ExportedHandler<Env>;開発サーバーを起動します。
npm run devhttps://localhost:8787 ↗ を開くと、次のような出力が表示されます。
Number of users in the database: 1ページを更新するたびに新しいユーザーが作成されます。表示される数字は、データベース内のユーザー総数なので、更新のたびに 1 ずつ増えます。
アプリケーションを Cloudflare にデプロイするときは、ローカルの .dev.vars で定義している DATABASE_URL 環境変数にアクセスできる必要があります。npx wrangler secret put コマンドで、デプロイ環境に DATABASE_URL をアップロードできます。
npx wrangler secret put DATABASE_URL求められたら、DATABASE_URL の値(.dev.vars から)を貼り付けます。Wrangler CLI でログイン済みなら、新しい Worker を作成するかどうかを尋ねるプロンプトが表示されます。「yes」を選んで確定します。
✔ There doesn't seem to be a Worker called "prisma-postgres-worker". Do you want to create a new Worker with that name and add secrets to it? … yes次に、次のコマンドでプロジェクトを Cloudflare Workers にデプロイします。
npm run deploywrangler CLI がアプリケーションをバンドルしてアップロードします。
まだログインしていない場合、wrangler CLI はブラウザを開き、Cloudflare ダッシュボードへのログインを求めます。
デプロイが完了したら、デプロイ出力に表示されるライブ URL(例: https://{PROJECT_NAME}.workers.dev)を開いて確認します。問題がある場合は、シークレットが正しく追加されているか、デプロイログにエラーがないかを確認してください。
Prisma Postgres と Cloudflare Workers でシンプルなアプリケーションを構築し、デプロイできました。
アプリケーションをさらに拡張するには、次を試してください。
- クエリに キャッシュ ↗ を追加する
- Prisma Postgres のドキュメント ↗ を読む
Cloudflare Workers と Prisma Postgres でリアルタイムアプリケーションを作る方法は、このガイド ↗ を参照してください。