BlogFeedbackにシェア数の増加をメールでお知らせしてくれる機能を追加しました。
シェア数が昨日より増加していると、以下のようなメールが配信されます。
設定
設定はブログの追加時
または以下の設定画面から行うことができます。
配信する時間はとりあえず朝の9時にしてありますが、予告なく変更する場合があります。自分で時間や配信メールアドレスを選ぶ機能は今のところありません。
実装
- クロールからメール送信まで全てFirebase Cloud Functionsで実装
- Firebaseにはcronがなかったので、GCPにappengineをデプロイする方法で実装(これが一般的な方法らしい)
- 動きは以下の通り
- GCP cron→AppEngine→Cloud Pub/Sub→Cloud Functionsの対象者抽出Function→Cloud Pub/Subで対象ブログごとにFunctionsを起動
- Firebase Cloud Functionsの環境にはGCP用の環境変数が設定されているらしく、Cloud Pub/SubのSDKが設定なしで動いてびっくり
- Firebase Cloud Functionsの中身はGoogle Cloud Functionsなのでよく考えたら当たり前ではあるが
- Cloud Pub/Subは1回以上実行保証で、2回実行されることが普通にあるのでロック処理を入れた
- Firestoreにロック用テーブルを作ってjobごとにUUIDを入れる実装
- フロント側のクローラとコードが共有できそうな気もしたが、細かい部分で差異が出てくるのでとりあえずはコピペで対応
- HTMLメールのマークアップ辛すぎる
- 今はメールのSMTPサーバが自分のGmailなので、500通/dayしか送れない
- ユーザーが増えたらSESなりSendGridなり検討する
- 対象ブログ抽出の実装が1000ユーザーで上限決め打ち
- 拡張する対応は簡単なので、とりあえずこれも今は放置