日々是好日

プログラミングについてのあれこれ、ムダ知識など

Firebase Hosting+Functionsのメモ

Firebase Hosting

プロジェクトを作成するフォルダに移動してinitコマンド

cd /project
firebase init

Hosting: Configure and deploy Firebase Hosting sitesを選択してポチポチ。 するとプロジェクトフォルダに(デフォルトなら)publicというフォルダとindex.html等のファイルが生成される。 publicフォルダ内にHtml, CSS等を配置していく。

Hostingへのデプロイ

deployコマンドでデプロイする。

firebase deploy 

# Hostingのみの場合
firebase deploy --only hosting

最後に下記の形式でURLが発行されるので、ブラウザで開くと作成したページが見られるはず。

projectID.firebaseapp.com

再デプロイしてもうまく反映されないとき

再デプロイをしてもブラウザで見たときに反映されない場合があるが、キャッシュを削除することで直る場合がある。 「chrome キャッシュクリア」あたりでググって見てください。 (Chrome前提ですみません)

Cookieの削除等は不要、「キャッシュされた画像とファイル」の削除だけでおk。

Firebase Functions との連携

あるページにリクエストが来たとき、Functionsで動的にコンテンツを生成して返す方法。

基本全部こちらに載っている。

今回はprojectID.firebaseapp.com/hogeにアクセスされたとき、Functionsにて生成したHtmlを返すような例。 index.tsにて関数を定義(ここではdynamicChange)し、ステータスコードと返すHtmlを書く。

なお、今んところFunctionsによる動的コンテンツ生成はus-central1リージョンでしか対応していないそうなのでご注意を。

import * as functions from 'firebase-functions'

exports.dynamicChange = functions
  .region('us-central1')
  .https.onRequest((request, response) => {
    response.status(200).send(
      // 公式の例では返すHtmlをハードコーディングしている。。。
    )
  })

次にfirebase.jsonにて、rewritesを次のように書き換える。

{
  ...
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [ {
      // トリガーとなるページと関数
      "source": "/hoge",
      "function": "dynamicChange"
    } ]
  }
}

これで再デプロイすると、hogeにアクセスしたときdynamicChange関数で生成されたページが返ってくる。