「Cloud Functions for Firebase」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「=Cloud Functions for Firebase= Firebase | Google Cloud Platform *https://firebase.google.com/docs/functions?hl=ja ==環境構築== *[https://www.typea.info/blog/…」) |
|||
| (同じ利用者による、間の16版が非表示) | |||
| 4行目: | 4行目: | ||
*https://firebase.google.com/docs/functions?hl=ja | *https://firebase.google.com/docs/functions?hl=ja | ||
==環境構築== | ==環境構築== | ||
| + | *https://firebase.google.com/docs/functions/get-started?hl=ja | ||
*[https://www.typea.info/blog/index.php/2020/03/22/cloud_functions_for_firebase_dev_env/ Cloud Functions for Firebase の開発環境をととのえる] | *[https://www.typea.info/blog/index.php/2020/03/22/cloud_functions_for_firebase_dev_env/ Cloud Functions for Firebase の開発環境をととのえる] | ||
==処理== | ==処理== | ||
| 16行目: | 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
環境構築
- https://firebase.google.com/docs/functions/get-started?hl=ja
- Cloud Functions for Firebase の開発環境をととのえる
処理
典型的な使用例
関心事が発生したときにユーザーに通知
データベースのサニタイズとメンテナンスを実行
アプリではなくクラウドで集中的なタスクを実行
サードパーティのサービスおよび API と統合
サンプル
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 コンソールに登録された
- 呼び出してみる
- Firestoreに登録された
関数トリガー
- 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});
}
);
Tips
環境構築
ファイルアップロード
Cloud Vision
アプリから呼び出す
© 2006 矢木浩人



