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.
Related Posts
Comment booster vos projets personnels avec Claude Code [Avec exemples]
Apprenez à accélérer considérablement vos projets de développement personnels avec Claude Code. Inclut des exemples concrets et un workflow pratique de l'idée au déploiement.
Comment automatiser le refactoring avec Claude Code
Apprenez à automatiser efficacement le refactoring de code avec Claude Code. Inclut des prompts pratiques et des patterns de refactoring concrets pour des projets réels.
Guide complet de configuration CORS avec Claude Code
Découvrez le guide complet de configuration CORS avec Claude Code. Conseils pratiques et exemples de code inclus.