React Native × AWS Amplifyで詰まった話【実体験まとめ】

エンジニアの記録
技術メモ・実体験

チームメンバーの環境を壊したことがあります。amplify pushを間違った環境で実行してしまいました。

この記事ではAmplify + AppSync + DynamoDBの仕組みの解説と、実際にやらかしたトラブルを全部書きます。同じミスをする人を減らしたい。

対象読者

React NativeでAWSを使い始めた人、チームでAmplifyを使っていて「なんとなく怖い」という人向けです。

PROFILE 20代ITエンジニア|React Native(Expo)× AWS Amplifyでアプリ開発中|Raw Ambition 運営
キラ
キラ
「amplify pushは現在の環境のAWSを上書きする」——これを理解していなかったときに事故が起きた。
Contents
  1. Amplify + AppSync + DynamoDBの全体像
  2. schema.graphqlとamplify pushの仕組み
  3. 環境(environment)の仕組み
  4. やらかし① 間違った環境でamplify pushした
  5. やらかし② 自動生成ファイルをコミットしなかった
  6. やらかし③ Cognito認証エラーで詰まった
  7. チームで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がデータモデルの定義ファイルです。このファイルが全ての起点です。

# schema.graphql の例
type MeetingMinutes @model @auth(rules: [{ allow: owner }]) {
  id: ID!
  eventId: ID!
  orgId: String!
  audioUrl: String
  transcript: String
  summary: String
  data: AWSJSON   # JSONを自由に保存できるフィールド
}

@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には「環境」という概念があります。devstagingprodのように、同じアプリの異なる環境を管理できます。

# 環境の一覧確認(* が現在の環境)
amplify env list

# 出力例
  Environments:
  * ローカル   # 個人開発用(現在ここにいる)
    dev       # チーム開発用
    prod      # 本番

# 環境の切り替え
amplify env checkout dev

このとき「現在どの環境にいるか」を常に意識することが最重要です。自分はこれを怠って事故を起こしました。


やらかし① 間違った環境でamplify pushした

TROUBLE 01

個人環境のつもりでpushしたら、チームのdev環境を上書きした

⚠️ 何が起きたか

スキーマ変更のテストをするつもりでamplify pushを実行した。しかし環境がdev(チーム共有環境)のままになっていた。チームのdev環境のDynamoDBとAppSyncが上書きされ、他のメンバーの作業が一時的に壊れた。

✅ 解決策と予防策

# 作業前の確認(必須)
amplify env list
# * がついているのが現在の環境。必ず確認してからpushする

# スキーマ変更のテストは個人環境で行う
amplify env checkout ローカル  # 個人環境に切り替え
amplify push                  # 個人環境にpush

# テストが終わったらチーム環境に戻す
amplify env checkout dev
キラ
キラ
「amplify pushは現在の環境を上書きする」——これを体で覚えてから、作業前のenv listが習慣になった。

やらかし② 自動生成ファイルをコミットしなかった

TROUBLE 02

自分の環境では動くのに、チームメンバーの環境で「フィールドが存在しない」エラー

⚠️ 何が起きたか

スキーマにフィールドを追加してamplify pushした。自分の環境では正常に動いた。しかしチームメンバーから「フィールドが存在しない」というエラーが出ると報告が来た。原因はsrc/graphql/以下の自動生成ファイルをgitにコミットしていなかったこと。

✅ 解決策と予防策

# amplify pushの後は必ずsrc/graphql/をコミット
git add src/graphql/
git commit -m "chore: update auto-generated graphql files"
git push

# src/graphql/ は .gitignore に入れないこと
# 自動生成でも必ずバージョン管理する

? 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.というエラーが出る。

? 原因の候補

原因1: aws-exports.js の identityPoolId が
       現在の環境と一致していない(最多)

原因2: Cognito Identity Pool の設定で
       未認証アクセスが無効になっている

原因3: ローカルのIPアドレスが
       aws-exports.js の redirectSignIn に未登録

原因4: 認証トークンの期限切れ

✅ 対処手順

# Step1: aws-exports.js の identityPoolId を確認
grep -r "identityPoolId" src/aws-exports.js

# AWSコンソール → Cognito → Identity Pools
# 該当のPool のIDと一致しているか確認

# 一致していない場合 → amplify pull で最新設定を取得
amplify pull

# それでも解決しない場合 → 環境を確認して強制再デプロイ
amplify env list          # 環境確認
amplify push --force      # 強制再デプロイ
スカイ
スカイ
Cognito認証エラーは原因が複数あって特定が難しい。「aws-exports.jsの環境確認→amplify pull」が最初の一手。

チームでAmplifyを使うときのルール

実際にやらかした経験から作った、チームでのAmplify作業ルールです。

# ===== 作業前(必須)=====
amplify env list          # 現在の環境を確認
                          # * がついているのが現在の環境

# ===== スキーマ変更・テスト =====
amplify env checkout ローカル  # 個人環境に切り替え
# schema.graphql を編集
amplify push                  # 個人環境にpushしてテスト
git add src/graphql/          # 自動生成ファイルをコミット
git commit -m "chore: update graphql files"

# ===== テスト完了後 =====
amplify env checkout dev      # チームのdev環境に戻す
# PRを出してレビュー後にdev環境に反映

# ===== 動かないときのチェックリスト =====
# 1. amplify env list で環境確認
# 2. amplify pull で最新設定を取得
# 3. amplify push --force で強制再デプロイ
# 4. CloudWatch Logs でエラー確認
? この記事のまとめ
  • Amplify + AppSync + DynamoDB:フロントはAppSyncにクエリを送るだけ。DynamoDBは直接触らない
  • amplify pushは現在の環境を上書きする。作業前に必ずenv listで確認
  • src/graphql/の自動生成ファイルは必ずgitコミットする
  • Cognito認証エラーはaws-exports.jsの環境確認→amplify pullから始める
  • スキーマ変更は個人環境でテストしてからチーム環境に反映する

Amplifyのチーム開発は、個人開発では気づかないトラブルが多いです。でも「作業前にenv listで環境確認」を習慣にするだけで、大半の事故は防げます。

Recommended
ブログを始めるならConoHa WINGが最速
エンジニアの技術メモをブログで発信して収益化。月1,000円以下で始められます。
▶ ConoHa WINGを見てみる
※ アフィリエイトリンクです
Next
次回:「TypeScriptで型安全なコードを書くために意識していること」
Raw Ambition 始動から2ヶ月目

コメント

タイトルとURLをコピーしました