【要約】小説エディタ「with」のために、単一ユーザー・多端末同期モデルを設計した話 [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者が、iCloudを用いた同期処理において、データの整合性とユーザー体験の両立に直面した。具体的には、以下の課題が発生していた。
- ・更新日時の不整合:自動保存や同期遅延により、どの端末が最新か判別できない。
- ・競合判定の困難さ:複数端末での編集が衝突した際、安全な上書き判断ができない。
- ・UXの乖離:Gitのような高度な概念は、非技術者である小説家には複雑すぎる。
// Approach
開発者が、Gitの複雑さを排除しつつ安全な同期を実現するため、祖先参照を用いたモデルを設計した。主な手法は以下の通りである。
- ・同期方向の分離:
local -> remoteは自動バックアップ、remote -> localはユーザー確認を必須とする。 - ・祖先参照(ancestor chain)の導入:リモート側に履歴のハッシュ列を持たせ、ローカルの状態がその履歴に含まれるかを確認する。
- ・ASTベースの差分管理:文書を段落等の構造単位で扱い、ハッシュ比較により競合を局所化する。
// Result
開発者が、小説家という非技術者層に向けて、直感的かつ安全な同期環境を構築した。その成果は以下の通りである。
- ・安全な自動バックアップ:ローカルが最新の履歴に基づいている場合に限り、自動保存を許可する。
- ・競合の局所化:段落単位での比較により、編集の衝突範囲を最小限に抑制した。
- ・将来的な拡張性:編集者との協業を「提案(PR)」モデルとして設計し、メインラインの保護を両立した。
Senior Engineer Insight
> 非常に理にかなった設計だ。共同編集ではなく、単一ユーザーの「過去の自分との衝突」に焦点を絞った点が肝である。Gitの概念を抽象化し、ASTによる構造的差分を用いることで、UXと整合性を両立している。オフラインファーストなツール開発における、実戦的なパターンと言える。