モバイルアプリのオフライン優先同期コンフリクト
· 7分で読める
オフライン優先UXは継続性を約束し、同期は結果整合性を約束します。明示的なコンフリクトモデルがないと、ユーザーは重複アクション、失われた編集、機内でのみ再現するサポートチケットを見ます。
ユーザーが実際に当たるコンフリクトに名前を付ける
すべての衝突がマージ問題ではありません。重複意図もあります:不安定なトンネルで「支払い」を二度タップし、二つの振込をキューし、接続復帰時に調整する。別のデバイスから同じフィールドへの本当の編集もあります。同期層には別戦略が必要です—アクション用の冪等キー、状態用の構造化マージ。
スタッフチームはエンティティごとにコンフリクトクラスを文書化します:追記のみイベント、LWWスカラー、集合和、「人間必須」マージ。プロダクトが望む結果を説明できないなら、クライアントで推測すべきではありません。
正直なクライアントUXと退屈なサーバールール
ラストライトウィンは低リスク設定には十分;エスカレーションなしの金銭・在庫・医療メモには不可。どのデバイスが勝ち、何が捨てられ、ポリシーが許せばどう取り消すかの出所付きでサーバーマージ結果を見せます。
クライアント生成IDでミューテーションをキューし、リトライ安全APIを使います。サーバーは重複を認識し、副作用を二重適用せず元の結果を返すべきです。
- ユーザー可視の各ミューテーションに冪等キー
- プロダクト署名付きのエンティティ別コンフリクト方針
- 両バージョンを見せるコンフリクト画面、静かな上書きではない
- 同期バックログ指標:キュー深さ、経過時間、OS版別失敗率
コラボがプロダクトならCRDT
複数ユーザーがリアルタイムで共有成果物を編集する—ホワイトボード、リスト、共同メモ—とき、CRDTやOTは素朴なタイムスタンプに勝てます。コストは複雑さ、テスト負荷、より難しいサポート物語です。オフラインコラボがコア価値のとき採用し、ブログがかっこよかったからではありません。
CRDTでも認可、コンパクション、コールドスタートで無限履歴を再生しないスナップショット境界が必要です。
ラボ外で同期健全性を証明する
機内モード、時計ずれ、部分アップロード、キュー途中のアプリキルをシミュレートします。本番ではコンフリクト率、マージ失敗、ユーザー取り消しをサンプリング。リリース後のスパイクはしばしばスキーマや方針変更—「もっとオフライン」ではありません。
オフライン優先は信頼性機能です。同期を決済のように扱い:可観測、オーナー付き、マーケがどこでも約束する前にリハーサル。
2026年9月13日、Berktug Berke Ates が公開。