Open1

【Google I/O 2023】What's new in Firebase

watabeewatabee

What's new in Firebase

https://www.youtube.com/watch?v=emIxn-f9bK0&list=PLOU2XLYxmsIIwZQkAPhJZg8jaNrrHk1DH&index=8

Cloud Functions for Firebase (2:13~)

  • 昨年第二世代の Cloud Functions のパブリックプレビューを公開
    • リクエストのタイムアウトを設定して実行できる
    • 最大32GBのメモリを搭載したインスタンス
    • コンピュートリソースをより細かく制御できるので、function のコストとパフォーマンスをさらに最適化できる
  • シングルインスタンスで複数のリクエストを同時にハンドリングできる
    • コールドスタートの削減
    • レイテンシーの改善
    • コストが抑えられる
  • 各 Cloud Function は最大1000リクエストを並列にハンドリングできる
  • Cloud Functions は現在多くのイベントに応答できる
      • Crashlytics のイベント
      • Performance Monitoring のイベント
  • 先月、第二世代の Cloud Functions に Firestore のトリガーがサポートされた
  • 第二世代の Cloud Functions にパブリックプレビューとして Python がサポートされた
    • Firebase CLI を使うと Cloud Functions を Python か Node のどちらかを選択して、Functions を使用するためのコードを生成してくれる

Firebase Extensions (7:13~)

  • Google やサードパーティによってメンテナンスされたオープンソースの extension で、リッチなエコシステムを提供
      • Full Text Search (Algolia)
      • Manage Marketing (Mailchimp)
      • Send Messages (Twillo)
  • Extension は Google のサーバレスのインフラストラクチャ上に構築されるので、自動的にスケールされる
  • 新しい Extension として PaLM API を使った chat bot がパブリックプレビューに
    • Google の最新の generative language API と Firestore インスタンスを繋げる
  • https://extensions.dev
  • Extension の作成と公開が誰でもできるようになった(ベータ)

Firestore (10:37~)

  • 昨年 count のクエリのサポートを発表

Firestore では以前から InArray-Contains-Any をサポートしている。
例えば以下のようなクエリで、neighborhoodChelseaSoHo のレコードを取得できる。

val hotels = firestore.collection("hotels")
val snapshot = hotels.where(
    Filter.InArray("neighborhood", listOf("Chelsea", "SoHo"))
)

今回 OR クエリがサポートされ、複数のフィールドの複数の条件を組み合わせることができるようになった。

val hotels = firestore.collection("hotels")
val snapshot = hotels.where(
    Filter.or(
        Filter.InArray("neighborhood", listOf("Chelsea", "SoHo")),
        Filter.greaterThanOrEqualTo("stars", 4)
    )
)

orderBy も組み合わせることができる。

val hotels = firestore.collection("hotels")
val snapshot = hotels.where(
    Filter.or(
        Filter.InArray("neighborhood", listOf("Chelsea", "SoHo")),
        Filter.greaterThanOrEqualTo("stars", 4)
    )
).orderBy("stars", Query.Direction.DESCENDING)

AppCheck (12:58~)

  • AppCheck では Firebase、Cloud、カスタムのバックエンドリソースに対して未承認のアクセスから保護する
  • AppCheck は多くの Firebase サービスを保護しているが、今日から Identity Platform を使用した Firebase Authentication を追加
  • Unity と C++ の SDK が利用可能になった
    • ゲームのチート行為からの保護
  • Replay Attack の対策として Replay Protection がサポートされた

Terraform (15:16~)

Web Frameworks (17:10~)

  • 昨年、Firebase Hosting で Next.js や Angular Universal といった Web フレームワークのデプロイを簡単に行えるようになった
    • firebase deploy コマンドを実行すると、CLI は自動的にどのフレームワークを使っているかを判定し、ビルドの実行、(必要に応じて)Cloud Functions の作成、その他の必要な設定のセットアップを行う
  • Astro、SvelteKit、Nuxt のサポートを追加
  • さらに Flask と Django の実験的サポートも追加
  • 現在 Firebase Hosting に Preview Channel の機能がある
    • サイトに異なるバージョンをデプロイでき、指定した時間以降に有効期限が切れるプレビューの URL が生成される
    • これは静的なコンテンツしかサポートされていなかった
  • そこで Dynamic Preview Channels をサポート
    • Astro、Next.js、Angular Universal といったフレームワークで作られたサイトのプレビューを共有できるようになった

その他 (20:33~)

Flutter (20:33~)

  • Firebase Hosting に Flutter Web をサポート

Android SDK の改善 (22:01~)

  • Android SDK を改善し、Android の起動時間が速くなった(約3% でこれは 20ms 程度)
    • 効率的なスレッドプール
    • バックグラウンドワーカー
    • 必要になるまで初期化処理を遅延

Android Studio (23:08~)

  • 昨年の Google I/O で App Quality Insights で Crashlytics のクラッシュデータが確認できるようになった
  • Android Studio Flamingo で App Quality Insights は stable channel になった
  • 最新の Android Studio の Canary バージョンでは、コードナビゲーションを改善した

App Distribution (24:53~)

Remote Config (26:34~)

  • Real-time Remote Config
    • リアルタイムの更新ができるようになった
    • Android、iOS、Unity でサポート
private func setupRemoteConfig() {
    let remoteConfig = RemoteConfig.remoteConfig()
    remoteConfig.addOnConfigUpdateListener { configUpdate, error in
        guard let configUpdate, error == nil else { return }
        remoteConfig.activate()
    }
}