Skip to main content
Prisma ORM は、宣言的なスキーマ、移行ツール (Prisma Migrate)、自動生成される型安全なクライアントを備えた TypeScript 向けの ORM です。このガイドでは、Prisma を ClickHouse Managed Postgres に接続し、移行によってテーブルを作成したうえで、スクリプトと小規模な HTTP エンドポイントからそのテーブルにクエリを実行します。 このガイドでは、現行の安定版リリースである Prisma ORM 7 (7.10.0 で動作確認済み) を使用します。

前提条件

  • Node.js 20.19、22.12、または 24 以降
  • ClickHouse Managed Postgres サービス
  • データベースを作成するための psql。CREATE DATABASE ステートメントは SQL コンソール で実行することもできます。
  • macOS の場合: Prisma Migrate を実行するための Docker (移行を実行するを参照)

ClickHouse Managed Postgres サービスを作成する

ClickHouse Cloud コンソールで New service をクリックし、Postgres を選択します。インスタンスは数分で利用可能になります。詳しい手順については、クイックスタートを参照してください。

接続情報を取得する

サービスの左サイドバーで Connect をクリックします。表示されるモーダルには、ユーザー名、パスワード、サーバー、ポートのほか、そのまま使える接続文字列が表示されます。 Prisma にはデータベースと通信するコンポーネントが 2 つあるため、このガイドでは 2 種類の接続を使用します。
  • アプリケーション (Prisma Client) は、ポート 6432 で PgBouncer 経由 で接続します。PgBouncer が接続をプールするため、多数のアプリケーションプロセスやサーバーレスインスタンスで少数の Postgres バックエンドを共有できます。
  • Prisma CLI (Prisma Migrate) は、ポート 5432 で 直接 接続します。Prisma Migrate は実行中にセッションレベルのアドバイザリロックを取得します。PgBouncer のトランザクションプーリングモードでは、このロックがプールされたバックエンド上に保持されたまま、そのバックエンドが他のクライアントにも割り当てられるため、後続の移行がこのロックによってブロックされてしまいます。
モーダル上部で Directly と via PgBouncer を切り替えると、それぞれのポートを確認できます。サーバーと認証情報はどちらの接続でも共通で、異なるのはポートだけです。 via PgBouncer を選択した状態で Download CA certificate をクリックします。Directly を選択している場合は、先に Use SSL をオンにするとボタンが表示されます。ファイル名は <service-name>-ca-certificate.pem です。このファイルは Settings → CA Certificate からも取得できます。この証明書はインスタンスごとに固有で、sslmode=verify-full で接続する際に使用します。これにより、接続先が自分のサーバーであることが検証されます。

プロジェクトをセットアップする

TypeScript プロジェクトを作成し、Prisma CLI、Prisma Client、node-postgres ドライバーアダプター、dotenv をインストールします。
prisma@7 と @prisma/client@7 は、バージョンを明示してインストールしてください。本ガイドの執筆時点では、prisma の npm latest タグは Prisma 8 のリリース候補版を指しており、本ガイドとはセットアップ方法が異なります。
tsconfig.json を作成します。
既存のアプリに追加する場合mkdir、npm init、tsconfig.json の手順は不要です。プロジェクト内で npm install tsx @types/pg prisma@7 --save-dev と npm install @prisma/client@7 @prisma/adapter-pg pg dotenv を実行してから、Prisma の初期化に進んでください。

Prisma を初期化する

1

prisma init を実行する

このコマンドを実行すると、prisma/schema.prisma と Prisma の設定ファイル prisma7.config.ts が作成され、.env にはプレースホルダーの DATABASE_URL が、.gitignore には生成されたクライアントが追加されます (これらのファイルが存在しない場合は新規作成されます) 。あわせて、AI コーディングエージェント向けの Prisma スキルも追加されます。Prisma 7.10 以降では、Prisma 8 のフォーマットとの競合を避けるため、設定ファイル名が prisma7.config.ts になっています。
2

CA 証明書を追加する

ダウンロードした CA 証明書をプロジェクトのルートに移動し、ca-certificate.pem にリネームします。
証明書の相対パスは、コマンドを実行したディレクトリを基準に解決されます。そのため、このガイドのコマンドはすべてプロジェクトのルートで実行してください。

接続を設定する

1

データベースを作成する

アプリ用のデータベースを作成します。<PASSWORD> とホストは、Connect モーダルに表示される値に置き換えてください。
2

接続 URL を設定する

.env で、prisma init が追加したプレースホルダーの DATABASE_URL を、次の 2 つの接続 URL に置き換えます。どちらも guide_prisma データベースを指します。パスワードには Connect モーダルに表示されるものを使用してください。
2 つの URL はそれぞれ別のドライバーが読み取るため、TLS パラメータの指定方法が異なります。
  • DATABASE_URL は、@prisma/adapter-pg 経由で node-postgres が読み取ります。Connect モーダルに表示されるものと同じ、標準の sslmode=verify-full&sslrootcert=... パラメータに対応しています。
  • DIRECT_URL は、Prisma CLI のスキーマエンジンが読み取ります。このエンジンは独自のパラメータを使用し、sslcert で CA 証明書へのパスを指定し、sslaccept=strict で証明書とホスト名の検証を有効にします。
Prisma CLI 用の URL には sslmode=verify-full&sslrootcert=... を使用しないでください。スキーマエンジンは sslrootcert を無視するため、sslaccept=strict を指定しないとサーバー証明書の検証がまったく行われません。その結果、接続は暗号化されても認証はされない状態になります。
3

Prisma CLI が直接接続を使用するよう設定する

prisma7.config.ts の内容を次のように置き換えます。
Prisma 7 では、設定ファイル内の URL は CLI だけが使用します。Prisma Client はドライバーアダプターから接続を取得します。ドライバーアダプターの設定は データベースにクエリを実行する で行います。

スキーマを定義して移行を実行する

1

モデルを追加する

prisma/schema.prisma の末尾に Todo モデルを追加します。
2

マイグレーションを実行する

Linux では、Prisma Migrate を直接実行します。
macOS では、同じコマンドを Linux コンテナー内で実行します。
ClickHouse Managed Postgres は TLS 1.3 のみをサポートしています。macOS では、Prisma CLI のスキーマエンジンがシステムの TLS ライブラリを使用するため、この条件では接続できません。P1011: Error opening a TLS connection: One or more parameters passed to a function were not valid というエラーで失敗するか、sslcert を削除した場合は bad protocol version というエラーで失敗します (prisma/orm#29600) 。この問題が影響するのは、prisma migrate や prisma db pull など、データベースに接続する CLI コマンドのみです。Prisma Client は node-postgres 経由で接続するため、影響を受けません。この問題は、CLI を Linux コンテナー内、または Linux ベースの CI パイプライン内で実行することで回避できます。
Prisma は prisma/migrations/ に SQL の移行ファイルを作成し、適用します。
3

Prisma Client を生成する

クライアントは generated/prisma に生成されます。このコマンドはデータベースに接続しないため、どのプラットフォームでも実行できます。

データベースにクエリを実行する

1

Prisma Client を作成する

lib/prisma.ts を作成します。PrismaPg アダプターは、DATABASE_URL を使用して PgBouncer 経由で接続します。
PgBouncer の設定は不要@prisma/adapter-pg は各クエリを名前なしのプリペアドステートメントとして送信し、DEALLOCATE を一切実行しないため、PgBouncer のトランザクションプーリングモードでも問題なく動作します。プールされた複数のバックエンドで数百種類のクエリを同時実行しても、エラーは発生しません。旧バージョンの Prisma で使われていた pgbouncer=true URL パラメータは不要で、ドライバーアダプターでは指定しても効果はありません。
2

CRUD クエリを実行する

script.ts を作成します。
スクリプトを実行します。
3

HTTP でデータを配信する

server.ts を作成します。これは、POST /todos で todo を作成し、すべての GET リクエストに対して todo の一覧を返す最小構成の HTTP サーバーです。
サーバーを起動します。
別の端末を開き、todo を 2 件追加します。
ブラウザで http://localhost:3000/todos を開くと、追加した todo を確認できます。レスポンスは次のようになります。

SQL コンソールで確認する

ClickHouse Cloud コンソールで対象サービスの SQL console を開き、データベースと public スキーマを展開して Todo テーブルを選択します。あわせて _prisma_migrations テーブルも表示されます。これは、Prisma Migrate が適用済みの移行を記録するテーブルです。 Todo テーブルには、HTTP エンドポイント経由で追加した 2 行が格納されています。

トラブルシューティング

次のステップ

最終更新日 2026年10月14日