Google I/O 2023 のFirebaseまとめ
Google I/O 2023
Googleでは毎年5月に開発者向けの主力サービスの今までの成果や今後の新機能などの大きな発表が行われています。当記事は、2023年5月10日(現地時間。JSTでは5/11の2:00)に行われたGoogle I/O 2023の中で発表されたFirebaseに関連する情報のみを整理し、まとめたものです。筆者による雑翻訳ですので正確では無い部分も含まれております点を予めご了承ください。
参照元
当記事は次にあげる2点を中心に関連する内容をまとめたものです。
ここからは、セッション「What's new in Firebase」で発表の行われたトピックをその発表順で掲載します。関連するFirebase系の別セッションの内容なども該当トピックにぶら下げる形で掲載します。また、参考までに昨年度秋に開催されたFirebase Summit 2022をまとめた記事、Firebase Summit 2022 まとめなどもお読みいただけますと理解が深まるかと思います。
Cloud Functions for Firebaseに関するアップデート
Cloud Functions for Firebase 2nd GenがGAに
今までPreview版だった第2世代のCloud Functionsが晴れて正式版になりました(昨年の時点ではCloud Functions for Firevase V2 APIと呼ばれていました)。正式版になったことに合わせて、次のような改良もなされています。
- 最大32GBのメモリ領域確保が実現。要求の厳しいワークロードも対応可能に
- 1インスタンスが最大で1000の処理に同時対応可能に。これにより多くのケースでコールドスタートの減少、レイテンシの改善、コスト安を合わせて実現
PythonでFunctionを作成可能に
人気のプログラミング言語PythonでもFunctionの記述が出来る様になりました。この度リリースされた、Python functions SDKを経由すればFirebaseの各種プロダクトで発生するイベントをトリガーにした処理も記述可能です。このSDKでは兼ねてからCloud Function 2nd Genの記述に利用できたNode.jsで出来ることはほぼ可能とのことで、先月実装されたばかりのFirestoreのトリガーも早速使用できる様になっています。
YoutubeのFirebase公式チャンネルからは、前述の2点の内容を詳しく紹介した動画が公開されています。
Firebase Extensionsに関するアップデート
自身のFirebaseプロジェクトへ便利機能を追加できるプロダクトFirebase Extentions(以下、拡張機能)に新しいものが多数追加されました。実はここ数ヶ月で新しいものがどんどん増えており、執筆時(5/11現在)は計72種もの拡張機能が存在することを確認しています。詳しくはextensions.devで確認ができますので今回は表立ってアナウンスがされたものをいくつかピックアップする程度にとどめます。
PaLM API系 Extension
Google I/O 2023の大きな目玉であるAI関連の発表として登場したPaLM2をベースに動作するPaLM APIをFirebaseと簡単に連携して利用するための拡張機能です。現在PaLM APIを利用するためのAPIキーはwaitlistへの登録、所謂順番待ちとなっており、利用までは少々時間が必要そうです。また、PaLM APIはしばらくの間はPreview版ということで無料で利用できるそうですが、Previewが終わると有料に変わるかもしれません
Chatbot with PaLM API
名称の通り、FirebaseプロジェクトにPaLM APIを介したチャットボットを導入するための拡張機能です。仕組みとしてはFirestore上の特定のパス上に存在するテキストの変化をトリガーに、その変化内容をプロンプト(対話型AIへ渡す質問文)としたリクエストをPaLM APIへ出し、そのレスポンスがFirestoreに書き込まれるというものです。
Summarize Text with PaLM API
こちらも名称の通り、Firebase ProjectにPaLM APIを介して文章をサマリー(略述、要約)へと変換するための機能を追加する拡張機能です。
Pangea系 Extension
Pangeaはアプリへ組み込むセキュリティ機能を一括で管理するためのサービスを開発、提供しているアメリカの企業です。FirebaseにはAutenticationやApp Checkをはじめとした認証やアクセス制御の仕組みは既にありますが、Pangea社のAPIを経由することでセキュリティ機能をさらにFirebaseのプロジェクトへ組み込んだり、一箇所にまとめてわかりやすく管理することが可能になると考えられます。どの拡張機能を利用する場合であってもPangeaアカウントを取得している必要があります。
Redact Text
Firestore内のテキストフィールド上に存在する機密情報(例:電話番号やクレカ番号)を自動的にマスキングするための拡張機能です。この拡張機能を使用すると、指定したテキストフィールド内の一部または全体のテキストを置き換えることができます。
Known Malware Detection
Cloud Storage上にファイルをアップロードした際、そのファイルが悪意のあるファイルかどうかを判別できる様になる拡張機能。仮にそれが悪意のあるファイルと判断された場合、gzip形式に圧縮することで中和(もしくは削除など)します。また、中和が成功した時などいくつかのイベントに反応するカスタムイベントハンドラを設定することも可能です。
Secure Audit Logging
Firestore上の指定コレクション内部で発生した変化にログを取って記録する拡張機能。ログはPangeaのAPIを使用して、Pangea側に送られており、Pangeaのダッシュボード上から管理・確認を行うことができます。これによって収集したログを分析にかけることで、アプリで発生した問題の原因究明につなげられるかもしれません。
MailerSend系 Extension
MailerSendはEメールマーケティングサービスのMailerLiteの根幹を支える技術集団を有するアメリカの企業が提供するメール配信プラットフォームです。
Send email with MailerSend
この拡張機能はMailerSendのAPIトークン発行などの必要な準備を行なった上で、Firestoreの特定パスへの書き込みをトリガーに、書き込んだ内容を元にメール送信を行います。
その他のExtensions
ピックアップしなかった拡張機能については、以下のテーブルに簡単に整理してみました。
拡張機能名 | 簡単な解説 |
---|---|
Convert Text to Speech | Google Cloudの音声認識サービス「Speech-to-Text」を使用して、Cloud Storage上の音声ファイルをテキストに変換し、Cloud Storageにtextファイルとして保存 |
Transcribe Speech to Text | Google Cloudのテキスト読み上げサービス「Text-to-Speech」を使用して、Firestore上のテキストデータを音声ファイルに変換し、Cloud Storage上に保存、さらに保存先のパスをFirestoreに書き込む |
Sream Blockchain Events to Firestore | ブロックチェーンデータのイベントやトランザクションをリアルタイムに監視し、Firestore上に反映する |
Firestore User Document | Firebase Authenticationへのユーザー登録/削除時に自動でそれに対応したFirestoreドキュメントを生成/削除することが可能に。生成されるドキュメントの内容は調整可能なほか、任意でFirebase外部のサービスRowyと連携することも可能 |
Firestore One-To-One | 1対1でドキュメント間の関連付けを簡単に行うことが可能に。例えば、user情報とそのprofile情報を紐づけるなどの使い方を想定 |
Dynamic OG Image Generator | あるHTTPリクエストを送るとfacebookやtwitterなどのソーシャルメディアにリンクを掲示した際にプレビューとして表示されるようなOG(オープングラフ)イメージをレスポンスとして返すFunctionが利用可能になる。このOGイメージはFirestore上に展開された特定のデータをもとに生成される。 |
Save Form Responses to Google Sheets | あるHTTPリクエストを送るとその内容をGoogle Spreadsheetに転送し、保存するFunctionが利用可能になる。例えば、「登録フォーム」などにおいてsubmit(送信)ボタン押した時に送信された内容を記録するために使うことを想定 |
Generate PDF using Puppeteer and Handlebars.js | Firestore上の特定パスにドキュメントが追加されたことをトリガーに、その追加されたドキュメントの内容とCloud Storage上にアップロードしたzipファイル内のテンプレートを元に自動でPDFファイルをCloud Storage上に生成する |
Firestore Field Uniqueness | Firestore上の特定コレクション下にあるドキュメント達の持つ特定フィールドの内容に重複を許さない、一意性が与えられる様になる。例えば、usrsコレクション下のドキュメントにusernameフィールドを持たせた時にその値、つまりはユーザー名に重複が出ることを防げる様なことが可能になる |
Build & Publish(beta)
公開されている拡張機能の紹介やドキュメントなどを整理した特別サイトextensions.devにて登録を行うことで誰でも拡張機能をリリースできるようになりました。自作の拡張機能をリリースしたい方、自社サービス(API)と絡めた拡張機能をリリースしたい企業は、準備や公開の手順をまとめたドキュメント「Extension publisher overview(拡張機能発行者の概要)」を確認してみてはいかがでしょうか。
YoutubeのFirebase公式チャンネルからは、「とある会社の領収書PDF出力サービスをExtensionにしてみた」サンプルを紹介する動画が公開されています。
Firestoreに関するアップデート
countクエリがGAに
昨年Firebase Summitにて公開されたコレクション内部のドキュメントの個数を数えるクエリ(関数)が正式版になりました。
問い合わせ(クエリ)の改善
ここ最近では、where()メソッドと組み合わせて使用できる比較演算子が強化され、InとArray-Contains-Anyが利用可能になりました。In(特定のコレクションに対してInの後ろに記述した要素を含んでいるドキュメントだけを抽出する演算)に関しては比較対象として指定できる要素が最大10個までだったものが30個まで拡大されています。(以下のサンプルコードにおける「"USA","Japan"」の部分に該当します。)
final citiesRef = db.collection("cities");
final cities = citiesRef.where("country", whereIn: ["USA", "Japan"]);
ORクエリが利用可能に
コレクション内のドキュメントに対して論理和ORによる情報の抽出が可能になりました。公式では、自社の保有するホテルのデータベースから「特定の地域にあるホテル OR 4つ星以上のホテル」を抽出する例を紹介しています。使い方としては、任意の抽出を行うクエリ複数を対象に、それらをラッピングする形でFilter.orクエリ(Javaのケース)を実行するそうです。
ここで、さらにORクエリはorderByでメソッドチェインすることにより抽出結果を任意のカラムで並び替えする機能も追加されています。
Firestore Eventarc Triggering
EventarcはGoogle Cloudの提供しているサーバーレスで、イベントの監視/管理/発行を行うプロダクトです。EventarcはGoogleの提供している様々なプロダクトを監視し、その変化を元にイベントを発行したり、Cloud Runなどに対してそのイベントを通知(つなげる、ルーティング)することが可能です。
さて、FirebaseではCloud Functionsを使うことでFirestoreの中身が変化した事(イベント)をトリガーに関数を実行することなどが可能ですが、外部サービスからはそのイベントを検知することはできませんでした。今回の更新では、EventarcからFirestoreの書き込み(writeイベント)を始めとした様々なプロダクトを監視することが可能になったことが発表されました。
Firestore Eventarc Triggeringについては、前述の各種クエリの改善内容とともに紹介をする動画がYoutubeのFirebase公式チャンネルから公開されています。
Firebase App Checkに関するアップデート
App Checkは自身のFirebaseプロジェクト上のFirestoreやCloud Functionsに対して不正な経路や方法、例えば正規のアプリではなく、改造アプリなどからアクセスされることを防ぐための仕組みを提供するプロダクトです。今回の発表でいくつかの魅力的なアップデートが報告されています。
App Checkの対象プロダクトにAuthentication with Identity Platformが追加
App Checkの対象となるFirebaseプロダクトにAuthentication with Identity Platformが追加されました。Authentication with Identity PlatformはAuthenticationプロダクトの通常利用に加えてオプションで様々なセキュリティ要素を付加、アップグレードすることのできる機能です。それぞれの環境のSDKを最新版にすればすぐに利用が可能で、これにより不正なクライアントが認証エンドポイントに触れることをお手軽にシャットアウトできます。
UnityとC++用のSDKが追加
「ランキングへ不適切なスコアの投稿」、「改造されたクライアントアプリを使ってチートプレイ」などのチーター対策にApp Checkのゲーム開発者向けSDKが提供される事になりました。手順については以下のページが参考になります。
カスタムバックエンドとCloud Functions用のReplay Protectionサポート
負荷の高いカスタムバックエンド(複数のAPIを介した複雑な処理や自作のヘビーな機械学習モデルなど)やCloud Functionsへの不正な再帰的呼び出しを検知し、防ぐ仕組みが追加され、新たに選択できるようになりました。
通常、負荷の高いカスタムバックエンドでは認証をパスしたユーザーに対してトークンを発行し、アクセスを許可していますが、悪意のある攻撃者が不正な手段でそのトークンを盗み、利用することで運用者の想定していないアクセスが何度も繰り返し行われるという脅威が発生する可能性があります。今回サポートされた仕組みを導入することを選択すると、パフォーマンス的な犠牲(通信遅延)が生じる代わりにカスタムバックエンドへのアクセスに1度きりで使えるトークン(single-use token)を何度も発行する形に動作変更が行われ、前述の脅威への対策が実現できる様になります。
YoutubeのFirebase公式チャンネルから公開されている動画でも前述の3つの内容を含めた説明が行われています。
TerraformがFirebaseの各種リソースに対応
TerraformはHashicorp社の提供するオープンソースのマルチクラウド管理ツールです。例えば、テスト用と本番用を想定して似たような設定の2つのFirebaseプロジェクトをFirebaseコンソールを使って頑張って作るよりは、共通の設定ファイルからFirebaseプロジェクトを生成(更新)する運用が行えると非常に効率的ですよね?Terraformを使用するとそれが実現できるというものです。
Terraformでは現在、以下の内容が利用可能ですが、将来的に追加される予定があるとのこと。
- Firebase Project
- Firebase App
- Firebase Realtime Database
- Cloud Firestore:
- Cloud Storegae for Firebase
- Firebase Authentication
- Firebase Security Rules(for Cloud Firestore & Cloud Storage)
実際にどのような手順で始めれば良いかは、以下の参考リンクを確認すると良いでしょう。
YoutubeのFirebase公式チャンネルからは、新規Firebaseプロジェクトの立ち上げ時のトラブルを例に、Terraformを導入すると手間が削減できることを紹介する動画も公開されています。
Firebase Hosting に関するアップデート
この項目に該当する内容を順番に取り上げていきます。YoutubeのFirebase公式チャンネルからは、Firebase Hosting に関するアップデートの内容を整理した動画も公開されていますので、合わせて合わせて試聴していただくとより理解が深まるのではないでしょうか?
対応する動的Webフレームワークの追加
今まで、Next.jsとAngular Universalの2種類のみだったFirebase Hostingの動的Webフレームワークサポート(通称、Web framework awareness)に新しいフレームワークが追加されました。(いずれも、Experimentalな点には注意。)
- Astro
- SvelteKit
- Nuxt
- Vite
- Flutter Web
また、Cloud FunctionsにPython言語が使用できる様になったことで、Python言語をメインサポートしているWebフレームワークもFirebase Hostingで利用可能になりました。
- Flask
- Django
Dynamic Preview Channelsサポート
主要な動的Webフレームワークによって生成されたWebサイトの動作確認などのために制限時間付きの仮のURL(Channel)を発行してチェックできる機能です。また、このDynamic Peview Channelsの内部ではatomic deployment(原子性/不可分性開発)と呼ばれる仕組みが動いており、サーバーとクライアントの内容が連動して記録されるようになります。具体的には、Firebase Hostingにdeployした瞬間、そのDeploy内容とそれによって更新されたCloud Functionの内容が一つのバージョンとしてセットで記録される処理が施されます。これにより、何かしらのタイミングで、フロントエンド(Firebase Hosting側)もしくはバックエンド(Cloud Function側)のいずれかのdeployが失敗すると、セットで前のバージョンに戻る動作を取ります。
Advenced Fremework features
Webフレームワークそれぞれが有するモダンな仕組み・機能をFirebaseと絡めて利用可能になりました。その多くは試験的な状態に留まりますが、魅力的なものばかりです。
- React Server Components:Reactチームの開発した新しいアーキテクチャ
- Internationalization rewrites:Next.jsとAngularで使える機能。国や言語に合った適切な「コンテンツ(テキスト)」を記述、提供できる仕組み
- Image Optimaization:同じく、Next.jsとAngularで使える機能。国や言語に合った適切な「画像」を記述、提供できる仕組み
AndroidとFirebaseに関連するアップデート
Faster Android Startup with Firebase
Android用のSDKが最適化され、Firebase交えて作成されたAndroidアプリの起動が平均3%(時間にして20ms)ほど早くなったそうです。
Android Studio + Firebase Crashlytics (App Quality Insights Window)
Android StudioのFlamingo安定版がリリースされたことでFirebase Crashlyticsの内容がAndroid Studio上で確認できるApp Quality Insights Window機能も正式になりました。合わせて以下のような機能も付与されたそうです。
- App Quality Insights Window上からIssueをCloseできる機能
- Issueに対する議論をコメントして残すノート機能
- Clashlyticsに備わっているsignalsを表示、フィルタリングできる機能
続くAndroid Studioのhedgehogカナリア版では、バージョン管理システムのヒストリー機能からコードナビゲーションの精度を高める取り組みを行なっているとのこと。
YoutubeのFirebase公式チャンネルからは、前述の2点に加えて、Kotlinに関する取り組みも紹介した動画も公開されています。
Firebase App Distributionに関するアップデート
App DistributionもめでたくGAになりました。これと合わせていくつか大きな機能の追加が行われています。(以下に挙げる追加機能はまだベータ版です)
In-App Feedback機能(Collect feedback from testers)の追加
テスターの負担を減らす新しいFeedback機能が追加されました。今までテスターはスクリーンショットを撮影し、わざわざ送信文を作ってアプリバージョン含めて発見した問題点をeメールで報告をしていました。その方式が改められ、Firebaseコンソール上で報告内容が一括管理できるような仕組みが追加されました。
このFeedback機能の中では、テスト内容に特定のトリガーを設定可能です。テストしたい箇所が明確な場合は、コードにトリガーを仕込むことも可能ですし、カスタムトリガーを作成することで「
携帯を振るだけでテスト中のアプリのスクリーンショットを送信する」、「アプリ上の特定のボタンを押すたびにアプリのステータスを送信する」様な仕組みを実現することも可能です。
フィードバックに対するEventarcサポート
前述のFeedback機能の追加に伴い、テスターからの報告をアラートイベントとして検知できる様にもなりました。Cloud Functionsを利用すれば、そのアラートイベントをトリガーとするfunctionを記述できるようになっているほか、このアラートイベントはEventarcからも検知することが可能です。開発チームでJiraのような課題管理システムやSlackのようなコミュニケーションツールを利用して情報共有をする土台が出来上がっている場合、それらに転送するような使い方も実現可能です。
Firebase Remote Configに関するアップデート
Real-time Remote Config
Remote Configがアップデートされ、Andorid,iOS, Unityなどの環境でリアルタイム更新が可能になりました。Remote Configは今まで基本的にはアプリ側のタイミングで変更を反映する形でしたが、Firebase Remote Config Realtime APIを使うことで、Firebaseコンソールで行ったパラメータの変更が即時反映される様になりました。この変更によって従来の頑張ってリアルタイムに近い形でRemote Configが動作するように調整する設定の仕方が非推奨に変わってきます。
YoutubeのFirebase公式チャンネルからは、Real-time Remote Configの紹介とそれによってアプリの新機能を手早くロールアウト、ロールバックする例を紹介しています。ゲームなどにおいてアップデート後に、決まった時刻で機能が解放されるなどの実現がより正確で簡単になりそうです。
そのほかのアップデート
Flutter SDK のアップデート
Keynoteではアナスンスされておりませんでしたが、FirbaseのFlutter SDKが更新され、いくつかの機能が追加・検討されています。
Android,iOS, Webのカバー率が100%に
Dart言語を使ってAndroid,iOS,Webの3環境に跨る処理を書く場合に、とうとう環境別に書き分ける必要性が無くなりました。これにより、例えば次のような処理を実現したいケースではそれぞれの専用環境を使うことによる開発(例:AndroidアプリならAndroid Studio+JavaもしくはKotlin+Android用のFirebase SDKを使う事)と遜色のない実装が可能になりました。
- キャンペーン分析のためにFirebase Cloud MessagingからBigQueryに配信結果を渡す
- Apple、Google Sign-In、GitHubなどのサインインプロバイダーを使ったサインイン
- ServerTimestampBehaviorプロパティを使ってFirestoreドキュメントが最後に更新されたタイミングを追跡する
Windowsアプリが開発可能に
まだ正式なリリースではなくdemo版とのことですが、Firebaseを交えたFlutterアプリの開発でWindows上で動作するアプリの出力が行えるようになるそうです。
Dart SDK用の各種追加プラグイン
まだFlutterに正式対応していないFirebaseプロダクトのプラグインが複数試験的運用されるようになっているそうです。
YoutubeのFlutter公式チャンネルからは、前述の内容を詳しく紹介する動画が公開されています。
CrashlyticsのGWP-ASanサポート
ゲームを始めとしたアプリのクラッシュ時に重要になってくるのが、メモリ起因のトラブルか否かです。
GWP-ASanはC++のアドレスサニタイザーツールでアプリの実行時にそのプログラムを監視し、メモリアクセスの問題(例:バッファオーバーフローなど)を検出します。Androidアプリの開発を例にすると、manifestファイルにGWP-ASanのパーミッションを記述することで、GWP-ASanからの報告が追加で上がってくる様になり、Firebaseコンソール上でわかりやすくチェックすることが可能になります。
CrashlyticsのCrashグルーピング機能(Variant)
バグの根幹の早期発見を目指す目的で、似た様なクラッシュ内容をまとめてグルーピングする機能Variantが実装されました。グループ(variant)毎に発生したユーザー数などもまとめられるため、より優先的に対処すべきバグが見つけやすくなります。
YoutubeのFirebase公式チャンネルからは、前述の2点に加え、Android StudioのApp Quality Insights Windowの紹介なども含めた動画が公開されています。
終わりに
AIに注目が集まる時勢の折、GoogleからもPaLM2およびPaLM APIという大きな発表がありました。そんな中でFirebase側はどんな発表が出るのか楽しみでしたが終わってみると盛り沢山でしたね。今回はボリューム抑え気味かな?と思った自分が間違っていました・・・ヒェ。
なお、Firebase Extensionsについては個別に取り上げていると時間がいくらあっても足りないので、今後のイベントでも主要なものだけ確認するだけにとどめると思います。気が向いたらいつかピックアップするかもしれません。
スクリーンショット少なめなのも許してっ!!
間違いや漏れなどがある様でしたら是非ともご教授いただけますと幸いです。
Discussion