Firebase update summary 2020

Gossy Tsukagoshi
11 min readDec 2, 2020

本記事では Firebase の今年のアップデートの中から、特にアプリケーション開発に関連するもので、個人的に気になったものを紹介していこうと思います。

Firebase にそもそもどんな機能があったっけ?という方は コチラ も見てみてください!

この記事は Google Cloud Japan Customer Engineer Advent Calendar 2020 の 3日目の記事です。

Cloud Firestore

個人的に大好きなプロダクトでもある Firestore から紹介するのは、クエリとセキュリティルールのアップデートです。Firestore をよく使う方には非常にうれしいアップデートかな思います。

not equal クエリをサポート

!=not-in がサポートされました。これにより指定した値以外の全てのドキュメントを返すといったクエリが可能になりました。

たとえば、!= を利用することで 、status が completed ではないすべてのドキュメントを返したり

collection('project').where('status', '!=', 'completed')

not-in を利用することで、status が completed でも dropped でもないすべてのドキュメントを返したりすることができます。

collection('project').where('status', 'not-in', ['completed', 'dropped'])

セキュリティールール の便利な書き方

三項演算子が利用できるようになりました

これにより if/else 制御フローを利用することが可能になり、今までよりも複雑なセキュリティルールをシンプルに記載することができるようになりました。
書き方は非常にシンプルで condition ? true_case : false_case のように記述することができます。

function isGroupMember(group, visibility) {
let membership = visibility == "adminsOnly"
? /databases/$(db)/documents/admins/$(request.auth.uid)
: /databases/$(db)/documents/$(group)/$(request.auth.uid);
return exists(membership);
}

ローカル変数が利用できるようになりました。

let キーワードを使用して変数を宣言でき、関数ごとに最大10個のローカル変数を持つことができるようになりました。ローカル変数をつかうことで今までよりもすっきりとした書き方ができるようになりました。

rules_version = "2";
function length_of_hypotenuse(a, b) {
let a2 = math.pow(a, 2);
let b2 = math.pow(b, 2);
let c2 = a2 + b2;
let c = math.sqrt(c2);
return c;
}

Rule Playground

三項演算子やローカル変数の機能が使えるようになったことで、より細かい制御が可能になりますが動作検証が悩ましくなると思います。そこで利用するのが Rules Playground です。これを使うことでコンソール上でセキュリティルールのデバッグをができるようになります。実際のセキュリティルールに対して、処理がどのような反応をするのかをリアルタイムで確認することができます。

Firebase Extensions

Firebase Extensions はよく使われるタスクを自動化し、簡単に機能を追加できるようなパッケージ ソリューションになります。2019 年に公開されましたが、数クリックで下記のような機能をプロジェクトに組み込むことが可能になるというものです。

Firebase Extensions の機能

2020 年は Stripe との連携機能が発表されました。これにより、普通に実装するとコストのかかるような支払い関連の機能を簡略化することができるようになりました。たとえば、Stripe でユーザーの支払いを行い、Firebase Authentication と連携することで有料コンテンツを提供したり、請求書の発行を行ったりといったことが可能になります。

Firebase Emulator Suite

Firebase の主要なアプリ開発向けサービスをローカルでエミュレートすることができるようになりました。 これにより実際の Firebase のプロジェクトを使わずにローカルで開発ができるため、複数人での開発やテストが非常にやりやすくなるのではないかと思います。

CLIを使って エミュレーターを起動するだけで使い始めることができます。(Firebase CLI 8.4.0 以上)

$ firebase init$ firebase emulators:start

これだけでエミュレーターが立ち上がり、ローカルで Firestore や Cloud Functions , Hosting などなどアプリケーション開発に関わるプロダクトを試すことができます。

Firebase Hosting

今年は Firebase Hosting に非常に多くのアップデートがありました。

プレビューチャンネル

本番サイトに公開する前にプレビューチャンネルを使って公開内容を確認することができるようになりました。コマンドを1つ叩くだけで、数秒でプレビューチャンネルをデプロイし、チーム内で利用するためのユニークな URL が発行されます。この URL は指定された時刻に削除され、消し忘れもありません。(デフォルトでは、プレビューチャンネルは7日で期限切れ)分散したチーム全体で作業している場合でも、コラボレーションをより迅速かつ簡単に行うことができます。

firebase hosting:channel:deploy new-dropdown-list

list コマンドで現在デプロイされているチャンネルの一覧を表示することもできます。

firebase hosting:channel:list

GitHubアクションのサポート!

勘の良い人はすでに気づいているかもしれませんが、プレビューチャンネルは GitHub Action と非常に相性が良いです。すでにdeploy-to-firebase-hosting というGitHub Action も公開されており、これを使うことでプルリクエストが作成、更新されるたびにプレビューチャンネルにデプロイするといった設定を簡単に組み込むことができます。

Cloud Logging インテグレーション

Cloud Logging Hosting を連携することでホスティングサイトのリクエストログにアクセスすることができるようになりました。Cloud Logging を使うことで、ログの表示、検索、フィルタリングを簡単に利用することができます。

Firebase と BigQuery の連携強化

最後に Firebase と BigQuery の連携が強化されました。すでに Google Analytics から取れるユーザー行動データを使って、セグメンテーションを行い、A/B Testing、プッシュ通知や 、画面の出しわけをやられているケースも多いです。この Firebase と BigQuery を組み合わせることで、これがさらに強力になります。具体的には、より複雑な条件で絞り込んだり、外部のデータと組み合わせながらユーザーを絞り込むこともできます。アプリケーションのパーソナライズが重要となっているような 現状を踏まえる、とこれは非常に強力な機能なのではないでしょうか。

詳細については Google Cloud Japan Customer Engineer Advent Calendar 2020 の 5日目に Yuki Suwa から「FCM (Firebase Cloud Messaging) のセグメントデータを BigQuery からインポートする」という記事がでるのでそちらもぜひおたのしみに。

まとめ

いかがだったでしょうか。今回は Firebase のアプリケーション開発関連に絞って紹介させていただきましたが、それでもかなり多くのアップデートがあったのではないかと思います。

The Firebase Blog にはこれ以外にもFirebase の最新情報が公開されています。もし興味がでてきたかたはそちらもチェックしてみてください!

参考

--

--

Gossy Tsukagoshi

Application Modernization Specialist in Google Cloud. All views and opinions are my own.