AWS で考えるチャット機能の実装パターン!最短でチャット機能実現を考える

AWS で考えるチャット機能の実装パターン!最短でチャット機能実現を考える

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

ユーザーとのよりインタラクティブな表現が求められる近年のウェブアプリケーションでは、リアルタイムのチャット要件がしばしば登場します。

ただこれが実装しようとすると中々の曲者で、ウェブソケットの対応するサーバーの準備やチャット上でストリームイベントなどが発生するとインフラが複雑化してきますね…。
今回は、最短でチャット機能実現をご紹介します。

はじめに

わたしたちは、チャット実装の際に下記の思考フローを考えるようにしています。

  • カスタマーサポートなのか、ユーザー間のコミュニケーションなのか
  • 1対1、1対N、N対N、それとも全てのケースを網羅する必要があるのか
  • デザイン駆動型で一度要件をヒアリング、どんなリアルタイム要件が必要になるか検討( テキストメッセージ、動画、ホワイトボード機能等 )

サードパーティーを考える

自前構築するのは開発コストが非常に高いので、やはりサードパーティーの SaaS 等のチャット系サービスを導入検討してみるのは1つの手だろうと思います。

わたしたちは、サードパーティーを用いて構築を行う場合、Amazon Event Bridge を用いて下記のような構成をとるケースがあります。

AWSで考えるチャット機能の実装パターン!最短なチャット機能を実現を考える
AWSで考えるチャット機能の実装パターン!最短なチャット機能を実現を考える

SaaS 系のサービスの API リクエストを受け付け、その内容を AWS リソースへ伝達します。伝達先の AWS リソースのサブスクライバーに、例えば SQS などを用意すれば、SaaS 系のサービスと組み合わせたリアルタイムな通信を実現可能です。

AWS サービスだけでチャットを完結させる時は AppSync 推奨

リアルタイム処理はもちろんのこと、オフライン時の自動的なデータ接続の再開などの、サードパーティーで痒くて届かなかったことを容易く実現させてくれるのが AppSync です。( 個人的見解が含まれます )

APIGateway のソケットIOを使用しても実現可能ですが、やはり AppSync による GraphQL +オンライン復帰時のデータ同期+エレガントな SDK 提供は魅力的だと感じます。

私たちが思う、AppSync のリアルタイム処理のアドバンテージは下記ではないでしょうか。

  • 自動バージョニングでバックエンドとの競合を察知
  • 直感的な実装が可能でローカル開発がしやすい
  • オフライン → オンライン時に自動的に同期してくれる
  • GraphQL と密に連携、スキーマをチームで把握しやすい
  • iOS / Android / React Native / Web に対応

AppSync は、サブスクリプションと呼ばれるリアルタイム処理の便利機能を提供しており、インフラの細かな設定抜きで簡単に自動的な同期処理を実現してくれます。( チャットでいうところのメッセージを画面ロード無しに読み込める的な機能を容易に実現可能 )

まとめ

AppSync の採用事例はとても多く、特に GraphQL によるデータアクセス志向な API設計を行えるのは魅力的です。

AppSync、Amplify の開発はお気軽にご相談ください。