はじめに
最近、個人開発でSupabaseを使用したので
Supabaseの良いところや悪いところなど含め
勉強したことを色々まとめていこうと思います。
Supabaseの特徴
Supabaseは、PostgreSQLベースのオープンソースBaaSです。データベース、認証、ストレージ、API自動生成などバックエンド開発に必要な機能を提供しており、個人開発やスタートアップを中心に人気を集めています。特にSQLが利用できる点や、Row Level Security(RLS)による柔軟なアクセス制御が大きな特徴です。
Supabaseの良いところ
無料で始められる
制限はありますが、無料プランでも2つまでプロジェクトを作成できます。
PostgreSQLを使用できる
Supabaseは普通のSQLで操作できます。
例えば、以下のようなSQL文の知識がそのまま活かせます。
SELECT * FROM users;
認証機能を簡単に実装できる
Supabaseには認証機能が標準で備わっており、メールアドレスとパスワードを用いた認証を簡単に実装できます。
通常、認証機能を自作する場合は、
- ユーザー情報を保存するテーブル作成
- パスワードのハッシュ化
- セッション管理
- ログイン状態の維持
- パスワードリセット機能
などを実装する必要があります。
しかしSupabaseでは、これらの機能があらかじめ提供されているため
開発者は数行のコードを書くだけで認証機能を導入できます。
いくつか参考になる記事を添付しますのでよければ確認してみてください。
管理画面が使いやすい
Supabaseは管理画面(Dashboard)が非常に使いやすく
データベースの操作や確認をブラウザ上で完結できます。
例えば、
- テーブルデータの閲覧
- レコードの追加・更新
- SQLの実行
- ストレージ管理
- 認証ユーザーの確認
などをGUIで操作できます。
特に個人開発では、
「今DBにどんなデータが入っているのだろう?」
と思う場面が多いですが、SupabaseならSQLクライアントを別途準備しなくてもブラウザから簡単に確認できます。
SQL Editorが便利
SQL Editorを利用すると、以下のようなSQLをブラウザ上から直接実行できます。
開発中のデータ確認や不具合調査が非常に楽になります。
SELECT * FROM tasks;
RLS設定もGUIから確認できる
SupabaseではRLS(Row Level Security)の設定状況を管理画面から確認できます。
例えば、
- 自分のデータだけ閲覧可能
- 自分のデータだけ更新可能
といったアクセス制御を実現できます。
実際に私もSupabaseから「RLSが無効になっているため、テーブルが公開状態になっている」という警告メールを受け取ったことがありました。
個人開発ではつい後回しにしがちですが、認証機能を利用する場合やユーザーデータを扱う場合は、RLSの設定も重要だと感じました。
最初は少し難しく感じますが、セキュリティ面では非常に強力な仕組みです。
補足:RLS(Row Level Security)とは
データベースの行(レコード)単位でアクセス権限を制御する機能です。
例えば、タスク管理アプリで「ユーザーAは自分のタスクだけ閲覧できる」「ユーザーBは自分のタスクだけ編集できる」といった制御を実現できます。
Supabaseの悪いところ
一定期間アクセスがないとプロジェクトが停止する
Supabaseの無料プランでは、一定期間アクセスがないプロジェクトは
自動的に休止(スリープ)状態になります。
個人開発では無料で利用できるメリットが大きい反面、この仕様には注意が必要です。
私自身も個人開発したアプリをしばらく放置していたところ、ある日アクセスした際に画面の表示が遅くなり、「サービスが落ちたのでは?」と焦った経験があります。
実際にはサービスが停止したわけではなく、
Supabaseのプロジェクトが休止状態になっていただけでした。
休止状態から復帰するまでには数十秒程度かかる場合があり
その間はアプリの動作が不安定になることがあります。
そのため現在は、定期的にAPIへアクセスする仕組みを導入し、プロジェクトが休止状態にならないよう運用しています。
私は cron-job.org を利用して定期的にAPIへアクセスし
プロジェクトが休止状態にならないよう運用しています。
また、本格的なサービス運用を行う場合は、有料プランへ移行することも選択肢の一つです。個人開発や学習用途では無料プランで十分ですが、安定した運用を求める場合はプラン変更を検討しても良いかもしれません。
無料枠の制限がある
Supabaseは無料プランでも多くの機能を利用できますが
各種リソースには利用上限が設けられています。
例えば、
- データベース容量
- Storage容量
- 転送量(Bandwidth)
- 認証ユーザー数
などに制限があります。
個人開発や学習用途で利用する分には問題になることは少ないですが、サービスの利用者が増えるにつれて制限に近づく可能性があります。
そのため、
- ユーザー数の増加
- 保存データの増加
- 画像やファイルの大量保存
などが発生した場合は、有料プランへの移行を検討する必要があります。
私自身はまだ無料プランの範囲内で利用できていますが、公開サービスとして継続的に運用する場合は、あらかじめ料金体系を確認しておくことが重要だと感じています。
障害発生時は自分で調査する必要がある
Supabaseはデータベースや認証機能などを簡単に利用できる便利なサービスですが、問題が発生した際は基本的に自分で原因を調査する必要があります。
例えば、
- 認証エラーでログインできない
- RLS設定によってデータを取得できない
- データベースへの接続に失敗する
- APIが期待通りのレスポンスを返さない
といったトラブルが発生することがあります。
実際に私も開発中、認証周りの401エラーやSupabaseへの接続エラーに遭遇し、
ログや設定内容を確認しながら原因を特定する必要がありました。
Supabaseを利用することでインフラやバックエンド開発の負担は大幅に軽減されますが、問題が発生した際に原因を切り分けるための知識は依然として必要だと感じています。
※ これはSupabaseに限った話ではなく、多くのBaaSサービスにも共通して言えることです。
さいごに
Supabaseは、データベースや認証機能などバックエンド開発に必要な機能を手軽に利用できる便利なサービスです。
特に個人開発との相性が良く、私自身も実際の開発で活用することで
開発スピードを向上させることができました。
一方で、無料プラン特有の制限やRLSなどのセキュリティ設定については理解しておく必要があります。
これからSupabaseを利用しようと考えている方の参考になれば幸いです。