はじめに
皆さん。こんにちは! DreamHanksのエルムです。
今回はデータストアの設定について説明していきます。
前回の記事はUIコンポーネントのカスタマイズです。
Amplifyによるデータストア (DataStore with Amplify)
Amplify DataStoreは、オフラインやオンラインのシナリオで追加のコードを書くことなく、共有データや分散データを活用するためのプログラミングモデルを提供しており、分散されたユーザー間のデータをローカルのみのデータと同様に簡単に扱うことができます。
注:これにより、AWSアカウントがなくても、DataStoreを使ってデバイスにローカルにデータを永続化することができるようになります。
ゴール (Goal)
アプリケーションにAmplify DataStoreを設定・構成し、デバイス上のデータをローカルに保存するために使用します。
- Amplify CLIバージョン4.21.0以降を実行してインストールします:
1 |
npm install -g @aws-amplify/cli |
ローカル環境の構築方法
プラットフォーム・インテグレーションを使用する代わりに、Amplify CLIを単独で使用することもできます。このオプションは、Amplifyがすでに設定されていて、そこにDataStoreを追加したい既存のプロジェクトに特に有効です。
Amplifyを使用するには、まずプロジェクトで使用するための初期化を行う必要があります。
まだ実行していない場合は、このコマンドを実行してください:
1 |
amplify init |
DataStoreアプリの基本構造は、新しいGraphQL APIをアプリに追加することで作成されます:
1 2 3 4 5 |
# 新しいAPIの場合 amplify add api # 既存のAPIの場合 amplify update api |
CLIでは、APIを設定するように促されます。APIタイプとして「GraphQL」を選択し、以下のような質問に答えてください。高度な設定を行うように求められたら、「はい、いくつかの追加変更を行います」と答え、衝突検知が有効になっていることを確認します。DataStoreを使用してクラウドとデータを同期する際には、コンフリクトの検出が必要です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
? Please select from one of the below mentioned services: `GraphQL` ? Provide API name: `BlogAppApi` ? Choose the default authorization type for the API `API key` ? Enter a description for the API key: `BlogAPIKey` ? After how many days from now the API key should expire (1-365): `365` ? Do you want to configure advanced settings for the GraphQL API `Yes, I want to make some additional changes.` ? Configure additional auth types? `No` ? Enable conflict detection? `Yes` ? Select the default resolution strategy `Auto Merge` ? Do you have an annotated GraphQL schema? `No` ? Choose a schema template `Single object with fields (e.g., “Todo” with ID, name, description)` |
Idiomatic persistence
DataStoreは、プラットフォーム標準のデータ構造を利用して、データスキーマをわかりやすく表現しています。Persistence言語は、Modelインターフェースを満たすデータ型と、save、query、deleteなどの一般的な動詞で定義される操作によって構成されます。
データスキーマ (Data schema)
永続的データストアを利用したアプリを作成するには、まずスキーマを定義する必要があります。DataStoreでは、アプリケーションのデータモデルの定義として、GraphQLスキーマファイルを使用します。スキーマには、アプリの機能を表すデータタイプとリレーションシップが含まれています。
サンプルスキーマ (Sample schema)
次のステップでは、小さなブログアプリケーションのスキーマから始めましょう。現在はシングルモデルのみです。このベーススキーマには、より多くのコンセプトが提示されるにつれて、新しいタイプや構造が追加されます。
デフォルトではamplify/backend/{api_name}/にあるschema.graphqlファイルを開き、以下のようにモデルPostを定義します:
1 2 3 4 5 6 7 8 9 10 11 12 |
type Post @model { id: ID! title: String! status: PostStatus! rating: Int content: String } enum PostStatus { DRAFT PUBLISHED } |
ここからは、プラットフォームに依存しないschema.graphqlを、プラットフォーム固有のデータ構造に変換します。DataStoreは、スキーマがプラットフォームコードに正しく変換されることを保証するために、コード生成に依存しています。
初期設定と同様に、モデルの生成には、IDE integrationまたはAmplify CLIを直接使用することができます。
Code generation: Amplify CLI:
モデルはAmplify CLIを使って直接生成することができます。
ターミナルで、プロジェクト/ルートフォルダーにいることを確認し、codegenコマンドを実行します。
1 |
amplify codegen models |
生成されたファイルはamplify/generated/models/にあります。
Amplify DataStoreの初期化: プロジェクトに@aws-amplify/datastoreの依存関係が追加されていると、使用開始時にプラグインが自動的に初期化されます。
パーシスタンス操作 (Persistence operations)
これで、アプリケーションが永続化操作を実行する準備が整いました。データはローカルのデータベースに保存されるため、デフォルトでオフラインファーストのユースケースが可能になります。
すでにプロジェクトにGraphQL APIが追加されていても、APIプラグインが初期化され、バックエンドがプロビジョニングされて初めて、クラウドの同期が有効になります。
データベースへの書き込み機能
データベースへの書き込みは、Postモデルのインスタンスを作成して保存します。
1 2 3 4 5 6 7 8 9 10 |
try { await DataStore.save( new Post({ title: "My First Post" }) ); console.log("Postの保存に成功しました。"); } catch (error) { console.log("Post保存エラー", error); } |
データベースからの読み込む方法
データベースから読み取る場合、最も簡単な方法は、指定されたモデルタイプのすべてのレコードを問い合わせることです。
1 2 3 4 5 6 |
try { const posts = await DataStore.query(Post); console.log("Postsの取得に成功しました。", JSON.stringify(posts, null, 2)); } catch (error) { console.log("Postsの取得エラー", error); } |
おめでとうございます。ローカルデータベースの作成とデータの取得ができました。
終わりに
今回の記事は以上になります。
次回は[第12回] データ操作を学びましょう。
ご覧いただきありがとうございます。
コメント