Cloud Functions for Firebase に関する個人的な/初歩的な備忘録です.
ローカルでFunctionsのAPIをテストする
$ firebase serve --only functions
でテスト用ローカルサーバが起動する.
$ firebase serve --only functions,hosting
とすればHosting用のサーバも起動する.
- ローカルでのFunctionsのAPI呼び出しは手元の環境のNode.js上で実行されるため、実際にFirebase Functionsの本番環境で使用されているNode.jsとバージョンが異なる場合は微妙な相違に注意する必要がある. *
-
$ firebase serve
だとFunctionsのAPI呼び出しは本番環境のものが使用されることに注意
参考:
- ローカルでの関数の実行 | Firebase
https://firebase.google.com/docs/functions/local-emulator?hl=ja
Hostingのドメイン上でFunctionsのAPIを呼ぶ
firebase.json
のrewrites
を書き換えることでFirebase Hosting上のページから同一ドメインのURLでFunctionsのAPIを呼べる.
例えば以下のようにするとhttps://<Hostingのドメイン>/api/helloWorld
へのアクセスでFunctions側の関数helloWorld
が呼ばれる.
{
"hosting": {
...
"rewrites": [
{"source": "/api/helloWorld", "function": "helloWorld"},
...
]
},
...
}
$ firebase serve --only functions,hosting
でローカルサーバを起動した際にも、ローカルのHosting用アドレスhttp://localhost:5000/api/helloWorld
でFunctionsのAPIをテストできる.
HostingとFunctionsとで同一ドメインなためCORSの問題が発生しなくて済むことや、ローカルのテスト環境とデプロイした本番環境とで/api/helloWorld
で共通してAPI用URLを呼べるため便利.
参考:
- Firebase HostingとCloud Functionsの連携 | Developers.IO
https://dev.classmethod.jp/cloud/firebase-hostingcloud-functions/
##async/awaitが使えない
今現在 (2018/02/10) Functionsで使われているNode.jsのバージョンが古いため、ピュアなJSのコードではasync
やawait
が使えない. またObject.values()
など他にも地味に使えないものがある.
これらの機能を使うには素直にトランスパイラを通す必要がでてくる.
参考:
- functions-samples/es2017-transpile at master · firebase/functions-samples · GitHub
https://github.com/firebase/functions-samples/tree/master/es2017-transpile