AIアプリを開発するとき、バックエンドの構築に多くの時間を取られていませんか?Supabaseを使えば、データベース・認証・API・リアルタイム通信・ベクトル検索まで、AIアプリに必要なバックエンド機能をPostgresベースで一気に構築できます。本記事では、SupabaseをAIアプリのバックエンドとして活用する具体的な方法を解説します。
なぜSupabaseがAIバックエンドに最適なのか
Supabaseは「The Postgres Development Platform」を掲げるオープンソースのBaaSです。AIアプリ開発において特に強力な理由は以下の通りです。
- pgvectorによるベクトル検索:セマンティック検索やRAG(検索拡張生成)をPostgres内で完結
- Edge Functions:Denoベースのサーバーレス関数をエッジで実行、AIモデルの推論にも対応
- Realtime:10,000以上の同時接続を処理し、AIの応答をリアルタイムで配信
- 認証・RLS:Row Level Securityでユーザーごとのデータアクセスを自動制御
- 即座にAPIが生成:テーブルを作るだけでREST/GraphQL APIが自動生成
最大のメリットは、「最良のベクトルデータベースは、あなたが既に使っているデータベース」という思想です。専用のベクトルDBを別途用意する必要がなく、既存のPostgresインフラにAI機能を追加できます。
Edge FunctionsでAI推論を実装する

Supabase Edge Functionsは、TypeScript(Deno)で書くサーバーレス関数です。グローバルに分散配置され、ユーザーに近い場所で実行されるため、低レイテンシーなAI処理に最適です。
組み込みAIモデルの活用
Edge Functionsにはgte-smallモデルが組み込まれており、外部APIなしでテキストエンベディングを生成できます。
const model = new Supabase.ai.Session('gte-small');
const embeddings = await model.run('こんにちは世界', {
mean_pool: true,
normalize: true,
});
外部LLM APIとの連携
OpenAI、Anthropic、Google GeminiなどのAPIをEdge Functions内から呼び出すことも可能です。ストリーミングレスポンスにも対応しており、ChatGPTのようなリアルタイム応答体験を実装できます。
import OpenAI from 'jsr:@openai/openai';
const openai = new OpenAI({
apiKey: Deno.env.get('OPENAI_API_KEY'),
});
Deno.serve(async (req) => {
const { message } = await req.json();
const stream = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [{ role: 'user', content: message }],
stream: true,
});
// ストリーミングレスポンスを返す
});
pgvectorでセマンティック検索を実装する

AIアプリの核となるセマンティック検索を、Supabaseなら数ステップで構築できます。
ステップ1:拡張機能を有効化
CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA extensions;
CREATE EXTENSION IF NOT EXISTS pgmq;
CREATE EXTENSION IF NOT EXISTS pg_net WITH SCHEMA extensions;
ステップ2:ベクトルカラムを持つテーブルを作成
CREATE TABLE documents (
id INTEGER PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
title TEXT NOT NULL,
content TEXT NOT NULL,
embedding HALFVEC(1536),
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX ON documents
USING hnsw (embedding halfvec_cosine_ops);
halfvec(1536)を使うことで、通常のvectorの半分のストレージで済み、OpenAIのtext-embedding-3-smallモデルと互換性があります。HNSWインデックスにより、コサイン類似度による高速検索が可能です。
ステップ3:自動エンベディング生成
Supabaseの真骨頂は、データベーストリガーとEdge Functionsを組み合わせた自動エンベディング生成です。レコードが挿入・更新されると、トリガーがpgmqキューにジョブを追加し、pg_cronが定期的にEdge Functionを呼び出してエンベディングを生成します。
- pgmq:ジョブキューの管理とリトライ機能
- pg_net:PostgresからEdge Functionsへの非同期HTTPリクエスト
- pg_cron:10秒間隔でのバッチ処理スケジューリング
- データベーストリガー:コンテンツ変更を検知して自動キューイング
この仕組みにより、アプリケーション側のコードを一切変更せずに、データの追加・更新だけでエンベディングが自動的に最新状態に保たれます。
Realtimeで「考えるAI」を体感させる

SupabaseのRealtime機能を使えば、AIの処理状況をユーザーにリアルタイムで伝えられます。
- ステータス更新:AIの処理状況(「分析中...」→「回答生成中...」→「完了」)をリアルタイム表示
- 協調編集:複数ユーザーが同じAIセッションを共有し、応答を同時に閲覧
- バックグラウンドジョブの監視:テーブルのRealtimeサブスクリプションでジョブ完了を検知
10,000以上の同時接続をサポートしているため、大規模なAIサービスでも安心して利用できます。
実践:RAGチャットボットを構築する流れ
ここまでの要素を組み合わせて、RAG(Retrieval-Augmented Generation)チャットボットの構築フローを紹介します。
- ドキュメント登録:Supabaseのテーブルにドキュメントを保存 → トリガーで自動エンベディング生成
- ユーザー質問の処理:Edge Functionで質問テキストをエンベディングに変換
- 類似ドキュメント検索:pgvectorのコサイン類似度でtop-k件を取得
- LLMに回答生成を依頼:検索結果をコンテキストとしてLLM APIに送信
- 結果の配信:Realtimeで応答をストリーミング配信
この一連のフローが、すべてSupabaseのエコシステム内で完結します。外部のベクトルDB、キューサービス、WebSocketサーバーを別途用意する必要はありません。
まとめ
Supabaseは、AIアプリのバックエンドに必要な要素をPostgresという一つのプラットフォームに統合しています。Edge Functionsでの推論実行、pgvectorでのセマンティック検索、自動エンベディング生成パイプライン、Realtimeでのストリーミング配信。これらを組み合わせることで、従来なら複数のサービスを組み合わせて数週間かかっていたバックエンド構築が、数時間から数日で完了します。AIアプリのアイデアがあるなら、まずはSupabaseで試してみてください。驚くほど速く、本格的なバックエンドが手に入るはずです。

