【firebase】functionsのつかいかた
以前のfirebase記事の続編です。
今回はfunctionsに焦点を当ててみます。
functionsとはなんぞや
functionsは、いわゆるサーバーレスでコードを実行するサービスです。
AWSのlambdaやGCPのGAEと似たようなサービスと言ったらわかりやすいでしょうか。
違う所といえば、それらのサービスは複数の言語をサポートしているのですが、functionsがサポートしてるのはNode.jsのみになります。
なので不自由な面はあるのですが、同じfirebaseのサービスであるhostingと組み合わせて使うと、javascriptのみで完結するので親和性はいいんじゃないでしょうか。
設定方法
では早速functionsの設定に入っていきましょう。
firebaseのサービス全般を使うには、firebase-cliの導入が必要です。npmでサクッと入れちゃいましょう。(node.js導入済み前提)
npm install -g firebase-tools
次に使用しているfirebaseのアカウントを設定します。
なお、これはGoogleアカウントと共通ですので、GCP使っていたらそのまま使用できます。
firebase login
ブラウザが立ち上がり認証が始まりますが、画面に従って進めれば問題なく完了できます。
設定が完了したら、次にプロジェクトを設置するディレクトリに移動します。
ここで初期化をすれば開発環境構築は完了です。
firebase init functions
一式がプロジェクトルートに設置されたと思います。以下のようになっていればOKです。
project_root +- .firebaserc | +- firebase.json | +- functions/ | +- .eslintrc.json | +- package.json | +- index.js | +- node_modules
これで設定は完了です。主にfunctionsディレクトリの中身で作業することにになります。
functionの作成&デプロイ
functionsディレクトリの中にあるindex.jsを開いてみましょう。
実行するfunctionを書くファイルになります。もう殆どこれしか触りません。そこまで複雑な仕組みではないので。
最初にimportして初期化する処理を書いておきましょう。
const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp();
functionsの機能を使う事ができます。
以下はAPIから記事をとってくる関数の一例です。
exports.getArticles = functions.https.onCall(async (data, context) => { const snapshot = await db.collection("article").get(); const news = new Array(); snapshot.forEach((doc) => { news.push(doc.data()); }); return news; });
これはfirestoreも使ってるのですが・・・firestoreに関してはまた別途書きます。
処理を書いたらデプロイしましょう。
プロジェクトルート(つまりfunctionsの上)で
firebase deploy --only functions
を実行します。
設定は済んでいるので、これだけでデプロイ完了です。メチャクチャ簡単ですね。
TypeScriptも使える
基本的にjsですが、typescriptも選べます。
その場合は事前にトランスパイルしてデプロイするか、デプロイしてHookでトランスパイルするかの2通りのやり方があります。
僕はお手軽なので前者でやってるのですが、手間を考えると後者でやったほうがいいかもしれません。
まとめ
以上がfunctionsの設定からデプロイまでの一連の流れになります。
最初やったとき、あまりにも簡単すぎてビックリしました。ほぼコード書くことだけに専念できる作りになってますね。
なお、ログ等は管理画面から見られるので特段準備は必要ありません。