💻

【Supabase】自動生成されるREST APIを叩いてみよう

に公開

Supabaseとは?

https://supabase.com/
Backend As A Service(以下BaaS)の一種で、Firebaseの代替製品を名乗っている。
実はオープンソースなのでGithubにPublicリポジトリがある。
https://github.com/supabase/supabase

代表的な機能は以下の5つ。今回の記事では主にデータベース機能を利用する。

機能 概要
Database PostgreSQLが採用されたデータベース
Authentication アプリに認証やアクセス制御の機能を組み込む
Storage 画像や動画などを保存するオンラインストレージ
Edge Functions TypeScriptの関数をサーバーレスで実行する
Realtime 同じアプリを利用しているユーザー同士のリアルタイム通信機能

料金形態(2026/2)

AWS AmplifyやFirebaseのような従量課金制ではなく、所謂サブスクである。
Freeプランがあるので、まずは気軽にBaaSに触れてみたいという人にもおすすめできる。

Free Pro Team Enterprise
$0/month $25/month $599/month 要相談

各プランの詳細な差分についてはpricingのページに記載されている。
https://supabase.com/pricing

Supabaseの強みと弱み

強み

  • サービスの利用にかかるコストを予測しやすく、クラウド破産のリスクを低減できる。
  • テーブルを作成するだけでREST APIが自動生成される。
  • BaaSとしてはシンプルな構成で分かりやすい。
  • Row Level Securityを簡単に設定できる。
  • Self-hostも可能。ベンダーロックインのリスクを低減できる。

弱み

  • AWS/GCPの方が高負荷のトラフィックに強い。
  • AWS/GCPほど機能が成熟していないため、企業の基幹インフラとしては採用しにくい。
  • IaaSと比較すると流石に構築の自由度は低い。
  • UIが英語のみで、日本語ローカライズには未対応。

REST APIとは?

過去に書いた記事で解説しているのでそちらを参照してみよう。
https://zenn.dev/lunette/articles/3c8c423e755a54

ハンズオン

前提

  • Supabaseのアカウントは既に作成済みとする。
  • 今回のハンズオンはFreeプランでも問題なく実践できる。
  • <your_supabase_api_key>はSettings -> API Keysのページで発見できる。
    • APIキーは2種類存在するが、今回はデフォルトのPublishable keyを利用する。
  • また、<your-project>の部分にはSettings -> Generalのページに
    記載されているProject IDを当てはめる。

ゴール設定

  • プロジェクトの新規作成ができる。
  • SQL Editorを利用したテーブルの新規作成ができる。
  • curlコマンドを利用してREST APIの動作確認ができる。
  • REST APIの自動生成の利便性を確認する。

プロジェクトの新規作成

  1. Projectsのページで「New project」をクリックする。

  2. プロジェクトの新規作成画面に遷移するので、下記の画像のように情報を入力し
    「Create new project」をクリックする。Database passwordについては
    「Generate a password」をクリックすることで自動生成が可能なので活用してみよう。
    注意点としては「Enable Data API」のチェックボックスは必ずオンにしておくこと。
    これがオフになっているとREST APIの自動生成が行われなくなってしまう。

テーブルの新規作成

今回はSQL Editorを利用してusersテーブルを新規作成してみよう。
SQL Editorのページで下記のSQL文を入力してから「Run」をクリックすると
usersテーブルを新規作成できる。

CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_name TEXT NOT NULL,
  email TEXT,
  age INT,
  phone_number TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

REST APIの動作確認

curlコマンドを利用してREST APIの動作確認をしてみよう。
POST→GET→PATCH→DELETEの順に検証を行う。
Supabaseにおいて、更新はPUTよりもPATCHを使うのが推奨されているため、
今回のハンズオンでもそれに従うものとする。

作業環境

  • Windows11
  • PowerShell

post001.jsonの作成

POSTメソッドの動作確認で利用するJSONファイルを予め作成しておく。

{
    "user_name": "中村 亮",
    "email": "ryonakamura@example.com",
    "age": 33,
    "phone_number": "090-1111-1111"
}

補足として、テーブルのidが下記のような設定であれば
UUIDが自動生成されるため、POST時のid指定が不要となる。
また、created_atも現在時刻が自動的に入るため指定不要である。

Name Type Default Value
id uuid gen_random_uuid()
created_at timestamptz now()

POSTメソッドの動作確認

post001.jsonが保管されているディレクトリで下記のcurlコマンドを実行してみよう。
なお、PowerShellでバッククォート(`)を使用して改行する場合は、
バッククォートの直後に半角スペースが含まれているとエラーになるため要注意。

curl.exe -X POST `
-H "Content-Type: application/json" `
-H "apikey: <your_supabase_api_key>" `
-d "@post001.json" `
"https://<your-project>.supabase.co/rest/v1/users"

GETメソッドの動作確認

先程POSTしたデータが本当にusersテーブルの中に格納されているのかを確認するため、
下記のcurlコマンドを実行してみよう。JSON形式のデータが返却されれば成功である。

curl.exe -X GET `
-H "apikey: <your_supabase_api_key>" `
"https://<your-project>.supabase.co/rest/v1/users"

patch001.jsonの作成

PATCHメソッドの動作確認で利用するJSONファイルを予め作成しておく。

{
    "user_name": "田中 健",
    "email": "tanakaken@example.com",
    "age": 37,
    "phone_number": "090-9999-9999"
}

PATCHメソッドの動作確認

GETメソッドで確認したデータをPATCHメソッドで置換してみよう。
ちなみに<UUID>の部分には先程のGETメソッドで確認したidを入力すればよい。
成功したら先程のGETメソッドをもう一度実行してちゃんと置換されているかも確認する。

curl.exe -X PATCH `
-H "Content-Type: application/json" `
-H "apikey: <your_supabase_api_key>" `
-d "@patch001.json" `
"https://<your-project>.supabase.co/rest/v1/users?id=eq.<UUID>"

DELETEメソッドの動作確認

最後に、DELETEメソッドの動作確認をしてみよう。
成功したら先程のGETメソッドをもう一度実行してテーブルの中身が空になっているかも確認する。

curl.exe -X DELETE `
-H "apikey: <your_supabase_api_key>" `
"https://<your-project>.supabase.co/rest/v1/users?id=eq.<UUID>"

おわりに

AWSでREST APIを作成した時と比較すると分かりやすいが、
やはりテーブルの作成直後にREST APIを利用できるというのは
開発スピードの面で非常に大きなアドバンテージとなる。
特に個人開発や小規模な企業においてはかなり有力な選択肢と言っても過言ではないだろう。

Supabaseは「データベース=API」という設計思想を採用しており、
従来のAPIファーストなクラウド構成とは異なる開発体験を提供する。
この思想は特にデータ中心のアプリケーションにおいて高い生産性を発揮するため、
プロジェクト特性に応じて採用を検討する価値は十分にあると言える。

Discussion