はじめに
hkob の雑記録の第235回目は、Notion Offline Mode を実現するための基礎技術である CRDT について実験してみます。
昨日紹介した論文
昨日も紹介しましたが、今回のオフラインモードの牽引となった論文がこちらで紹介されています。
ローカルファーストのオタクや inkandswitch のファンのために:
これは sliminality, geoffreylitt, pvh, Martin Kleppmannが共著した論文です
https://inkandswitch.com/peritext/
ブロックベースのリッチテキストCRDTの技術的基盤を世界に提供してくれてありがとう。
For those of local first nerds and @inkandswitch fans:
— Ivan Zhao (@ivanhzhao) 2025年8月19日
This is the paper co-authored by @sliminality @geoffreylitt @pvh Martin Kleppmann https://t.co/FMhf4olmg4
Thank you for laying the technical foundation for block-based, rich text CRDT for the world. https://t.co/u65YwUTpqz
inkandswitch の記事はこちらからアクセスできます。
こちらからもリンクされていますが、CSCW 2022 で受理された論文は ACM digital library で読むことができます。
著者による解説動画とその要約
今回の Notion のオフラインモードを受けて、この論文の著者が論文の解説動画をポストしていました。
Very cool to see Notion shipping offline mode, building on research we did at @inkandswitch on rich text CRDTs!
— Geoffrey Litt (@geoffreylitt) 2025年8月20日
If you're curious why rich text CRDTs matter, why they're hard, and how the Peritext algorithm works, here's an 8min conf talk sharing the key highlights: https://t.co/SwL9PcpAGg pic.twitter.com/v1ssHo3Br6
せっかくなので、この動画を AI ミーティングノートで要約してもらいました。
概要
ジェフリー・リット氏がサラ・リン氏、マーリン・フレットマン氏、ピーター・ベッド・ハーデンバード氏と共同で開発した「パラテックス」というリッチテキスト文書でのコラボレーションを促進するための新しいアルゴリズムのプレゼンテーション。Industrial Research LabとKinswitchが支援している。
コラボレーティブエディティングの課題
リッチテキスト文書での共同編集において、2つの重要な特性を維持する必要がある:
- 最終的な一貫性: 全てのデバイスで同じ最終状態のドキュメントを表示すること
- 意図保存: 編集者の元々の意図を反映した結果になること
意図保存の具体例
- プレーンテキストの場合: 「fox jumped」という文に複数ユーザーが同時に異なる単語(「quick」と「brown」)を挿入する場合、文字が交互に混ざるのではなく、それぞれの単語が独立して配置されるべき
- リッチテキストの場合: あるユーザーが文全体を太字にし、別のユーザーが新しい単語を追加した場合、新しい単語も含めて太字が適用されるべき
- 競合する書式の場合: 一方が赤色、もう一方が青色を同じテキストに適用した場合、一つの色を選択する必要がある
既存のアプローチ
- オペレーショナル・トランスフォーム (OT)
- Google DocsやOffice 365などで使用
- 中央サーバーが必要でスケーラビリティが制限される
- 分散型の編集ワークフローには適さない
- 実装が複雑
- コンフリクトフリー・レプリケーティング・データタイプ (CRDTs)
- 分散型やオフライン編集ワークフローに適している
- プレーンテキスト向けの研究は多いが、リッチテキスト向けの研究は少ない
パラテックスアルゴリズムの特徴
- プレーンテキストCRDTを拡張し、意図保存と一貫性を確保
- テキストシーケンスと共に書式設定操作を維持
- 書式設定操作は特定の文字に接続される
- 書式を削除する場合、操作を削除するのではなく、削除操作を追加する
- 特定の範囲の書式を効率的に追跡・結合できる
リソース
詳細な資料、アルゴリズムのコード、正当性の証明が提供されている。
論文の中で紹介されているサンプルを検証
せっかくなので、論文の中で紹介されていたサンプルを Notion でも試して動画にしてみました。Example 1 です。追加されたテキストも bold になっています。
論文の Sec 3.1 の Example 1 を試してみた。
— hkob|Notion Ambassador (@hkob) 2025年8月21日
Alice: 全体を Bold
Bob: brown を追加
Bob が追加した brown も bold になってる。すごい。 pic.twitter.com/rTTpWzvthz
次は Example 2 では、二人で Bold にします。
Example 2
— hkob|Notion Ambassador (@hkob) 2025年8月21日
Alice: fox までを Bold
Bob: fox から後ろを Bold
Alice の Bold 終了に引きずられずにちゃんと全体が Bold になる pic.twitter.com/N92RUqqe3h
Example 3 では、Bold と Italic の合成を行います。
Example 3
— hkob|Notion Ambassador (@hkob) 2025年8月21日
Alice: fox までを Bold
Bob: fox から後ろを Italic
被っている fox は bold + italic になる。 pic.twitter.com/bEW3C6jcGb
Example 4 は二人で色を設定し合います。
Example 4
— hkob|Notion Ambassador (@hkob) 2025年8月21日
Alice: fox までを赤
Bob: fox から後ろを青
fox は後でマージしたものになるのでどちらになるかは不明 pic.twitter.com/EveiEuPCRB
Example 5 は追加されたテキストの場所によってアノテーションが変わります。
Example 5
— hkob|Notion Ambassador (@hkob) 2025年8月21日
Alice: fox から後ろを Bold
Bob: fox の前に quick, 文の終わりに over the dog を追加
quick はそのまま追加、over the dog は Bold で追加 pic.twitter.com/68WID5EQnC
おわりに
今夜の Notion 座談会ではオフラインにすることができないので、事前に動画を作っておきました。このブログ記事を使ってオフラインモードを紹介してみます。