概要
2021年2月現在、Firebase Cloud Functions で API を作る方法、ググっても出るけどセキュリティ周りの関係でちゃんと使えるようになるまでが若干面倒だったのでメモ程度にまとめておく。(Firebase 自体の使い方がわかっている前提)
※ Firebase の Spark プラン(無料版)では Cloud Functions は利用できない
手順
- 任意のディレクトリで
firebase init
でコンソール内の指示に従って初期化 -
package.json
のengines.node
から node バージョンを指定 (Node.js 8 は現在非推奨) -
./functions/index.js
を編集 -
firebase serve --only functions
でローカルで検証 (URLが表示される) - Cloud Build API を有効化しておく
-
firebase deploy --only functions:関数名
でデプロイ (長い) - この記事 の通りに Functions に権限を付与
- 4番で表示されたURLにアクセスすれば完了
- 以降の変更は3, 4番を繰り返せばOK
URLが表示されない場合は下記にアクセス。(リージョン名はデフォルトが us-central1
?)
ローカル: http://localhost:5000/[プロジェクトID]/[リージョン名]/[関数名]
本番: https://[リージョン名]-[プロジェクトID].cloudfunctions.net/[関数名]
TIPS
プリインストールされているパッケージ
ffmpeg とか imagemagic とか入ってて良い。
nodeバージョンの変更方法について
package.json
"engines": {
"node": "10"
}
スクリプトの書き方について
const functions = require('firebase-functions');
const cors = require('cors')({origin: true});
// TODO: 好きな関数名を設定する
exports.関数名 = functions.https.onRequest((request, response) => {
// TODO: CORS対策
cors(request, response, () => {
// TODO: 特定のHTTPメソッドのみを受け入れる
if (request.method !== 'POST') {
response.send('This is not post request.')
return
}
// TODO: ログ出力を行う
functions.logger.log("This is debug log.");
// TODO: GETクエリを取得する
const query = request.query;
const param1 = query.param1;
// TODO: POSTリクエストを取得する
const body = request.body;
const param2 = body.param2;
// TODO: JSONを返す
const json = {};
response.status(200).json(json);
})
});
// TODO: 複数の関数を定義する
// TODO: https://firebase.google.com/docs/functions/organize-functions?hl=ja
exports.関数名2 = functions.https.onRequest((request, response) => {
});
まとめ
CloudFunctions 自体の詳しい説明はググるといっぱい出るのでそちらを参考にするかと思い、こちらの記事はあくまでメモ的な形で利用していただけると嬉しいです。ちなみに自分は CloudFunctions + GmailAPI でお問い合わせページを作りました、便利ですね。