Firebase
最新の機能追加(I/O 2025)
機能
Genkit
App Check
Web開発の場合はreCAPTCHA Enterprise
無料枠あるが上限超えた分は課金
無料開放の機能がある場合は必要(エンドポイントをホスティングしている自アプリ以外から叩かれる可能性)
匿名ログイン機能等含めてログイン必須機能で管理するなら考慮外も可か?
Authentication
Identiy Platformとの連携
OpenID Connectプロバイダー対応やSAML認証はこちらが必要になる
無料プランでも利用可(上限3000人/月、SAMLなどは2人/月)、有料だと上限50000/月以上は課金
有料想定でコストみておく必要性あり(認証まわりを独自実装しないならなおのこと)
監査ログやマルチテナント対応も含まれるため原則としては検討
実装ではFIDOの投入を検討(WebAuthn)
Extensionが利用できそう
仮登録からのQRコードによる本登録(ワンタイムパスワードによるカスタムAuth)を検討
例:Webで仮登録し、窓口に来てQRコード読み込み完了で本登録のイメージ
基本はカスタムトークンを利用する
Cloud Functionsの実装がなんらか必要になる
QRでわざわざカメラ読み込みではなく、パスコード数桁を渡してそれで認証でよい気もする
Hosting
SPAをホスティングする場合はこっち
Google的にはApp Hosting推し
これだとデフォルトNextjs, Angularになる
バックエンド処理もセットになる
SPAにクライアントSDKをポン付けしてFirestoreを叩くだけで良い場合 は過剰
バッチ処理とかは最悪、ローカル機でAdmin SDKをぶん回せばよい
Cloud Functions for Firebaseのイベントトリガーである程度の処理はどうにかなる
バックエンドできっちりビジネスロジックを実装したい場合はApp Hostingを最初から選定した方がよい
Cloud Firestore
癖ツヨNoSQL
とりあえず特殊、汎用性はない(RDBやSQLのように)ためFirebase内で一番学習コストが高い
公式のプラクティスとか参照>データ構造の設計が未だにわからん
インデックス張ったり、トランザクション処理ができたりと色々できるがプラクティスが公式以外に碌にないようなので皆まじめには使ってない説が強い(そして公式のDocが散らばっており確認がだるい)
Firestore自体がUIありきで欲しいデータを永続化するストレージに便利機能を載せただけ説
最低限ここ事故るとやばいラインだけ決めて後は適当でよい気がしている
Security Rulesの理解はどっちにしろ必要な学習コスト
SQLベースでやりたい場合はData Connectに最初から金を払うのがよい(PostgreSQLベース)
NoSQLで行く場合はMongoDB等へマイグレーションする前提でどうにかしておくのもよいと思います
Cloud Storage for Firebase
単なるStorage
ファイルストレージ以上でも以下でもない
ここまでで最低限度のWebアプリケーションは作成できる、と思う。もっと色々とやるならCloud Functionsで処理を実装すればなんとかなる。
課題
Auth周りカスタム認証(ワンタイムパスワード)とIdentity Platform連携で利用可能な機能について技術検証が必要
仮Appで雑に実装してみる
Genkitキャッチアップできてないので雑でよいので1機能なんか実装する
セキュリティチェックリスト
公式
参考記事
メール認証可能な限り避けたほうがよい。サインアップのユーザー体験悪いし
Cloud Loggingを使用する
まずFirebaseのログを取得したいプロジェクトをCloud Loggingにリンク(有効化)する必要性がある
native modeとなっているのが、Firebaseでプロジェクトを作成して何も考えずにFirestore使用した際のモード
Authについては通常版はログ収集はなし、ログはIdentity Platformアップデートをすることで利用可能
ログで何を取得したいのかを整理する
目的は?
障害調査
運営時に何らかの不具合が発生した場合の原因調査用
セキュリティ監視
パフォーマンス監視
ユーザーの行動分析
監査ログ
課題
HostingへのリクエストログとFirestoreへのリクエストログがトレースID等で紐づかない
タイムスタンプとIPで類推して複数のログをまたがった調査が必要になる
運営時のログ確認がめんどくさい。ログは自動取得されて楽だがTraceIDやユーザーIDなどカスタムの構造ログを仕込むことは無理
ログを管理したい場合はCloud Functionsにロジックを集約し、ログを自分で仕込む必要がある
Cloud Functionsを利用しない場合はフロントエンド側でのログ収集がメインとなる(エラー等については特に)ためSentryを併用する
Hostingされているアプリケーションに対するヘルスチェック
Cloud Monitoringのuptime checksを利用する
参考
パフォーマンス監視
Firebase Performance Monitoringを利用する
まだβ版のため注意
Firebaseでの実装関連整理
RxFire
RxJs
上記のRxFireはあくまでFirestoreのデータをRxJsで扱えるように変換するラッパー扱い
RxJsのオペレータ等を使って処理をしていく
処理データをSignalに渡す必要性がある(UI側の変更検知等はSignalに一任)
Signalが実質UIの状態管理層になる
Solidjsの実装例があまりないのでAngularの知見を逆輸入する形になる
関数型リアクティブプログラミング(FRP:Functional Reactive Programming)
イベント駆動型アーキテクチャ(EDA:Event Driven Architecture)
イベントを意識して設計するが、データベースをイベント駆動前提では組まない
CloudFunctionsによる集約、同期の処理が必須になる
Pub/SubやEvent Triggerでかなり容易に実装できるはできるが
通常のCRUDアプリではじめる
コマンドとクエリの処理は明示的に分離する
データ構造は読み取りを優先して構造化する(冗長な構造を許容)
イベントストーミングで一連の流れを可視化する
時系列データを整理する
ドメインeventのデータ構造を把握する
コマンドとクエリ(実質ビュー、UI)にイベントを大別する
Firestoreは読み取りベースで設計するためまずビューに適したデータ、クエリから実装する
Firestoreに永続化するドメインeventデータを加工するためのコマンドを実装する
Cloud Functions for Firebase
使える言語に制限がある
JavaScript, TypeScript, Python
第2世代と第1世代があるが原則第2世代を使用する
Firebaseの動作を拡張、機能を統合する方向性で使う
イベントプロバイダによる関数呼び出し
Authenticationトリガー
ユーザー作成によるイベント発火
ユーザーがメールアカウントとパスワードを作成した時
ユーザーがフェデレーションIDプロバイダを使用して初めてログインした時
開発者がAdminSDKを使用してアカウントを作成した時
ユーザーが新しい匿名Authセッションに初めてログインした時
ユーザーがカスタムトークンを使用して初めてログインするときにはイベントはトリガーされない
ユーザー削除時
ブロッキング関数はIdentiy Platformにアップグレードしないと利用できない
Cloud Firestoreトリガー
Write処理で発火される。Read処理の発火はなし
特定のドキュメントまたはワイルドカードパターンのいずれかで参照する
無限ループの危険性があるので処理の終了条件に留意すること
認証コンテキストにアクセス可能な処理もあるので必要に応じて使い分ける
Cloud Storageトリガー
Pub/Subトリガー
アプリによる関数呼び出し
onCall()ハンドラの使用
ClientSDKの使用と
HTTPリクエスト等のクライアントによる関数呼び出し
onRequest()ハンドラの使用
スケジュールによる関数呼び出し
Cloud Schedulerを利用する
タスク関数のキューへの追加
Cloud Tasksを利用する
アプリによるGenkitフローの呼び出し
onCallGenkit()ハンドラの使用