はじめに
現在Todoアプリを React/Hono/Prisma/PostgreSQL/Docker で作成しています。
その際に初期データの投入機能をつけたので備忘録として残しておきます。
前提
- DockerですでにTodoアプリが完成している
- Prisma v8(RC版)を使用している
やったこと
1. seedファイルの作成
backend/src/prisma/seed.ts
import { db } from "./db";
for (const title of ["勉強", "掃除", "買い物"]) {
await db.orm.public.Todo.create({
title,
completed: false,
createdAt: new Date().toISOString(),
});
}
await db.close();
3つのTodoを登録する処理です。
2. Dockerfileへのコマンド追加
APIコンテナのDockerfileにseed.tsを実行するためのコマンド
npx tsx src/prisma/seed.ts
を追加します。
backend/Dockerfile
FROM node:22-alpine
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
- CMD ["sh", "-c", "npx prisma contract emit && npx prisma db init && npm run dev"]
+ CMD ["sh", "-c", "npx prisma contract emit && npx prisma db init && npx tsx src/prisma/seed.ts && npm run dev"]
おわりに
初期データの投入をするのは初めてでしたが、特別な処理があるわけではなくデータを追加するためのスクリプトをコンテナ起動時に実行すれば良いだけ、ということを知ることができました。
