hidane (火種, the seed of fire) — a Firestore emulator without Java.

公式の Cloud Firestore エミュレータを置き換える、Rust 製の単一バイナリです。JVM は要りません。ミリ秒で起動し、公式エミュレータとの parity をテストで確かめます。

curl -fsSL https://hidane.dev/install.sh | sh まだ利用できません — Phase 0

まだインストールできるものがないため、コピーは無効にしています。最初のリリースからこの行が使えるようになります。

Phase 0 · 調査中 · リリースはまだありません

なぜ hidane か

21

Java 21 が必須になった

firebase-tools 15 で、Java 21 未満のサポートが削除されました。ローカルでデータベースを動かすだけのために、JDK を入れる必要はないはずです。

出典: firebase-tools v15.0.0 リリースノート
0.74 s · 95 MiB

起動に 0.74 秒、アイドルで 95 MiB

公式エミュレータは、ポートを開くまでに 0.74 秒(CLI 経由では 2.5 秒)かかり、アイドル時に 95 MiB を使います。hidane の目標は 100 ms 未満、50 MiB 未満です。

出典: 実測値と生ログ(英語)
11 倍

データが増えると書き込みが遅くなる

リスナーを接続した状態では、公式エミュレータのバッチ書き込みがドキュメントの総数に比例して遅くなります。100k 件では 11 倍です。hidane は、commit のコストが変更した件数だけで決まるように設計しています。

出典: 実測値と生ログ(英語)

公式エミュレータの数値は実測値です。hidane の数値は目標であり、結果ではありません。背景は Why hidane(英語)にまとめています。

対応クライアント

現時点では、すべて planned です。 planned in progress supported
v0.1firebase-admin (Node)planned
v0.1@google-cloud/firestoreplanned
v0.1Goplanned
v0.1Pythonplanned
v0.1Javaplanned
v0.1iOSplanned
v0.1Androidplanned
v0.1Flutter(モバイル / デスクトップ)planned
v0.1firebase-js-sdk(Node 上)planned
v0.2Security Rulesplanned
v0.3firebase-js-sdk(ブラウザ)planned
v0.3Flutter Webplanned

各 SDK が必要とするトランスポートと、ブラウザが v0.3 になる理由は compatibility(英語)を参照してください。

Parity

hidane は公式エミュレータをオラクルとして扱います。同じテストスイートを両方に流し、結果を parity 表として公開します。テストの裏付けがない互換性は主張しません。

parity の結果は、v0.1 のあとにここへ掲載します。

意図的に公式と違える点は parity exceptions(英語)に一覧があります。

ロードマップ

  1. v0.1

    サーバー SDK とネイティブクライアント。firebase-admin、Google Cloud の各ライブラリ、iOS、Android、Flutter が firebase-tools の配下で動きます。

    GitHub の v0.1 マイルストーン
  2. v0.2

    Security Rules。

    GitHub の v0.2 マイルストーン
  3. v0.3

    ブラウザのクライアント。ブラウザ上の firebase-js-sdk と Flutter Web に対応します。

    GitHub の v0.3 マイルストーン

範囲、目標値、リスクは ROADMAP(英語)にあります。

インストール(予定)

どの配布チャネルもまだ存在しません。下のコマンドは予定している形を示すもので、いまは動きません。

GitHub Releasesビルド済みバイナリplanned
cargo binstallcargo binstall hidaneplanned
Homebrew tapbrew install hidane-dev/tap/hidaneplanned
npmnpm install --save-dev hidaneplanned
pub.devdart pub global activate hidaneplanned
Dockerdocker run ghcr.io/hidane-dev/hidaneplanned
curl | shcurl -fsSL https://hidane.dev/install.sh | shplanned