ANTIGRAVITY LABEN
記事一覧/連携・プラグイン
連携・プラグイン/2026-04-04上級

Antigravity と Supabase で本番実装—Auth・RLS・Edge Functions・Realtime の要点

Antigravity と Supabase で本番アプリを組み立てる際の実装パターンをまとめました。Auth・RLS・Edge Functions・Realtime に加え、RLS を有効にした途端に遅くなる理由と直し方、個人開発における費用の分岐点まで扱います。

supabase7antigravity435authrlsedge-functionsrealtime4fullstack5production59

プレミアム記事

RLS を有効にした翌朝、一覧が 4 秒かかっていた

個人開発で運用しているアプリのバックエンドを Supabase に寄せたとき、最初につまずいたのは認証でもストレージでもありませんでした。RLS(行レベルセキュリティ)を全テーブルに有効化した翌朝、それまで 80ms 前後で返っていた一覧クエリが、ローカルの検証データですら 4 秒近くかかるようになっていたのです。

ポリシーの書き方は Supabase の公式ドキュメントどおり。インデックスも張ってある。それでも遅い。原因にたどり着くまで、半日ほど EXPLAIN ANALYZE の出力とにらみ合うことになりました。

Supabase は、PostgreSQL をコアに認証・ストレージ・Edge Functions・Realtime を統合した、よくできた基盤です。個人開発者がひとりで負いきれないバックエンドの重さを、驚くほど軽くしてくれます。Antigravity と組み合わせれば、スキーマ設計から RLS ポリシーの生成、Edge Functions の実装まで、プロジェクトの文脈を踏まえたまま一気に進みます。

ただ、生成されたコードがそのまま本番に耐えるかは別の話です。動くポリシーと、速くて安全なポリシーのあいだには、はっきりした距離があります。

以下では Auth・RLS・Edge Functions・Realtime・Storage の実装パターンを一通り追いながら、その距離を埋めるために私自身が踏んだ判断——RLS の性能設計と、個人開発で費用が跳ねる境目——まで含めて書いております。冒頭の 4 秒がどこへ消えたかは、第 3 章のあとで扱います。


第1章:プロジェクトセットアップと Antigravity の初期設定

Supabase プロジェクトの準備

まず Supabase CLI をインストールし、ローカル開発環境を整えます。Antigravity のターミナルで以下を実行してください。

# Supabase CLI のインストール
npm install supabase --save-dev
 
# プロジェクトの初期化
npx supabase init
 
# ローカル Supabase の起動(Docker が必要)
npx supabase start

起動後、以下の情報が表示されます。

Started supabase local development setup.

         API URL: http://127.0.0.1:54321
     GraphQL URL: http://127.0.0.1:54321/graphql/v1
  S3 Storage URL: http://127.0.0.1:54321/storage/v1/s3
          DB URL: postgresql://postgres:postgres@127.0.0.1:54322/postgres
      Studio URL: http://127.0.0.1:54323
    Inbucket URL: http://127.0.0.1:54324
      JWT secret: super-secret-jwt-token-with-at-least-32-characters-long
        anon key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
service_role key: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Antigravity の RULES.md 設定

Antigravity がプロジェクトの文脈を正確に理解できるよう、RULES.md(または .antigravity/rules.md)を設定します。

# Project Rules
 
## Tech Stack
- Next.js 15+ App Router
- Supabase (PostgreSQL + Auth + Storage + Realtime)
- TypeScript(strict モード)
- Tailwind CSS
 
## Supabase Conventions
- テーブル名: snake_case(複数形)
- カラム名: snake_case
- RLS は全テーブルに必ず有効化すること
- service_role キーはサーバーサイドのみ使用
 
## Security Rules
- クライアントサイドでは anon key のみ使用
- ユーザーデータへのアクセスは必ず RLS で制御
- Edge Functions 内でのみ service_role を使用

この設定があることで、Antigravity はコード生成時に自動的にセキュリティベストプラクティスを適用してくれます。

TypeScript クライアントの設定

// lib/supabase/client.ts — クライアントコンポーネント用
import { createBrowserClient } from '@supabase/ssr'
import type { Database } from '@/types/supabase'
 
export function createClient() {
  return createBrowserClient<Database>(
    process.env.NEXT_PUBLIC_SUPABASE_URL!,
    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
  )
}
 
// lib/supabase/server.ts — サーバーコンポーネント / Server Actions 用
import { createServerClient } from '@supabase/ssr'
import { cookies } from 'next/headers'
import type { Database } from '@/types/supabase'
 
export async function createClient() {
  const cookieStore = await cookies()
  return createServerClient<Database>(
    process.env.NEXT_PUBLIC_SUPABASE_URL!,
    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
    {
      cookies: {
        getAll() {
          return cookieStore.getAll()
        },
        setAll(cookiesToSet) {
          try {
            cookiesToSet.forEach(({ name, value, options }) =>
              cookieStore.set(name, value, options)
            )
          } catch {
            // Server Components からの呼び出しでは無視可能
          }
        },
      },
    }
  )
}

Antigravity にこのファイルを見せておくと、以降のコード生成でクライアントの使い分けを自動的に正確に行ってくれます。


ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
RLS を有効にした途端にクエリが遅くなる原因を EXPLAIN ANALYZE で切り分け、auth.uid() の再評価を InitPlan 化して実測で戻す手順
マルチテナント SaaS の RLS ポリシーを、無限再帰させずに security definer 関数で組む具体的な書き方
個人開発で Supabase の有料プランに切り替える分岐点を、行数・帯域・Edge Functions 実行回数から見積もる考え方
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

連携・プラグイン2026-04-21
Antigravity で作る Gemini Live API リアルタイム音声エージェント — 双方向音声・画面共有・遅延最適化の本番運用ガイド
Gemini Live API で本番品質のリアルタイム音声エージェントを作るために必要なアーキテクチャ、遅延最適化、エラー回復、コスト制御の実装パターンを Antigravity で組み立てる現場向けガイドです。
アプリ開発2026-03-28
Antigravity × Supabase でリアルタイム対応フルスタックアプリを構築する実践ガイド
Antigravity IDE と Supabase を組み合わせて、認証・データベース・リアルタイム同期を備えたフルスタックアプリを構築する方法をステップバイステップで解説します。
連携・プラグイン2026-05-15
Antigravity で Claude Opus 4 / Sonnet 4 を使う — モデル選択の思想と本番実装パターン
Claude Opus 4・Sonnet 4・Haiku 4.5 を Antigravity で活用する実践ガイド。コスト・速度・品質のバランスを取りながら本番環境で動かすための設計思想と実装パターンを解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →