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

MyMemoWiki

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

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の15版が非表示)
17行目: 17行目:
 
===サードパーティのサービスおよび API と統合===
 
===サードパーティのサービスおよび API と統合===
 
[[File:GoogleCloudFunctions_UseCase4.png]]
 
[[File:GoogleCloudFunctions_UseCase4.png]]
 +
==サンプル==
 +
*https://firebase.google.com/docs/functions/get-started?hl=ja
 +
===HTTP エンドポイント===
 +
*HTTPエンドポイントに対するリクエストを行うと、[https://ja.wikipedia.org/wiki/Express.js Express.JS] スタイルの Request オブジェクトと Response オブジェクトが onRequest() コールバックに渡されます。
 +
*呼び出し可能な関数と同様に HTTP 関数は同期的。
 +
*できるだけ早くレスポンスを送信し、Cloud Firestore による作業を遅らせる必要があります。addMessage() HTTP 関数は、テキスト値を HTTP エンドポイントに渡し、/messages/:documentId/original パスの下でデータベースに挿入する。
 +
 +
*[https://www.typea.info/blog/index.php/2021/11/06/cloudfunctions_firestore_ref/ CloudFunctions から Firestoreに接続する]
 +
 +
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 コンソールに登録された
 +
[[File:cloud_functions_sample3.png|600px]]
 +
*呼び出してみる
 +
[[File:cloud_functions_sample1.png|600px]]
 +
*Firestoreに登録された
 +
[[File:cloud_functions_sample2.png|600px]]
 +
 +
===関数トリガー===
 +
*Cloud Firestore に書き込まれるときに実行される
 +
*ref.set 関数ではリッスン対象のドキュメントを定義。パフォーマンス上の理由から、可能な限り具体的にする必要があります。*
 +
*中かっこ({documentId} など)は、パラメータを囲みます。これは、コールバックで一致したデータを公開するワイルドカードです。
 +
*Cloud Firestore は、指定されたドキュメント上でデータの書き込みまたは更新が行われるたびに、onWrite() コールバックをトリガー。
 +
 +
<q>
 +
注意: たとえば、特定の Cloud Firestore ドキュメントへの書き込みによってトリガーされ、その同じパスに書き込むことによって終了する関数は無限ループになります。
 +
1つのイベントに対して複数回実行しても同じ結果が得られるよう、関数は必ずべき等方式で記述してください。
 +
Cloud Firestore イベントなどのイベント ドリブンの関数は非同期です。コールバック関数は、null、オブジェクト、Promise のいずれかを返す必要があります。何も返さない場合、関数はタイムアウトし、エラーを通知し、再試行されます。
 +
</q>
 +
 +
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});
 +
    }
 +
);
 +
[[File:cloud_functions_trigger_sampl1.png|600px]]
 +
==Tips==
 +
===環境構築===
 +
*[https://www.typea.info/blog/index.php/2020/03/17/google-cloud-functinos/ 試す]
 +
*[https://www.typea.info/blog/index.php/2020/03/22/cloud_functions_for_firebase_dev_env/ 環境構築]
 +
*[https://www.typea.info/blog/index.php/2020/03/29/cloud-functions-firestore-bind/ Firestore連携]
 +
===ファイルアップロード===
 +
*[https://www.typea.info/blog/index.php/2020/08/02/firebase-cli-google-cloud-functions/ ファイルアップロード]
 +
===Cloud Vision===
 +
*[https://www.typea.info/blog/index.php/2020/08/09/google-cloud-function-vision-api-ocr/ Cloud Vision API]
 +
===アプリから呼び出す===
 +
*[https://www.typea.info/blog/index.php/2020/08/11/angular-cloud-functions/ アプリから呼び出す]
 +
*[https://www.typea.info/blog/index.php/2020/08/11/angular-cloud-functions-ocr/ Angular から Base64エンコードした画像ファイルを Cloud Functions にアップロードして Cloud Vision API でOCR]

2021年11月6日 (土) 03:38時点における最新版

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});
    }
);

Cloud functions trigger sampl1.png

Tips

環境構築

ファイルアップロード

Cloud Vision

アプリから呼び出す