協調編集

複数のユーザーが同時に同じドキュメントやコードを編集できる仕組み。ネットワーク遅延と操作の競合をどう解決するかが核心的な課題となる。

核心的な課題

ネットワーク遅延がある環境では、操作の到達順序が保証されない。単純に「後勝ち」にすると、一方の編集が失われる(Lost Update問題)。

User A: "Hello" → "Hello World"  (位置5に" World"を挿入)
User B: "Hello" → "Hi"           (位置0-4を"Hi"に置換)

同時に実行された場合、どちらが正しい最終状態か?

主要なアプローチ

Operational Transformation (OT)

競合する操作を変換して調整するアプローチ。中央サーバーが操作を変換・適用する。Google Docsが採用。詳細はOperational Transformationを参照。

CRDT

数学的に競合が起きないことを保証するデータ構造。各操作に一意のIDを付与し、どの順序で適用しても同じ結果になるよう設計。サーバーレスでも動作可能。詳細はCRDTを参照。

オフラインファースト設計

CRDTベースの協調編集は、オフライン中に行った編集を後でオンラインになった際に同期できる。ネットワーク接続が不安定な環境でも安定して動作する。

カーソル・プレゼンス

技術的な編集同期だけでなく、「他のユーザーが今どこを編集しているか」を表示するカーソル・プレゼンス機能もUXの重要な要素。YjsのCollaborationCursorなどで実装できる。

代表的な実装

関連