1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Prisma 7 で migrate dev が generate を自動実行しなくなった?時々生成されない?の正体は仕様変更

1
Posted at

Prisma 7 にアップグレードしてから、「prisma migrate dev を実行したのに Prisma Client が更新されていない…?」という違和感に出会いました。

結論からいうと、Prisma 7 の意図的な仕様変更でした。
本記事では、その対応方法を整理します。

本記事は 2026 年 6 月時点の情報です。Prisma 7.8.0 と Prisma 6 系の CLI を実際に比較して検証しています。最新の仕様は Prisma 公式ドキュメント でご確認ください。

migrate devgenerate の関係

本題の前に、この記事が前提とする仕組みを簡単に整理します。

Prisma では、スキーマ(schema.prisma)を変更したら 2 つの操作が必要です。

  1. prisma migrate dev は、マイグレーションを作成してデータベースに適用する
  2. prisma generate は、スキーマから Prisma Client(型付きのクライアントコード)を生成する

そして Prisma 6 までは、migrate dev を実行すると generate も自動で実行されていました
スキーマ変更 → migrate dev 一発で、DB とクライアントコードの両方が最新になる、という便利な挙動です。

なにか変だと思った事象

Prisma 7 に上げてから、こんな現象に出会いました。

  • migrate dev は成功している(マイグレーションも適用されている)
  • なのに、アプリ側の型が古いままで、新しいカラムが補完に出てこない
  • prisma generate を手で叩いたら直った

「あれ、migrate dev って generate も走らせてくれるはずでは…? 時々スキップされる?」

実はこれ、「時々」ではなく「常に」スキップされるようになっていました…
根拠を順に示していきます。

migrate devgenerate は、独立

Prisma 7 では、migrate dev / db pushprisma generate を自動実行しなくなりました
これは、公式に明記された意図的な仕様変更(破壊的変更) です。

Prisma 7 を使うなら、マイグレーション後に 明示的に prisma generate を実行する 必要があります。

調べて分かった 3 つの事実

事実① 公式アップグレードガイドに明記されている

Prisma 7 アップグレードガイド に、はっきり書かれています。

migrate dev and db push no longer run prisma generate automatically. You must run prisma generate explicitly to generate Prisma Client.

The --skip-generate flag was removed from prisma migrate dev and prisma db push.

「自動実行しなくなった」だけでなく、自動実行をオフにするための --skip-generate フラグ自体が削除されています。
つまり「そもそも自動実行しないので、スキップするフラグも不要になった」というわけです。

事実② CLI を実際に比較すると、フラグが消えている

公式ドキュメントだけでなく、実際に CLI のヘルプを比較してみました。

# Prisma 6
$ npx prisma@6 migrate dev --help

Options
       -h, --help   Display this help message
    --create-only   Create a new migration but do not apply it
  --skip-generate   Skip triggering generators (e.g. Prisma Client)  ← ある
      --skip-seed   Skip triggering seed                             ← ある
# Prisma 7.8.0
$ npx prisma@7 migrate dev --help

Options
       -h, --help   Display this help message
         --config   Custom path to your Prisma config file
         --url      Override the datasource URL from the Prisma config file
    --create-only   Create a new migration but do not apply it
  (--skip-generate と --skip-seed が存在しない)

--skip-generate--skip-seed が、Prisma 7 では オプション一覧から消えています

事実③ seed の自動実行も同時に廃止されている

generate だけではありません。アップグレードガイドの Seeding changes セクションにはこうあります。

running prisma migrate dev or prisma migrate reset would automatically execute your seed script after applying migrations. This automatic seeding behavior has been removed in Prisma ORM v7.

つまり Prisma 7 は、migrate dev に紐づいていた 「暗黙の自動実行」を一斉に取り払う方針 を取っています。

  • generate の自動実行 → 廃止
  • seed の自動実行 → 廃止
  • postinstall まわりの自動 generate 制御用の環境変数(PRISMA_SKIP_POSTINSTALL_GENERATE など) → 削除

「マイグレーションは DB を変えるだけ。クライアント生成や seed は、必要なときに明示的に」という、暗黙より明示 の設計思想への転換です。

なぜ「時々スキップされる」ように見えるのか

仕様として常にスキップされるのに、体感が「時々」になるのには理由があります。

理由① CLI のヘルプ文言が、まだ旧仕様のまま

面白いことに、Prisma 7.8.0 の migrate dev --help説明文には、まだこう書かれています

🏋️  Create a migration from changes in Prisma schema, apply it to the database,
    trigger generators (e.g. Prisma Client)

「trigger generators(ジェネレータを起動する)」という文言が残っているのです。
ヘルプを信じると「generate も走るはず」と思い込んでしまいます。
ドキュメントとヘルプの食い違いが、混乱に拍車をかけています。

理由② 古い生成済みクライアントが残っていて、しばらく動いてしまう

generate がスキップされても、以前に生成したクライアントはそのまま残っています
スキーマを変更しない限りアプリは普通に動くので、ある日突然、型が合わなくなったように感じます。

アップグレード直後: 古いクライアントで動く(問題が見えない)
  ↓
スキーマ変更 + migrate dev: DB だけ更新される
  ↓
「新しいカラムの型が無い!」← ここで初めて気付く

理由③ Prisma 6 では npm install 時にも生成されていた

Prisma 6 までは、postinstall フックでも Prisma Client が自動生成されていました。
つまり v6 では「migrate dev を忘れても npm install のタイミングで生成される」というセーフティネットが二重にあったのです。

v7 ではこのセーフティネットが取り払われたため、「生成されるタイミング」が見えにくくなり、「動いたり動かなかったりする」という体感につながります。

どう対応するか

対応はシンプルで、generate を明示的に実行する だけです。

npx prisma migrate dev
npx prisma generate

毎回 2 コマンド打つのが手間なら、npm scripts でまとめておくのが実用的です。

{
  "scripts": {
    "migrate:dev": "prisma migrate dev && prisma generate",
    "db:push": "prisma db push && prisma generate"
  }
}

seed が必要な場合も、明示的に実行します。

npx prisma db seed

CI/CD のビルドスクリプトも要確認です。v6 時代に「migrate に generate が含まれる前提」で書かれたパイプラインは、v7 へのアップグレードで 静かに壊れますprisma generate が明示的に呼ばれているか、一度見直してみてください。

まとめ

Prisma 6 と 7 の挙動比較

操作 Prisma 6 まで Prisma 7
migrate dev 後の generate 自動実行される 実行されない(明示的に実行)
db push 後の generate 自動実行される 実行されない(明示的に実行)
--skip-generate フラグ あり 削除
migrate dev 後の seed 自動実行される 実行されないdb seed を明示実行)
npm install 時の自動 generate postinstall で実行 関連環境変数ごと削除・整理
migrate reset 後の seed 自動実行される 実行されない(db seed を明示)

「時々おかしい」と感じたときは、アップグレードガイドの破壊的変更一覧を確認することからですね…。

ドキュメントを読まないといけないとは思うのですが、読み飛ばしてしまったりするのは反省です…。

今回も、公式ドキュメントと CLI の実機比較という 2 つの一次資料に当たることで、「時々スキップされる」という曖昧な体感を、「常にスキップされる仕様」だとわかりました。

本記事の要点は下記のとおりです。

  • Prisma 7 では migrate dev / db pushgenerate を自動実行しない(公式明記の破壊的変更)
  • --skip-generate / --skip-seed フラグは CLI から削除済み(実機確認済み)
  • seed の自動実行・postinstall まわりの自動生成も同時に整理された(暗黙より明示への転換)
  • CLI ヘルプの説明文が旧仕様のまま残っており、混乱の一因になっている
  • 対応は prisma migrate dev && prisma generate のように 明示的に繋ぐ。CI/CD の見直しも忘れずに

フレームワークやツールのメジャーアップデートでは、「これまで暗黙にやってくれていたこと」が静かに無くなることがあります。

挙動が「時々おかしい」と感じたら、まず破壊的変更の一覧を疑ってみてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?