データモデリング
データモデリングの例
この例では、書籍、著者、出版社に関する情報を管理し、関係性と認可ルールを含むブックストアのデータモデルを構築します。以下のスキーマテンプレートは、ブックストアバックエンドの出発点です。
Sandboxでクローン Book、ISBN、Publisher、Authorという4つのモデルを含むブックストアデータモデルテンプレート
関係性に進むか、以下を読んでAmplify Studioでのデータモデリングの仕組みを学んでください。
Amplify Studioでのデータモデリング
Studioのデータモデルデザイナーは、アプリのデータモデル、関係性、および認可ルールを定義する視覚的な方法を提供します。Studioは、作成したデータモデルのschema.graphql GraphQL Transformを生成し、これをAmplifyプロジェクトに追加します。GraphQL transformの仕組みについて詳しくは、GraphQL Transform概要を参照してください。
データモデリングの操作は、sandboxとStudioで同じです。AWSアカウントを使用すると、リアルタイムデータ同期機能を利用でき、また、モデルに認可ルールを設定することもできます。詳細については、認可を参照してください。すべてのデータモデルは、AWS AppSync GraphQL APIおよびAmazon DynamoDBテーブルとしてアカウント内でプロビジョニングされます。Studioの他のすべての機能と同様に、CLIでさらに拡張できます。
DataStoreとGraphQL
データモデルを保存してデプロイすると、Amplify StudioはAWS AppSyncを使用してGraphQL APIを生成します。デフォルトでは、Studioで構築されたすべてのデータモデルは、DataStoreなしでGraphQL APIとしてプロビジョニングされますが、StudioはすべてのAmplify GraphQL APIをサポートし、DataStoreの有無を問いません。
**DataStore**は、GraphQL APIのラッパーで、ローカルのデバイス上のストレージを使用してオフライン使用を処理します。DataStoreは、モバイルアプリまたはWebアプリとデータベース間のデータを自動的に同期し、競合解決戦略を使用してデータの競合に対処します。DataStoreは、競合解決方法を選択すると、APIに自動的に追加されます。
競合解決の変更の影響
Studio または CLI を介して、GraphQL API の設定をいつでも変更できます。ただし、競合解決をオフにしたり、オンにしたりすることは、重大なアプリの変更です。
更新構文
競合解決が有効になっている場合、データと相互作用するには、おそらくDataStore構文を使用します。ただし、競合解決が無効になっている場合、すべてのデータ相互作用は、代わりにGraphQL構文を使用するように更新する必要があります。
アクセス不可能なデータ
GraphQL APIが競合解決を有効にして作成される場合、複数の隠しフィールドが各データモデルに自動的に追加されます。これらのフィールドは、データをクエリおよび変更するために必要で、これらの値がnullに設定されているレコードがある場合、それらのレコードはアクセス不可能になります。
競合解決が無効になっている場合、これらのフィールドは、レコードが作成または変更されるときに入力されなくなります。GraphQL構文を使用してデータと相互作用している限り、これはアプリに直接的な影響を及ぼしません。ただし、競合解決が後で再度有効にされた場合、既存のすべてのレコードについて必要なフィールドが設定されるまで、API内の既存データはアクセス不可能になります。
このような状況を避けるためには、既存のデータを持たないAPIでのみ競合解決の有効化/無効化を行うことをお勧めします。
GraphQL API設定の変更
Studioを使用して競合解決を有効化/無効化するか、競合解決設定を変更するには、以下の手順を実行してください。
- Amplify Studio > Dataに移動します
- ページの上部でGraphQL API settingsを選択します。
- 競合解決をオフにするか、オンにするか、競合解決戦略を変更します。
- データモデリング画面に戻り、Save and Deployを選択します
Amplify CLIを使用してAPIを設定するには、ターミナルでamplify configure apiを実行し、プロンプトに従ってください。
制限事項
競合解決が無効になっているアプリケーションには、いくつかの軽微な制限があります。
- Data Managerでの列によるソートはサポートされていません
これらの機能にアクセスするには、DataStoreをオンにして、競合解決戦略を選択してください。
サポートされていないディレクティブとフィールドレベルのパラメーター
データモデルにサポートされていないディレクティブまたはフィールドレベルのパラメーターが含まれている場合、データモデリングのビジュアルエディターは利用できず、Data managerの機能が限定される可能性があります。ただし、他のAmplify Studio機能を引き続き使用して、Amplify CLIを使用してGraphQLスキーマを変更できます。
Studioでサポートされていないディレクティブには、以下が含まれます。
@defaultディレクティブ@indexディレクティブ@functionディレクティブ@httpディレクティブ@predictionsディレクティブ@primaryKeyディレクティブ@searchableディレクティブ@mapsToディレクティブ@authgroupClaimプロパティ@authgroupsFieldプロパティ@authカスタムgroupClaim@authカスタムidentityClaim@authフィールドレベルルール- OIDCおよびFunctionプロバイダー
- 配列型のOwnerField
Query型Mutation型Subscription型
GraphQLファイルの分割
Your schema file could not be loadedThe schema.graphql file in your project could not be loaded. This may be because the file was moved, or because you are using a split schema, which is not supported.このメッセージは、Amplify Studioがamplify/backend/api/<api-name>/schema/ディレクトリに.graphqlファイルのセットとして保存するなど、GraphQLスキーマの分割をサポートしていないために発生します。例えば、Query.graphql、User.graphql、およびPost.graphqlがあります。問題を解決するには、以下の手順を使用してファイルを結合する必要があります。
- Amplifyプロジェクトをプルしてローカルディレクトリにします
amplify/backend/api/ディレクトリで、schema.graphqlという名前のファイルを作成しますamplify/backend/api/<api-name>/schema/ディレクトリファイルのすべてのコンテンツをコピーして、schema.graphqlファイルに貼り付けますamplify/backend/api/<api-name>/schema/ディレクトリを削除します。amplify pushを実行します