FirebaseのCloud Functionsを使えば手軽にAPIが作れてとても便利です。
ただ,Functionsはデプロイするのに少し時間がかかるのでいちいちデプロイせずにローカルで実行できるようにしていきます。
Functionsローカル実行
秘密鍵の作成
1. Firebaseコンソールの左上にある歯車から「プロジェクトを設定」をクリック
2. 「サービス アカウント」をクリック
3. 「新しい秘密鍵の生成」をクリック
4. 「キーを生成」」をクリック
すると{firebaseアプリ名}-firebase-adminsdk-xxxxx-xxxxxxxxxx.json
というjsonファイルがダウンロードさまれます。
警告の通り,公開レポジトリには置かないようにしましょう。
コマンドを打つときにファイル格納場所を指定するので,格納場所は任意ですが,今回はfunctionsのリソースと同階層のfunctions/src
に格納しておきます。
リポジトリを公開している場合はこのタイミングで.gitignore
の設定をしましょう。
ローカル実行
$ GOOGLE_APPLICATION_CREDENTIALS={秘密鍵の格納場所(例:/functions/src/papa-point-xxxxxxxx-firebase-adminsdk-xxxxx-xxxxxxxxxx.json)}
$ firebase serve --only functions
i functions: Watching "/papa-point/functions" for Cloud Functions...
✔ functions[totalPoints]: http function initialized (http://localhost:5000/papa-point-xxxxxx/asia-northeast1/totalPoints).
ローカル実行できました!
http://localhost:5000/papa-point-xxxxxx/asia-northeast1/totalPoints
へアクセスすると期待していたJsonが返ってきました。
ちなみにGOOGLE_APPLICATION_CREDENTIALS
は秘密鍵のファイル位置を示す環境変数です。
おまけ
ローカル実行できるようにいなったのはいいけど,今度はデプロイ時にエラー(lint)が出るようになってしまいました。
$ firebase deploy --only functions
=== Deploying to 'papa-point-app'...
i deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run lint
> functions@ lint /papa-point/functions
> eslint "src/**/*"
/papa-point/functions/src/papa-point-app-firebase-adminsdk-xxxxx-xxxxxxxxxx.json
0:0 error Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser.
The file does not match your project config: src/papa-point-app-firebase-adminsdk-bpwvb-1fd9aeb7fa.json.
The extension for the file (.json) is non-standard. You should add "parserOptions.extraFileExtensions" to your config
先程追加した秘密鍵でlintエラーになってしまってます。。。
エラー文にあるようにparserOptions.extraFileExtensions
を.eslintrc.js
で設定してやり再度実行。
kohe papa-point $firebase deploy --only functions
=== Deploying to 'papa-point-app'...
i deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run lint
> functions@ lint /Users/suzukikouhei/Documents/repositorys/papa-point/functions
> eslint "src/**/*"
/Users/suzukikouhei/Documents/repositorys/papa-point/functions/src/papa-point-app-firebase-adminsdk-bpwvb-1fd9aeb7fa.json
0:0 error Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser.
The file does not match your project config: src/papa-point-app-firebase-adminsdk-bpwvb-1fd9aeb7fa.json.
The file must be included in at least one of the projects provided
またしてもエラーです。
ファイルがどこからもimportされない場合に表示されるエラーのようです。
このjsonファイルはローカル実行時のみに使うため,どうしようもなさそうなので,.eslintignore
に入れて強制的に黙らせました。
まとめ
functionsをローカル実行できるようになりました。
これで少しは開発スピードが上がるはず!!!
それではまた明日。