開発・個人開発

Supabaseの始め方 プロジェクト作成から基本操作まで

Supabaseの始め方 プロジェクト作成から基本操作まで

この記事の要点

SupabaseはPostgreSQLデータベースをAPIで扱えるBaaSで、個人開発に必要なデータベース・認証・ファイル保存を無料プランで始められる。アカウント作成からテーブル作成・データの読み書きまでの手順を解説する。

結論

Supabaseのセットアップはアカウント作成からデータの読み書きまで30分で完了する。無料プランで始められ、個人開発に必要なデータベース・認証・ファイルストレージが一式揃っている。SQLが書ける人なら、FirebaseよりSupabaseの方が直感的に使いやすい。

Supabaseとは

SupabaseはオープンソースのBaaS(Backend as a Service)で、PostgreSQLをベースにしている。Firebaseの対抗馬として登場し、主要な機能は次の通りだ。

機能概要
DatabasePostgreSQL。GUIで操作可能
Authメール・SNS・マジックリンクによる認証
Storageファイルのアップロード・配信
Edge FunctionsDeno製のサーバーサイド関数
Realtimeデータ変更のリアルタイム購読

個人開発でよく使うのは Database と Auth と Storage の3つだ。

アカウント作成とプロジェクトの作成

1. アカウント作成

supabase.comにアクセスし、「Start your project」を選ぶ。GitHubアカウントでサインインすると手間が省ける。

2. プロジェクトの作成

ダッシュボードで「New project」を選択する。

Organization: 自分のアカウント名
Name: プロジェクト名(例:my-media)
Database Password: ランダムで強力なパスワード(保存しておく)
Region: Northeast Asia(ap-northeast-1)← 日本に最も近い

「Create new project」を押すと、プロジェクトのセットアップが1〜2分で完了する。

3. APIキーの取得

プロジェクトのダッシュボードで、Settings → APIに移動する。

キー用途公開可否
URLデータベースへのエンドポイントOK
anon(public) keyフロントエンドから使うRLS設定下でOK
service_role key管理者権限での操作絶対NG(公開禁止)

テーブルの作成

ダッシュボードの「Table Editor」からGUIでテーブルを作成できる。SQLに慣れている場合は「SQL Editor」からCREATE TABLEを実行する方が速い。

例として、アクセスカウント用のテーブルを作る場合:

CREATE TABLE page_views (
  id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
  slug text NOT NULL,
  count integer NOT NULL DEFAULT 1,
  created_at timestamptz DEFAULT now()
);

SQL Editorでこれを実行すると、テーブルが作成される。

JavaScriptクライアントの設定

AstroやNext.jsのプロジェクトから接続するには、Supabase公式のJavaScriptクライアントを使う。

npm install @supabase/supabase-js

接続クライアントを初期化するファイルを作る(例:src/lib/supabase.ts):

import { createClient } from '@supabase/supabase-js';

const supabaseUrl = import.meta.env.SUPABASE_URL;
const supabaseAnonKey = import.meta.env.SUPABASE_ANON_KEY;

export const supabase = createClient(supabaseUrl, supabaseAnonKey);

環境変数は.envファイルに設定する:

SUPABASE_URL=https://xxxx.supabase.co
SUPABASE_ANON_KEY=eyJhbGci...

データの読み書き(CRUD)

SupabaseクライアントはSQLライクな記法でデータを操作できる。

データの取得(SELECT)

const { data, error } = await supabase
  .from('page_views')
  .select('slug, count')
  .order('count', { ascending: false })
  .limit(10);

if (error) console.error(error);
console.log(data);

データの挿入(INSERT)

const { error } = await supabase
  .from('page_views')
  .insert({ slug: 'my-article', count: 1 });

データの更新(UPDATE)

const { error } = await supabase
  .from('page_views')
  .update({ count: 5 })
  .eq('slug', 'my-article');

データの削除(DELETE)

const { error } = await supabase
  .from('page_views')
  .delete()
  .eq('id', 1);

Row Level Security(RLS)の設定

RLSは、テーブルへのアクセスを行レベルで制御するPostgreSQLの機能だ。Supabaseでは、anon keyを使ったフロントエンドからの操作に対してRLSを設定することがセキュリティの基本になる。

RLSを有効にするだけで、ポリシーを設定するまで全てのアクセスがブロックされる。

-- RLSを有効化
ALTER TABLE page_views ENABLE ROW LEVEL SECURITY;

-- 全員が読み取り可能なポリシー
CREATE POLICY "Allow read" ON page_views
  FOR SELECT USING (true);

-- 全員が挿入可能なポリシー(カウンター用)
CREATE POLICY "Allow insert" ON page_views
  FOR INSERT WITH CHECK (true);

認証が必要な操作(更新・削除)には、認証済みユーザーだけに許可するポリシーを設定する。

-- 認証済みユーザーだけが更新できる
CREATE POLICY "Allow update for authenticated" ON page_views
  FOR UPDATE USING (auth.role() = 'authenticated');

RLSの詳細はSupabaseの行レベルセキュリティ(RLS)入門で解説している。

Supabaseダッシュボードの活用

Table EditorはSpreadsheetに近い感覚でデータを確認・編集できる。開発中の動作確認やデータの修正に便利だ。

SQL Editorでは任意のSQLを実行できる。複雑なクエリのデバッグや、バルクデータの処理に使える。

LogsメニューではAPIのアクセスログ・エラーログを確認できる。API呼び出しが想定通り動いているかを確認するときに役立つ。

アクセスカウンターの実装についてはSupabaseでアクセス数カウンターを作るで、問い合わせフォームの実装については問い合わせフォームをSupabase+Resend+Slackで作るで解説している。

まとめ

Supabaseのセットアップは、プロジェクト作成→APIキー取得→クライアントライブラリのインストール→RLS設定の順で進む。無料プランで始められ、PostgreSQLの機能をそのまま使えるため、SQLに慣れている個人開発者には使いやすい選択肢だ。最初にRLSを適切に設定しておくことが、セキュリティを保ったまま開発を進める上で重要になる。

よくある質問

Supabaseは無料で使えますか

Freeプランでは、500MBのデータベース・月200万件のAPIリクエスト・1GBのファイルストレージが使えます。月間10万PV以下の個人サイトなら無料枠内で十分運用できます。アクティブなプロジェクトがない状態が1週間続くと一時停止されますが、再開は簡単にできます。

SupabaseとFirebaseはどちらを選べばいいですか

データベースにSQLを使いたい・オープンソースで自己ホスティングも視野に入れたい場合はSupabase、NoSQLのドキュメントDB・リアルタイム同期・Googleとの連携を重視する場合はFirebaseが向いています。個人開発では、SQLの知識があればSupabaseが扱いやすいです。

プログラミングが分からなくてもSupabaseは使えますか

SupabaseのダッシュボードにはGUIのテーブルエディタがあり、SpreadsheetのようにデータをCRUDできます。APIを使った連携にはJavaScriptの基礎が必要ですが、ダッシュボードだけでデータ管理する用途なら技術的な敷居は低いです。

SupabaseのAPIキーを公開しても大丈夫ですか

anon keyはブラウザから使うことを前提に設計されており、Row Level Security(RLS)を正しく設定していれば公開しても安全です。service_role keyは絶対に公開してはいけません。フロントエンドではanon keyのみ使い、管理者操作はサーバーサイドかEdge Functionsで行います。