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

Vercelにデプロイする

このガイドでは、Prisma を使用するサーバーレスアプリケーションをVercelにセットアップし、デプロイする手順を説明します。

Vercelは、静的サイト、サーバーレス機能、およびエッジ機能をホストするクラウドプラットフォームです。VercelプロジェクトをGitHubリポジトリと統合することで、新しいコミットを行うたびに自動的にデプロイできるようになります。

Next.jsを使用したサンプルアプリケーションを作成しました。Prismaを使用するアプリケーションをVercelにデプロイする際の参考にしてください。

弊社の例ではNext.jsを使用していますが、他のアプリケーションもVercelにデプロイできます。VercelでExpressを使用するVercel上のNuxtを他の選択肢の例として参照してください。

ビルド設定

Vercelビルド中にPrisma Clientを更新する

Vercelはデプロイ時に依存関係を自動的にキャッシュします。ほとんどのアプリケーションでは問題ありませんが、Prisma ORMの場合、Prismaスキーマの変更時にPrisma Clientのバージョンが古くなる可能性があります。この問題を回避するには、アプリケーションのpostinstallスクリプトにprisma generateを追加してください。

package.json
{
...
"scripts": {
"postinstall": "prisma generate"
}
...
}

これにより、ビルド時にPrisma Clientが再生成され、デプロイ時に常に最新のクライアントが利用できるようになります。

情報

Vercelへのデプロイ中にprisma: command not foundエラーが表示される場合、依存関係にprismaが不足しています。デフォルトでは、prismaは開発依存関係であり、標準の依存関係に移動する必要がある場合があります。

古いPrisma Clientを回避する別の方法は、カスタム出力パスを使用し、クライアントをバージョン管理下に置くことです。こうすることで、各デプロイメントには常に正しいPrisma Clientが含まれることが保証されます。

schema.prisma
generator client {
provider = "prisma-client-js"
output = "./generated/client"
}

Vercel上のモノレポでPrismaをデプロイする

モノレポ(例:TurboRepoを使用)内でPrismaを使用し、Vercelにデプロイしている場合、デプロイされたバンドルからlibquery_engine-rhel-openssl-3.0.x.so.nodeのような必要なファイルが欠落する問題に遭遇することがあります。これは、Vercelがサーバーレスデプロイメントを積極的に最適化し、必要なPrismaファイルを削除してしまうことがあるためです。これを解決するには、Prismaエンジンファイルが最終バンドルに正しく含まれるようにする@prisma/nextjs-monorepo-workaround-pluginプラグインを使用してください。PrismaがWebpackやParcelなどの異なるバンドラーとどのように連携するかについての詳細は、弊社の「モジュールバンドラー」ページを参照してください。

このプラグインの使用は、以下の場合に廃止されます:

CI/CDワークフロー

より高度なCI/CD環境では、ローカル開発中に実行したマイグレーションでデータベーススキーマを更新したい場合があります。これは、prisma migrate deployコマンドを使用して実行できます。

その場合、package.jsonに以下のようなカスタムビルドコマンド(例:vercel-build)を作成できます。

package.json
{
...
"scripts" {
"vercel-build": "prisma generate && prisma migrate deploy && next build",
}
...
}

このスクリプトは、CI/CDパイプライン内で以下のコマンドを使用して呼び出すことができます。

npm run vercel-build

プレビューデプロイメント用に別のデータベースを追加する

デフォルトでは、アプリケーションはリポジトリのmain gitブランチに関連付けられた単一の本番環境を持ちます。アプリケーションを変更するためにプルリクエストを開くと、Vercelは新しいプレビュー環境を作成します。

Vercelは、プロジェクトをインポートするときに定義したDATABASE_URL環境変数を、本番環境とプレビュー環境の両方で使用します。データベーススキーマのマイグレーションを含むプルリクエストを作成した場合、プルリクエストが本番データベースのスキーマを変更してしまうため、問題が発生します。

これを防ぐには、プレビューデプロイメントを処理するために2つ目のホスト型データベースを使用します。その接続文字列が手に入ったら、Vercelダッシュボードを使用してプレビュー環境のDATABASE_URLを追加できます。

  1. Vercelプロジェクトの設定タブをクリックします。

  2. 環境変数をクリックします。

  3. キーをDATABASE_URLとする環境変数を追加し、プレビュー環境オプションのみを選択します。

    Add an environment variable for the preview environment

  4. 値を2つ目のデータベースの接続文字列に設定します。

    postgresql://dbUsername:dbPassword@myhost:5432/mydb
  5. 保存をクリックします。

コネクションプーリング

Vercel Serverless FunctionsのようなFunction-as-a-Serviceプロバイダーを使用する場合、呼び出しごとにデータベースへの新しい接続が発生する可能性があります。これにより、データベースのオープン接続がすぐに枯渇し、アプリケーションが停止する原因となることがあります。このため、データベースへの接続プーリングは不可欠です。

コネクションプーリングにはAccelerateを使用するか、組み込みのコネクションプーリングを備えたPrisma Postgresを使用すると、Prisma Clientのバンドルサイズを削減し、コールドスタートを回避できます。

サーバーレス環境での接続管理の詳細については、弊社の接続管理ガイドを参照してください。

© . All rights reserved.