チャットは、ビジネスで必須のコミュニケーションツールです。このようなアプリケーションの実装には、遅延のないリアルタイム処理が求められるとともに、オフライン状態の更新をシームレスに同期させる必要があります。
この記事では、リアルタイム処理と同期を実現するアプリケーション開発ツールAWS AppSyncを解説し、そのサービスを使ったリアルタイムチャットアプリのユースケースを紹介します
1. AWS AppSyncとは
AWS AppSyncは、シンプルな操作性を備えたWebアプリケーション開発ツールです。
AWSのコンソールからAPIとデータベースを設定するだけで構築可能であり、煩雑な設定が自動化されているため、開発期間の短縮に役立ちます。バックエンドのデータソースとしてはAmazon DynamoDB、AWS Lambda、Amazon Elasticsearch Service、Aurora Serverless、HTTPエンドポイントなどから柔軟に構成可能です。
クエリ言語にはGraphQLを採用しています。GraphQLはFacebookが開発した後にオープンソース化されました。単一のリクエストによって複数のデバイスから自動的にデータを取得および同期できます。RESTほかのWebサービスと比べて効率的であり、柔軟性と堅牢性の面においても優れています。
オフライン状態でもデータの追加や更新が可能であり、オフライン時にユーザーがデータを書き換えると、UIを自動的に更新し、接続を再開したときに変更を反映します。さまざまなネットワーク条件におけるキャッシュ更新の管理を指定できます。
オフライン操作の更新時には、複数のデバイスからユーザーが同時に更新したときの競合が問題になります。しかし、デフォルトの状態でデータの競合状態の解消が設定されているため処理を大幅に短縮します。AWS Lambda 関数を使ってカスタマイズすることも可能です。
パフォーマンス向上の面でもメリットがあります。ユーザーエクスペリエンスの最適化、利用するストレージと帯域幅を抑制します。サーバー側の高速インメモリ管理キャッシュにより、データソースの直接のアクセスを減少させ、低遅延のデータ配信を実現します。
2. AWS AppSyncの特徴
GraphQLの採用、Amplify DataStoreによる同期、管理機能とセキュリティの3つに焦点を当てて解説します。
2-1. GraphQLによる開発と運用の効率化
GraphQLはAPI向けのクエリ言語およびランタイムであり、直感的かつ柔軟性の高い操作性を備えています。アプリケーション開発を高速化できることから、多くのAPI構築で利用されるようになりました。データのフェッチ、変更、サブスクライブなどを構文で記述して、クライアントアプリケーションから実行できます。
通常のREST APIでは複数のURLからロードが必要ですが、GraphQLのAPIは1回のリクエストで多くのソースにアクセス可能であることから、アクセスに関わるネットワークやサーバーの負荷軽減、パフォーマンスの向上、データ管理の簡素化を行います。低速回線でも低レイテンシであることが特徴です。
開発面では、バックエンドの知識がなくても迅速に開発ができるメリットがあります。また、データ構造の変更や既存のAPIに新たなフィールドの追加が簡単にできるため、柔軟な開発を可能にします。
2-2. Amplify DataStoreによる同期
Amplify DataStoreの機能と組み合わせることによって、オフライン同期が可能になります。Amplify はWebフロントエンドとモバイルアプリケーションの開発を効率化するプラットフォームです。このプラットフォーム上にデータを永続的に保存と管理するリポジトリとしてデータストアを提供します。
GraphQLを詳しく知らなくても、オブジェクト関連マッピングの手法を使えることが特徴です。データの更新をリアルタイムでプッシュし、たとえばモバイルアプリケーション利用時にはオフラインからオンラインに復帰したときの同期機能を備えています。
2-3. 管理機能とセキュリティ
フルマネージド型で提供されるため、サーバー管理が不要です。セットアップやバージョンの管理、保守の負荷が軽減され、アプリケーションの開発に集中できます。
セキュリティ面の堅牢性も特徴です。アプリケーションに応じてアクセス制限のレベル設定が可能であり、AWS Identity and Access Management を使うとロールによる管理ができます。また、Amazon Cognito のユーザープールとメールやパスワードが統合されているため、Facebookなどソーシャルメディアの認証連携に対応しています。
3. リアルタイムチャットアプリ構築
ユースケースのひとつとして、リアルタイムチャットアプリ構築をピックアップします。
AWSにはサンプルアプリケーションとして、ChatQLが用意されています。このChatQLを使った構築の概要をまとめていきましょう。
アーキテクチャとしては、AWS AppSyncのAPIを介してバックエンドのソースとデータのやり取りをします。ユーザーの操作は、リゾルバ-に関連付けられているGraphQLスキーマによって定義され、マッピングテンプレートを使用してデータの読み書きを行います。AmazonDynamoDBでは、ユーザー、メッセージ、会話、ユーザーと会話という4つのテーブルを利用して関連付けます。
GraphQLのオペレーションには、会話とメッセージのリストを取得するクエリ、ユーザーとメッセージと会話およびそれぞれの関係を作成するミューテーション、バックエンドの受信とともに新たなメッセージを取得するサブスクリプションがあります。UIは機能のモジュールで構成されるコンポーネントとして提供されます。
また、AWS Amplifyは、フロントエンドとモバイルアプリケーション開発において認証を簡単にするためのライブラリを備えています。このライブラリによって、サインイン時のパスワード確認などが可能です。
テキストによるリアルタイムのコミュニケーションのほか在席の表示、対話の履歴を残す機能を追加できます。
4. その他のユースケースの例
リアルタイムチャットアプリ以外のアプリケーションのユースケース例を挙げます。
4-1.ドキュメントやホワイトボードのリアルタイム共有
テレワーク時には、チャットとともに文書やホワイトボードをリアルタイムで共有すると便利です。多対多もしくは1対多で情報を共有するアプリケーションを構築できます。企業のオフィスだけではなく、医療機関や教育の分野においても活用が見込めるアプリケーションです。
4-2. ニュース速報や株価チャートの自動更新
SQL、NoSQLをはじめ、検索したデータやREST エンドポイントなど、複数のデータベースからソースを取得して配信するアプリケーションの構築が可能です。
一般的なユースケースとしては、イントラネットや経営者のダッシュボードなどに、ニュース速報や株価チャートを表示させる機能があります。カスタマーサポートセンターでは、顧客の現在のステイタスを表示するシステムの構築に使えます。
4-3. IoTやマルチデバイスアプリケーション
オフラインの状態で作動して、最終的にデータを自動的にマージする必要があるIoTなどマルチデバイスのアプリケーションに活用できます。たとえばセンサーから情報を収集する場合、設置場所の状況によって断続的にクラウドと端末のネットワーク接続が途絶える状況があります。このような場面において、オフラインからの更新が有効です。
5. おわりに
AWSではリアルタイムチャットのアプリケーションを簡単に実装できます。社内の利用にとどまらず、さまざまな現場に役立つ機能です。最近のカスタマーサポートでは、リアルタイムチャットにAIを搭載して、自動的に問い合わせを行うケースも増えてきました。人材コストの削減や問い合わせ負荷の軽減のために意義のあるサービスといえるでしょう。
リアルタイム処理とオフライン時の更新は、リアルタイムチャット以外にもIoTなどに応用できる技術であり、さまざまなユースケースが考えられます。
ベトナムオフショア開発会社 ONETECHはAWSセレクトティアパートナー
もし、AWSについてプロのアドバイスが欲しいのなら、ぜひONETECHにご相談ください。
ONETECHはオフショア開発会社として100社以上との取引実績を誇ります。
ONETECHではAWS資格保有のエキスパートがお客様の課題をカタチにします。
- インターネットサービスの企画はあるがどうしたら良いか
- どのようにクラウドを利用したら良いかわからない
- クラウドを利用するためのコストやポイントを知りたい
- 保守運用まで考慮した設計をしたい
AWS AppSyncを含むAWSのコンサルティングサービスを提供しています。気になること、不安なことをお気軽にご相談ください。