Open4

Supabaseのマイグレーション

TohdaTohda

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 で使用することができます。

TohdaTohda

ただ、Supabase CLI にはスキーマを設定するファイルはないようです。
GUIからテーブル情報を作成します。

TohdaTohda

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?
}
TohdaTohda

すべてPrismaを利用してもいいのですが、Supabase CLI の型生成機能や supabase-js を利用したクエリの方が認証周りと連携しやすく、個人的に気に入っています。

  • スキーマ設定:Prisma
  • マイグレーション:Prisma
  • 型生成:Supabse CLI
  • クエリ:supabase-js

といった感じで使いわけるしかないのか?