DataStoreからの移行
DataStoreについて
AWS Amplify DataStoreは、アプリとクラウド間のデータを自動的に同期するローカルファースト(ローカル優先)のデータレイヤーを提供していました。DataStoreを使用していた場合、同期ロジックを自分で記述することなく、いくつかの強力な機能を得ることができました。セッション間でデータを永続化するローカルデータベース、AppSyncバックエンドとの自動双方向同期、バージョン追跡を使用した組み込みの競合解決、ミューテーション キューとリプレイを備えた完全なオフラインサポート、observe()およびobserveQuery()による リアルタイム更新です。
DataStoreはGraphQL操作、ネットワーク状態管理、データの一貫性の複雑さを抽象化していました。ローカルモデルの単純なsave、query、deleteメソッドで作業でき、残りはすべてDataStoreが裏で処理していました。
このガイドでは、DataStoreからApollo KotlinおよびAWS AppSync Apollo Extensions libraryへの移行方法を示します。これらは、クエリ、ミューテーション、サブスクリプションに使用されます。DataStoreの機能セットのうち、アプリが実際に使用している量によっては、移行が予想より簡単な場合があります。
フロントエンドクライアントがDataStoreから移行された後、バックエンドで競合解決を無効化して、同期インフラストラクチャを削除し、ミューテーションを簡素化(_version追跡なし)し、ソフト削除からハード削除に切り替えます。
このガイドについて
このガイドでは、DataStoreからApollo Kotlinへの移行パスについて説明します。AppSyncエンドポイントでApollo Kotlinをセットアップし、すべてのCRUD操作を移行し、オプションでローカルキャッシングとオフラインファーストサポートを追加します。
クイック比較:前後
一般的なDataStore操作がApollo Kotlinにどのように変換されるかについての概要を以下に示します。
| DataStore操作 | Apollo Kotlin相当 |
|---|---|
Amplify.DataStore.save() | Apolloミューテーション(CreatePostMutation、UpdatePostMutation) |
Amplify.DataStore.delete() | Apolloミューテーション(DeletePostMutation) |
Amplify.DataStore.query() | Apolloクエリ(GetPostQuery、GetPostsQuery) |
Amplify.DataStore.observe() | Apolloサブスクリプション(OnCreateSubscriptionなど)をtoFlow()で |
Amplify.DataStore.observeQuery() | Apollo正規化キャッシュ+watch() |
Amplify.DataStore.clear() | 不要になりました(クリアすべきローカルDataStoreなし) |
Amplify.DataStore.start() / stop() | 不要になりました |
ユースケース
すべての顧客がDataStoreの機能セット全体を必要とするわけではありません。特定のユースケースに応じて、移行は簡潔な場合があります。
- ローカルキャッシング: DataStoreを主にローカルキャッシングレイヤーとして使用し、デバイスにデータを一時的に保存しているが、その完全なオフラインファースト機能には大きく依存していない場合、Apollo Kotlinはアプリケーションが主に接続されていて、オフラインアクセスのみが時々必要な場合、完全なオフライン同期管理の複雑さなしに軽量なデータキャッシングを提供できるため、良い選択肢となります。
- オフラインファースト: ビジネス要件が完全なオフラインファースト機能をサポートすることに依存している場合、オフラインファーストガイドが新しいオフラインファースト ソリューションへの移行のためのハイレベルアプローチを提供します。
このガイドを使用する方法
ページを順番に従ってください。各ステップは前のステップに基づいています。
-
DataStoreを削除。 プロジェクトからDataStore依存関係とプラグインを削除してください。
-
スキーマとGraphQL操作。 AppSyncスキーマを取得し、Apolloコード生成用のGraphQL操作を定義してください。
-
Apollo Kotlinをセットアップ。 依存関係を追加し、Gradleプラグインを設定し、AppSyncエンドポイントと認証を使用してApolloクライアントをセットアップしてください。
-
DataStoreからApolloに移行。 すべてのDataStore操作をApollo相当物で置き換えてください。
save、query、delete、observe、observeQueryを移行してください。 -
オプション:ローカルキャッシング。 Apolloの正規化キャッシュまたはRoomを使用したカスタムキャッシングレイヤーを使用してローカルキャッシュをセットアップしてください。
-
オフラインファースト。 リモート同期、ライブ同期、ネットワーク検出、オフラインミューテーションで完全なオフラインサポートを構築してください。
-
競合解決を無効化。 すべてのフロントエンドクライアントがDataStoreから移行されたら、同期インフラストラクチャを削除し、ミューテーションを簡素化し、ソフト削除からハード削除に切り替えてください。
-
役立つリソース。 追加のドキュメンテーション、サードパーティパッケージ、参考資料です。
移行チェックリスト
移行を計画・追跡するにはこのチェックリストを使用してください:
- DataStore依存関係を削除 —
build.gradle.ktsからcom.amplifyframework:aws-datastoreを削除してください(DataStoreを削除を参照) - DataStoreプラグインを削除 —
Amplify.addPlugin()呼び出しからAWSDataStorePlugin()を削除してください - 生成されたモデルファイルを削除 — DataStore生成モデルクラスを削除してください
- スキーマと操作をセットアップ — AppSyncスキーマを取得し、GraphQL操作を定義してください(スキーマとGraphQL操作を参照)
- Apollo Kotlinをセットアップ — 依存関係を追加し、Apolloクライアントを設定してください(Apollo Kotlinをセットアップを参照)
- CRUD操作を移行 —
DataStore.save()、DataStore.query()、DataStore.delete()をApollo相当物で置き換えてください(DataStoreからApolloに移行を参照) - リアルタイムリスナーを移行 —
DataStore.observe()およびDataStore.observeQuery()をApolloサブスクリプションとキャッシュウォッチャーで置き換えてください - テスト — すべてのCRUD操作、リアルタイムサブスクリプション、エラーハンドリングを検証してください
- 競合解決を無効化 — すべてのクライアントが移行されたら(競合解決を無効化を参照)