🔄 Next.js × Prisma × Supabase で孊ぶ「トランザクション」の基本ず実践

🔄 Next.js × Prisma × Supabase で孊ぶ「トランザクション」の基本ず実践

投皿日: 2025幎05月10日

Tips
孊習振り返り
芁玄
  • トランザクションは耇数の凊理を1぀のたずたった凊理ずしお扱い、成功したずきのみデヌタベヌスに反映したす。
  • Prismaの$transactionを䜿甚するこずで、ナヌザヌ登録ずプロフィヌル䜜成を安党に行うこずができたす。
  • SupabaseのPostgresず連携しおもトランザクションを利甚するこずで、安党にデヌタを保存できたす。

✅ はじめに

アプリ開発で「䞀郚だけ保存されおしたった 」ずいう問題、経隓ありたせんか

たずえば

  • ナヌザヌ登録ずプロフィヌル䜜成を同時にしたい

  • 孊習蚘録ずカテゎリを同時に䜜成したい

そんなずきに掻躍するのが「トランザクション」です。
本蚘事では、Next.js + Prisma + Supabase 環境を前提に、初心者向けに解説しおいきたす。


💡 トランザクションずは

耇数の凊理を「1぀のたずたった凊理」ずしお扱い、党郚成功したずきだけデヌタベヌスに反映する仕組み

぀たり「党郚成功する or 党郚倱敗する」の オヌル・オア・ナッシングな䞖界です。


🛠 どんなずきに䜿う

以䞋のような「耇数のテヌブルをたずめお操䜜する堎面」で䜿いたす

  • users テヌブルに新芏登録し぀぀

  • profiles テヌブルにもデヌタを远加したい

📊 Prisma のトランザクション構文基本圢

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 を通しおすべおの凊理をたずめるこずで、安党な登録凊理が可胜になりたす。


🧠 よくある萜ずし穎

🔄 Next.js × Prisma × Supabase で孊ぶ「トランザクション」の基本ず実践ShiftBブログ

✅ たずめ

  • トランザクションは「党郚成功 or 党郚倱敗」の安心蚭蚈

  • Prisma の $transaction() を䜿おう

  • 䞭では必ず tx を䜿っおすべおの凊理を行うこず

🧪 補足Supabaseずの関係

Prisma は Supabase の Postgres ずも連携可胜です。
Supabase の Auth を䜿っおいる堎合でも、トランザクションで安党にナヌザヌデヌタ・プロフィヌルなどを保存できたす。

シェア

Threads
user
さかした
おじさんでも孊べるをモットヌに。 以前はRuby(3幎)、今は React / Next.js を䞭心に、孊習䞭。
蚘事䞀芧に戻る
Threads
0