Supabaseを布教したい

2024/09/09に公開

はじめに

Supabaseは、オープンソースのFirebase代替として注目を集めているフルスタックバックエンドサービスです。PostgreSQLデータベースを基盤とし、リアルタイムデータベース、認証、ファイルストレージ、サーバーレス関数、APIなど、モダンなアプリケーション開発に必要な機能を包括的に提供します。この記事では、Supabaseの主な特徴、利点、Firebaseとの違い、使用イメージについて解説します。

Supabaseとは

Supabaseは、Firebaseのオープンソース代替として開発されたバックエンドサービスで、特に開発者にフレンドリーな設計が魅力です。以下の特徴を持っており、手軽に強力なバックエンドを構築することが可能です!

https://supabase.com/

  • PostgreSQLデータベースを基盤とした高い拡張性と信頼性
  • リアルタイムデータベース機能でデータ変更の自動通知
  • 多様な認証方法(電子メール/パスワード、ソーシャルログイン、電話認証など)をサポート
  • ファイルストレージ機能で大容量ファイルを効率的に管理
  • RESTful APIとGraphQL APIの自動生成による高速開発
  • 開発者向けツールとSDKが豊富に用意され、設定や導入が簡単

Firebaseとの比較

SupabaseとFirebaseは、どちらもバックエンドサービスとして非常に優れた選択肢ですが、いくつかの相違点があります。特に以下の点が大きな違いです。

比較項目 Supabase Firebase
ソースコード オープンソース クローズドソース
データベース PostgreSQL(リレーショナルDB) Firestore(NoSQL)
APIの生成 自動生成(REST & GraphQL) 手動設定(REST)
認証方法 メール、ソーシャルログイン、電話 メール、ソーシャルログイン、電話

https://supabase.com/alternatives/supabase-vs-firebase

Supabaseの主な機能

1. データベース

Supabaseは、強力で信頼性の高いPostgreSQLを使用し、SQLクエリやリレーショナルデータベースのフルパワーを活用できます。トリガーやストアドプロシージャ、ビューなど、複雑なデータ操作が可能です。

https://supabase.com/database

2. 認証

Supabaseは多様な認証方法をサポートしており、標準的な電子メール/パスワード認証だけでなく、Google、Facebook、GitHubなどのソーシャルログイン、電話認証も簡単に実装できます。また、ユーザー管理やロールベースのアクセス制御(RBAC)も可能です。

https://supabase.com/auth

3. リアルタイム機能

Supabaseのリアルタイム機能は、PostgreSQLのLISTEN/NOTIFYを利用しており、データベースの変更をリアルタイムでクライアントに通知します。これにより、チャットアプリやリアルタイムダッシュボードのようなアプリケーションを簡単に作成できます。

https://supabase.com/realtime

4. ストレージ

Supabaseのストレージ機能では、画像や動画、ドキュメントなどの大容量ファイルを効率的に保存・管理できます。ファイルのアップロード、ダウンロード、アクセス制御が簡単に行えるため、メディア管理が必要なアプリケーションに最適です。

https://supabase.com/storage

5. Edge Functions

Supabaseはサーバーレス関数(Edge Functions)を提供し、任意のカスタムバックエンドロジックを実行できます。これにより、認証やデータベースクエリだけでなく、柔軟なビジネスロジックを簡単に実装できます。

https://supabase.com/edge-functions

価格

価格表

プラン 料金 機能
Free Tier 無料 基本機能、制限付きのストレージ・リクエスト数
Pro Tier $25/月 拡張されたリソースとサポート
Enterprise Tier 要相談 カスタム機能とサポート、専用のインフラストラクチャ

https://supabase.com/pricing

無料版での制限

無料版では、データベースの最大サイズやリクエスト数、ストレージ容量に制限があります。また、セッションの有効期限を設定するなどの高度な認証機能には有料プランが必要です。

お気に入りポイント

認証も爆速実装

Supabaseの認証は、プリセットされたソーシャルログインの統合が非常に簡単で、短時間で実装できます。多くの設定やカスタマイズが不要なため、開発のスピードが格段に上がります。

https://supabase.com/auth

RDBの拡張性と安心感

PostgreSQLを基盤としたデータベースであるため、データの一貫性やクエリの柔軟性が保証されています。SQLの豊富な機能を活用することで、複雑なビジネスロジックにも対応可能です。

管理画面が使いやすい

Supabaseのダッシュボードは直感的で操作しやすく、データベースやストレージ、認証などの管理が簡単に行えます。新しいデータベースのセットアップや、リアルタイムデータのモニタリングもスムーズです。

https://supabase.com/docs/guides/database/overview

CLIも用意されている

SupabaseはCLIも提供しており、ターミナルからプロジェクトを操作したい開発者にとって非常に便利です。コマンド一つでデプロイやスキーマの管理ができ、ローカル開発環境と連携して効率よく作業が進められます。

https://supabase.com/docs/guides/cli

各種アプリ連携が豊富

Vercelと連携させることでVercel側にあげたフロントエンド側とSupabaseの環境変数を自動連携してくれたりします。最近はAuth0も追加されてto Bの要件も割と満たしやすい環境になってそうです。

https://supabase.com/partners/integrations

使用イメージ

アーキテクチャ

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)が分かれているため、扱いにくさがあります。これにより、ユーザープロフィールやその他のデータを管理する際に追加の処理が必要です。

こんな感じの実装になります。
https://zenn.dev/matken/articles/use-user-info-with-supabase

無料版だとセッション期限が設定できない

Supabase Authはユーザセッションの有効期間を制限するように管理画面から設定できます。
無料プランでは、セッションの有効期限をカスタマイズできません。セキュリティ上頻繁に認証させたいような場合は、有料プランへのアップグレードが必要です。

https://supabase.com/docs/guides/auth/sessions#limiting-session-lifetime-and-number-of-allowed-sessions-per-user

CLI使ったmigrationのベストプラクティスが見えてない

migrationファイルを使って開発環境と本番環境の同期を行なっていますが、部分的に反映できない部分が原因でちょくちょくエラーが起きたりするので今だに血迷っています...
というわけで本当はmigrationファイル自体もGithub上から読み込んで同期を図れるのですが、まだ手動で管理しています。

まとめ

向き不向きあるかもしれませんが、この開発体験は最高です。
是非一度お試しあれ!

https://supabase.com/

Discussion