Firebaseでチャットアプリのサンプルを作った

TL;DR

チャット機能があるアプリをAWSで作ろうとしたが意外と難しそうだったのでFirebaseを試してみた

モチベーション

AWS導入事例では ALBの下にEC2やコンテナを並べてRedisのpub/subで…みたいなことをしていて結構大掛かりになりそうでした。 これは大規模な例ですが、AWSでチャット機能を実装しようとするとどうしてもSocket.io・WebSocket等を使うことになります。

今作りたいアプリではチャットはメインの機能ではないしフルスクラッチで開発するのは工数的にも厳しいので、 出来合いのものを埋め込むかPaaSを利用してもうすこし簡単に作りたい。 少し調べたところLayerというものを見つけましたが、 まだ完全にビジネスに耐えれるものでは無さそうでしたので諦めて、FirebaseのRealtimeDBを使ってみることにしました。

やったこと

チャットを実装するチュートリアルが公開されていたのでそれをやってみます。

https://codelabs.developers.google.com/codelabs/firebase-web/index.html#0

このチュートリアルでは以下の内容を網羅できるので今回のアプリにはぴったりでした。

  • Firebaseのプロジェクト作成
  • Googleアカウント認証機能
  • Firebase Realtime DBでメッセージの送受信
  • 画像の送受信
  • notificationの実装
  • デプロイ

所感

ちょっと機能がたりてない感がありますが、思ってた以上に簡単にチャット機能を実装でました。
本当はサーバーサイドでメッセージを受信したらイベントドリブンでプッシュ通知を相手側に送るみたいなことをやりたかったのですが、 Firebaseだけでは完結できませんでした。やるとしたらサーバー立ててRealtimeDBの全トピックをListenしてmessageがあったらプッシュ通知API叩くみたいなことをやらないといけない気がします。
pushイベントをhookできればLambdaでサーバレスできそうなので少し残念。 料金は高いですが初期のフェーズはFirebase Realtime Databaseを使用してスケールしてきたらチャット基盤を構築するということにしておくとそれほど問題にはならなさそうです。
圧倒的な速度でチャット機能を実現できるのでとりあえず迷ったらこれで作ってみるのが良さそうです。