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

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

こんにちは!

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

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

はじめに

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

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

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

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

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

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

各種イベントをそれぞれ疎結合に実装すると、何がどこにあるか散らかって把握できない時が多々あります。

プロビジョニングツールが1つじゃない場合は結構苦痛かなと…。( Terraform、Serverless Framework が混在しているなど )

そんな時は Amazon Event Bridge がおススメです!

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

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

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

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

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

まとめ

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

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