【新サービス】 Spanner のダウンロード版である Spanner Omni が発表されました #GoogleCloudNext

【新サービス】 Spanner のダウンロード版である Spanner Omni が発表されました #GoogleCloudNext

どこでも動かせる Cloud Spanner が登場しました!単一コンテナの構成は簡単に試せます。全文検索、ベクトル検索、グラフクエリなども動きます。
2026.04.22

ウィスキー、シガー、パイプをこよなく愛する大栗です。

Google Cloud Next '26 で、ついに Spanner をダウンロードしてオンプレミスや他クラウド、さらにはノートパソコン上でも実行できる Spanner Omni がプレビューとして発表されました!Google の分散データベースの代名詞である Spanner はこれまで Google Cloud 上でしか利用できませんでしたが、それが自前の環境に持ち込めるようになるという大きなニュースです。NewSQL を追いかけている者として見逃せないアップデートなのでご紹介します。

Spanner Omni とは

Spanner Omni は、Google Cloud の Spanner と同じ分散データベース技術を、オンプレミスデータセンター、マルチクラウド、エッジ環境(ノートパソコン含む)にデプロイできる「ダウンロード可能な Spanner」です。

Spanner はリージョンをまたがった強い一貫性、水平スケーラビリティ、99.999% の可用性を実現する NewSQL であり、Google 社内でもミッションクリティカルなワークロードを支えてきました。従来はマネージドサービスとしてしか使えなかったこのデータベースが、自分のインフラで動かせるようになります。

Spanner Omni の特徴

Spanner Omni は本家 Spanner のマルチモデルデータベース機能をそのまま引き継いでいます。

  • 水平スケーラビリティと ACID 準拠 の両立(NewSQL の特徴)
  • 強い一貫性(external consistency)
  • マルチモデル対応
    • SQL(GoogleSQL / PostgreSQL / Spanner Graph Language)
    • グラフデータベース
    • キー・バリュー
    • 全文検索
    • ベクトル検索
    • 分析処理(カラムナエンジン)
  • マルチリージョン HA 対応
  • エンタープライズグレードのセキュリティ(Commercial edition)

単一リージョンデプロイで 毎秒数百万クエリ(QPS)、ペタバイト規模のデータ を処理できるベンチマーク結果が出ているとのことで、マネージド版 Spanner と同等のパフォーマンスを目指しているようです。

提供エディション

Spanner Omni には 2 つのエディションがあります。

項目 Developer edition Commercial edition
提供開始 即時利用可能 早期アクセスプログラムで申し込み
用途 開発・評価・学習 本番ワークロード
エンタープライズセキュリティ 非対応 対応
データ保護機能 非対応 対応
商用利用 不可

まず Developer edition がすぐに触れる ということで、検証ハードルが非常に低いのが嬉しいですね。

Spanner Omni のアーキテクチャ

マネージド版の Spanner は Google 独自のインフラに強く依存してきました。特に以下の 2 つは「これがあるから Spanner が成り立つ」と言われる屋台骨です。

  • Colossus — Google の分散ファイルシステム
  • TrueTime — 原子時計と GPS により正確な時刻に加えて誤差範囲を提供する時刻 API

Spanner Omni はこれらの Google 独自コンポーネントを、ポータブルな代替実装に置き換えることで「どこでも動く Spanner」を実現しています。

コンポーネント マネージド版 Spanner Spanner Omni
分散ストレージ Colossus Colossus ライクな抽象化レイヤー(ローカル FS をネットワーク公開)
時刻 API TrueTime(原子時計 + GPS) ソフトウェアベース TrueTime
コンセンサス Paxos Paxos(同じ)
シャーディング 自動 自動(同じ)
レプリケーション 同期レプリケーション 同期レプリケーション(同じ)

Colossus ライクな抽象化レイヤー

Spanner Omni は各ノードのローカルファイルシステムに書き込みを行い、それをネットワーク経由で他のノードに公開することで、Colossus 相当の分散ストレージを構築します。自動シャーディング・リバランシング・ストレージバランシングといった機能もそのまま提供されます。

そのため データベース品質のローカルファイルシステム が必須となっており、ストレージ性能がそのまま Spanner Omni のパフォーマンスに効いてくる点は押さえておきたいところです。

ソフトウェアベース TrueTime

TrueTime は GPS と原子時計というハードウェア依存の仕組みで「現在時刻」と「不確実性の範囲」を返すことで、外部一貫性を支えています。Spanner Omni ではこれをソフトウェアで実装し、誤差範囲付きの時刻同期を多様な環境で利用できるようにしました。

デプロイ形態

Spanner Omni は非常に幅広い環境で動作します。

  • 仮想マシン(VM)
  • Linux コンテナ
  • Kubernetes クラスタ

構成パターンは以下のとおりです。

構成 用途 最小構成
Single server 開発・学習 1 台(Developer edition 向け)
Single-zone シンプルな検証 3 サーバー以上
Multi-zone 高可用性 3 ゾーン以上、各ゾーン 1 サーバー以上
Multi-cluster マルチリージョン HA、地理分散 2 クラスタ以上、各ゾーンに3台以上

エアギャップ環境にも対応しており、規制の厳しい業界や、Google Cloud のデータセンターが 1 箇所しかない地域でもマルチリージョン HA 構成を組めるようになります。

提供物

ダウンロードページでは以下の形式で提供されています。

種別 名前 / パス
コンテナイメージ us-docker.pkg.dev/spanner-omni/images/spanner-omni:2026.r1-beta
コンテナイメージ(サーバーのみ) us-docker.pkg.dev/spanner-omni/images/spanner-omni-server:2026.r1-beta
コンテナイメージ(UI のみ) us-docker.pkg.dev/spanner-omni/images/spanner-omni-ui:2026.r1-beta
Helm チャート oci://us-docker.pkg.dev/spanner-omni/charts/spanner-omni(version 0.1.0)
CLI バイナリ https://storage.googleapis.com/spanner-omni/

CLI バイナリは Mac (M1/M2/M3, x86) および Linux (ARM, x86) に対応しています。

システム要件

Spanner Omni は環境ごとに推奨される最小スペックが公式ドキュメントに示されています。パフォーマンスを引き出すために、サーバーデプロイ時は以下の推奨要件を満たすことが推奨されています。

環境 OS / プラットフォーム 推奨スペック
オンプレミス Linux (RHEL 9, Ubuntu 22) 1 vCPU あたり 4 GB RAM、ディスク空き容量 20 GB 以上
クラウド(Google Cloud, AWS) VM または Kubernetes Pod VM / Pod あたり 4 vCPU、16 GB RAM
開発者向け(ラップトップ、デスクトップ) macOS (M1, M2, M3) 4 GB RAM、ディスク空き容量 10 GB

ストレージについては以下が推奨されています。

  • 専用の SSD ストレージ
  • ext4 ファイルシステム

ユースケース

公式ブログでは主に 3 つのユースケースが紹介されています。

1. ハイブリッド・マルチクラウドの耐障害性

プライマリを Google Cloud の Spanner、セカンダリを他クラウドやオンプレミスの Spanner Omni とし、災害対策やビジネス継続性を強化する構成です。規制が厳しい業界での災害復旧と事業継続に向きます。

2. 環境横断の統一テクノロジースタック

マルチクラウド / ハイブリッド戦略を取る企業で、アプリケーションコードを一度書けばどのクラウドでも同じように動かせる基盤として活用できます。運用のオーバーヘッドを減らし、クラウドネイティブ技術の恩恵を環境を問わず享受できます。

3. オンプレミスモダナイゼーション

既存のオンプレミス投資を保ちつつ、AI 時代向けのアプリケーションを構築するための基盤としての活用です。グローバルな強い一貫性とスケーラビリティを、データセンター内で実現できます。

制限事項

プレビュー段階ということで、いくつかの制限があります。

  • TLS 暗号化は非対応(プレビュー版)
  • Developer edition は 非商用・非本番環境のみ
  • Developer edition はエンタープライズセキュリティ機能とデータ保護機能を含まない
  • データベース品質のローカルファイルシステムが必須

本番利用を検討する場合は Commercial edition の早期アクセスプログラムへの申し込みが必要です。

やってみる

Developer edition はすぐにダウンロードして試せるので、公式のクイックスタートに沿って手元で動かしてみます。ここでは一番お手軽な 単一コンテナでの起動 を行います。

前提条件

  • 実行環境
    • 使用サービス:Compute Engine
    • マシンタイプ:e2-standard-4 (4 vCPU + 16 GB メモリ)
    • OS:Ubuntu 22.04 LTS (x86/64, amd64 jammy image built on 2026-04-21)
    • ストレージ:SSD 永続ディスク 200GB
  • Docker がインストール済みであること
  • ホストでポート 15000 〜 15026 が空いていること(15000 〜 15025 が Spanner Omni サーバー、15026 がコンソールサーバー)

Ubuntu 22.04 LTS はデフォルトのファイルシステムが ext4 となっています。

Docker ボリュームの作成

データ永続化のため、Docker ボリュームを用意します。コンテナを作り直してもデータが失われないようにするために必要です。

$ docker volume create spanner
spanner

Spanner Omni サーバーの起動

start-single-server サブコマンドで、Developer edition の単一サーバー構成で起動します。

$ docker run -d --network host --name spanneromni \
    -v "spanner:/spanner" \
    us-docker.pkg.dev/spanner-omni/images/spanner-omni:2026.r1-beta \
    start-single-server
Unable to find image 'us-docker.pkg.dev/spanner-omni/images/spanner-omni:2026.r1-beta' locally
2026.r1-beta: Pulling from spanner-omni/images/spanner-omni
ffc3e3895e2e: Pull complete 
8f9df25c9e88: Pull complete 
17dbd5b98e16: Pull complete 
ae14a072e71d: Pull complete 
709f31676f12: Pull complete 
381d63cf8fe5: Pull complete 
df90e06afa57: Pull complete 
46a640d7d899: Pull complete 
2123a9354b10: Pull complete 
Digest: sha256:e98a088fa66d4a87dbb560d729bf21d998bb843f6018bd8dc118fe320e671886
Status: Downloaded newer image for us-docker.pkg.dev/spanner-omni/images/spanner-omni:2026.r1-beta
b1e3c38e5d25303eeb3aba28c8a074e3ec19ff6be92f9be83387cd4afc1969bd

コンテナが起動していることを確認します。

$ docker ps
CONTAINER ID   IMAGE                                                             COMMAND                  CREATED          STATUS          PORTS     NAMES
b1e3c38e5d25   us-docker.pkg.dev/spanner-omni/images/spanner-omni:2026.r1-beta   "/bin/tini -- /googl…"   35 seconds ago   Up 30 seconds             spanneromni

サンプルデータベースの作成

クイックスタート用に用意されている retail サンプルデータベースを作成します。このサンプルには全文検索、ベクトル検索、グラフクエリを試せるスキーマが含まれています。

$ docker exec -it spanneromni /google/spanner/bin/spanner databases create-sample-db retail
Created database: retail-sample and applied schema.
Inserted User Data.
Inserted Product Data.
Inserted Address Data.
Inserted Shopping Cart Data.
Inserted Payment Data.
Inserted Order Data.
Inserted Order Item Data.
Created sample database successfully.

データベース一覧を確認します。

$ docker exec -it spanneromni /google/spanner/bin/spanner databases list
NAME           STATE  VERSION_RETENTION_PERIOD  EARLIEST_VERSION_TIME        ENABLE_DROP_PROTECTION 
retail-sample  READY  1h                        2026-04-22T14:12:21.440307Z  false                   
spanner-info   READY  1h                        2026-04-22T13:14:38.849650Z  false                   

スキーマを確認します。

$ docker exec -it spanneromni /google/spanner/bin/spanner databases ddl describe retail-sample
CREATE TABLE Orders (
  OrderID INT64 NOT NULL,
  UserID INT64 NOT NULL,
  OrderDate TIMESTAMP,
  ShippingAddressID INT64,
  PaymentID INT64,
  TotalAmountUSD NUMERIC,
  OrderStatus STRING(MAX),
  OrderStatus_Tokens TOKENLIST AS (TOKENIZE_FULLTEXT(OrderStatus)) HIDDEN,
) PRIMARY KEY(OrderID);



SQL シェルでの接続

Spanner Omni には SQL シェルが同梱されており、そのまま対話的にクエリを投げられます。

$ docker exec -it spanneromni /google/spanner/bin/spanner sql --database=retail-sample
Welcome to Spanner-Cli Client.

Type 'help' or '\h' for help.
Type 'exit' or 'quit' or '\q' to exit.

spanner-cli>  

サンプルデータベースに対して、マルチモデルでのクエリを実行してみます。

SEARCH() 関数を使用した全文検索の実行例

spanner-cli> SELECT ProductID, Name, Description, PriceUSD
FROM Products
WHERE SEARCH(Name_Tokens, 'phone')
ORDER BY PriceUSD DESC
LIMIT 10;
+-----------+---------------------------------+------------------------------------------------------------------------------------------+----------+
| ProductID | Name                            | Description                                                                              | PriceUSD |
+-----------+---------------------------------+------------------------------------------------------------------------------------------+----------+
| 201414    | Smith-Allen Mobile Phone        | This smith-allen mobile phone features high-resolution display and long battery life.    | 1086.15  |
| 197251    | Lutz-Howard Phone               | This lutz-howard phone features long battery life and advanced camera.                   | 974.94   |
| 301629    | Garza-Rogers Cell Phone Plus 69 | This garza-rogers cell phone plus 69 features 5G capability and high-resolution display. | 908.03   |
| 581741    | Brock, Phone                    | This brock, phone features wireless connectivity and advanced camera.                    | 830.75   |
| 377370    | Adkins, Cell Phone Plus 58      | This adkins, cell phone plus 58 features advanced camera and fast processing.            | 734.93   |
| 865179    | Jones, Cell Phone Pro 43        | This jones, cell phone pro 43 features advanced camera and long battery life.            | 709.21   |
| 407419    | Farley, Cell Phone              | This farley, cell phone features 5G capability and wireless connectivity.                | 625.71   |
| 988662    | Johnson Cell Phone Plus 28      | This johnson cell phone plus 28 features wireless connectivity and long battery life.    | 395.94   |
| 479201    | Jones Cell Phone Max 83         | This jones cell phone max 83 features advanced camera and fast processing.               | 391.59   |
| 230889    | Bean Cell Phone Ultra 49        | This bean cell phone ultra 49 features long battery life and high-resolution display.    | 389.04   |
+-----------+---------------------------------+------------------------------------------------------------------------------------------+----------+
10 rows in set (17.47 msecs)

COSINE_DISTANCE() ベクトル検索による類似製品検索の例

spanner-cli> WITH
 ReferenceProduct AS (
   SELECT ProductEmbedding
   FROM Products
   WHERE ProductID = 197251
 )
SELECT p.ProductID, p.Name, p.Description, p.PriceUSD
FROM Products p, ReferenceProduct rp
WHERE p.ProductID != 197251 AND p.ProductEmbedding IS NOT NULL
ORDER BY
 COSINE_DISTANCE(
   rp.ProductEmbedding,
   p.ProductEmbedding)
LIMIT 5;
+-----------+--------------------------------------+-------------------------------------------------------------------------------------------------------+----------+
| ProductID | Name                                 | Description                                                                                           | PriceUSD |
+-----------+--------------------------------------+-------------------------------------------------------------------------------------------------------+----------+
| 969693    | Watson-Chambers mobile device Max 38 | This watson-chambers mobile device max 38 features high-resolution display and wireless connectivity. | 125.23   |
| 733052    | Mathews Smartphone Pro 16            | This mathews smartphone pro 16 features high-resolution display and long battery life.                | 852.93   |
| 865179    | Jones, Cell Phone Pro 43             | This jones, cell phone pro 43 features advanced camera and long battery life.                         | 709.21   |
| 496922    | Lewis, mobile device                 | This lewis, mobile device features high-resolution display and fast processing.                       | 1079.22  |
| 301629    | Garza-Rogers Cell Phone Plus 69      | This garza-rogers cell phone plus 69 features 5G capability and high-resolution display.              | 908.03   |
+-----------+--------------------------------------+-------------------------------------------------------------------------------------------------------+----------+
5 rows in set (2.14 msecs)

グラフクエリによる特定の製品を購入したすべてのユーザーの例

spanner-cli> GRAPH ECommerceGraph
  MATCH (p:Products { ProductID: 197251 })<-[:OrderItems]-(o:Orders)
  MATCH (u:Users)
  WHERE u.UserID = o.UserID
  RETURN DISTINCT u.UserID, u.Email;
+--------+--------------------------+
| UserID | Email                    |
+--------+--------------------------+
| 543143 | michaeladams@example.org |
| 391704 | jameswaller@example.com  |
| 456    | user456@example.com      |
| 191161 | hwilson@example.com      |
| 131244 | waltersalec@example.net  |
+--------+--------------------------+
5 rows in set (31.2 msecs)

一つのデータベースでリレーショナル・全文検索・ベクトル・グラフが同時に扱えるのは、本家 Spanner のマルチモデル機能そのものです。

Spanner Omni コンソール

Spanner Omni にはブラウザからアクセスできる管理コンソールも付属しています。

$ docker exec -it spanneromni /app/bin/spanner-console
2026-04-22T14:33:24.935897383Z main INFO Starting configuration JsonConfiguration[location=jar:file:/app/lib/shared-0.8.24.jar!/log4j2.json]...
2026-04-22T14:33:24.937904193Z main INFO Configuration JsonConfiguration[location=jar:file:/app/lib/shared-0.8.24.jar!/log4j2.json] started.
2026-04-22T14:33:24.941076327Z main INFO Stopping configuration org.apache.logging.log4j.core.config.DefaultConfiguration@55fe41ea...
2026-04-22T14:33:24.941767203Z main INFO Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@55fe41ea stopped.
{ "ts": "2026-04-22 14:33:24.957", "level": "WARN", "svc": "BFF", "thread": "main", "requestId": "", "logger": "c.g.o.s.StartupConfig", "msg": "Unrecognized argument: " }
{ "ts": "2026-04-22 14:33:24.977", "level": "INFO", "svc": "BFF", "thread": "main", "requestId": "", "logger": "OmniDB", "msg": "Starting OmniDB BFF | version=0.8.24 | commit=8b530775" }
{ "ts": "2026-04-22 14:33:25.015", "level": "INFO", "svc": "BFF", "thread": "main", "requestId": "", "logger": "OmniDB", "msg": "Enabled features: [FeatureFlag(name=NONE, state=GA)]" }
{ "ts": "2026-04-22 14:33:25.098", "level": "INFO", "svc": "BFF", "thread": "main", "requestId": "", "logger": "OmniDB", "msg": "Autoreload is disabled because the development mode is off." }
{ "ts": "2026-04-22 14:33:27.502", "level": "INFO", "svc": "BFF", "thread": "main", "requestId": "", "logger": "i.m.c.i.p.PushMeterRegistry", "msg": "publishing metrics for LoggingMeterRegistry every 1m" }
{ "ts": "2026-04-22 14:33:27.550", "level": "WARN", "svc": "BFF", "thread": "main", "requestId": "", "logger": "i.m.p.PrometheusMeterRegistry", "msg": "A MeterFilter is being configured after a Meter has been registered to this registry. All MeterFilters should be configured before any Meters are registered. If that is not possible or you have a use case where it should be allowed, let the Micrometer maintainers know at https://github.com/micrometer-metrics/micrometer/issues/4920. Enable DEBUG level logging on this logger to see a stack trace of the call configuring this MeterFilter." }
{ "ts": "2026-04-22 14:33:27.592", "level": "INFO", "svc": "BFF", "thread": "main", "requestId": "", "logger": "OmniDB", "msg": "Application started in 2.543 seconds." }
{ "ts": "2026-04-22 14:33:27.806", "level": "INFO", "svc": "BFF", "thread": "DefaultDispatcher-worker-1", "requestId": "", "logger": "OmniDB", "msg": "Responding at http://0.0.0.0:15026" }

ブラウザで以下の URL にアクセスします。

http://<IP Address>:15026

コンソールからは概要、データベース一覧、バックアップ、システムインサイト、クエリインサイトを確認できます。

概要

スクリーンショット 2026-04-22 23.34.19

データベース一覧

スクリーンショット 2026-04-22 23.34.32

バックアップ

スクリーンショット 2026-04-22 23.34.55

システムインサイト

スクリーンショット 2026-04-22 23.35.14

スクリーンショット 2026-04-22 23.39.20

スクリーンショット 2026-04-22 23.39.37

クエリインサイト

スクリーンショット 2026-04-22 23.35.31

さいごに

Spanner は水平スケールと強い一貫性を両立させた NewSQL の代表格であり、個人的にウォッチしていたデータベースですが、そのダウンロード版である Spanner Omni の登場は驚きです。ハードウェア依存だった Colossus と TrueTime をソフトウェアで置き換えるアプローチは技術的にも非常に興味深いので、深く解説した記事が楽しみです。

Developer edition は無料で試せるので、まずはクラウド上の仮想マシンかノートパソコンにダウンロードして触ってみるのが良いと思います。これから深掘りしていきたいと思います!

この記事をシェアする

関連記事