← inaro.devAI駆動開発 学習ツール

Supabaseをはじめる

なぜ学ぶか: 「DB+認証+API」をひとまとめで提供してくれるのがSupabase — AIが生成する個人開発アプリのデータ層の定番です。特に重要なのが「anonキーはなぜ公開してよいのか」という問い。この答え(RLSがあるから)を理解しないまま使うのが、AI生成アプリの最も危険なパターンです。

Supabase=DBのフルセットサービス

本物のデータベースに、認証・自動生成API・管理画面が付いてきます。無料枠で個人開発は十分始められます。

SQLを書かずに操作できる

supabase.from("posts").select()のように、SQLを直接書かずにデータを操作します(裏ではSQLに変換されます)。

anonキー=公開前提の入場券

NEXT_PUBLIC_を付けてブラウザに置いてよい特殊なキー。「公開してよい」の根拠は次のRLS— キーは入口を示すだけで、権限は行単位で別に守られるからです。

service_roleキーは絶対秘密

もう1つの「全権キー」はRLSを無視できます。サーバー専用(無印の環境変数)で、NEXT_PUBLIC_に載せたら即事故。2つのキーの区別が要です。

コード例

// lib/supabase.ts — クライアントの作成(プロジェクトで1回だけ)
import { createClient } from "@supabase/supabase-js";

export const supabase = createClient(
  process.env.NEXT_PUBLIC_SUPABASE_URL!,      // プロジェクトの住所
  process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!, // 公開前提の入場券
);

// 使う側: SQL を書かずにデータを操作できる
const { data: posts, error } = await supabase
  .from("posts")
  .select("id, title");

if (error) console.error("取得失敗:", error.message);

anonキーがNEXT_PUBLIC_でよいのは「公開しても安全な設計(RLS)」とセットだから。service_roleキーは正反対の全権キー — 取り違えたら即事故です(仕組みは後のRLSのトピックで)。※新しめのプロジェクトでは「publishable key(sb_publishable_…)」「secret key(sb_secret_…)」という名前になっていることもあります。役割の分担は同じです。

ステップ 1 / 2

※ カリキュラムの内容はAIが生成しており、誤りが含まれる場合があります。正確な情報は公式ドキュメント等でご確認ください。