Cloud Functions for Firebase とは
Cloud Functions のラップのようなもので Firebase の各機能との連携が取りやすくなっているらしい。
Firebase の各機能についてはこちらの記事が参考になる:
後述する firebase-tools
により、コマンドラインからコマンドひとつでボイラープレートの作成とデプロイが簡単にできるようになっている。
これは主観だけど、今までずっと使ってきた AWS Lambda なんかより格段にとっつきやすい感じがする。Firebase は Web の画面も UI が洗練されてるから使ってて気持ちいい。すぐできるから今すぐチャレンジ。
必要なもの
- Google アカウント
- Node 環境 (私は v8.11.2)
- 3分程度のやる気
追記1: 本記事公開時点での推奨バージョンは v6.14.0 とのことです! (@mono0926 さんコメントありがとうございます)
追記2: 2020年05月時点で、v8 と v10 がサポートされています。
ref: https://firebase.google.com/docs/functions/get-started
Cloud Functions は Node v6.14.0 を実行するので、このバージョンでローカルに開発することをおすすめします。
firebase コマンドの導入
$ npm install -g firebase-tools
これで、 firebase
コマンドが叩けるようになりました。
不安ならシェルをリロードしても良いでしょう。
$ exec $SHELL -l
プロジェクトの作成
$ mkdir foobar
$ cd foobar
$ firebase init
firebase init
はインタラクティブになっており、下記の選択項目が控えている。基本的にはスペースキーで選択してエンターキーで確定し進める。
-
どの機能を利用するか
- Database: Deploy Firebase Realtime Database Rules
- Firestore: Deploy rules and create indexes for Firestore
- Functions: Configure and deploy Cloud Functions
- Hosting: Configure and deploy Firebase Hosting sites
- Storage: Deploy Cloud Storage security rules
-
デフォルトプロジェクトの設定
-
[don't setup a default project]
(デフォルトプロジェクトを設定しない) -
Firebase Demo Project (fir-demo-project)
(Firebase デモプロジェクト) -
FooBar (foobar-d0c13)
(既存のプロジェクト FooBar) -
[create a new project]
(プロジェクトを新規作成)
-
-
Cloud Function を記述する言語の選択
- JavaScript
- TypeScript
-
ESLintを使用するか (Y/n)
-
依存パッケージを今すぐインストールするか (Y/n)
コードを書く
firebase init
後には functions
ディレクトリ以下にテンプレートが展開されている。Hello World 程度ならこれを編集するだけで良い。
const functions = require('firebase-functions');
// Create and Deploy Your First Cloud Functions
// https://firebase.google.com/docs/functions/write-firebase-functions
exports.helloWorld = functions.https.onRequest((request, response) => {
response.send("Hello from Firebase!");
});
他にも好きな npm パッケージをガシガシいれてコード書いてください。端折ります。
デプロイ手順
まず、ログインしていなければログインする必要がある。Firebase CLI に権限を与えるかどうか尋ねるブラウザが開くので承認するボタンをクリックする。
$ firebase login
そして、デプロイコマンドを叩く
$ firebase deploy
URL が発行されるので、テストアクセスしてみてください。(ちなみに下記のURLは無効なものです)
Function URL (helloWorld): https://us-central1-foobar-d0c13.cloudfunctions.net/helloWorld
ブラウザに Hello from Firebase
と表示されたのなら、デプロイは成功。
請求先アカウントについて
請求先アカウントが未登録の状態でも動作確認できました。しかし、ログにも出てくるように当然ながら制限があります。
Billing account not configured. External network is not accessible and quotas are severely limited. Configure billing account to remove these restrictions
(請求先アカウントが設定されていません。 外部ネットワークにはアクセスできず、クォータも厳しく制限されています。 これらの制限を削除するには、請求先アカウントを設定してください。)
まとめ
-
firebase login
(一度で良い) firebase init
-
functions
配下にコード書く firebase deploy
超簡単でびっくり。当初は Serverless Framework 経由で Google Cloud Functions を使おうとしていたのですが、調べてみると Firebase Tools でも同等のことができて、さらに楽チンだったのでこちらの方法でやることになったのでした。
Firebase やっていくぞ