Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Prisma Postgres データベースをセットアップして使う

最終更新 Markdown で表示Agent セットアップ

Prisma Postgres は、マネージドのサーバーレス PostgreSQL データベースです。コネクションプーリング、キャッシュ、リアルタイムサブスクリプション、クエリ最適化の推奨などの機能をサポートします。

このチュートリアルでは、次の内容を学びます。

  • Prisma ORM を使って Cloudflare Workers プロジェクトをセットアップする
  • Prisma CLI から Prisma Postgres インスタンスを作成する
  • Prisma Postgres でデータをモデル化し、マイグレーションを実行する
  • Workers からデータベースをクエリする
  • Worker を Cloudflare にデプロイする

前提条件

このガイドを進めるには、次のものが必要です。

  • Node.js v18.18 以上がインストールされていること
  • 有効な Cloudflare アカウント
  • コマンドラインインターフェース(CLI)アプリケーションのインストールと利用の基本知識

1. 新しい Worker プロジェクトを作成する

まず 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 には、シンプルなリクエストハンドラーが入っています。

src/index.tsts
export default {
	async fetch(request, env, ctx): Promise<Response> {
		return new Response("Hello World!");
	},
} satisfies ExportedHandler<Env>;

2. プロジェクトに Prisma をセットアップする

このステップでは、CLI を使って Prisma ORM と Prisma Postgres データベースをセットアップします。続けて、データベースにテーブルを作り、クエリ用の Prisma クライアントを生成するヘルパースクリプトを作成して実行します。

2.1. 必要な依存関係をインストールする

Prisma CLI を開発用依存関係としてインストールします。

npm i -D prisma

Prisma Postgres では Prisma Accelerate クライアント拡張 が必要なので、インストールします。

npm i @prisma/extension-accelerate

.dev.vars から環境変数を読み込むために、dotenv-cli パッケージ をインストールします。

npm i -D dotenv-cli

2.2. Prisma Postgres データベースを作成し、Prisma を初期化する

アプリケーションで Prisma を初期化します。

npx prisma@latest init --db

まだ Prisma Data Platform のアカウントがない場合、またはログインしていない場合は、利用可能な認証プロバイダーのいずれかでログインするよう求められます。ブラウザが開き、ログインまたはアカウント作成ができます。完了したら CLI に戻ります。

ログイン後(またはすでにログイン済みの場合)、CLI でプロジェクト名とデータベースのリージョンを選びます。

コマンドが終了すると、次のものが作成されています。

  • Platform Console 上のプロジェクトと、その中の Prisma Postgres データベースインスタンス
  • データベーススキーマを定義する schema.prisma が入った prisma フォルダー
  • プロジェクトルートの .env ファイル。Prisma Postgres のデータベース URL DATABASE_URL=<your-prisma-postgres-database-url> が入っています

Cloudflare Workers は .env ファイルをサポートしません。作成された .env の代わりに、.dev.vars というファイルを使います。

2.3. 環境変数を用意する

アプリケーションルートの .env ファイルを .dev.vars にリネームします。

mv .env .dev.vars

2.4. データベーススキーマの変更を適用する

prisma フォルダーの schema.prisma を開き、次の User モデルをデータベースに追加します。

prisma/schema.prismaprisma
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.jsonscripts セクションに、次のヘルパースクリプトを追加します。

package.jsonjson
"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 データベースに接続されています。

3. アプリケーションを開発する

src/index.ts を次のコードに置き換えます。

src/index.tsts
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 dev

https://localhost:8787 を開くと、次のような出力が表示されます。

Number of users in the database: 1

ページを更新するたびに新しいユーザーが作成されます。表示される数字は、データベース内のユーザー総数なので、更新のたびに 1 ずつ増えます。

4. アプリケーションを Cloudflare にデプロイする

アプリケーションを 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 deploy

wrangler CLI がアプリケーションをバンドルしてアップロードします。

まだログインしていない場合、wrangler CLI はブラウザを開き、Cloudflare ダッシュボードへのログインを求めます。

デプロイが完了したら、デプロイ出力に表示されるライブ URL(例: https://{PROJECT_NAME}.workers.dev)を開いて確認します。問題がある場合は、シークレットが正しく追加されているか、デプロイログにエラーがないかを確認してください。

次のステップ

Prisma Postgres と Cloudflare Workers でシンプルなアプリケーションを構築し、デプロイできました。

アプリケーションをさらに拡張するには、次を試してください。

Cloudflare Workers と Prisma Postgres でリアルタイムアプリケーションを作る方法は、このガイド を参照してください。

役に立ちましたか?