Open4
Supabaseのマイグレーション
Supabase CLI
Supabase CLIではマイグレーション機能を提供しています。
# テーブルをマイグレーションファイルとして出力
% supabase db commit file_name
# supabase/migrationsディレクトリにファイルが出力されます。
% ls -l supabase/migrations/
-rw-r--r-- 1 test staff 1591 3 10 18:15 20231010022310_file_name.sql
このマイグレーションファイルによって、チーム内の各メンバーがローカルに構築した環境のデータベース構造を共有できるようになります。
本番環境に反映
% supabase db push
データベース スキーマから型を直接生成
リンクしたプロジェクトのSchemaからTS用の型を生成できます。
% supabase gen types typescript --linked > schema.ts
ここで生成された方を supabase-js で使用することができます。
ただ、Supabase CLI にはスキーマを設定するファイルはないようです。
GUIからテーブル情報を作成します。
Prismaのようなスキーマ管理
schema.prisma のようにスキーマをコードで管理したいというのが理想です。
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
title String @db.VarChar(255)
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
model Profile {
id Int @id @default(autoincrement())
bio String?
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
profile Profile?
}
すべてPrismaを利用してもいいのですが、Supabase CLI の型生成機能や supabase-js を利用したクエリの方が認証周りと連携しやすく、個人的に気に入っています。
- スキーマ設定:Prisma
- マイグレーション:Prisma
- 型生成:Supabse CLI
- クエリ:supabase-js
といった感じで使いわけるしかないのか?