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

Netlify ビルド依存関係のキャッシュの回避策

問題点

Prisma ORM を使用するアプリケーションをNetlifyにデプロイすると、デプロイメント時に次のエラーメッセージが表示される場合があります

Prisma has detected that this project was built on Netlify, which caches dependencies.
This leads to an outdated Prisma Client because Prisma's auto-generation isn't triggered.
To fix this, make sure to run the `prisma generate` command during the build process.

Learn how: https://pris.ly/d/netlify-build

これは、Netlify がプロジェクトの依存関係を、それらの依存関係のいずれかが変更されるまでキャッシュするためです。これはビルドを高速化するためであり、通常は良いことですが、Prisma Client にいくつかの問題を引き起こします。

Prisma ORM は、依存関係がインストールされるときに Prisma Client を生成するために postinstall フックを使用します。Netlify はキャッシュされたモジュールを使用するため、この postinstall フックは最初のデプロイメント後の後続のデプロイメントでは実行されません。これにより、Prisma Client がデータベーススキーマと同期しなくなります。

このエラーメッセージは、この状況が発生するのを防ぎ、根本的な問題を修正する方法を学ぶためにここに誘導します。

Prisma Client バージョン 4.13.0 未満

4.13.0 より前の Prisma Client バージョンでは、次のようなエラーメッセージが表示される場合があります

// 1: When adding a field:
Unknown arg `name` in data.name for type UserCreateInput. Did you mean `nick`?

// 2: When removing a field:
Invalid `prisma.user.create()` invocation: The column `User.name` does not exist in the current database.

// 3: When a model was removed/renamed
Invalid `prisma.user.deleteMany()` invocation: The table `public.User` does not exist in the current database.

// 4: When a model was added
Cannot read properties of undefined (reading 'create')

このガイドで説明されている解決策は、これらの問題を解決するためのものです。

解決策

この問題は、デプロイメントごとに明示的に Prisma Client を生成することで解決できます。各デプロイメントの前に prisma generate を実行すると、Prisma Client が最新の状態になります。

このコマンドをデプロイメント時に実行するように構成するには、複数の異なる方法があります

カスタム postinstall スクリプト

情報

これは普遍的な解決策であるため、推奨される方法です。

プロジェクトの package.json ファイルの scripts セクション内に、postinstall という名前のスクリプトがまだない場合は、1 つ追加し、そのスクリプトに `prisma generate` を追加します

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

package.json のアプリケーションの build スクリプト

プロジェクトの package.json ファイルの scripts セクション内で、build スクリプト内で、既存のビルドコマンドの前に prisma generate を付加します

{
...
"scripts" {
"build": "prisma generate && <actual-build-command>"
}
...
}

Netlify UI のビルドスクリプトフィールド

すべてのデプロイメントで prisma generate を実行するように構成するもう 1 つの方法は、Netlify の UI を介してビルド設定にコマンドを追加することです。

プロジェクトのダッシュボード内で、サイト設定タブに移動し、ビルド & デプロイセクションを見つけます。そのセクションで、継続的デプロイメントサブセクションに入ります。

そのセクションのビルド設定とラベル付けされたボックスを見つけて、設定を編集ボタンをクリックします

Netlify project dashboard&#39;s Build settings button

そのボタンをクリックすると、さまざまなフィールドを含むフォームが開きます。ビルドコマンドフィールドを見つけて、既存のスクリプトの前に prisma generate を付加します

Netlify project dashboard&#39;s Build command setting filled