Use Cases

Comment automatiser les migrations de base de données avec Claude Code

Apprenez à automatiser les migrations de base de données avec Claude Code. Exemples de code pratiques et instructions étape par étape inclus.

Résoudre les problèmes de migration DB avec Claude Code

Écrire manuellement des fichiers de migration à chaque modification de schéma est une tâche chronophage et sujette aux erreurs. Avec Claude Code, vous pouvez gérer d’un coup les modifications de conception de schéma, la génération des migrations et la mise à jour des données de seed.

Migration avec Prisma

De la conception du schéma à l’exécution de la migration

> Ajoute les tables suivantes au schéma Prisma, puis génère et applique la migration.
>
> Table : Order
> - id : UUID, clé primaire
> - userId : clé étrangère vers User
> - items : OrderItem[] (1 à n)
> - totalAmount : Decimal
> - status : enum (pending, confirmed, shipped, delivered, cancelled)
> - createdAt, updatedAt

Exemple de schéma généré par Claude Code.

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)
}

Ensuite, Claude Code exécute automatiquement la commande de migration.

npx prisma migrate dev --name add_order_tables

Migration avec Drizzle

Les instructions sont similaires avec Drizzle ORM.

> Ajoute la table Order au schéma Drizzle ORM.
> Génère aussi le fichier de migration.
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),
}));

Modification de schéma existant

L’ajout de colonnes, le renommage et autres modifications de tables existantes peuvent aussi être traités en toute sécurité.

> Apporte les modifications suivantes à la table users.
> - Ajouter une colonne phoneNumber (nullable)
> - Diviser name en firstName et lastName
> - Inclure la logique de migration des données existantes

Claude Code génère une migration incluant le script de migration des données.

-- 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);

-- Migration des données existantes
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";

Génération de données de seed

Vous pouvez aussi créer des données de test pour le développement.

> Crée 20 enregistrements de données de seed pour la table Order.
> Distribue les statuts de manière équilibrée.
> Utilise des données fictives réalistes.

Vérification de la sécurité de la migration

> Vérifie l'historique des migrations actuel,
> et contrôle qu'il n'y a pas de problème avant l'application en production.
> Signale en particulier les modifications risquant une perte de données.

Les patterns d’intégration DB dans le développement API sont expliqués dans Comment accélérer le développement API. De plus, écrire les règles liées à la base de données dans CLAUDE.md améliore la sécurité. Pour les astuces de rédaction, consultez le guide complet de rédaction de CLAUDE.md.

Résumé

Avec Claude Code, vous pouvez automatiser de manière cohérente la conception du schéma DB, les modifications, la génération de migrations et la création de données de seed. C’est particulièrement puissant pour les migrations complexes incluant une logique de migration de données.

Pour l’utilisation détaillée de Prisma, consultez la documentation officielle de Prisma, et pour les fonctionnalités de Claude Code, consultez la documentation officielle d’Anthropic.

#Claude Code #database #migration #Prisma #Drizzle