AWS Startup ブログ

スタートアップがAmplifyを使うべき3つの理由

こんにちは、スタートアップ ソリューションアーキテクトの水馬です。

今回のテーマは AWS Amplify です。

みなさん Amplify はご存知でしょうか?AWS Amplify は AWS を mBaaS(*1)として扱うためのフレームワークです。 Amplifyを用いることにより、アプリケーション開発者は本質的な機能の開発に集中することができます。 今回は、スタートアップ において、Amplify を導入すべき3つの理由をご紹介したいと思います。

*1 mBaaS(mobile backend as a Service)汎用的な機能をクラウドから提供するサービス

目次:

  • Amplifyのおさらい
  • スタートアップにとってAmplifyを用いるメリット
  • Amplifyに関するよくある質問

 

Amplifyのおさらい

Amplifyとはサーバーレスなバックエンドをセットアップするための CLI、フロントエンドで利用できる UI コンポーネント、CI/CD やホスティングのためのコンソールを含む Web およびモバイルアプリ開発のためのフレームワークです。

Amplify には以下 3 つのサービスがあります。

  • Amplify Framework
  • Amplify CLI
  • Amplify Console

AWS Amplifyイメージ

Amplify CLI

Amplify CLI はコマンドラインで AWS のバックエンドを構築できるインターフェースです。AWS のバックエンドを構築するにはマネジメントコンソールから開発を行う方法や、Cloudformation など Infrastracture as a Code の仕組みを用いる必要がありました。 Amplify CLI を用いれば コマンドラインから対話形式にバックエンドを構築できます。Amplify CLI はバックエンドの構築だけでなく、バックエンドとの連携に必要な設定ファイルやソースコードを自動で 生成 してくれます。 Amplify Framework と合わせて使用することで、極めて少ない工数で認証、ストレージ、API、プッシュ通知といった基盤を構築することができ、開発者は本質的な課題に集中することができます。

Amplify Framework

Amplify Framework は、AWS のバックエンドと連携する処理を極めて少ない行数で記述できる Framework です。 iOS、Android、Web(React/Vue/Angular)、React Native にそれぞれ最適化されたインターフェースを提供します。先ほど紹介したAmplify CLIと統合することで、認証やファイルストレージへ(S3)へのアクセス、Websocketの利用、AppSyncやAPI Gateway+Lambdaとのやりとりを極めて簡単に実装することができます。

Amplify Console

Amplify Console は SPA(シングルページアプリケーション)や静的サイトのホスティング、CI/CD の運用を自動化するマネージドサービスです。 Github や AWS CodeCommit のようなソースリポジトリと連携し、CI/CD の仕組みを数クリックで構築することができます。また、ブランチごとにテスト環境を自動で構築したり、特定の環境のみ Basic 認証を付与するといった、柔軟な開発フローの設計が可能なサービスです。 Amplify Console と銘打っていますが、静的サイトであれば Amplify を用いなくても使用できるサービスです。

 

スタートアップにとってAmplifyを用いるメリット

変化の激しいスタートアップの現場でAmplifyを用いることのメリットはなんでしょうか?

メリット1: 本質的な作業に集中し、サービスを早くリリースができる

多くのモダンなサービスであれば以下のような実装が必須になるでしょう。

  • 認証機能
  • APIやファイルアクセスの適切な権限管理
  • WebSocketによるリアルタイム通信
  • ネイティブアプリのPush通知
  • ユーザのエンゲージメントを定量的に測るための分析基盤
  • 上記機能を実現するためのバックエンドの開発

これらはサービスにとって非常に重要な要素ではありますが、いずれもユーザメリットに直結するものではありません。最速でユーザに価値を届けるには、サービスの本質的な開発に注力すべきでしょう。Amplifyはこれらの「差別化に繋がらない重労働(Undifferentiated Heavy Lifting)」を非常に簡単に実装する仕組みが備わっています。

Amplifyが提供する機能 https://aws-amplify.github.io/

 

先ほど紹介したAmplify Frameworkを用いることで、これらの機能をシンプルに記述できるインターフェースが利用できます。また、Apmlify CLIを用いれば、これらの機能のバックエンドの仕組みをAWSのベストプラクティスに則ってわずか数分で構築することができます。いくつか具体的なユースケースを見てみましょう。

ユースケース1: 認証が必要な画面を作成したい

AmplifyとCognitoを統合するとで認証が必要なセキュアなサービスを簡単に構築できます。Amplifyではデフォルトで認証コンポーネントを提供しています。認証コンポーネントを配置するだけで、サインイン、サインアップ、パスワード再発行フロー、MFA(多要素認証)といった認証の仕組みを構築することができます。また、Congnitoから発行されるjwt(json web token)を用いたユーザセッションの管理やAWSリソースへのアクセス管理をAmplifyに委譲することができ、開発者はわずかなコードでセキュアなシステムを構築することができます。

ユースケース2: Websocketを用いたリアルタイム通信の基盤を構築したい

AmplifyとAppSyncを統合するとWebsocketを用いたリアルタイム通信を簡単に実装できます。AppSync は、GraphQL を使用してアプリケーションが必要なデータを正確に取得できるようにするマネージド型サービスです。AppSyncはSubscriptionというWebsocket通信の機構を持っており、先ほど紹介した認証の仕組みと合わせることで、セキュアなWebsocketの仕組みを構築することができます。

ユースケース3: ユーザエンゲージメントを計測したい

AmplifyとPinpointを統合するとユーザのエンゲージメントを簡単に可視化することができます。先ほど紹介したCongitoと合わせて利用することで、アクティブユーザ数やユーザが使用しているOSやプラットフォームの情報などを可視化することができます。また、個別の属性を付与することもでき、サービスの特性に応じて柔軟にエンゲージメントの可視化を行うことができます。

ユーザエンゲージメントの可視化の例

 

これらの機能はいずれも数分で構築が可能です。Amplifyを使えばその日から本質的な開発に着手することができます。

 

メリット2: スケールしやすい

スタートアップにとって、自社のサービスが成長するのは喜ばしいことです。サービスによってはわずかな期間でトラフィックが数百倍に拡大するといったケースもあるでしょう。当然のことながら、サービスの成長に合わせてシステムもスケールしなければいけません。初期リリースの段階から将来的なスケールを考慮できていれば問題ないですが、多くのスタートアップではサービスを世に出すことが最優先で、将来のスケーラビリティについては二の次という場合も多いのではないでしょうか。「事業の成長にシステムのスケールが追い付かず、あるタイミングでシステムのフルリプレースが必要になった・・」というのはよく聞く話です。

Amplifyが使用するバックエンドはDynamoDBやCognito、Lambda、AppSyncといったスケールすることを前提としたコンポーネントで構築されます。サービスの成長に伴い、実装の方式やバックエンドを再構築する必要はありません。

例えば、Cognitoは数億ユーザまでスケールする認証基盤を提供します。データストアとして利用されるDynamoDBは事実上無限のストレージ容量とパフォーマンスニーズに応じたプロビジョニングを提供することが可能です。サービスのユーザが数百倍、数千倍になったとしても耐えうる強力なスケーラビリティをリリースの初期段階から構築することができます。

サービスの成長が予想しにくいスタートアップにとって、初期段階からスケーラビリティの心配をしなくても良いというのは大きなメリットです。

メリット3: ビジネス成長に伴う環境の変更に強い

システムのスケーラビリティと同時に将来の事業ニーズや開発スタイルの変化に如何に柔軟に対応できるかということも考慮しておく必要があります。Amplifyはビジネスの成長に伴う様々な変化に対し柔軟に対応することができます。

 

開発環境の変化

エンジニア組織が拡大すると、一つの環境で開発を進めることが難しくなります。多くの企業が本番環境、ステージング環境、テスト環境といった複数の環境で開発フローを運用しているでしょう。そして開発環境ごとにバックエンドの構築が必要でした。

Amplifyにはmulti environmentという機能が存在します。ユーザはいくつかのコマンドを発行することで、本番環境と全く同じバックエンドを構築することができます。

 

また、Webアプリケーションであれば、Amplify Consoleを用いることで、CI/CD環境を容易に構築することができます。AWS CodeCommitやGithubのようなコードリポジトリと連携するだけで、ブランチ毎のフロントエンド共有環境のホスティング、CDNの構築、リリース管理を簡単に行うことができます。

 

Amplifyは開発組織がスケールしても容易に環境を複製したり、品質を担保する仕組みが存在します。開発者は組織の規模に応じて柔軟に開発環境をスケールさせることが可能です。

 

ビジネスニーズの変化

ビジネスの成長に伴い、要求される機能要件も増えていきます。AmplifyがサポートしていないAWSサービスの利用が必要になることも考えられます。

 

Amplify CLI は対話的にオプションを選択するだけでバックエンドが構築されるので、まるで魔法のようなツールに見えますが、裏側では Cloudformation テンプレートを作成し、反映を行なっています。つまり、Amplify CLI とは全く新しい 仕組みではなく、AWS バックエンドの構築を抽象化した仕組み と言えます。将来的に Amplify CLI を使用しなくなったとしても、Amplify CLI が出力した Cloudformation は引き続き使用することができるため、開発者はバックエンドに修正を加える必要はありません。

将来的にAmplifyがサポートしていない領域の開発が必要になったとしても、AWSの原則は変わりません。

 

ここまでAmplifyの特徴である「本質的な開発に集中し最速でサービスをリリースできる」「スケールすること」「変更に強いこと」の3つのメリットを紹介してきました。リソースが少なく先の見えないスタートアップにとって、これらの3つを両立するのは非常に難しかったのではないでしょうか。Amplifyを用いれば、

 

Amplifyに関するよくある質問

 AmplifyはインフラやAWSの知識がなくても利用できますか?

「メリット1: 本質的な作業に集中し、サービスを早くリリースができる」で紹介したように、Amplifyは非常にシンプルな実装が可能なクライアントライブラリと対話式にバックエンドを構築できる仕組みを有しています。シンプルな構成であればAWSの知識がなくてもサービスをリリースすることが可能です。同時に、Amplifyはスケーラブルなフレームワークです。サービスが大規模になるに連れて、個別のサービスの設定が非常に重要になってきます。(例. DynamoDBのキー設計) また、複雑な業務要件に応じてサービスを設計する場合、各サービスのそれぞれの属性意味やエコシステムについて理解している必要があります。(例 CognitoのOAuth設定やAppSyncのGraphQLの仕様 等) サービスが大規模になったり、要件が複雑になるに連れて、ある程度AWSやインフラの知識が必要になります。

既存のプロジェクトにもAmplifyを導入することはできますか?

はい。既存のプロジェクトにAmplifyを導入することが可能です。Amplify Frameworkは厳密にはフレームワークではなくクライアントライブラリです。他のクライアントライブラリ同様、いつでもあなたのプロジェクトにAmplify Frameworkを追加していただくことが可能です。(javascriptであればnpm install @aws-amplify )

また、Amplify Frameworkから既存のバックエンドのリソースを呼び出すにはAmplify Frameworkが読み込む設定ファイル(javascriptであればaws-export.js)に設定を記述いただくことが可能です。

 

Amplifyを学ぶために何から始めれば良いですか?

こちらの公式ドキュメントから詳細を知ることができます。また、AWSでは定期的にAmplifyに関するセミナーを開催しています。2019年8月に実施したAmplifyでTodoアプリを作るハンズオンセミナーの資料を公開しておりますので、是非ともご活用ください!

【お手軽ハンズオンで AWS を学ぶ】AWS Amplify で Todo アプリを作ろう! AWS AppSync & Amazon DynamoDB によるリアルタイムメッセージング

 

まとめ

いかがでしょうか。Amplifyのメリットについて少しでもイメージが湧きましたでしょうか。

Amplifyをうまく活用し、お客様のサービス成長の一助になれればと思います。

AWS Startup BlogではこれからもAmplifyに関する情報を紹介していきますので楽しみにしていてください!