Cloud Functions for Firebase の Tips
はじめに
Cloud Functions for Firebase を色々と触った際の メモ/Tips。ドキュメントを読んだだけで試せてない(後で試したい)ものもあり。
目次
環境・条件
1 | $ sw_vers |
詳細
公式ドキュメントに大体書かれている。
Request の情報取得
参考: HTTP リクエスト経由で関数を呼び出す | Firebase
Request Headers
参考: req.get(field)
- Express 4.x - API Reference
onRequest
の第一引数 request
は Express の Request なので、request.get
で Request Headers の情報を取得可能。
1 | const functions = require("firebase-functions"); |
Query Parameters
参考: req.query
- Express 4.x - API Reference
1 | const functions = require("firebase-functions"); |
リージョン指定
参考:
region('region-name')
でデプロイ先のリージョンを指定可能。デフォルトは us-central1
(アイオワ)。
以下は asia-northeast1
(東京)を指定する例。
1 | const functions = require("firebase-functions"); |
functions.region()
でカンマ区切りの複数のリージョン文字列を渡すことで、複数のリージョンを指定できます。
カンマ区切りで指定すると、複数リージョンを指定できるとのこと、たぶん以下のような感じ(未検証)
1 | exports.someFunction = functions |
ファイル分割など
ざっくり以下の方法でファイル分割できる
- endpoint ごとにファイルを分けて保存
index.js
からrequire
する
1 | // index.js |
CORS エラー対応
参考:
- Cloud Functions for Firebase で CORS エラーを回避する
res.set(field [, value])
- Express 4.x - API Reference- cors - npm
response.set
で 'Access-Control-Allow-Origin
を設定する。あるいは cors
を噛ませる。
1 | const functions = require("firebase-functions"); |
1 | const functions = require("firebase-functions"); |
ローカルデバッグ
firebase emulators:start [--only functions]
コマンドでローカルサーバが起動。
1 | $ firebase emulators:start |
あとは Functions を実行(ブラウザでアクセスするなり、Node.js REPL から API 叩くなり)して挙動を確認できる。
ローカル実行でも firebase-admin
を使って Firestore などにもアクセス可能。
1 | const functions = require("firebase-functions"); |
ちなみに http://localhost:4000
にアクセスすると以下のような GUI で情報を確認できる。
コネクション維持
参考:
- ネットワークの最適化 | Firebase
- HTTP | Node.js v12.22.1 Documentation
new Agent
http.request
※Node.js のバージョンを設定する にあるように 2021/05/07 時点では Node.js 12 が Stable なので v12.22.1 のドキュメントをリンク
毎回コネクション確立するとオーバーヘッドがあるので、コネクションを維持できるっぽい。(未検証。試したら追記する)
http
ではなく axios を使いたい場合は、以下を参考にすればたぶんいけそう。
- How to enable axios keepAlive? · Issue #1846 · axios/axios
- Good default configuration for axios in node.js
- agentkeepalive - npm
Optional Chaining(?.
)を使いたい
参考:
- Cloud Functions を新しい Node.js に移行する | Google Cloud Functions に関するドキュメント
- 関数のデプロイとランタイム オプションを管理する | Firebase
Node.js 14 を使えば Optional Chaining(?.
)がデフォルトで使えるようになる。ただし、2021/05/08 時点では Node.js 14 はβ版なので注意。
Node.js のバージョンを指定したい場合は functions/package.json
の engines
で指定可能。
1 | { |
もしくは Webpack や Babel を使って index.js
を出力する感じでもいけそう。以下はChrome 拡張の話だけど、多少は参考にはなるはず。
参考文献
- Cloud Functions for Firebase
- Cloud Functions for Firebase で CORS エラーを回避する
- HTTP | Node.js v12.22.1 Documentation
- Express 4.x - API Reference
- How to enable axios keepAlive? · Issue #1846 · axios/axios
関連記事
- Vue + Cordova + Firebase でプッシュ通知
- Node.js で firebase-admin を使ってサーバからプッシュ通知
- AWS S3 から Cloud Storage for Firebase にファイルをコピー
- axios で添付ファイルありのリクエスト(multipart/form-data の POST)
- Chart.js(vue-chartjs) でツールチップの表示内容を変更
- Vue.js で日本語変換での誤発火を抑止しつつ Enter キーで Submit
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア