公式パッケージ · 自動化とインフラ
Supabase のテーブル変更をリアルタイムイベントに
Supabase のテーブル変更を Hibira のイベントとしてブラウザやアプリに届けます。Database Webhook が Edge Function を呼び出し、そこで配信します。
Edge FunctionsSupabase ↗
- Database Webhook が挿入・更新・削除のたびに Edge Function を呼び出し、関数が npm の pusher パッケージで配信します。
- テーブルごとにチャンネル、変更ごとにイベント(insert、update、delete)になるので、ブラウザやアプリは pusher-js などの Pusher クライアントで購読できます。
サインインすると、コード例にご自身のクラスターホストが入ります。 サインイン
設定する
supabase functions new hibira-broadcast supabase secrets set HIBIRA_APP_ID=YOUR_APP_ID HIBIRA_APP_KEY=YOUR_APP_KEY \ HIBIRA_APP_SECRET=YOUR_APP_SECRET HIBIRA_HOST=ws.hibira.io \ WEBHOOK_SECRET=a-long-random-string関数からテーブルの変更を配信する
// supabase/functions/hibira-broadcast/index.ts import Pusher from 'npm:pusher@5'; const env = (k: string) => Deno.env.get(k) ?? ''; const pusher = new Pusher({ appId: env('HIBIRA_APP_ID'), key: env('HIBIRA_APP_KEY'), secret: env('HIBIRA_APP_SECRET'), host: env('HIBIRA_HOST'), port: '443', useTLS: true, }); // A Database Webhook posts { type, table, record, old_record }. Deno.serve(async (req) => { if (req.headers.get('x-webhook-secret') !== env('WEBHOOK_SECRET')) { return new Response('forbidden', { status: 403 }); } const { type, table, record, old_record } = await req.json(); // orders → channel "orders", event "insert" / "update" / "delete" await pusher.trigger(table, type.toLowerCase(), record ?? old_record); return new Response('ok'); });テーブルの変更を関数に送る
; supabase functions deploy hibira-broadcast --no-verify-jwt ; Then in the Supabase dashboard: Database → Webhooks → Create a new hook Table = public.orders Events = Insert, Update, Delete Type = Supabase Edge Functions Edge Function = hibira-broadcast HTTP Headers = x-webhook-secret: a-long-random-string使う
import Pusher from 'pusher-js'; const pusher = new Pusher('YOUR_APP_KEY', { cluster: 'hkg', wsHost: 'ws.hibira.io', wsPort: 443, wssPort: 443, forceTLS: true, enabledTransports: ['ws', 'wss'], }); pusher.subscribe('orders').bind('insert', (row) => { console.log('New order', row); });
始める前に
- Database Webhook から呼べるよう関数は --no-verify-jwt でデプロイするため、毎回のリクエストで共有シークレットのヘッダーを確認します。
- 公開チャンネルに流すのは誰が見てもよい行だけにしてください。ユーザーごとのデータは private-user-<id> チャンネルに配信し、Supabase のセッションを確認する別の Edge Function で購読を署名します。
ダッシュボードのアプリキーを使ってください。シークレットはサーバー側だけに置きます。チャンネル、イベント、認可エンドポイントは Pusher とまったく同じように動作します。 無料でアカウントを作成 →