App Center Data のオフライン同期を試してみた
App Center Data(現在プレビュー版)のオフライン同期が最近できるようになった(今回リストにも対応した)ので Xamarin.Forms で試してみました。
以下の記事を参考にしてサンプルアプリを作成しました。作成したサンプルの GitHub のリンク先も最後に掲載しておきます(現在修正中なので後日必ず)。
App Center Data とは
App Center Data を使用することで Cosmos DB とアプリを比較的少ないコード量で簡単につなげることができます。
さらに App Center Auth を組み合わせることでユーザー別のデータベースをアプリに実装することができます。App Center Data は App Center Auth 無しでも使用することはできますが、どちらかというと App Center Auth と組み合わせて使うことを前提としている感じです。
オフライン同期とは
(英語ではただの offline
ですが)「オフライン同期」とはデバイスがネットにつながっていない状態で編集(追加や削除)したデータをローカルにキャッシュしておき、ネットにつながった時にクラウド側のデータベース(今回の場合は Cosmos DB)と同期する機能です。App Center Data を使うとここら辺をいい感じでやってくれる(であろうことをここでは期待している)という便利機能です。
以下はデータベースの一覧を取得しているところですが、この1行だけで"オフライン同期"をいい感じでやってくれます(追加や削除などももちろん同様に)。
var result = await Data.ListAsync<TodoItem>(DefaultPartitions.UserDocuments);
オフライン同期を試す
ネットがつながっている状態で追加をおこなうと Cosmos DB と同期されます。試しに5件追加してみたところ、Azure ポータルの Data Explorer で確認をすると5件分のデータが確認できます。
これをデバイス側のネットを切断してデータを追加してみます。アプリ上では追加されましたが Cosmos DB の件数は5件のままです。
この状態からデバイスをネットをつなげると Cosmos DB 側と同期されました。
正確には、
- OnAppearing(ページの再描画)が呼ばれる
- Data.ListAsync が呼ばれる
- (Data.ListAsync の内部で)キャッシュされたローカルのデータをクラウド(Cosmos DB)と同期する
という仕組みのようです。
ローカルの DB は何?
ローカルにキャッシュする時の DB のフォーマットは SQLite を使用しているみたいです。
The Data service supports both writing data offline with a simple store and forward model and reading information offline with a built-in SQLite cache.
最後に
わずかなコード量でオフライン同期が実装できるというのはそれだけで魅力ではあります(少なくともやってみようという気にさせてくれるという意味で)。
App Center Data に限らず Push や Auth など全般的に言えることなのですが、このようにコード量を極力少なく実装できるのが App Center SDK の特徴でもあります。このことは敷居が低いという一方で、細かいハンドリングができないとも言えますが...。
(おまけ)App Center の今後
App Center は今後多くの新機能が予定されています(以下に抜粋)。興味ある方はこの動画をぜひ見てみてください。
- JWT Access (Auth)
- Off-line List Support (Data) ... この記事で紹介
- Third Party Identity Providers (Auth)
- Enterprise Support (Auth)
- View UserProfile Details (Auth)
- Metrics / Browser / Free Tier (Data)
- Notification Hubs V2 (Push)
- Integrate Notification Hub (Push)
- Full Offline Support (Data)
- Realtime Updates/Syncing (Data)
- User Collaboration (Data)
- Partial Updates (Data)
- File Storage (Application Services)
- Compute (Application Services)
以上です。 App Center はいいぞ。