Supabaseを布教したい
はじめに
Supabaseは、オープンソースのFirebase代替として注目を集めているフルスタックバックエンドサービスです。PostgreSQLデータベースを基盤とし、リアルタイムデータベース、認証、ファイルストレージ、サーバーレス関数、APIなど、モダンなアプリケーション開発に必要な機能を包括的に提供します。この記事では、Supabaseの主な特徴、利点、Firebaseとの違い、使用イメージについて解説します。
Supabaseとは
Supabaseは、Firebaseのオープンソース代替として開発されたバックエンドサービスで、特に開発者にフレンドリーな設計が魅力です。以下の特徴を持っており、手軽に強力なバックエンドを構築することが可能です!
- PostgreSQLデータベースを基盤とした高い拡張性と信頼性
- リアルタイムデータベース機能でデータ変更の自動通知
- 多様な認証方法(電子メール/パスワード、ソーシャルログイン、電話認証など)をサポート
- ファイルストレージ機能で大容量ファイルを効率的に管理
- RESTful APIとGraphQL APIの自動生成による高速開発
- 開発者向けツールとSDKが豊富に用意され、設定や導入が簡単
Firebaseとの比較
SupabaseとFirebaseは、どちらもバックエンドサービスとして非常に優れた選択肢ですが、いくつかの相違点があります。特に以下の点が大きな違いです。
比較項目 | Supabase | Firebase |
---|---|---|
ソースコード | オープンソース | クローズドソース |
データベース | PostgreSQL(リレーショナルDB) | Firestore(NoSQL) |
APIの生成 | 自動生成(REST & GraphQL) | 手動設定(REST) |
認証方法 | メール、ソーシャルログイン、電話 | メール、ソーシャルログイン、電話 |
Supabaseの主な機能
1. データベース
Supabaseは、強力で信頼性の高いPostgreSQLを使用し、SQLクエリやリレーショナルデータベースのフルパワーを活用できます。トリガーやストアドプロシージャ、ビューなど、複雑なデータ操作が可能です。
2. 認証
Supabaseは多様な認証方法をサポートしており、標準的な電子メール/パスワード認証だけでなく、Google、Facebook、GitHubなどのソーシャルログイン、電話認証も簡単に実装できます。また、ユーザー管理やロールベースのアクセス制御(RBAC)も可能です。
3. リアルタイム機能
Supabaseのリアルタイム機能は、PostgreSQLのLISTEN/NOTIFY
を利用しており、データベースの変更をリアルタイムでクライアントに通知します。これにより、チャットアプリやリアルタイムダッシュボードのようなアプリケーションを簡単に作成できます。
4. ストレージ
Supabaseのストレージ機能では、画像や動画、ドキュメントなどの大容量ファイルを効率的に保存・管理できます。ファイルのアップロード、ダウンロード、アクセス制御が簡単に行えるため、メディア管理が必要なアプリケーションに最適です。
5. Edge Functions
Supabaseはサーバーレス関数(Edge Functions)を提供し、任意のカスタムバックエンドロジックを実行できます。これにより、認証やデータベースクエリだけでなく、柔軟なビジネスロジックを簡単に実装できます。
価格
価格表
プラン | 料金 | 機能 |
---|---|---|
Free Tier | 無料 | 基本機能、制限付きのストレージ・リクエスト数 |
Pro Tier | $25/月 | 拡張されたリソースとサポート |
Enterprise Tier | 要相談 | カスタム機能とサポート、専用のインフラストラクチャ |
無料版での制限
無料版では、データベースの最大サイズやリクエスト数、ストレージ容量に制限があります。また、セッションの有効期限を設定するなどの高度な認証機能には有料プランが必要です。
お気に入りポイント
認証も爆速実装
Supabaseの認証は、プリセットされたソーシャルログインの統合が非常に簡単で、短時間で実装できます。多くの設定やカスタマイズが不要なため、開発のスピードが格段に上がります。
RDBの拡張性と安心感
PostgreSQLを基盤としたデータベースであるため、データの一貫性やクエリの柔軟性が保証されています。SQLの豊富な機能を活用することで、複雑なビジネスロジックにも対応可能です。
管理画面が使いやすい
Supabaseのダッシュボードは直感的で操作しやすく、データベースやストレージ、認証などの管理が簡単に行えます。新しいデータベースのセットアップや、リアルタイムデータのモニタリングもスムーズです。
https://supabase.com/docs/guides/database/overview
CLIも用意されている
SupabaseはCLIも提供しており、ターミナルからプロジェクトを操作したい開発者にとって非常に便利です。コマンド一つでデプロイやスキーマの管理ができ、ローカル開発環境と連携して効率よく作業が進められます。
各種アプリ連携が豊富
Vercelと連携させることでVercel側にあげたフロントエンド側とSupabaseの環境変数を自動連携してくれたりします。最近はAuth0も追加されてto Bの要件も割と満たしやすい環境になってそうです。
使用イメージ
アーキテクチャ
SupabaseはフロントエンドフレームワークのNext.jsやデプロイプラットフォームのVercelと相性が良く、シンプルな構成で高速な開発が可能です。
最近はもっぱらこの構成でスタートしています。
フロントからAPIを叩く
Next.jsなどのフロントエンドから、Supabaseが自動生成するREST APIやGraphQL APIを簡単に叩くことができ、アプリケーションのデータ操作を直感的に実装できます。
// フロントエンドでのAPI呼び出し例
import { supabase } from './supabaseClient'
async function fetchData() {
let { data, error } = await supabase.from('items').select('*')
if (error) console.error('Error fetching data:', error)
return data
}
ツラミ
認証ユーザーが扱いにくい
Supabaseの認証機能では、認証用のユーザーデータ(Auth User)とデータベースに保存されたユーザーデータ(DB User)が分かれているため、扱いにくさがあります。これにより、ユーザープロフィールやその他のデータを管理する際に追加の処理が必要です。
こんな感じの実装になります。
無料版だとセッション期限が設定できない
Supabase Authはユーザセッションの有効期間を制限するように管理画面から設定できます。
無料プランでは、セッションの有効期限をカスタマイズできません。セキュリティ上頻繁に認証させたいような場合は、有料プランへのアップグレードが必要です。
CLI使ったmigrationのベストプラクティスが見えてない
migrationファイルを使って開発環境と本番環境の同期を行なっていますが、部分的に反映できない部分が原因でちょくちょくエラーが起きたりするので今だに血迷っています...
というわけで本当はmigrationファイル自体もGithub上から読み込んで同期を図れるのですが、まだ手動で管理しています。
まとめ
向き不向きあるかもしれませんが、この開発体験は最高です。
是非一度お試しあれ!
Discussion