realtime-sync について
分散したクライアントとサーバーをつなぐリアルタイム同期アーキテクチャ向けのスキルです。WebTransport、トランザクショナルアウトボックス、CRDTによる共同編集、プレゼンス、AIトークンストリームの処理を扱います。
主な機能
- 01WebTransportの双方向・単方向ストリーム
- 02トランザクショナルアウトボックス同期
- 03CRDTによる共同編集
- 04プレゼンスとシーケンス追跡
- 05AIストリームのバッチ処理とバックプレッシャー
活用シーン
- 01リアルタイム共同編集UIの設計
- 02信頼性の高いDBからクライアントへの更新計画
- 03プレゼンスとメッセージ欠落への対応
- 04画面の揺れを抑えたAIトークンストリームの描画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill realtime-syncインストール後、Claude Code で/realtime-syncを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/ai-stream-orchestration.mdcrdt-collaboration.mdpubsub-delivery.mdundo-redo.mdwebtransport.md詳細
リアルタイム同期
概要
分散クライアントとサーバー間の、高並行性かつレイテンシー50ms未満の同期を設計します。WebTransport(HTTP/3)の双方向ストリーミング、データベースと同期の整合性を保つトランザクショナル・アウトボックスパターン、共同編集のためのCRDT、AIトークンストリームのオーケストレーションを扱います。
基本原則は、データベースを信頼できる唯一の情報源とすること(リアルタイムチャネルは通知を行い、永続化はしません)、CRDTで同時編集時のロックをなくすこと、高頻度ストリームによるUIのちらつきをバックプレッシャー管理で防ぐことです。
使用する場面: リアルタイムの共同作業UI、pub/subメッセージング、WebTransport/WebSocket接続、ライブAIトークンストリーム、プレゼンス管理、CRDTによる競合解決、マルチプレイヤーアプリケーション。
使用しない場面: バッチ処理パイプライン、静的コンテンツ配信、リアルタイム要件のないリクエスト/レスポンスAPI、オフライン専用アプリケーション。
クイックリファレンス
| パターン | アプローチ | 主なポイント |
|---|---|---|
| WebTransport | new WebTransport(url) + await ready | HTTP/3で多重化します。新規プロジェクトではWebSocketの代替となります |
| 双方向ストリーム | transport.createBidirectionalStream() | リクエスト/レスポンス用の { readable, writable } を返します |
| 単方向ストリーム | transport.createUnidirectionalStream() | 一方向のプッシュ用に WritableStream を直接返します |
| データグラム | transport.datagrams.writable | 高頻度の状態更新向けに、UDPのような信頼性のない配信を行います |
| 接続統計 | transport.getStats() | smoothedRtt、bytesSent、packetsLost を返します |
| トランザクショナル・アウトボックス | 1つのトランザクション内でDB書き込みとアウトボックスへの挿入を行います | CDCワーカーがチャネルに送信し、状態のずれを防ぎます |
| シーケンス追跡 | すべてのメッセージにシーケンスIDを付与します | 再接続時に巻き戻し、取りこぼしたメッセージを取得します |
| CRDTによる共同作業 | Yjs(テキスト)またはAutomerge(JSON状態) | ロックなしで競合のない同時編集を実現します |
| CRDTアウェアネス | y-protocols/awareness モジュール | カーソル、選択範囲、ユーザーのプレゼンスを追跡します |
| CRDTの元に戻す/やり直し | trackedOrigins を指定した Y.UndoManager | 選択的な元に戻す操作のため、ローカルユーザーの操作のみを追跡します |
| プレゼンス | ハートビートベースのユーザー追跡 | ゾンビクライアントを確実にクリーンアップするため、エピデミックブロードキャストを使います |
| AIストリームのバッチ処理 | トークン描画に requestAnimationFrame を使用します | 高頻度の更新によるUIのちらつきを防ぎます |
| バッファリングとバッチ処理 | 同期によってトリガーされる更新に useTransition を使用します | 同期が集中している間、緊急性の低い再レンダリングを遅延させます |
| バックプレッシャー | バッファーサイズの上限を設定し、強制フラッシュします | トークンの到着が描画より速い場合のメモリ蓄積を防ぎます |
| WebSocketフォールバック | まずWebTransportのサポートを検出します | 企業のファイアウォールではUDP/HTTP/3がブロックされる場合があります |
| シリアライズ | Protocol BuffersまたはMessagePack | 100Hz以上のストリームではJSON.stringifyを避けます |
| Web Workerトランスポート | Web Worker内でWebTransportを処理します | UIスレッドのブロックを防ぎます |
| チャネルの多重化 | 1つのソケットで複数のチャネルをサブスクライブします | すべてのサブスクリプションで単一のトランスポート接続を共有します |
よくある間違い
| 間違い | 正しいパターン |
|---|---|
| リアルタイムメッセージを主要な信頼できる情報源として使う | 状態はデータベースに保存し、リアルタイム通知は変更を知らせるために使う |
高頻度ストリーム(100Hz以上)で JSON.stringify を使う | シリアライズには Protocol Buffers または MessagePack を使う |
| クライアントがメッセージを取りこぼしたときのシーケンスのずれを無視する | Sequence ID と、クライアント側で巻き戻す仕組みを実装する |
| 並行アクセスにグローバルロックを実装する | 競合のない共同作業には Optimistic UI と CRDT を使う |
| 多重化が必要な新規プロジェクトでも WebSockets を使い続ける | 双方向の多重化ストリームには WebTransport(HTTP/3)を使う |
| 上限のない履歴によって CRDT ドキュメントが肥大化する | 履歴が不要なフィールドにはスナップショット(LWW)を使う |
| アンマウント時に WebTransport ストリームを閉じ忘れる | トランスポートのクラッシュを防ぐため、ストリームを明示的に閉じる |
yjs から Awareness をインポートする | import { Awareness } from 'y-protocols/awareness' を使う |
UndoManager の追跡対象の origin として ydoc.clientID を使う | doc.transact() に渡すカスタムトランザクション origin を使う |
| AI のトークンを受信するたびに React が再レンダリングされる | requestAnimationFrame でトークンをまとめ、フレームごとに一度だけフラッシュする |
WebTransport の closed プロミスを処理しない | 予期しない切断を検出するため、transport.closed を監視する |
委任
local-firstスキルが利用可能な場合は、ローカルファーストアーキテクチャの判断、同期エンジンの比較、クライアントストレージの選定を委任してください。electricsqlスキルが利用可能な場合は、ElectricSQL のシェイプベースの Postgres 同期パターンを委任してください。
- トランスポートプロトコルの選択肢とレイテンシのベンチマークを調査する:
Exploreエージェントを使って WebTransport、SSE、WebSocket のトレードオフを比較します - CDC パイプラインを使ったトランザクショナル・アウトボックスパターンを実装する:
Taskエージェントを使ってデータベーストリガー、アウトボックステーブル、バックグラウンドワーカーを設定します - 共同編集のリアルタイムアーキテクチャを設計する:
Planエージェントを使って CRDT 戦略、プレゼンス管理、競合解決のフローを策定します - 複数ストリームに対応する AI オーケストレーションコンポーネントを構築する:
Taskエージェントを使ってバックプレッシャーに対応した並列トークンストリームのレンダリングを実装します - リアルタイム接続のライフサイクル管理を監査する:
Reviewエージェントを使ってストリームのリーク、クリーンアップ漏れ、再接続処理を確認します