0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】Next.js でsupabaseとprismaを利用する

Last updated at Posted at 2025-01-03

はじめに

SupabaseやPrismaは、Next.jsのアプリ開発でよく使うツールなので、
これらを利用するための手順を個人的にまとめてみました。

1. supabaseのセットアップ

まずはsupabaseにサインインしましょう。
特に詰まるところもないと思います。

サインイン後、ダッシュボード画面に遷移するので、
New Projectをクリックして、新規プロジェクトを作成します。

無料プランでは、プロジェクトを最大2つまでしか作成できません。
新たにプロジェクトを作成する場合は、別のアカウントを用意するか、
有料プランをご検討ください。

Project name、Database Password、Regionを入力します。
Database Passwordは後で使用するため、しっかりとメモしておきましょう。

数秒ほど待機するとプロジェクトが作成されます。

ヘッダーのConnectをクリックします。

iScreen Shoter - Google Chrome - 250103104312.jpg

接続先のURLが表示されるので、Session poolerのパスをコピーします。

iScreen Shoter - Google Chrome - 250103105450.jpg

TransactionモードとSessionモードがありますが、
ここではSession poolerを使用してください。
Transactionモードでは、Prismaのマイグレーションが失敗することがあります。
【supabase】Prismaのmigrationがいつまでも終わらない

  • Transaction mode: 6543
  • Session mode: 5432

2. Next.jsのプロジェクトを作成

次に、ターミナルからNext.jsのプロジェクトを作成します。

npx create-next-app@latest

3. prismaの設定

作成したプロジェクトをVSCodeなどのエディタで開いてください。
まずはターミナルからPrismaをインストールします。

npm i prisma
npx prisma init

最新のNode.jsバージョン(23系)では、Prismaがまだ対応していないため、
Prismaの初期化に失敗することがあります。
その場合は、以下の記事を参考にしてください。
prismaを初期化したら謎のメッセージ(Error: (0 , KSe.isError) is not a function)が表示されて失敗した話

無事に初期化が完了すると、プロジェクト内にschema.prismaが作成されます。

iScreen Shoter - Cursor - 250103112239.jpg

schema.prismaには雛形が自動生成されます。
.envファイルを作成し、接続情報を設定しましょう。
iScreen Shoter - Cursor - 250103112433.jpg

.envファイルにsupabaseのセットアップ時にメモしたパスを貼り付けましょう。
[YOUR-PASSWORD]の部分は自分で設定したパスワードに書き換えて下さい。
iScreen Shoter - Cursor - 250103113133.jpg

4. スキーマのマイグレーション

schema.prismaに、作成したいスキーマを追記します。

prisma/schema.prisma
model Todo {
  id          String   @id @default(cuid())
  content     String?
  isCompleted Boolean  @default(false)
  createdAt   DateTime @default(now())
  updateAt    DateTime @updatedAt
}

prismaの書き方については本記事では割愛します。

スキーマを作成した後、ターミナルからマイグレーションを実行します。

npx prisma migrate dev --name init

マイグレーションに成功すると、プロジェクト内にマイグレーションファイル
(実行したSQL)が生成され、Supabaseにテーブルが自動的に作成されます。
iScreen Shoter - Cursor - 250103114339.jpg

iScreen Shoter - Google Chrome - 250103114557.jpg

これでセットアップは完了です。

5. prismaを利用してみる。

Prismaを利用するために、まずクライアントを作成します。
src/lib/prisma.tsを作成し、以下のコードをコピーしてください。

src/lib/prisma.ts
import { PrismaClient } from "@prisma/client";

const globalForPrisma = global as unknown as { prisma: PrismaClient };

export const prisma =
  globalForPrisma.prisma || new PrismaClient();

if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;

Next.jsはコードの変更を即座に反映するため、頻繁にリロードが発生します。
その度にPrismaクライアントが再生成されてしまうため、
上記のように単一のクライアントを生成する実装が推奨されています。
Prisma Client の使用に関するベスト プラクティス

後は、利用したい箇所でPrismaのコードを使用してデータを取得・操作できます。

src/app/pages.tsx
import { prisma } from "@/lib/prisma";

export default async function Home() {
  const todos = await prisma.todo.findMany();
  return (
    todos.map((todo) => (<div key={todo.id}>{todo.content}</div>))
  );
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?