Amplifyプロジェクトをみんなで開発

１つのAmplifyプロジェクトをみんなで開発するためのメモ

書くことはほとんど公式の中身だが、日本語説明＆自分の経験を少し絡めて書こうと思います。

https://docs.amplify.aws/cli/teams/overview/


既にAmplifyで誰かがプロジェクト AAA を立ち上げてamplify push済み
環境名は　devとします。
このdevはGitにコミット済み devブランチです。


さて、ここでプロジェクトにメンバーkobashi追加されました。彼がまず最初にやることは

```
$git checkout -b dev

$amplify init
? Do you want to use an existing environment?
Yes
? Choose the environment you would like to use:
dev
? Choose your default editor:
好きなエディタを選ぶ
? Select the authentication method you want to use:
AWS profile
? Please choose the profile you want to use
使用してるAWSプロファイル

✔ Initialized provider successfully.
Initialized your environment successfully.

$amplify status

    Current Environment: dev
    
┌──────────┬────────────────────────────────────────┬───────────┬───────────────────┐
│ Category │ Resource name                          │ Operation │ Provider plugin   │
├──────────┼────────────────────────────────────────┼───────────┼───────────────────┤
│ Function │ ********************                   │ No Change │ awscloudformation │
├──────────┼────────────────────────────────────────┼───────────┼───────────────────┤
│ Auth     │ ***********                            │ No Change │ awscloudformation │
├──────────┼────────────────────────────────────────┼───────────┼───────────────────┤
│ Api      │ ***********                            │ No Change │ awscloudformation │
├──────────┼────────────────────────────────────────┼───────────┼───────────────────┤
│ Storage  │ ***********                            │ No Change │ awscloudformation │
└──────────┴────────────────────────────────────────┴───────────┴───────────────────┘


```

これで　Amplify AAAプロジェクトのdev環境が持ってこれた。
この環境で編集してpushしていくと、他のメンバーとの間で競合が発生するリスクがある
Amplifyでは開発者毎に環境を持つことができるので、自分の個人環境で開発を進める。

自分の名前　kobashi amplify環境で開発をする


```
$amplify env add　　kobashi
Using default provider  awscloudformation
? Select the authentication method you want to use: 
AWS profile

? Please choose the profile you want to use 
使用してるAWSプロファイル
Adding backend environment kobashi to AWS Amplify app: *************
⠙ Initializing project in the cloud...


$amplify env list

| Environments |
| ------------ |
| dev          |
| *kobashi     |


この時点ではまだCloud上には作成されてない

$amplify status


    Current Environment: kobashi
    
┌──────────┬────────────────────────────────────────┬───────────┬───────────────────┐
│ Category │ Resource name                          │ Operation │ Provider plugin   │
├──────────┼────────────────────────────────────────┼───────────┼───────────────────┤
│ Function │ ********************                   │ Create 　　　　　　│ awscloudformation │
├──────────┼────────────────────────────────────────┼───────────┼───────────────────┤
│ Auth     │ ***********                            │　Create 　　　　　　　│ awscloudformation │
├──────────┼────────────────────────────────────────┼───────────┼───────────────────┤
│ Api      │ ***********                            │ Create　　　　　　　　│ awscloudformation │
├──────────┼────────────────────────────────────────┼───────────┼───────────────────┤
│ Storage  │ ***********                            │ Create　　　　　　 │ awscloudformation │
└──────────┴────────────────────────────────────────┴───────────┴───────────────────┘


クラウドにプッシュする
$amplify push

```

これでkobashi環境が作成できる。このkobashi環境で開発を行う。
AWSコンソールにログインすると　CognitoやAppsync、Dynamoなどに

リソース名-kobashi 

というネーミングルールで自分用の環境が生まれたことが確認できる。

なおgit上では　devブランチのローカルファイルに今のAmplify操作での変更が入ってしまっている状態だと思う。

あくまでkobashi環境に合わせての変更だから、gitも devからkobashiブランチを作成してコミット。dev上ではコミットしないこと。（自分はソースツリーを使っているので、gitのコマンド操作は割愛）

つまり　git(kobashi)  と　amplify(kobashi) が一対一の関係になるようにする


で、開発が終わったらgit（kobashi)の変更をコミット


最後にdev環境で動作確認する

```
$amplify env checkout dev
$git checkout dev
```
gitをdevに戻す際に　team-provider-info.json　がローカルで変更されている旨のアラートが出る。どうもamplify env checkout dev　した際に　team-provider-info.json　にkobashi側環境での変更情報を書き込むために起きるアラート

このままローカル変更を破棄すると、kobashi環境で作業した変更が消えてしまうので、いったんスタッシュして、team-provider-info.json　を確保しておく。

>※amplify initで .gitignoreに無視するべきファイル名が書き込まれるけど、team-provider-info.jsonは含まれないために起こる現象
※team-provider-info.jsonを無視する運用をすればこの現象は起きない。
※もしくはgitコミット＞マージ＞amplify env checkout　の順番で操作すれば、アラート出さずにマージできる

その上で　git(kobashi)=>git(dev）のマージを行って、スタッシュをteam-provider-info.jsonに適応することで対応した。



ともあれソース的にはdevに全ての変更が反映されたので

```
$amplify push
```

これでdev上で動作確認


最後にkobashi環境を掃除します。

```
amplify env remove kobashi

? Are you sure you want to continue? This CANNOT be undone. (This will delete 'kobashi' environment of the project from the cloud) (y/N)
yes
```

AWSコンソールから、-kobashi環境が無くなったのを確認したら作業終了


Tips：この削除が重要で、AWSではCloudFormationのスタックの数（DynamoとかAppsyncとかLamdaとかの数）使用上限が２００までらしいです。申請すれば増やせるそうですが、不要な個人環境は削除する癖をつけておきましょう。