モデレーション機能を備えたチャットアプリの開発方法
Momento Topics、Cache、Webhooks を使って、チャットアプリを簡単に開発する方法を紹介します。

アプリ開発にはさまざまなクライアントプラットフォームやフレームワークがあり、開発コストを抑えながらエンドユーザーの選択肢を広げるには、どの技術スタックを選ぶべきか迷うことがあります。Momento は、多様なクライアント SDK で Momento Topics と Cache に対応し、その選択を簡単にします。
モデレーション機能を備えたチャットアプリの開発を例に見ていきましょう。このクロスプラットフォームのチャットアプリは、不適切なメッセージや画像を除外し、異なる言語を使うユーザー同士のコミュニケーションを可能にします。

モデレーション付きチャット API を追加する
この例の中心となるのは、すべてのクライアントアプリケーションで使う主要な処理を集約した、モデレーション付きチャット API です。
各クライアントアプリは起動時に、ログイン用のユーザー名を求めます。クライアントが API にリクエストを送ると、API は Momento 認証トークンを発行します。これにより、指定されたユーザーが Momento Topics と Cache を使い、特定のトピックでメッセージを送受信できるようになります。
API は、クライアントアプリから配信された画像やテキストメッセージも処理します。メッセージは「chat-publish」というトピックへ配信され、それをきっかけに Webhook が起動し、次の処理を行います。
- bad-words ライブラリで不適切な言葉を除外する
- Amazon Rekognition で不適切な画像を除外する
- Amazon Translate で、テキストを対応する各言語へ翻訳する
- 翻訳したテキストを、クライアントアプリが購読できる言語別のトピックへ配信し、Momento Cache を使ってチャットのメッセージ履歴を更新する
複数のプラットフォームで一つのチャットを共有する

クロスプラットフォームのアプリでは一般に、さまざまなクライアントアプリケーションが利用できる共通のバックエンドを用意します。この例も同じ構成です。こうすることで、新しいクライアントプラットフォームに対応する際は、クライアント側を更新するだけで済みます。
ユーザーは、Momento が対応するさまざまなクライアントプラットフォームから、一つのチャットルームに参加できます。以下の実装例をご覧ください。
- Web アプリは JS Web SDK を使用しています。https://chat.gomomento.com/ でお試しいただけます。
- iOS アプリは Swift SDK を使用しています。
- Android アプリは Kotlin SDK を使用しています。
- Flutter アプリは Dart SDK を使用しています。
- Unity アプリは C# SDK を使用しています。
- React Native アプリは JS Web SDK を使用しています。
それぞれのモデレーション付きチャットクライアントには、以下の実装例が含まれています。
- POST リクエストで Momento 認証トークンを取得する
- Momento Cache と Topics のクライアントを初期化する
- ユーザーが選択した言語に応じたトピックを購読する
- 受信したメッセージを表示する
- チャットルームに新しい画像やメッセージを投稿する
サーバー側のコードはごくわずか
この構成で必要なサーバー側のコードは、トークン自動販売機と Webhook の処理を持つ Lambda 関数にすべて収まっています。クロスプラットフォームのチャットセッションを実現するために、WebSockets を直接扱う必要はありません。さらに、すべてのクライアントで Momento を使えば、プラットフォーム間で同じ実装パターンを使えるため、依存関係の数と開発作業全体を最小限に抑えられます。
モデレーション付きチャット API のコードは、すべてこちらの GitHub リポジトリで公開しています。