RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/AIモデル
AIモデル/2026-03-26上級

Rork × Supabase pgvector のセマンティック検索を実運用へ — インデックス選定・差分再埋め込み・ハイブリッド検索

Rork アプリのセマンティック検索を実運用に載せるための設計です。pgvector の HNSW と IVFFlat を実測で選び、差分再埋め込みで API 呼び出しを抑え、全文検索と統合するまでを扱います。

rork58supabase3pgvector3semantic-searchvector-embeddingsAI31recommendationadvanced3

プレミアム記事

自分の癒し系アプリに検索窓を付けた初日、「眠れない夜に見たい」と入力されたログが残っていました。返ってきた結果は 0 件。データベースには「静寂」「月あかり」「安眠」とタグ付けされた画像が何百枚もあったのに、キーワードが一文字も一致しなかったのです。

言葉ではなく意味で引き当てる仕組みが要る。そう腹に落ちてから、pgvector に手を伸ばしました。

ここでは Rork で構築したモバイルアプリに Supabase pgvector を組み込み、セマンティック検索と AI レコメンデーションを実装します。個人開発の規模(十数万件のレコード、Supabase の小さなインスタンス)でも破綻しない構成を前提にしております。Supabase の認証やリアルタイム機能については Rork × Supabase 認証&リアルタイム機能実装ガイド をご覧ください。

構築するアプリの全体像は次の通りです。

  1. ユーザーが検索クエリを自然言語で入力する
  2. Supabase Edge Function が OpenAI Embeddings API でクエリをベクトル化する
  3. pgvector がコサイン類似度でデータベースを検索する
  4. 結果をスコア付きで Rork アプリに返却する

動かすだけなら、ここまでで足ります。実運用に載せた瞬間に効いてくるのは、この後半で扱うインデックスの選び方と、埋め込みをいつ作り直すかの判断です。

前提知識と環境準備

必要なもの

  • Rork Max アカウント(プロジェクト作成済み)
  • Supabase プロジェクト(Free プランでも pgvector は利用可能)
  • OpenAI API キー(Embeddings API 用)
  • Node.js 18 以上(Edge Functions のローカルテスト用)

ベクトル埋め込みとは

ベクトル埋め込み(Vector Embedding)は、テキストや画像などのデータを高次元の数値ベクトルに変換する技術です。例えば OpenAI の text-embedding-3-small モデルでは、任意のテキストを 1536 次元の浮動小数点数配列に変換します。

意味的に似たテキストは、ベクトル空間上で近い位置に配置されます。「犬の散歩」と「ペットとウォーキング」は、キーワードは異なりますが、ベクトル間の距離は非常に近くなります。

Supabase pgvector のセットアップ

拡張機能の有効化

Supabase ダッシュボードの SQL Editor で以下を実行します。

-- pgvector 拡張を有効化
create extension if not exists vector with schema extensions;
 
-- 商品テーブル(セマンティック検索対象)
create table products (
  id bigserial primary key,
  name text not null,
  description text not null,
  category text not null,
  price numeric(10,2) not null,
  image_url text,
  -- 1536次元のベクトルカラム(OpenAI text-embedding-3-small 対応)
  embedding vector(1536),
  created_at timestamptz default now()
);
 
-- コサイン類似度検索用のインデックス
-- ivfflat は中規模データ(〜100万件)に適したインデックスタイプ
create index on products
  using ivfflat (embedding vector_cosine_ops)
  with (lists = 100);
 
-- RLS(行レベルセキュリティ)を有効化
alter table products enable row level security;
 
-- 認証済みユーザーは全商品を閲覧可能
create policy "Products are viewable by authenticated users"
  on products for select
  to authenticated
  using (true);

検索用 RPC 関数の作成

pgvector でセマンティック検索を行う PostgreSQL 関数を作成します。この関数が検索パイプラインの核です。

-- セマンティック検索関数
-- query_embedding: 検索クエリのベクトル
-- match_threshold: 類似度の閾値(0〜1、高いほど厳密)
-- match_count: 返却する最大件数
create or replace function match_products(
  query_embedding vector(1536),
  match_threshold float default 0.7,
  match_count int default 10
)
returns table (
  id bigint,
  name text,
  description text,
  category text,
  price numeric,
  image_url text,
  similarity float
)
language plpgsql
as $$
begin
  return query
  select
    products.id,
    products.name,
    products.description,
    products.category,
    products.price,
    products.image_url,
    -- コサイン類似度を計算(1 - コサイン距離)
    1 - (products.embedding <=> query_embedding) as similarity
  from products
  where 1 - (products.embedding <=> query_embedding) > match_threshold
  order by products.embedding <=> query_embedding
  limit match_count;
end;
$$;

<=> 演算子はコサイン距離を計算する pgvector のオペレーターです。1 - コサイン距離 でコサイン類似度に変換し、値が 1 に近いほど意味的に似ていることを示します。

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

この記事の続きを読む

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

この記事で得られること
HNSW と IVFFlat を recall@10 と p95 レイテンシで実測比較し、データ規模ごとの選択基準を示します
content_hash による差分再埋め込みで Embeddings API の呼び出しを 9 割以上削減する運用設計
ベクトル検索と全文検索を RRF で統合するハイブリッド検索の SQL 実装
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

AI モデル2026-04-30
Rork で『AI が自動でアルバム化する写真整理アプリ』を作る実装ガイド — Vision × CLIP × pgvector で本番品質のパイプラインを設計する
Rork で写真ライブラリを AI が自動分類するアプリを本気で作るための完全実装ガイドです。Vision で顔・物体・テキストを抽出し、CLIP 埋め込みで意味検索を実現し、Supabase pgvector で類似画像検索を可能にする本番運用パイプラインを、コード付きで一から設計します。
AI モデル2026-04-12
Rork で作る AI フォトエディタアプリ実装ガイド — 画像フィルター・背景除去・スタイル変換をゼロから構築する
Rork を使って AI フォトエディタアプリを構築する完全ガイド。画像フィルター、背景除去、AI スタイル変換、エクスポート機能を実装し、App Store に公開できるプロダクション品質のアプリを作る。
AI モデル2026-07-05
家計アプリのAI分類が『その他』に飲まれていくとき — 静かに崩れる支出仕分けを計測して立て直す運用メモ
Rork で作ったAI家計アプリの支出自動分類は、リリース直後は当たっていても数ヶ月かけて静かに精度が落ち、月末アドバイスまで狂わせます。確信度と分類分布を計測してドリフトを先回りする運用手順を、動くコードとともにまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →