Use Cases

Claude Code के साथ DB Migrations कैसे Automate करें

Claude Code का उपयोग करके automate db migrations सीखें। Practical code examples और step-by-step guidance शामिल है।

DBmigrationの悩みको Claude Code से解決

スkeyマ変更のたびにmigrationfileを手書きするのは手बीचがかかり、ミスも起きやすい作業 है।Claude Code का उपयोग करके、スkeyマの設計変更 सेmigrationgenerate、シードdataのupdate तक一気にsupportでき है।

Prismaでのmigration

スkeyマ設計 सेmigration実行 तक

> Prismaスkeyマにनिम्नलिखितのtableをadd करो、migration generate・適用して。
>
> table: Order
> - id: UUID, 主key
> - userId: User へのबाहर部key
> - items: OrderItem[] (1対多)
> - totalAmount: Decimal
> - status: enum (pending, confirmed, shipped, delivered, cancelled)
> - createdAt, updatedAt

Claude Codeがgenerateするスkeyマの例 है।

enum OrderStatus {
  pending
  confirmed
  shipped
  delivered
  cancelled
}

model Order {
  id          String      @id @default(uuid())
  userId      String
  user        User        @relation(fields: [userId], references: [id])
  items       OrderItem[]
  totalAmount Decimal     @db.Decimal(10, 2)
  status      OrderStatus @default(pending)
  createdAt   DateTime    @default(now())
  updatedAt   DateTime    @updatedAt

  @@index([userId])
  @@index([status])
}

model OrderItem {
  id        String @id @default(uuid())
  orderId   String
  order     Order  @relation(fields: [orderId], references: [id], onDelete: Cascade)
  productId String
  quantity  Int
  price     Decimal @db.Decimal(10, 2)
}

उसबाद、Claude Codeは自動でmigrationcommandを実行し है।

npx prisma migrate dev --name add_order_tables

Drizzleでのmigration

Drizzle ORM use करना場合も同様に指示でき है।

> Drizzle ORMのスkeyマにOrdertableをadd करो。
> migrationfileもgenerateして。
import { pgTable, uuid, decimal, timestamp, pgEnum } from "drizzle-orm/pg-core";
import { relations } from "drizzle-orm";
import { users } from "./users";

export const orderStatusEnum = pgEnum("order_status", [
  "pending", "confirmed", "shipped", "delivered", "cancelled",
]);

export const orders = pgTable("orders", {
  id: uuid("id").defaultRandom().primaryKey(),
  userId: uuid("user_id").notNull().references(() => users.id),
  totalAmount: decimal("total_amount", { precision: 10, scale: 2 }).notNull(),
  status: orderStatusEnum("status").default("pending").notNull(),
  createdAt: timestamp("created_at").defaultNow().notNull(),
  updatedAt: timestamp("updated_at").defaultNow().notNull(),
});

export const ordersRelations = relations(orders, ({ one, many }) => ({
  user: one(users, { fields: [orders.userId], references: [users.id] }),
  items: many(orderItems),
}));

既存スkeyマの変更

columnaddやリネーム आदि、既存tableの変更もsafeにprocessingでき है।

> users tableにनिम्नलिखितの変更を加えて。
> - phoneNumber columnをadd(nullable)
> - name を firstName と lastName に分割
> - 既存dataの移行ロジックも含めて

Claude Codeはdata移行スクリプト付きのmigration generateし है।

-- migration: split_user_name
ALTER TABLE "users" ADD COLUMN "first_name" VARCHAR(100);
ALTER TABLE "users" ADD COLUMN "last_name" VARCHAR(100);
ALTER TABLE "users" ADD COLUMN "phone_number" VARCHAR(20);

-- 既存dataの移行
UPDATE "users"
SET
  "first_name" = split_part("name", ' ', 1),
  "last_name" = CASE
    WHEN array_length(string_to_array("name", ' '), 1) > 1
    THEN split_part("name", ' ', 2)
    ELSE ''
  END;

ALTER TABLE "users" ALTER COLUMN "first_name" SET NOT NULL;
ALTER TABLE "users" ALTER COLUMN "last_name" SET NOT NULL;
ALTER TABLE "users" DROP COLUMN "name";

シードdataのgenerate

development用のtestdataも合わせて作れ है।

> Order tableのシードdataを20件बनाओ。
> 各ステータスが均等に分布する तरह。
> リアルなダミーdataにして。

migrationのsafe性 confirm

> 現在のmigration履歴 confirmして、
> 本番適用पहलेに問題がないかcheckして。
> विशेष रूप सेdata消失リスクのある変更を指摘して。

APIdevelopmentでのDBintegrationpatternके बारे मेंはAPIdevelopmentをfast化する方法में बताया गया है。इसके अलावा, CLAUDE.mdにdatabase関連のruleを書いておくとsafe性が向ऊपरし है।लिखने का तरीकाのコツはCLAUDE.mdのलिखने का तरीकाcomplete guideをदेखें。

Summary

Claude Code का उपयोग करके、DBスkeyマの設計 से変更、migrationgenerate、シードdatacreate तक一貫してautomationでき है।विशेष रूप सेdata移行ロジックを含むcomplexなmigrationで威力を発揮し है।

Prismaの詳しいuse करने का तरीकाはPrismaofficial documentation、Claude Codeのfeaturesके बारे मेंはAnthropicofficial documentationをदेखें。

#Claude Code #database #migration #Prisma #Drizzle