AWS AmplifyのWhat's Newに載らないアップデート情報の紹介

### はじめに
本エントリは「[AWS Amplify Advent Calendar 2020](https://qiita.com/advent-calendar/2020/amplify)」の22日目です。
いやー今年もAmplifyは[Admin UI](https://docs.amplify.aws/console/adminui/intro)など激アツでしたねｗ
[カレンダー初日](https://qiita.com/yuukiyo/items/69012f7a610edda4cdfc)にも書きました通り、SSRが個人的には一番熱かったです！
でも本当にこんなものしかAmplifyって進化してないのでしょうか？
もちろん違います、では他にはどんな進化をしてきたのか、少し皆さんが知らないような機能まで紹介していこうと思います！
ちなみにこの記事が出た12/22時点でのAmplifyCLIの最新バージョンは[4.40.0(2020/12/16リリース)](https://github.com/aws-amplify/amplify-cli/releases/tag/%40aws-amplify%2Fcli%404.40.0)です


### アップデート①：AppSyncの@keyディレクティブで複数同時更新が可能になりました
これはamplify-cliの[4.38.0(2020/12/8リリース)](https://github.com/aws-amplify/amplify-cli/releases/tag/%40aws-amplify%2Fcli%404.38.0)から利用可能になったオプションです。
今まではGSIなどの@keyディレクティブは一つずつamplify pushする必要があったのですが、一気に同時変更できるようになりました。ただしデフォルトではこの機能は有効になっていないので以下のような作業が必要です。
といっても難しく考える必要はなく、`features.graphqltransformer.enableiterativegsiupdates`を`true`にしてあげるだけなのでお手軽ですね！

```shell:amplify/cli.jsonのデフォルト
% cat amplify/cli.json
{
  "features": {
    "graphqltransformer": {
      "addmissingownerfields": true,
      "validatetypenamereservedwords": true,
      "useexperimentalpipelinedtransformer": false,
      "enableiterativegsiupdates": false // ここをtrueにしてあげる
    },
    "frontend-ios": {
      "enablexcodeintegration": true
    },
    "auth": {
      "enablecaseinsensitivity": true
    },
    "codegen": {
      "useappsyncmodelgenplugin": true
    }
  }
}
```

つまり（こんなGSIに意味があるのかは置いておいて）、このような複数の@keyが一発で作成・更新が可能になります。

```shell:amplify/backend/api/apiname/schema.graphql
> cat amplify/backend/api/<apiname>/schema.graphql
type Todo @model
  @key(name: "todosByName", fields: ["name"], queryField: "todosByName")
  @key(name: "todosByStatus", fields: ["status"], queryField: "todosByStatus") {
  id: ID!
  name: String!
  status: String!
}
```

今まで本番環境をAmplifyで構築するのに段階リリースをしなければならなかった手順を簡素化できるなどのメリットがあるかなと思います！

### アップデート②：upgrade、uninstallコマンドが追加されました
こちらは[4.35.0(2020/11/24リリース)](https://github.com/aws-amplify/amplify-cli/releases/tag/%40aws-amplify%2Fcli%404.35.0)からの機能になります。
`amplify upgrade`、`amplify uninstall`と2つのコマンドが実行できるようになりました。
npmでAplifyCLIを利用してる人には代わりのnpmコマンドを教えてくれるだけなのですが、MacやLinuxにシェルでインストールしている方やWindowsの方はこちらのコマンドで実行できるようになったようです。
私はnpmでインストールしてるので、あまり恩恵はないのですがアップデートコマンドを忘れてしまった場合などにぜひ利用してみてくださいｗ
npmでインストールしている人には実行すると以下のようなメッセージが出ます。

```shell:AmplifyCLI
% amplify uninstall
Initializing new Amplify CLI version...
Done initializing new version.
Scanning for plugins...
Plugin scan successful
"uninstall" is not available in this installation of Amplify.
Use npm uninstall -g @aws-amplify/cli instead.

% amplify upgrade
"upgrade" is not supported in this installation of Amplify.
Use npm i -g @aws-amplify/cli instead.
```

### アップデート③：AppSyncの予約語制約をオフにする機能フラグが追加されました
こちらは[4.32.1(2020/11/8リリース)](https://github.com/aws-amplify/amplify-cli/releases/tag/%40aws-amplify%2Fcli%404.32.1)からの機能になります。
アップデート①の対応と同様に機能フラグをオフにすることによって例えば「Subscription」などの予約語をモデル名に命名することが可能になりました。
AppSyncのスキーマ更新後のamplify push時に `[:reservedWord] is a reserved type name and currently in use within the default schema element.` というエラーが出た際に思い出してください！
`features.graphqltransformer.validatetypenamereservedwords`を`false`にするだけです！

```shell:amplify/cli.jsonのデフォルト
% cat amplify/cli.json
{
  "features": {
    "graphqltransformer": {
      "addmissingownerfields": true,
      "validatetypenamereservedwords": true, // ここをfalseにしてあげる
      "useexperimentalpipelinedtransformer": false,
      "enableiterativegsiupdates": false
    },
    "frontend-ios": {
      "enablexcodeintegration": true
    },
    "auth": {
      "enablecaseinsensitivity": true
    },
    "codegen": {
      "useappsyncmodelgenplugin": true
    }
  }
}
```

### 一行で紹介するアップデート
* 4.32.0（2020/10/31リリース）でLambdaリゾルバの中からCognitoユーザープールのグループリストを参照できるようにIAMの変更が入りました
* 4.32.0（2020/10/31リリース）でAppSyncの@searchableディレクティブからクエリを投げる際に`from`パラメータのサポートが追加されました。これによりたくさんのデータを表示する際にページ遷移などを画面で表現する際に`nextToken`を今まで通り使うことも出来ますし、`from`パラメータでオフセットすることも選択出来るようになりました。

### まとめ
機能追加系の説明しやすいアップデートをチョイスしてお届けしていますが、他にもユーザーフレンドリーにするための細やかな文言変更や、amplify deleteコマンド実行時にいきなり削除せずに確認を挟むようになった、など細やかなアップデートもたくさんあった一年でした！
主に10月-12月のアップデートを中心に紹介していますが実際の今年のアップデート数はこんなものじゃないですので、興味がある方はGitHubのコミット履歴なども見て下さいね！

ではまた！