1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今更ながらFirebaseのCloudFunctionsを使ってみた@Firestoreのトリガーで

Posted at

はじめに

Cloud Firestoreの書き込みをトリガーに、Cloud Functionsでバックエンドコードを実行してみたいと思います。

今回は例として、チャットのメッセージ(messages/)が書き込まれた時にルーム(rooms/)に最新メッセージを書き込むようにしてみます。

(ルーム一覧で最新メッセージをチラ見せさせたい。)

準備

firebase-toolsをインストールしていない場合は下記でインストール。

npm install -g firebase-tools
or
yarn global add firebase-tools
firebase init

今回はTypeScriptを選択。

実装

Firestoreのイベントのトリガーは下記4つになります。

イベント トリガー
onCreate ドキュメントが最初にトリガーされた時に呼ばれる
onUpdate すでに存在してるドキュメントの値が変更された時に呼ばれる
onDelete データを含むドキュメントが削除された時に呼ばれる
onWrite onCreate、onUpdate、onDeleteがトリガーされた時に呼ばれる

今回はメッセージが追加される度に処理したいので「onCreate」を利用します。

コード

functions/srcディレクトリの下にあるindex.tsに処理を追加します。

functions/src/index.ts
import * as functions from "firebase-functions";

export const setLatestMessage = functions
  .region("asia-northeast1")
  .firestore.document("rooms/{roomId}/messages/{messageId}")
  .onCreate(async (snap, context) => {
    const msgRef = snap.ref;
    const roomRef = msgRef.parent.parent;
    if (roomRef !== null) {
      await roomRef.set(
        {
          latestMsg: msgRef // 最新メッセージとして登録
        },
        { merge: true } // 追加書き込み
      );
    }
  });

補足

functions.region("asia-northeast1")

"asia-northeast1"で東京リージョンになります。

FireStoreをトリガーにするときは、Firestoreのリージョンと合わせた方が良いみたいです。

const roomRef = msgRef.parent.parent;
  • messageドキュメントのparent == messagesコレクション
  • messagesコレクションのparent == roomドキュメント

これでroomのドキュメントを取得することができます。

デプロイ

yarn deploy
or
npm run deploy

無事にデプロイできたら後はメッセージが追加される度に作成したFunctionが実行されると思います。

感想

今回初めてCloudFunctionsを利用してみたのですが、思ってたよりもすごく簡単に実装できてびっくりしました。

もっと早く利用しておけば良かったと後悔。。

HTTPリクエスト経由でも実行できるみたいなので、今度そちらも試してみたいです。

参考

https://firebase.google.com/docs/functions/get-started

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?