AWS Amplify というフレームワークについて、 Developers.IO の記事を筆頭に、名前を見かけることがここ数ヶ月でグンと増えた感覚がある。
CLI で簡単にサーバーレス構成を立ち上げられてとても楽らしい、など漠然とした印象を持つだけだったが、小さなプロダクトを作ることでいくらか具体的な手触りを知ることができたので、そのことについて書く。
作ったもの
個人で運用しているウェブページ jnsato.com のコンテンツ管理ダッシュボードを作った。具体的には、以下の画像に示す部分。
もともとは地のHTMLに直書きしていたこの箇所を、DynamoDBのストレージに移行して、コンテンツのシンプルな CRUD 操作ができるような SPA を作成した。次のスクリーンショットがその画面。
以下、触ってみて気に入ったところと今後期待したいことを書いていく。
10個の手応え
1. 立ち上げのスピード感
Amplify CLI でいくつかのコマンドを叩くだけで全てがセットアップされる感覚は、 rails new の爽快感に近い。さらにAWSマネージド環境へのデプロイも驚くほど簡単。この気持ちよさはやみつきになりそう。
2. Cognito に面倒な認証処理を任せられる安心感
こちらも Amplify CLI で対話的に選択肢を選んでいくだけで、 Cognito をシームレスに認証基盤として導入できる。特に今回はプライベートなサービスを作っていたことからも、認証部分で余計な世話を焼かずに済むのはありがたかった。
3. GraphQLのサポートに積極的
API のバックエンドには API Gateway で REST を使うか、 AppSync で GraphQL を使うかが選択できる。
使ってみた感覚として、 AWS 社としては GraphQL の方を強く勧めているなあという印象はあった。実際、モバイルアプリケーションのためのプラットフォームとしては、その方がスケーラビリティを担保できるだろうと思う。
これについては以前の記事でも触れたので、詳しくはこちらも読んでみてほしい。
コロナ時代のGraphQL - ユユユユユ (https://jnsato.hateblo.jp/entry/2020/05/28/210000)
4. 検証環境もスムーズに用意できる
容易にマネージド環境へのデプロイができるということは、とりもなおさず、複数の環境をプロビジョンするのも同じだけ容易であるということになる。
使い心地も非常にスマートで、レポジトリのブランチに対応した環境を作成しておけば、面倒なパイプラインの設定もなしに、ブランチと同期した綺麗な環境を作ってくれるし、チーム開発をするのであれば、プルリクエストごとに使い捨ての環境を作成してレビューが終わったら破棄する、という富豪的な使い方もごく簡単にできる。
5. デフォルトでTLS化してくれる
通信経路の秘匿ももちろんマネージドに行ってくれる。
6. デフォルトで CloudFront 経由で配信してくれる
こちらも Amplify が管理してくれて、ユーザーが改めて考慮する必要はないのでとても便利。
7. 検証環境でアクセスコントロールを行ってくれる
こちらは開発者の設定次第で、デプロイしたフロントアプリケーションに アクセスコントロール を追加してくれる。所詮は Basic 認証なので、認証基盤としては Cognito をきちんと使うべきではあるが、かといって本番以外の環境がパブリックな状態になってしまうのも気持ち悪さはあるので、検証環境に設定している。
8. Route 53と統合されていて独自ドメインの設定も簡単
独自ドメインの設定も Amplify コンソールで簡単にできる。サービスレベルで統合されているので、いちいち Route 53 のコンソールを開き直す必要もなく、地味ながらデベロッパー・フレンドリーになっている。
9. 必要なコードを書くことに集中できる
ここまで書いたように、開発者に優しい機能が CLI ないしコンソールで簡単に実行可能になっているので、開発者は雑用を Amplify に委ねて、 SPA なり iOS なり Android の書くべきコードに集中できる。
10. 統合可能なオプションがまだまだある
僕自身は認証サービスと GraphQL API サービスの二つしか利用しなかったが、このほかにも アナリティクスサービス や 通知サービス 、 機械学習サービス などもマネージドに統合してくれている。そしてもちろん、まだまだ新しいサービスであることから、これからさらに守備範囲を広げてくれるポテンシャルも十分ある。
まだこれからなところ
カスタマイズが難しいところ
Amplify フレームワークは、自動生成されるボイラープレート・コードをそのまま使うには非常に便利で高機能だが、手を加えようとすると結構な苦労である。
僕の場合、認証画面を独自マークアップの画面に差し替えて、新規登録やパスワード再発行を機能ごと無効化しようとした(自分しか使わないアプリなのでログインだけできればいい)のだが、独自の概念や思想をドキュメントとにらめっこしてイチから理解するのはだいぶ骨が折れた。
なにせとんでもなく多いはずのバックエンドの仕事を、とんでもなく単純なコマンドに抽象化して提供してくれているのだから、何が起こっているのか追いかけるのも当然、大変な仕事になる。まあ、およそあらゆるフレームワークがそうなのかもしれないが。
~~ドキュメントがいくらか使いづらいところ~~
このアプリを実装していたのは1ヶ月前、つまり2020年4月中旬頃で、当時は GitHub Pages でホストされた未完のドキュメントが公開されていた。内容もいくらか物足りないところがあり、八つ当たりじみた不満も持ってしまっていた。
しかし執筆時点のいま見ると、それは docs.amplify.aws に移管され、コンテンツも刷新されている模様。あらためて読み返すことはまだしていないものの、きちんとメンテナンスしてくれているのだ、誰かがその仕事を引き受けてくれているのだ、という意識は否応なくわき上がり、不満を抱いていた自分が急に恥ずかしくなった。反省する。
導入事例がまだ多くないところ
aws.amazon.com で各製品の LP を開くと、たいていのサービスには名だたる企業における導入事例が紹介されているのだが、 Amplify に関してはまだそれがみられない。
ユーザーとして、チュートリアルや小さなアプリケーションの作成を通して、確かに便利であることは納得できるものの、ではただちに業務に利用できるか、となるとそれはまた別の問題。いくらか躊躇してしまう。
ただし、こうも考えられる。フレームワークとしての Amplify はあるものの、本質的には Cognito や Amplify 、 Kinesis など個別のサービスがその背後に控えていることを踏まえると、実は Amplify について語れることはそう多くないのかもしれない。むしろそれら個別のサービスについて正確に理解し、扱えるようになっておくのが優先順位としては高いだろう。