【Firebase】Cloud Functions for Firebase to Cloud Firestoreの接続実験を行っていく
はじめに
こんにちは、がんがんです。
前回の記事ではCloud Functions for Firebase on Docker環境からFIrebase Realtime Databaseへの接続を行っていきました。
gangannikki.hatenadiary.jp
今回はCloud Functions for Firebase(nodejs:8)からCloud Firestoreの接続実験を行っていきました。
目的
- Cloud Functionsの実験を行う
- FunctonsからFirestoreへの書き込み実験
参考
GoogleさんのものはCodelabにコードがあることが多いのでとても助かります。
Codelabのコード
codelabs.developers.google.com
firebase公式のgithub
github.com
firebase公式のドキュメント
firebase.google.com
今回もGitHubのコードとドキュメントをベースにしながら実験を行っていきます。
index.jsの編集
Docker環境については前回の記事の通りです。今回もnode:8
で実行しています。
index.js
のコードは下記の通りです。前回同様に基本的には本家のコピペです。
'use strict'; // [START all] // [START import] // The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers. const functions = require('firebase-functions'); // The Firebase Admin SDK to access the Cloud Firestore. const admin = require('firebase-admin'); admin.initializeApp(); // [END import] // [START addMessage] // Take the text parameter passed to this HTTP endpoint and insert it into // Cloud Firestore under the path /messages/:documentId/original // [START addMessageTrigger] exports.addMessage = functions.https.onRequest(async (req, res) => { // [END addMessageTrigger] // Grab the text parameter. const original = req.query.text; // [START adminSdkAdd] // Push the new message into Cloud Firestore using the Firebase Admin SDK. const writeResult = await admin.firestore().collection('messages').add({original: original}); // Send back a message that we've succesfully written the message res.json({result: `Message with ID: ${writeResult.id} added.`}); // [END adminSdkAdd] }); // [END addMessage] // [START makeUppercase] // Listens for new messages added to /messages/:documentId/original and creates an // uppercase version of the message to /messages/:documentId/uppercase // [START makeUppercaseTrigger] exports.makeUppercase = functions.firestore.document('/messages/{documentId}') .onCreate((snap, context) => { // [END makeUppercaseTrigger] // [START makeUppercaseBody] // Grab the current value of what was written to the Cloud Firestore. const original = snap.data().original; console.log('Uppercasing', context.params.documentId, original); const uppercase = original.toUpperCase(); // You must return a Promise when performing asynchronous tasks inside a Functions such as // writing to the Cloud Firestore. // Setting an 'uppercase' field in the Cloud Firestore document returns a Promise. return snap.ref.set({uppercase}, {merge: true}); // [END makeUppercaseBody] }); // [END makeUppercase] // [END all]
プロジェクトの実行およびfunctionのデプロイ
いつも通り、Docker Composeで起動していきます。前回の関数が残ってる場合はデプロイ出来ないので、Firebaseコンソールより消してからデプロイしてください。どうやら同じ名前で中身の異なるものはfirebaseさんに怒られるようです。
(host os) $ docker-compose up -d && docker-compose exec app bash (docker) $ firebase login --no-localhost (docker) $ firebase deploy
実行結果の確認
上手くデプロイできたかを確認してみます。ドキュメントを参考に、Firebaseコンソールで表示されたURLにアクセスしてみます。
これも前回と同じですね。
https://<表示URL>?text=uppercasemetoo
下記のような画像になっていればOKです。画像が上記の文字とは異なりますが、同じようになってればどんな文字列でも大丈夫です。
おわりに
今回はCloud FunctionsからCloud Firestoreへの接続実験を行いました。
次回は自身の作成したいものを作っていきます。こちらについてはどこかでまとめていけたらと思ってます。