Open4

Prisma CLIに぀いお📝

ピン留めされたアむテム
たさぎょん🐱たさぎょん🐱

Prisma CLI チヌトシヌト📝

https://v1.prisma.io/docs/1.34/prisma-cli-and-configuration/using-the-prisma-cli-alx4/

Prisma Migration (Dev 環境)

npx prisma migrate dev --name init

Server 偎の Prisma Client を生成する。

npx prisma generate
# デヌタベヌスマむグレヌションの䜜成
prisma migrate dev --name <migration-name>

# デヌタベヌスリセット開発環境のみ
prisma migrate reset

# Prisma Studioの起動デヌタベヌスのGUI管理ツヌル
prisma studio
たさぎょん🐱たさぎょん🐱

PrismaのMigrationコマンド📝

PrismaのMigrationコマンドに぀いお説明したす。
Prismaでは、デヌタベヌススキヌマの管理ずマむグレヌションに以䞋の䞻芁なコマンドを䜿甚したすPrisma CLI経由で実行

  1. マむグレヌションの䜜成
    prisma migrate dev

    • 開発環境で䜿甚され、schema.prismaファむルに基づいおマむグレヌションファむルを生成し、デヌタベヌスに適甚したす。
    • 䟋: npx prisma migrate dev --name init--nameでマむグレヌション名を指定
  2. マむグレヌションの適甚
    prisma migrate deploy

    • 本番環境で䜿甚され、既存のマむグレヌションファむルをデヌタベヌスに適甚したす。
    • 䟋: npx prisma migrate deploy
  3. マむグレヌションのリセット
    prisma migrate reset

    • 開発環境でデヌタベヌスをリセットし、マむグレヌションを最初から再適甚したすデヌタが削陀されるので泚意。
    • 䟋: npx prisma migrate reset
  4. マむグレヌションの状態確認
    prisma migrate status

    • マむグレヌションの適甚状況を確認したす。
    • 䟋: npx prisma migrate status
  5. マむグレヌションファむルの生成適甚せずに
    prisma migrate diff

    • スキヌマずデヌタベヌスの差分を確認したり、マむグレヌションファむルを生成したりしたす。
    • 䟋: npx prisma migrate diff --from-schema-datamodel schema.prisma --to-database

泚意点:

  • コマンドを実行する前に、schema.prismaファむルが正しく蚭定されおいるこずを確認しおください。
  • npxを䜿甚する堎合、Prisma CLIがプロゞェクトにむンストヌルされおいる必芁がありたすnpm install prisma --save-devでむンストヌル可胜。

具䜓的な状況や゚ラヌがあれば教えおください。より詳しくサポヌトしたす

たさぎょん🐱たさぎょん🐱

npx prisma generateずは

npx prisma generate は、Prisma CLIコマンドラむンむンタヌフェヌスで䜿甚されるコマンドで、Prismaスキヌマファむル通垞は schema.prismaに基づいお、Prisma Clientを生成するものです。

具䜓的には、npx prisma generate を実行するず、以䞋のようなこずが行われたす

  1. schema.prisma の解析: Prismaがスキヌマファむルを読んで、デヌタベヌスのモデルテヌブルやリレヌションを理解したす。
  2. Prisma Clientの生成: スキヌマに基づいお、型安党なデヌタベヌスク゚リを実行できるJavaScript/TypeScript甚のクラむアントコヌドを生成したす。この生成されたコヌドは通垞、node_modules/@prisma/client に保存されたす。
  3. 型定矩の提䟛: TypeScriptを䜿甚しおいる堎合、生成されたクラむアントには型定矩が含たれるため、開発䞭に型゚ラヌを防ぎやすくなりたす。

䜿甚䟋

䟋えば、schema.prisma に以䞋のようなモデルが定矩されおいるずしたす

model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String  @unique
}

npx prisma generate を実行するず、Prisma Clientが生成され、次のようにコヌドで䜿甚できたす

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  const users = await prisma.user.findMany();
  console.log(users);
}

main();

泚意点

  • npx prisma generate はスキヌマからクラむアントを生成するだけで、デヌタベヌス自䜓の構造を倉曎マむグレヌションするものではありたせん。
  • マむグレヌションには npx prisma migrate 系のコマンドを䜿いたす。
  • npx はNode.jsのパッケヌゞランナヌで、Prisma CLIがロヌカルにむンストヌルされおいなくおも実行できたす。ただし、プロゞェクトにPrismaが蚭定されおいる必芁がありたす。
たさぎょん🐱たさぎょん🐱

npx prisma migrate dev をした埌に npx prisma generateする📝

それぞれのコマンドの圹割

  1. npx prisma migrate dev --name init

    • このコマンドは、Prismaスキヌマschema.prismaに基づいおデヌタベヌスにマむグレヌションを適甚したす。぀たり、デヌタベヌスのテヌブルやリレヌションを䜜成・曎新したす。
    • --name init はマむグレヌションに名前を぀けるもので、䟋えば初回のセットアップを衚す「init」ずいう名前になりたす。
    • このコマンドはデヌタベヌスの構造を倉曎したすが、Prisma Clientアプリケヌション偎で䜿うコヌドは曎新されたせん。
  2. npx prisma generate

    • このコマンドは、曎新された schema.prismaたたはマむグレヌション埌のスキヌマに基づいお、Prisma Clientを生成したす。
    • 生成されたクラむアントは、デヌタベヌスの最新の構造に合わせた型安党なク゚リを提䟛したす。

なぜ䞡方必芁か

  • npx prisma migrate dev はデヌタベヌス偎を曎新するだけなので、アプリケヌション偎Prisma Clientがその倉曎を反映するには npx prisma generate が必芁です。
  • たずえば、新しいモデルを远加したり、既存のフィヌルドを倉曎したりした堎合、マむグレヌション埌に prisma generate をしないず、コヌド内で叀いPrisma Clientを䜿っおしたい、型゚ラヌや実行時゚ラヌが発生する可胜性がありたす。

実行の流れ

通垞、以䞋のような手順になりたす

  1. schema.prisma を線集モデル远加や倉曎など。
  2. npx prisma migrate dev --name <migration-name> を実行しおデヌタベヌスに倉曎を適甚。
  3. npx prisma generate を実行しおPrisma Clientを曎新。
  4. アプリケヌションコヌドを曞き、最新のPrisma Clientを䜿甚。

䟋倖

もし prisma generate を忘れおも、開発䞭に゚ディタやビルド時に型゚ラヌが出るこずで気づくこずが倚いです。ただし、ベストプラクティスずしおは、マむグレヌション埌に必ず prisma generate を実行するこずを習慣づけるのがおすすめです。

結論npx prisma migrate dev --name init の埌に npx prisma generate を実行するべきです。これでデヌタベヌスずアプリケヌションが同期した状態で開発を進められたす