チームメンバーの環境を壊したことがあります。amplify pushを間違った環境で実行してしまいました。
この記事ではAmplify + AppSync + DynamoDBの仕組みの解説と、実際にやらかしたトラブルを全部書きます。同じミスをする人を減らしたい。
対象読者React NativeでAWSを使い始めた人、チームでAmplifyを使っていて「なんとなく怖い」という人向けです。
- Amplify + AppSync + DynamoDBの全体像
- schema.graphqlとamplify pushの仕組み
- 環境(environment)の仕組み
- やらかし① 間違った環境でamplify pushした
- やらかし② 自動生成ファイルをコミットしなかった
- やらかし③ Cognito認証エラーで詰まった
- チームでAmplifyを使うときのルール
Amplify + AppSync + DynamoDBの全体像
まずこの3つの関係を整理します。最初にここを理解しないと、何をしているかわからないまま作業して事故が起きます。
?️ アーキテクチャの全体像
React Native アプリ ↓ GraphQL クエリ(API.graphql) AWS AppSync(GraphQL APIサーバー) ↓ リゾルバーが変換 Amazon DynamoDB(実際のデータ保存) ↑ AWS Amplify(設定・デプロイを管理するツール)Amplifyは設定・デプロイを管理するツールです。AppSyncはフロントからのGraphQLクエリを受け取りDynamoDBへの操作に変換するAPIサーバーです。DynamoDBは実際にデータが保存されるデータベースです。
? POINT
フロントからは「AppSyncにGraphQLクエリを送る」だけでOKです。DynamoDBを直接触ることはほぼありません。AppSyncがDynamoDBとのやり取りを全部やってくれます。schema.graphqlとamplify pushの仕組み
amplify/backend/api/[API名]/schema.graphqlがデータモデルの定義ファイルです。このファイルが全ての起点です。
@modelディレクティブをつけるだけで、AppSyncとDynamoDBの設定が自動生成されます。フィールドを追加したらamplify pushするだけでバックエンドに反映されます。
amplify pushを実行すると以下が自動で行われます。
⚙️ amplify push の処理フロー
1. schema.graphql を解析 2. AppSyncのスキーマを更新 3. DynamoDBのテーブルを更新 4. リゾルバー(クエリとDBの橋渡し)を更新 5. src/graphql/ 以下の自動生成ファイルを更新 6. aws-exports.js を更新(接続設定)⚠️ WARNING
amplify pushは現在選択されている環境のAWSリソースを上書きします。実行前に必ずamplify env listで現在の環境を確認してください。これを怠ると次のやらかし①が起きます。
環境(environment)の仕組み
Amplifyには「環境」という概念があります。dev・staging・prodのように、同じアプリの異なる環境を管理できます。
このとき「現在どの環境にいるか」を常に意識することが最重要です。自分はこれを怠って事故を起こしました。
やらかし① 間違った環境でamplify pushした
TROUBLE 01
個人環境のつもりでpushしたら、チームのdev環境を上書きした
⚠️ 何が起きたか
スキーマ変更のテストをするつもりでamplify pushを実行した。しかし環境がdev(チーム共有環境)のままになっていた。チームのdev環境のDynamoDBとAppSyncが上書きされ、他のメンバーの作業が一時的に壊れた。
✅ 解決策と予防策
やらかし② 自動生成ファイルをコミットしなかった
TROUBLE 02
自分の環境では動くのに、チームメンバーの環境で「フィールドが存在しない」エラー
⚠️ 何が起きたか
スキーマにフィールドを追加してamplify pushした。自分の環境では正常に動いた。しかしチームメンバーから「フィールドが存在しない」というエラーが出ると報告が来た。原因はsrc/graphql/以下の自動生成ファイルをgitにコミットしていなかったこと。
✅ 解決策と予防策
? POINT
src/graphql/以下のファイルは自動生成ですが、チーム全員が同じクエリ定義を使うために必ずgit管理します。「自動生成だからgitignoreでいい」は間違いです。
やらかし③ Cognito認証エラーで詰まった
TROUBLE 03
NotAuthorizedException: Access to Identity is forbidden
⚠️ 症状
アプリ起動時またはAPI呼び出し時にNotAuthorizedException: Access to Identity 'ap-northeast-1:xxxx...' is forbidden.というエラーが出る。
? 原因の候補
✅ 対処手順
チームでAmplifyを使うときのルール
実際にやらかした経験から作った、チームでのAmplify作業ルールです。
- Amplify + AppSync + DynamoDB:フロントはAppSyncにクエリを送るだけ。DynamoDBは直接触らない
- amplify pushは現在の環境を上書きする。作業前に必ずenv listで確認
- src/graphql/の自動生成ファイルは必ずgitコミットする
- Cognito認証エラーはaws-exports.jsの環境確認→amplify pullから始める
- スキーマ変更は個人環境でテストしてからチーム環境に反映する
Amplifyのチーム開発は、個人開発では気づかないトラブルが多いです。でも「作業前にenv listで環境確認」を習慣にするだけで、大半の事故は防げます。


コメント