| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「Cloud Functions for Firebase」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
55行目: 55行目:
 
*Cloud Firestore は、指定されたドキュメント上でデータの書き込みまたは更新が行われるたびに、onWrite() コールバックをトリガー。
 
*Cloud Firestore は、指定されたドキュメント上でデータの書き込みまたは更新が行われるたびに、onWrite() コールバックをトリガー。
  
注意: 関数の結果によって関数が再トリガーされ、無限ループが発生することがないように注意してください。たとえば、特定の Cloud Firestore ドキュメントへの書き込みによってトリガーされ、その同じパスに書き込むことによって終了する関数は無限ループになります。また、1 つのイベントに対して複数回実行しても同じ結果が得られるよう、関数は必ずべき等方式で記述してください。
+
<q>
Cloud Firestore イベントなどのイベント ドリブンの関数は非同期です。コールバック関数は、null、オブジェクト、Promise のいずれかを返す必要があります。何も返さない場合、関数はタイムアウトし、エラーを通知し、再試行されます。同期、非同期、Promise をご覧ください。
+
注意: たとえば、特定の Cloud Firestore ドキュメントへの書き込みによってトリガーされ、その同じパスに書き込むことによって終了する関数は無限ループになります。
 +
1つのイベントに対して複数回実行しても同じ結果が得られるよう、関数は必ずべき等方式で記述してください。
 +
Cloud Firestore イベントなどのイベント ドリブンの関数は非同期です。コールバック関数は、null、オブジェクト、Promise のいずれかを返す必要があります。何も返さない場合、関数はタイムアウトし、エラーを通知し、再試行されます。
 +
</q>
  
 
  export const makeUpperCase = functions.firestore.document(`/message/{documentId}`).onCreate(
 
  export const makeUpperCase = functions.firestore.document(`/message/{documentId}`).onCreate(

2020年7月18日 (土) 16:17時点における版

Cloud Functions for Firebase

Firebase | Google Cloud Platform

環境構築

処理

典型的な使用例

関心事が発生したときにユーザーに通知

GoogleCloudFunctions UseCase1.png

データベースのサニタイズとメンテナンスを実行

GoogleCloudFunctions UseCase2.png

アプリではなくクラウドで集中的なタスクを実行

GoogleCloudFunctions UseCase3.png

サードパーティのサービスおよび API と統合

GoogleCloudFunctions UseCase4.png

サンプル

HTTP エンドポイント

  • HTTPエンドポイントに対するリクエストを行うと、Express.JS スタイルの Request オブジェクトと Response オブジェクトが onRequest() コールバックに渡されます。
  • 呼び出し可能な関数と同様に HTTP 関数は同期的。
  • できるだけ早くレスポンスを送信し、Cloud Firestore による作業を遅らせる必要があります。addMessage() HTTP 関数は、テキスト値を HTTP エンドポイントに渡し、/messages/:documentId/original パスの下でデータベースに挿入する。
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();

export const addMessage = functions.https.onRequest((request, response) => {
    const original = request.query.text;
    admin.firestore().collection("message").add({original: original}).then(
        (data) => {
            response.json({result: `Message with ID: ${data.id} added.`});
        }
    ).catch(
        (e) => {
            response.json(e);
        }
    );
});
  • deploy
$ firebase deploy --only functions 
  • Firebase コンソールに登録された

Cloud functions sample3.png

  • 呼び出してみる

Cloud functions sample1.png

  • Firestoreに登録された

Cloud functions sample2.png

関数トリガー

  • Cloud Firestore に書き込まれるときに実行される
  • ref.set 関数ではリッスン対象のドキュメントを定義。パフォーマンス上の理由から、可能な限り具体的にする必要があります。*
  • 中かっこ({documentId} など)は、パラメータを囲みます。これは、コールバックで一致したデータを公開するワイルドカードです。
  • Cloud Firestore は、指定されたドキュメント上でデータの書き込みまたは更新が行われるたびに、onWrite() コールバックをトリガー。

注意: たとえば、特定の Cloud Firestore ドキュメントへの書き込みによってトリガーされ、その同じパスに書き込むことによって終了する関数は無限ループになります。 1つのイベントに対して複数回実行しても同じ結果が得られるよう、関数は必ずべき等方式で記述してください。 Cloud Firestore イベントなどのイベント ドリブンの関数は非同期です。コールバック関数は、null、オブジェクト、Promise のいずれかを返す必要があります。何も返さない場合、関数はタイムアウトし、エラーを通知し、再試行されます。

export const makeUpperCase = functions.firestore.document(`/message/{documentId}`).onCreate(
    (snap, context) => {
        const original = snap.data()?.original;
        const uppercase = original.toUpperCase();
        return snap.ref.set({uppercase}, {merge: true});
    }
);