やっとGoogle Cloud FunctionsがBetaになり これから色々情報が出てくると思います。
今回は僕が特に注目してるCloud Functions for Firebaseについてです。
Cloud Functions for Firebaseとは
Firebaseのユーザ認証、データベース、ストレージの追加や変更のイベントを受け取ってサーバ側で何か処理できるサービスです。
現在はNode.jsがサポートされています。
クライアント側にロジックを持たせてしまうと問題のあるようなものをCloud Functionsにすることでロジックを秘匿することができますし、Push通知をするためのAPI Keyもクライアントに持たせるわけにいかないのでCloud Functionsを使えば安全に簡単にユーザの操作を元にPush通知を実装することもできます。
使い方
では早速試してみます。
バージョン6.3.1以上のNode.jsを必要とします。
SDKのインストール
次のコマンドでfirebase-toolsをインストールします。
$ npm install -g firebase-tools
インストールできたらfirebase login
で認証します。
次に、適当なディレクトリを作成してその中でfirebase init
をします。
デフォルトではFunctionsを使うにチェックが入ってると思うのでそのままエンターですすめます。
$ mkdir functions-test; cd functions-test
$ firebase init
作成できるとこのようなディレクトリ構成になると思います。
.
├── database.rules.json
├── firebase.json
└── functions
├── index.js
├── node_modules/...
└── package.json
既存のFirebase プロジェクトにFunctionsを追加したい場合はfirebase init functions
コマンドで初期化できます。
関数の作成
今回はデータベースの変更をフックして起動する関数を書いてみます。
var functions = require('firebase-functions');
exports.helloWorld = functions.database.ref('/test')
.onWrite(event => {
const val = event.data.val();
console.log('helloWorld', val);
})
デプロイ
次のコマンドでFunctionsだけをデプロイできます。
$ firebase deploy --only functions
Firebase コンソールから/test
を変更してコンソールかfirebase functions:log
コマンドからログを確認できます。
料金
気になる料金ですが Pricingで確認してください。
現在は無料プランではGoogleネットワーク外部と通信に制限があるので、どうしても外部と通信したい!と言う場合はプランを上げるかApp Engineと合わせて使う必要がありそうです。
それと従量課金のBLAZEプランでも無料枠があるので気軽に使い始められるかもしれません。
まとめ
API Keyなどはコードに書かないですむように 環境変数をセットすることもできるようです。
公式でサンプルがあるのでGitHubを見てみてください
カスタム認証や支払い処理、バッヂ処理、テキストのNG処理などのサンプルがあります。
また 現在は関数の削除はCloud Consoleからしかできないようです。
index.jsから関数を消せば削除されそう(要確認)