Supabaseについてまとめ

機能
(2023年1月時点)
- Database・・データベース
- Storage・・画像、GIF、およびビデオなどの大容量ファイルの格納
- API・・外部とサービスをつなぐAPIを生成
- Auth・・認証、User権限を付与することができる。SNS認証(Google,Facebookなど)
- Edge Function・・AWS LambdaやAzure Functionsのようなサーバーレスアーキテクチャ
- Observabillty・・監視ログのトレースとデバッグ
利用方法
- Supabaseクラウド
- Docker
- Kubernetes
プラン
Free
下表のとおり制限がありますが、試したり少人数で利用したりする分には充分です。
データベース | 500 MB までダウンロード 2 GB まで(アップロードは無制限)自動バックアップなし |
---|---|
Auth | 50,000 ユーザ/月(MAU)監査証跡 1 時間 |
ストレージ | 1 GB までダウンロード 2 GB まで(アップロードは無制限) |
Edge Functions | 呼び出し 50 万回まで10 個まで |
API・データベースのログ保持 | 1 日間 |
無効化 | 一週間の不使用で無効化 |
サポート | コミュニティによるサポートのみ |
このプランではプロジェクトの数は二つとなっていますが、停止した状態では無制限です!
停止/起動して同時稼働を二つまでに抑えれば三つ以上のプロジェクトを使うことができます。
Pro
プロジェクトあたり月額 $25 です。
データベース | 8 GB まで込みダウンロード 50 GB まで込み(アップロードは無制限)自動バックアップ 7 日間 |
---|---|
Auth | 100,000 MAU まで込み監査証跡 7 日間 |
ストレージ | 100 GB まで込みダウンロード 200 GB まで込み(アップロードは無制限) |
Edge Functions | 呼び出し 200 万回まで100 個まで |
API・データベースのログ保持 | 7 日間 |
サポート | メールサポート |
Read/Write 数が料金に影響しないのが嬉しいところです。
予想外の高額になる心配が無用で、非正規化やカウントのために Functions を組み合わせたり Read 削減に苦労したりしなくて済みます。
Free プランと違い、「~まで込み」と書いている部分では追加料金で制限を超えて利用できます。
Edge Functions は従量制のようには書かれていないので $25 に含まれていると思われます。
Enterprise
データベース | $0.125 / GB容量等は無制限自動バックアップ 30 日間(ポイントインタイム)最適化 $50~ |
---|---|
Auth | 1,000,000 MAU まで込みメールの上限は応相談他は無制限 |
ストレージ | $0.021 / GB転送 $0.07 / GB無制限 |
Edge Functions | 無制限 |
API・データベースのログ保持 | 3 ヶ月間 |
サポート | 年中無休のプレミアムエンタープライズサポート |

- supabase
- Javascript Client Library
-
supabase start
- Supabase をローカルで実行
-
supabase migration
- データベースの移行を管理
-
supabase db push
- 本番環境にリリースするための CI/CD:
-
supabase projects
- Supabase プロジェクトを管理
-
supabase gen types
- データベース スキーマから型を直接生成
-
supabase start
- supabase cli
- Database
- Table View
- Database Functions
- Database Webhooks
- テーブルイベントが発生するたびに、データベースから他のシステムにリアルタイムでデータを送信することができる
- 全文検索
- データベースのテスト
- Supabase CLI を使用してデータベースをテストできる
- サーバーレスAPI
- データベーススキーマから直接3種類のAPIを自動生成
- REST: レストフルインターフェースを介してデータベースと対話
- Realtime: データベースの変更をリスニング
- GraphQL: ベータ版
- データベーススキーマから直接3種類のAPIを自動生成
- 拡張機能
- ダッシュボードからぽちぽちするだけで追加できる
- Auth
- 認証
- Email & password.
- Magic links (one-click logins).
- Social providers.
- Phone logins.
- 認可
- Row Level Security
- ユーザー管理
- 認証
- Edge Functions
- RealTime
- Broadcast
- Presence
- Postgres Changes
- Storage
- 開発フロー
- ローカル
- スキーマの差分作成
- 移行のデプロイ
- TypeScript
- CLIでschemaから型生成できる

Supabase Auth
ユーザ登録に使うコード:
const { data, error } = await supabase.auth.signUp({
email: 'example@email.com',
password: 'example-password',
})
OAuthの場合:
const { data, error } = await supabase.auth.signInWithOAuth({
provider: 'github'
})
Supabase Storage
画像のアップロード:
const { data, error } = await supabase.storage.from('bucket_name').upload('file_path', file)
画像の提供:
supabase.storage.from('bucket').getPublicUrl('image.jpg')
画像のリサイズ:
supabase.storage.from('bucket').getPublicUrl('image.jpg', {
transform: {
width: 500,
height: 600,
},
})
Edge Functions
-
ユーザにもっとも近い地域(エッジ)からバックエンドの関数を提供する機能
-
JavaScriptやTypeScriptのランタイムであるDenoが利用されているため、これらの言語でコードを作成するならば、高速でサービスを提供できる
-
Edge Functionsのユースケース:
- Stripeの決済機能
Realtime
- ユースケース
- リアルタイム性の高いオンラインゲームの実装
AI & Vectors
- もしAI関連のデータをDBで扱いたい場合は、通常のDBではなく『ベクターデータ』を効率的に扱えるDBでなければいけません。
- SupabaseのDBはPostgreSQLベースのRDB(リレーショナル・データベース)ではありますが、pgvectorというライブラリを利用してベクターデータベース化することができます。

この記事では Supabase にログインしてプロジェクトを作成するところまでの手順を解説します。
Supabase でプロジェクトを作成すると以下のようにProject URL(プロジェクトの URL)とAPI Keyを取得でき、実際に Next.js や Flutter などのアプリケーションから Supabase を利用することができます。

Supabaseを使えば、バックエンドをほぼ実装せずとも、認証機能やデータベース操作をする機能をWebアプリケーションに実装できます。

リージョン
北南米、ヨーロッパ、アジア、オセアニアに 12 のリージョンがあります。
東京リージョンは五月頃に追加されました。
- West US (North California)
- East US (North Virginia)
- Canada (Central)
- West EU (Ireland)
- West EU (London)
- Central EU (Frankfurt)
- South Asia (Mumbai)
- Southeast Asia (Singapore)
- Northeast Asia (Tokyo)
- Northeast Asia (Seoul)
- Oceania (Sydney)
- South America (São Paulo)

記事公開より後に Dart 用パッケージが v1.0.0 に達し、そこからさらに改善されてきています。
エラーのハンドリング方法など大きく変わっている部分がありますので、ドキュメントをよくご確認ください。
テーブル結合
ちょっと癖があります。
使う前にここを読んでおくと入っていきやすいと思います。

作成するアプリケーションには、以下機能を持たせていきます。
- ログインページにて、Eメールアドレスとパスワードによるユーザー登録及びログインを行う
- ゲーム終了時の成績(順位と点数)を、ログイン後のメインページで登録/閲覧できる
- ユーザーの成績は、他ユーザーからは閲覧できない
作成時の言語バージョンは以下です。
- React 18.2
- Node.js 16.14
- supabase_js 1.35.4

今回は、電話受付GPTsを作るという想定を考えます。
電話受付GPTsは、かかってきた電話の「お名前、電話番号、用件」を聞きだす、という想定で行きます。
URL : https://chat.openai.com/g/g-9I3vEJLgJ-dian-hua-fan-gpts
所要時間20分程度でActionsを連携させたGPTsができました。

「Supabaseのリージョンが東京の時はVercelのFunction Regionも東京にしようね」です。」

- supabaseのプロジェクトを作成しよう!
- vercelプロジェクトの作成とGitHub連携をしよう!
- VercelとSupabaseを連携しよう!
- GitHubのリポジトリをクローンしよう!
- Vercelの環境変数を取得しよう!
- Supabaseのデータベースに接続しよう!

比較表
サービス名 | データベース互換性 | 主な特徴 | データベース容量 | リージョン | Prisma対応 | その他主要リソース |
---|---|---|---|---|---|---|
PlanetScale | MySQL | - 読込:10 億行 / 月- 書込:1,000 万行 / 月- ブランチ機能(1ブランチまで) | 5GB | 東京 | ◯ | |
Supabase | Postgres | - 無制限のAPIリクエスト- 月間アクティブユーザー:50,000- リアルタイムサブスクリプション- Row Level Security | 500MB | 東京 | ◯ | - CPU:2コア(共有)- RAM:1GB- 帯域幅:5GB- RAM:1GB- 帯域幅:5GB- ファイルストレージ:1GB |
Neon | Postgres | - 計算 20 時間 / 月- ブランチ機能(10ブランチまで) | 0.5GiB | 日本に近いリージョン:シンガポール | ◯ | |
Vercel Postgres | Postgres | - 計算 60 時間 / 月- 書き込み: 256MB / 月 | 256MB | シンガポール | ◯ | - データ転送量:256MB / 月- JS用SDKあり |
TiDB Serverless | MySQL(NewSQL) | - 分散スケールDB- 5000万リクエストユニット(RU)/月 | 行ベースのデータ25GB列ベースのデータ25GB | 東京/大阪 | ◯ | |
CockroachDB Serverless | Postgres(NewSQL) | - 分散スケールDB- 5000万リクエストユニット(RU)/月 | 5GB | シンガポール | ◯ | |
Cloudflare D1 | SQLite | - エッジ分散 SQLite- 読み取り行数:500万/日- 書き込み行数:10万/日 | 5GB | 東京/大阪 |