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 を介してビルド設定にコマンドを追加することです。
プロジェクトのダッシュボード内で、サイト設定タブに移動し、ビルド & デプロイセクションを見つけます。そのセクションで、継続的デプロイメントサブセクションに入ります。
そのセクションのビルド設定とラベル付けされたボックスを見つけて、設定を編集ボタンをクリックします
そのボタンをクリックすると、さまざまなフィールドを含むフォームが開きます。ビルドコマンドフィールドを見つけて、既存のスクリプトの前に prisma generate
を付加します