# リアルタイム購読

`wss://<ref>.<zone>/realtime/v1?apikey=<公開キー>`

## 順序

1. 接続すると `ready` が届きます
2. `{"type":"subscribe","channel":"table:notes"}`
3. そのテーブルが変わると `change` が届きます

## 最初に必ずすること

**テーブルごとにリアルタイムを有効にする必要があります。** 有効にしていないテーブルは何も届きません。

`set_realtime { ref, table: "notes", enabled: true }` で有効にし、`list_realtime_tables` で有効なテーブルを確認します。
SQL では Supabase で使っていた文がそのまま使えます（SQL エディタ、`run_sql`、マイグレーション）:

```sql
alter publication supabase_realtime add table notes;
```

SQL の実行が終わったあと、そのテーブルのリアルタイムが有効になります。無効にするには `drop table notes` です。

Supabase で使っていた `alter publication supabase_realtime add table notes` もそのまま実行できます。SQL エディタ・`run_sql`・マイグレーションがこの文を取り出し、残りが終わった後にそのテーブルのリアルタイムを有効にします(`drop table` なら無効にします)。public スキーマのテーブルだけです。

## 見えるものだけが届きます

変更通知も、アクセスルールを通過しなければ配信されません。
公開キーで読めない行は、リアルタイムでも届きません。これがこの機能の要点です。

## その他

`{"type":"broadcast","channel":"room:1","payload":{...}}`: 人と人の間のメッセージ
`{"type":"presence","channel":"room:1","state":{...}}`: 誰が接続しているか

broadcast と presence はどちらも、**そのチャンネルを先に subscribe しないと**受け取れません。
しないと、`error` で「先に subscribe してください」と届きます。

## 設定と非公開チャンネルのルール

```
get_realtime_settings            オン・オフ、公開チャンネルの許可、上限
set_realtime_settings            変更 （渡した値だけ、オーナーと管理者）
list_realtime_policies           realtime_messages テーブルのルール
create_realtime_messages_table   ルールを書くテーブルを作る
add_realtime_policy              ルールのひな形を追加 （signed-in-read | signed-in-write | own-channel）
```

`allow_public` をオフにすると非公開チャンネルだけが使え、入れる人は realtime_messages テーブルのルールが決めます。ルールは開発者以上が追加できます。

---

https://end.blackall.ai/docs/realtime?lang=ja
