シェル(@takasqr)のブログ

firebaseに入門して一年後の使い方

はじめに

仕事でもプライベートでもFirebaseを使うようになって1年が経ちました。自分が一通りチュートリアルが終わった後に、知りたかったアイデアや考え方をまとめました。サンプルコードはjavascriptです。

※まだまだ書きたい事がありますが、時間がなくなってしまったので次回書き足したいと思います。

この記事を書いた人

@takasqr アプリケーション開発が大好きなエンジニア。Vue、Swift、Electrom などでアプリを作って公開している。AWS や Firebase などのクラウドサービスも好き。

作ったアプリKeyScript

Firebase Functions

環境変数

Firebase Functionsではパスワードなどのハードコーディングしたくない情報を環境変数に格納することができます。

環境変数を設定する。

firebase functions:config:set service.id="123456789" service.pass="987654321"

現在の環境変数一覧を取得する。

firebase functions:config:get

結果が返ってきます。

{
  "service": {
    "id": "123456789",
    "pass": "987654321"
  }
}

環境変数を削除する。

firebase functions:config:unset service.id service.pass

環境変数を使う。

const functions = require('firebase-functions');

exports.userCreated = functions.database.ref('/users/{id}').onWrite(event => {
  //
  console.log(functions.config().service.id)
  console.log(functions.config().service.pass)
});

ログ

Firebase Functionsのログはconsole.log()で出力することもできますが、console.error()でエラーとして出すことができなかったりと制約があります。

functions.logger.log()を使うことで、いい感じに出力することができます。

  const functions = require("firebase-functions");

  functions.logger.log("log:", someObj);
  functions.logger.error("error:", someObj);

スケジュール実行をテストする

Firebase Functionsのスケジュール実行は便利ですが、テストする時に設定した時間まで待たなければならない部分がデバックしづらい。

でも実はGoogle Cloud Platform(GCP)Cloud SchedulerにFirebase Functionsのスケジュールが登録されている。そしてGCPCloud Schedulerには「今すぐ実行」のボタンがある。

開発する時は非常に便利。

Firebase Authentication

権限管理

  • 特定のユーザーだけ、Firestore、Firebase strageのアクセス権限を強くしたい
  • 特定のユーザーだけアクセスできるページを作りたい

といった、Authenticationのユーザーにラベルを付けたい時にFirebase Admin SDKのクレームを使うと便利です。

admin
  .auth()
  .setCustomUserClaims(uid, { admin: true })
  .then(() => {
    // 
  });

例だとAdminというクレームに対してtrueを設定しています。

クライアントで取得するには、

firebase.auth().currentUser.getIdTokenResult()
  .then((idTokenResult) => {
     // Confirm the user is an Admin.
     if (idTokenResult.claims.admin) {
       // adminがtrueだったら
     } else {
       // adminがfalseだったら
     }
  })
  .catch((error) => {
    console.log(error);
  });

カスタム クレームとセキュリティ ルールによるアクセスの制御 | Firebase

Firebase Hosting

GitHubからの自動デプロイ

Firebaseは公式にGitHubからの自動デプロイをサポートしています。

新たなプロジェクトに自動デプロイを追加する。

firebase init hosting

既にあるプロジェクトに自動デプロイを追加する。

firebase init hosting:github

GitHubプルリクエストを介してライブチャンネルとプレビューチャンネルにデプロイする

さいごに

次回以降に書きたい事。

  • Stripe 決済
  • Firestore、storage セキュリティルール
  • Hosting 複数サイトをデプロイ
  • Functions デプロイリージョン
  • Functions メモリ、タイムアウト
  • 拡張機能