ð Next.js à Prisma à Supabase ã§åŠã¶ããã©ã³ã¶ã¯ã·ã§ã³ãã®åºæ¬ãšå®è·µ
æçš¿æ¥: 2025幎05æ10æ¥
ã¢ããªéçºã§ãäžéšã ãä¿åãããŠããŸã£ãâŠããšããåé¡ãçµéšãããŸãããïŒ
ããšãã°ïŒ
ãŠãŒã¶ãŒç»é²ãšãããã£ãŒã«äœæãåæã«ããã
åŠç¿èšé²ãšã«ããŽãªãåæã«äœæããã
ãããªãšãã«æŽ»èºããã®ãããã©ã³ã¶ã¯ã·ã§ã³ãã§ãã
æ¬èšäºã§ã¯ãNext.js + Prisma + Supabase ç°å¢ãåæã«ãåå¿è
åãã«è§£èª¬ããŠãããŸãã
è€æ°ã®åŠçãã1ã€ã®ãŸãšãŸã£ãåŠçããšããŠæ±ããå šéšæåãããšãã ãããŒã¿ããŒã¹ã«åæ ããä»çµã¿
ã€ãŸããå
šéšæåãã or å
šéšå€±æãããã® ãªãŒã«ã»ãªã¢ã»ããã·ã³ã°ãªäžçã§ãã
以äžã®ãããªãè€æ°ã®ããŒãã«ããŸãšããŠæäœããå Žé¢ãã§äœ¿ããŸãïŒ
users
ããŒãã«ã«æ°èŠç»é²ãã€ã€
profiles
ããŒãã«ã«ãããŒã¿ã远å ããã
await prisma.$transaction(async (tx) => {
// ãã¹ãŠ tx çµç±ã§åŠçããããšïŒ
await tx.user.create(...);
await tx.profile.create(...);
});
ããã§éèŠãªã®ã¯ãtxïŒãã©ã³ã¶ã¯ã·ã§ã³å°çšã®ã¯ã©ã€ã¢ã³ãïŒã䜿ãããšã§ãã
éåžžã® prisma.user.create
ã䜿ã£ãŠããŸããšããã©ã³ã¶ã¯ã·ã§ã³ã«å«ãŸããŸããã
// /app/api/user/register/route.ts
import { NextRequest, NextResponse } from "next/server";
import { prisma } from "@/lib/prisma";
export async function POST(req: NextRequest) {
const { email, nickname, first_name, last_name } = await req.json();
try {
await prisma.$transaction(async (tx) => {
const user = await tx.user.create({
data: { email, nickname },
});
await tx.profile.create({
data: {
supabaseUserId: user.supabaseUserId,
first_name,
last_name,
},
});
});
return NextResponse.json({ message: "ç»é²æå" });
} catch (error) {
console.error("ç»é²ãšã©ãŒ:", error);
return NextResponse.json(
{ message: "ç»é²ã«å€±æããŸãã" },
{ status: 500 }
);
}
}
ãã®ããã«ãtx
ãéããŠãã¹ãŠã®åŠçããŸãšããããšã§ãå®å
šãªç»é²åŠçãå¯èœã«ãªããŸãã
ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãå šéšæå or å šéšå€±æãã®å®å¿èšèš
Prisma ã® $transaction()
ã䜿ãã
äžã§ã¯å¿
ã tx
ã䜿ã£ãŠãã¹ãŠã®åŠçãè¡ãããš
Prisma 㯠Supabase ã® Postgres ãšã飿ºå¯èœã§ãã
Supabase ã® Auth ã䜿ã£ãŠããå Žåã§ãããã©ã³ã¶ã¯ã·ã§ã³ã§å®å
šã«ãŠãŒã¶ãŒããŒã¿ã»ãããã£ãŒã«ãªã©ãä¿åã§ããŸãã
Webã«ããããã¶ã€ã³ã®ã³ã
ãªãªãžãã«ã¢ããªå¥®éèš
èªåæ ç±å€§éžã-æè¬ãäŒããããšæããæžããŸãã-
å人éçºã®ã¢ãããŒã·ã§ã³ç¶æ(TAã®ãããã)
ãŸãããã粟ç¥ã®æ³šæç¹
ã¿ããªçé¢ç®éããïŒãŸãããã粟ç¥ã®ããã
å®è£ ã§ããã¬ãã«ã®ç²åºŠã«ã¿ã¹ã¯ãåè§£ããæ¹æ³
å人éçºã®ã¢ããªéçºã§GitHub Projectsã䜿ã£ããã±ããç®¡çæ¹æ³
ã13ç« ãå®åäœéšèª²é¡ã®ææ³
Codex䜿ã£ãŠã¿ãå ±å
ð ãã°ã€ã³ç¶æ ã®ä¿åæ¹æ³ãåãæ¿ãããããã°ã¢ãŠãã§ããªããªã£ã話
ð ãã°ã€ã³ç¶æ ã®ä¿æããŠãŒã¶ãŒãéžã¹ãããã«ãã話ãLernova éçºèšã