- ローカルファーストソフトウェア: データを主にローカルに保存し、必要なときだけインターネット経由で同期またはバックアップするソフトウェア
- Local-First の問題点
- ユーザーがデータを所有し、制御できる点は良い
- しかし、複数デバイス間でのオンライン同期には依然として同期サーバーが必要
- 会社が倒産すれば同期サーバーも消えるため、同期できなくなる
- どう解決すればよいのか?
Dropboxを使った解決策
- クラウド同期: Dropbox、iCloud Drive、OneDrive、Google Drive など、さまざまなクラウドベースのファイル同期ソリューションを利用できる
- 利点: すでに多くの人が使っており、複数の実装があるため置き換えも可能
- 欠点: ファイル同期は単純なプロトコルであり、同期イベントや競合解決機能が不足している
バージョン1: とても単純な方法
- 状態をファイルに保存し、Dropboxで同期する
- 2台のデバイスで状態を変更すると競合ファイルが発生する
- CRDT(Conflict-free Replicated Data Types) を使えば競合を解決できる
- 競合ファイルを開いて状態をマージし、再保存する方式で解決する
バージョン2: クライアントごとのファイル
- 各クライアントに固有のファイルを割り当てて競合を防ぐ
- 他のクライアントのファイルが変更されたらそれを検知してマージする
- ローカルでのみ変更するため、Dropboxは競合を報告しない
バージョン3: オペレーションベース
- CRDTが operation-based であれば、操作を別の追記専用ファイルに記録できる
- 各クライアントは自分専用のファイルに記録して競合を防ぐ
- 操作ログが長くなったらファイルをチャンクに分割して同期効率を高める
結論
- ユーザーが完全な制御と所有権を持つローカルファーストアプリケーションを構築するには、データ同期が必要
- Dropboxのようなファイル同期サービスは、シンプルだが効果的な同期方法を提供する
- カスタムソリューションほどリアルタイムではないが、日常的な同期には十分
- たとえば Apple Photos のように、自分の写真を一日の終わりにどこからでも見られる程度で十分
- ユーザーは自分のクラウドを使って、無料で永続的な同期を行える
GN⁺の意見
- ローカルファーストソフトウェアの重要性: ユーザーがデータを直接所有・制御できるため、プライバシー保護とデータセキュリティに有利。
- 同期サービスの限界: Dropboxのようなサービスは基本的な同期は可能だが、複雑な同期シナリオでは限界がある。
- CRDTの活用: CRDTを使うことで競合解決が容易になり、同期の信頼性を高められる。
- 代替ソリューション: Syncthing のようなオープンソースの同期ソリューションも検討に値する。
- 技術導入時の考慮事項: ローカルファーストソフトウェアを導入する際は、同期サーバーの安定性とデータ競合の解決策を十分に検討する必要がある。
1件のコメント
Hacker Newsの意見
ローカルファースト・アプリケーションのバックエンド同期サーバーをローカルでホスティングできるようにすることが重要: 特定の機能を提供するには、単純なファイル同期だけでは不十分。ユーザーがいつでも
workspace.zipを保存し、server.exe/.binをダウンロードしてバックエンドをセルフホストできるようにする。ローカルファースト・アプリケーションの収益化の難しさ: Obsidianモデルのように、基本アプリは無料で提供し、ネットワーク機能に課金する方式がある。Yjsを使ってローカルファースト + コラボレーションアプリを構築することを勧める。
CRDTsが常に最善の選択とは限らない: ファイル同期には適しているかもしれないが、中央サーバーがビジネスロジックを検証し、マージ競合を解決する方がよい場合もある。分散状態機械アプローチは複雑で、保守が難しくなることがある。
RemoteStorageプロトコル: すべてのアプリケーションがこれを実装し、ユーザーが自分のRemoteStorage URLを提供できる。しかし、ほとんどの実装はメンテナンスされていない。
クラウドベースのファイル同期ソリューションの限界: コラボレーションソフトウェアやリアルタイムソフトウェアには適していない。ベンダーロックインなしでコラボレーション機能を提供するモデルが必要。
ローカルファースト・ソフトウェアの利点: 開発が容易になり、ユーザー体験が向上する。NuxtやNextに似た開発者体験を提供するローカルファーストのフレームワークが登場すると予想される。
クラウドストレージのリスク: クラウドプロバイダーがデータを削除したり、アクセスを遮断したりする可能性がある。ローカルファーストのクラウドストレージを使う際は、すべてのファイルをダウンロードするよう設定すべき。
PWAを使った同期の経験: AWSとWebDAVを使って同期するPWAを構築した。同期時間を短縮するには、読み取りおよび書き込み時間を最小限にすることが重要。
クラウドファーストという考え方の限界: 大陸規模のネットワーク障害が発生すれば、クラウドファーストという考え方の問題点が露呈するだろう。
モバイルでのローカルファースト同期の難しさ: iPhoneでは、Dropboxのようなファイル同期をバックグラウンドで処理するのが難しい。