The Complete Guide to Mastering Prisma ORM with Claude Code
A comprehensive guide to mastering prisma orm using Claude Code with practical examples and best practices.
Prisma ORM とは
Prisma ORMはTypeScriptのための次世代ORMです。型安全なデータベースアクセス、直感的なスキーマ定義、自動マイグレーションを提供します。Claude Codeと組み合わせれば、データベース設計から実装まで効率的に進められます。
スキーマ設計
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model User {
id String @id @default(cuid())
email String @unique
name String
avatar String?
posts Post[]
comments Comment[]
profile Profile?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([email])
}
model Profile {
id String @id @default(cuid())
bio String?
url String?
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
userId String @unique
}
model Post {
id String @id @default(cuid())
title String
content String
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId String
categories Category[]
comments Comment[]
publishedAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([authorId])
@@index([published, publishedAt])
}
model Category {
id String @id @default(cuid())
name String @unique
slug String @unique
posts Post[]
}
model Comment {
id String @id @default(cuid())
content String
author User @relation(fields: [authorId], references: [id])
authorId String
post Post @relation(fields: [postId], references: [id], onDelete: Cascade)
postId String
createdAt DateTime @default(now())
@@index([postId])
}
CRUD操作
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
// 作成
async function createPost(data: {
title: string;
content: string;
authorId: string;
categoryIds: string[];
}) {
return prisma.post.create({
data: {
title: data.title,
content: data.content,
author: { connect: { id: data.authorId } },
categories: {
connect: data.categoryIds.map((id) => ({ id })),
},
},
include: {
author: { select: { id: true, name: true } },
categories: true,
},
});
}
// 検索(ページネーション付き)
async function getPosts(params: {
page?: number;
perPage?: number;
category?: string;
search?: string;
}) {
const { page = 1, perPage = 20, category, search } = params;
const where = {
published: true,
...(category && {
categories: { some: { slug: category } },
}),
...(search && {
OR: [
{ title: { contains: search, mode: "insensitive" as const } },
{ content: { contains: search, mode: "insensitive" as const } },
],
}),
};
const [posts, total] = await Promise.all([
prisma.post.findMany({
where,
skip: (page - 1) * perPage,
take: perPage,
orderBy: { publishedAt: "desc" },
include: {
author: { select: { id: true, name: true, avatar: true } },
categories: true,
_count: { select: { comments: true } },
},
}),
prisma.post.count({ where }),
]);
return {
posts,
pagination: {
total,
page,
perPage,
totalPages: Math.ceil(total / perPage),
},
};
}
トランザクション
async function publishPost(postId: string) {
return prisma.$transaction(async (tx) => {
const post = await tx.post.findUnique({
where: { id: postId },
});
if (!post) throw new Error("Post not found");
if (post.published) throw new Error("Already published");
const updated = await tx.post.update({
where: { id: postId },
data: {
published: true,
publishedAt: new Date(),
},
});
// 通知を作成
await tx.notification.create({
data: {
type: "POST_PUBLISHED",
message: `「${post.title}」が公開されました`,
userId: post.authorId,
},
});
return updated;
});
}
マイグレーション
# スキーマ変更後のマイグレーション
npx prisma migrate dev --name add_profile_table
# 本番環境へのデプロイ
npx prisma migrate deploy
# スキーマの同期(開発用)
npx prisma db push
Claude Codeでの活用プロンプト
Prismaを使った開発をClaude Codeに依頼する例です。基本的な使い方はClaude Code入門ガイド、他のORMとの比較はDrizzle ORM活用法も参照してください。
Prismaでブログのデータベーススキーマを設計して。
- ユーザー、記事、カテゴリ、コメントのモデル
- 適切なリレーションとインデックス
- ページネーション付きの検索クエリ
- トランザクションを使った公開処理
- マイグレーションファイルも生成して
Prismaの詳細はPrisma公式ドキュメントを参照してください。Claude Codeの活用法は公式ドキュメントで確認できます。
Summary
Prisma ORMは型安全なデータベースアクセスを提供し、開発体験を大幅に向上させます。Claude Codeにスキーマ設計からクエリ最適化まで依頼すれば、堅牢なデータ層を効率的に構築できます。
Free PDF: Claude Code Cheatsheet in 5 Minutes
Just enter your email and we'll send you the single-page A4 cheatsheet right away.
We handle your data with care and never send spam.
Level up your Claude Code workflow
Start with the free cheatsheet, move to the setup guide or prompt pack when you hit a clear bottleneck, and use consultation only when you need workflow design help.
About the Author
Masa
Engineer obsessed with Claude Code. Runs claudecode-lab.com, a 10-language tech media with 2,000+ pages.
Related Posts
Claude Code for Non-Engineers: A No-Code Approach to AI-Powered Development
Claude Code for Non-Engineers: A No-Code Approach to AI-Powered Development. A practical guide with code examples.
What Is Claude Code? A Beginner Guide from Install to Your First Useful Session
A practical Claude Code beginner guide with install steps, first-session prompts, safe permission settings, common mistakes, and the next best resource for each stage.
Claude Code Pricing Plans and How to Think About ROI
Claude Code Pricing Plans and How to Think About ROI. A practical guide with code examples.
Related Products
The Complete Claude Code Setup & Configuration Guide
From install to team-ready workflow.
A practical guide to installation, CLAUDE.md, hooks, MCP servers, permissions, IDE setup, and CI/CD workflows.
Claude Code Quick Reference Cheatsheet
A free one-page reference for daily Claude Code work.
Keep the essential commands, file-reference patterns, CLAUDE.md reminders, prompting habits, review cues, and debugging workflow notes next to your editor.