💭

Supabaseを使用する意味とは

2024/05/24に公開

Supabaseとは

SupabaseとはBaaS(Backend as a Service)と呼ばれるバックエンド機能を提供するバックエンドサービスです. 従来の有名なBaaSとしてFirebaseが挙げられますが, SupabaseはFirebaseの代替と謳われており, 公式でも 「Supabase is an open source Firebase alternative.」 と記載があります.そのFirebaseと比較すると, Supabaseは利点がいくつか存在し, 個人的にはSupabaseの利用をおすすめします.
https://supabase.com/

https://x.com/supabase

今回はFirebaseと比較した上で, Supabaseの利点等を挙げていきます.

PostgreSQLベースのリレーションテーブル

SupabaseはPostgreSQLをベースとしているので, 必然的にデータベースはリレーションテーブルとなります.

Firebaseはリレーションテーブルではないので, 例えばFirebaseを利用したブログアプリなんかを考えてみると, ユーザーテーブルからある特定のユーザーを引っ張ってきたとき, そのユーザーが投稿した記事などをセットで引っ張ってくることができないんですよね.

なのでユーザーテーブルからある特定のユーザーを引っ張ってきたとき, そのユーザーに付随するデータもセットで持って来たいときはなんかは, 一旦ユーザー情報を取得して, その過程でユーザーに付随するデータを別のテーブルから別途取得してそれらのデータを混ぜ合わせるっていうのを開発者自らが実装しないといけません.

その点Supabaseはリレーションテーブルなので, リレーションデータの取得が容易にできます.

キーワード検索がSupabase単体で容易に実装できる

これが一番大きい特徴だと思います.

どのようなアプリケーションにも, ユーザーがキーワードを入れて検索する検索機能があると思いますが, このキーワード検索は, Firebase単体だと実装できません.

なのでFirebaseでキーワード検索を実装するには, 外部のサードパーティサービスを別途導入する必要があります. (AlgoliaとかElasticとか...)
これはFirebaseの公式ドキュメントにも記載があります.

https://firebase.google.com/docs/firestore/solutions/search?hl=ja

SupabaseはPostgreSQLベースなので, 外部のサードパーティサービスを導入する必要がなく, Supabase単体で容易にキーワード検索が実装できちゃいます.

まあこれはSupabaseの機能というかPostgreSQLの機能として, キーワード検索のクエリを叩けるって感じです.

ローカル環境の構築が容易にできる

SupabaseはDocker(仮想環境ツール)を使用することで, プロジェクトの環境毎に自分のローカルPC上に仮装のSupabase環境を再現することができます.

そのローカル環境で開発したデータベースやAuthポリシー等をリモート上のSupabase本番環境にプッシュする形で反映させることができます.

Supabaseがローカル環境構築のコマンドを全て用意してくれていて, そのコマンドを叩くだけでDocker内に仮想環境を構築してくれます.

https://supabase.com/docs/guides/auth/server-side/nextjs

Firebaseでもローカル環境の構築は可能ですが, 結構めんどくさいです. その上Firebaseのローカル環境はリモートの本番環境に比べてできないことが多々あるので, その辺もSupabaseの方が良い感じがします.

基本Supabase単体で完結する

Supabaseのデータベースとやり取りをする際, Supabaseが用意してくれているクライアント(SDK)を使用します. なのでPrisma(ORM)とかを導入する必要がないですね. (これはFirebaseにも言えますが...)

データベースに限らず, 認証でも同じことが言えて, 特にNext.jsなんかはAuthにNext.Authを導入することが多いですが, 当然Authに関してもSupabase側で用意してくれているので, AuthもSupabase単体で済みます.

基本的なWebアプリケーションに関しては, Supabase単体で完結してくれるので, これもメリットかなって思います.

Firebaseはクライアントサイドで認証とかデータベース通信をする文化が強い

Firebaseは基本クライアントサイドで認証であったりデータベース通信を行う文化(というかルーツとして)があると思います.

でも今のNext.js(v.14/App Router)って基本はサーバーサイドで諸々行って, サーバーサイドで用意したページをクライアントに渡そうっていうスタンスですよね.

なのでブラウザ上のクライアントが直接Firebaseにアクセスするっていうやり取りよりかは, サーバーサイドでそれら諸々行ってその結果をクライアントに渡すっていう方がNext.jsのスタンスに沿っていると思います.

Firabaseでもサーバーサイド側での実装が可能だったりしますが, そもそもFirebaseの構造や過去の流れ的にもクライアントサイドに寄っているのかなって思います.

なのでSupabaseの方がNext.jsとの親和性が高いのかなって思います.

初学者/ビギナーにもおすすめできる

新しくWebアプリケーションの開発に挑戦してみたい初学者の方やビギナーの方(自分も含めですが...😅)にも個人的におすすめです.

終わりに

以上のことから, 特別な理由がなければSupabaseの採用で良いんじゃないかな~と思います. (Next.jsでのプロジェクトなんかは特に)

Discussion