Antigravity を使用して Google Cloud にビルドしてデプロイする

1. はじめに

fca14bb9f4bb74f4.png

この Codelab では、Google Antigravity(以降、このドキュメントでは Antigravity と表記)を使用して、サーバーレス アプリケーションを設計、構築、Google Cloud にデプロイする方法を学びます。Google Cloud Storage(GCS)からファイルを取り込み、Cloud Run と Gemini を使用して処理し、メタデータを BigQuery にストリーミングする、サーバーレスのイベント ドリブン ドキュメント パイプラインを構築します。

学習内容

  • Antigravity を使用してアーキテクチャの計画と設計を行う方法。
  • AI エージェントを使用して Infrastructure as Code(シェル スクリプト)を生成する。
  • Python ベースの Cloud Run サービスをビルドしてデプロイします。
  • マルチモーダル ドキュメント分析用に Vertex AI の Gemini を統合します。
  • Antigravity の Walkthrough アーティファクトを使用して、エンドツーエンドのパイプラインを確認します。

必要なもの

  • Google Antigravity がインストールされている。Antigravity のインストールや基本の理解についてサポートが必要な場合は、Codelab の Google Antigravity を使ってみるを完了することをおすすめします。
  • 課金が有効な Google Cloud プロジェクトが用意されていること。
  • gcloud CLI がインストールされ、認証されている。

2. アプリの概要

Antigravity を使用してアプリケーションの設計と実装を行う前に、まず、自分で構築するアプリケーションの概要を説明します。

Google Cloud Storage(GCS)からファイルを取り込み、Cloud Run と Gemini を使用して処理し、メタデータを BigQuery にストリーミングする、サーバーレスでイベント ドリブンのドキュメント パイプラインを構築します。

このアプリケーションのアーキテクチャの概要図は次のようになります。

3bd519cfab38258d.png

正確である必要はありません。Antigravity を使用すると、アーキテクチャの詳細を把握しながら作業を進めることができます。ただし、何を構築したいかというアイデアがあると、作業がしやすくなります。詳細な情報を提供するほど、Antigravity からアーキテクチャとコードに関するより良い結果を得ることができます。

3. アーキテクチャを計画する

Antigravity を使用してアーキテクチャの詳細を計画する準備が整いました。

Antigravity は、複雑なシステムの計画に優れています。すぐにコードを記述するのではなく、まずハイレベルなアーキテクチャを定義することから始めます。

まず、エージェント マネージャーにアクセスします。Antigravity を開いたばかりの場合は、中央の Open Agent Manager ボタンをクリックするか、右上に表示されている Open Agent Manager をクリックします。

Agent Manager では、ワークスペースを開くか、迅速なプロトタイプ作成とテスト用の独立したワークスペースである Playground を使用できます。まず、Playground から始めましょう。

+ ボタンをクリックして、Playground で新しい会話を開始します。

4e33c028a604a375.png

次のように、プロンプトを入力できるインターフェースが表示されます。

fbf023e84f0eb3b2.png

右上にある設定アイコン ⚙️ をクリックし、ArtifactReview PolicyTerminalTerminal Command Auto ExecutionRequest Review に設定します。これにより、エージェントが実行する前に、すべてのステップでプランを確認して承認することができます。

プロンプト

これで、Antigravity に最初のプロンプトを提供する準備が整いました。

まず、Antigravity が Planning モードになっていることを確認します。モデルには Gemini Pro (High) モデルを使用します(他のモデルを試すこともできます)。

次のプロンプトを入力して、[送信] ボタンをクリックします。

I want to build a serverless event-driven document processing pipeline on Google Cloud.
Architecture:
- Ingestion: Users upload files to a Cloud Storage bucket.
- Trigger: File uploads trigger a Pub/Sub message.
- Processor: A Python-based Cloud Run service receives the message, processes the file (simulated OCR), and extracts metadata.
- Storage: Stream the metadata (filename, date, tags, word_count) into a BigQuery dataset. 

タスクリストと実装計画

Antigravity はリクエストを分析し、タスクリストと実装計画を生成します。

このプランでは、以下について概説します。

  • インフラストラクチャ: GCS バケット、Pub/Sub トピック、BigQuery データセット。
  • プロセッサ: Python/Flask アプリ、Dockerfile、要件。
  • 統合: GCS 通知 → Pub/Sub → Cloud Run。

次のように表示されます。

ada19341c490a570.png

Task 行の横にある Open ボタンをクリックします。Antigravity によって作成されたタスクのセットが表示されます。エージェントは、これらの項目を 1 つずつ確認します。

19675c55a71b373.png

次のステップは、実装計画を確認し、エージェントに続行する権限を付与することです。

実装計画をクリックすると、詳細が表示されます。よくお読みください。実装に関するフィードバックをお寄せいただく機会となります。実装プランの任意の場所をクリックして、コメントを追加できます。コメントを追加したら、特に命名、Google Cloud プロジェクト ID、リージョンなどについて、変更を審査に送信してください。

すべて問題ないことを確認したら、Proceed ボタンをクリックして、エージェントに実装プランの続行を許可します。

4. アプリケーションを生成する

プランが承認されると、Antigravity はプロビジョニング スクリプトからアプリケーション コードまで、アプリケーションに必要なファイルの生成を開始します。

Antigravity はフォルダを作成し、プロジェクトに必要なファイルの作成を開始します。サンプル実行では、次の結果が得られました。

4d98413e3bd17148.png

setup.sh または同様の名前のシェル スクリプト ファイルが生成され、リソースの作成が自動化されます。処理できる内容:

  1. API(runpubsubbigquerystorage)を有効にします。
  2. Google Cloud Storage バケット(doc-ingestion-{project-id})を作成します。
  3. BigQuery データセットとテーブルの作成(pipeline_data.processed_docs)。
  4. Pub/Sub トピックと通知を構成する。

エージェントは、Pub/Sub push メッセージをリッスンする Python アプリケーション(main.py)を生成する必要があります。シミュレートされた OCR ロジックを使用して、ランダムな単語数とタグを生成し、BigQuery に保存します。

この設定スクリプトが生成されると、Antigravity はユーザーに代わってスクリプトを実行するよう求めるプロンプトを表示します。以下に画面の例を示します。

44395ab66413a64f.png

必要に応じて Accept をクリックします。

プロビジョニング スクリプトは、リソースを作成し、作成されたことを検証します。チェックに成功すると、コンテナのビルドに進み、Cloud Run のサービス(main.py 内)としてデプロイされます。出力例を以下に示します。

e0e625e218e7fe46.png

サービスのデプロイの一環として、Pub/Sub サブスクリプションと、このパイプラインの動作に必要なその他のグルーも設定されます。この処理には数分かかります。

それまでの間、Inbox(左上)に切り替えて、入力待ちの Pending タスクを確認できます。

ddd2f49d02fad987.png

これは、エージェントがフィードバックを求めているときにタスクを承認するための適切な方法です。

5. アプリケーションを確認する

パイプラインがデプロイされると、Antigravity はアプリケーションが実際に動作することを確認します。Antigravity は、タスクリストの検証手順でこれを自動化します。以下に画面の例を示します。

b8758b77880cc4d9.png

テスト アーティファクト(test.txt)を作成し、Google Cloud Storage バケットにアップロードしようとしています。[Accept] をクリックして続行します。

独自のテストをさらに実行する場合は、Antigravity の検証ステップを参考にしてください。このステップでは、gsutil ユーティリティを使用してサンプル ファイルを Cloud Storage バケットにアップロードします。サンプル コマンドは次のとおりです。

gsutil cp <some-test-doc>.txt gs://<bucket-name>/

BigQuery で結果を確認する

検証プロセスの一環として、データが BigQuery に永続化されたことも確認します。

c0f08fedf671e9bd.png

ドキュメントの確認に使用された SQL クエリをメモします。

確認が完了すると、タスクリストが完了したことが表示されます。

b55ad48a87f95eca.png

省略可: 手動での確認

Antigravity はすでにアプリケーションを確認していますが、必要に応じて、次の手順に沿って Google Cloud コンソールで、すべてのリソースが作成されていることを手動で確認することもできます。

Cloud Storage

目標: バケットが存在することを確認し、アップロードされたファイルを確認します。

  1. [Cloud Storage] > [バケット] に移動します。
  2. [PROJECT_ID]-doc-uploads という名前のバケットを見つけます。
  3. バケット名をクリックしてファイルを参照します。
  4. 確認: アップロードしたファイル(test.txt)。

Pub/Sub

目標: トピックが存在し、プッシュ サブスクリプションがあることを確認します。

  1. [Pub/Sub] > [トピック] に移動します。
  2. doc-processing-topic を見つけます。
  3. トピック ID をクリックします。
  4. [登録チャンネル] タブまで下にスクロールします。
  5. 確認: doc-processing-sub が「Push」配信タイプでリストされていることを確認します。

Cloud Run

目標: サービスのステータスとログを確認します。

  1. Cloud Run に移動します。
  2. サービス doc-processor をクリックします。
  3. 確認:
  4. 健全性: サービスがアクティブであることを示す緑色のチェックマーク。
  5. ログ: [ログ] タブをクリックします。「Processing file: gs://...」や「Successfully processed...」などのエントリを探します。

BigQuery

目標: データが実際に保存されていることを検証します。

  1. [BigQuery] > [SQL ワークスペース] に移動します。
  2. [エクスプローラ] ペインで、[プロジェクト > pipeline_data データセット] を開きます。
  3. processed_docs テーブルをクリックします。
  4. [プレビュー] タブをクリックします。
  5. 確認: filenameupload_datetagsword_count を含む行が表示されます。

チュートリアル

最後のステップとして、Antigravity はチュートリアル アーティファクトを生成します。このアーティファクトには次の概要が記載されています。

  • 変更が加えられています。
  • 検証コマンドが実行されます。
  • 実際の結果(Gemini が抽出したメタデータを示すクエリ出力)。

Open をクリックすると、その内容を確認できます。出力例を以下に示します。

47ecf561d0252924.png

6. アプリケーションを探索する

この時点で、基本的なアプリがプロビジョニングされ、実行されています。このアプリケーションの拡張について詳しく説明する前に、コードを確認してください。右上の Open Editor ボタンでエディタに切り替えることができます。

表示される可能性のあるファイルの概要は次のとおりです。

  1. setup.sh: すべての Google Cloud リソースをプロビジョニングし、必要な API を有効にするマスター スクリプト。
  2. main.py: パイプラインのメイン エントリ ポイント。この Python アプリは、Pub/Sub push メッセージを受信し、GCS からファイルをダウンロードして「処理」(OCR をシミュレート)し、メタデータを BigQuery にストリーミングするウェブサーバーを作成します。
  3. Dockerfile: アプリをコンテナ イメージにパッケージ化する方法を定義します。
  4. requirements.txt: Python 依存関係を一覧表示します。

テストと検証に必要な他のスクリプトやテキスト ファイルも表示されることがあります。

この時点で、Playground から専用のワークスペース/フォルダに移動することもできます。右上にある該当のボタンをクリックします。

278de21c89e5c726.png

フォルダを選択すると、すべてのコードがそのフォルダに移動し、フォルダと会話履歴を含む新しいワークスペースが作成されます。

7. アプリケーションを拡張する

これで、基本的なアプリケーションが完成したので、アプリケーションの反復と拡張を続けることができます。以下にアイデアをいくつかご紹介します。

フロントエンドを追加する

処理されたドキュメントを表示するシンプルなウェブ インターフェースを構築します。

次のプロンプトを試してみましょう。Create a simple Streamlit or Flask web application that connects to BigQuery. It should display a table of the processed documents (filename, upload_date, tags, word_count) and allow me to filter the results by tag

実際の AI/ML と統合する

シミュレートされた OCR 処理の代わりに、Gemini モデルを使用して抽出、分類、翻訳を行います。

  1. ダミーの OCR ロジックを置き換えます。画像や PDF を Gemini に送信して、実際のテキストとデータを抽出します。抽出したテキストを分析して、ドキュメント タイプ(請求書、契約書、履歴書)を分類したり、エンティティ(日付、名前、場所)を抽出したりします。
  2. ドキュメントの言語を自動的に検出し、保存する前に英語に翻訳します。他の言語も使用できます。

ストレージと分析を強化する

バケットにライフサイクル ルールを構成して、古いファイルを Coldline Storage または Archive Storage に移動すると、コストを節約できます。

堅牢性とセキュリティ

アプリをより堅牢で安全にするには、次のような方法があります。

  1. デッドレター キュー(DLQ): 失敗を処理するように Pub/Sub サブスクリプションを更新します。Cloud Run サービスがファイルの処理に 5 回失敗した場合は、メッセージを別の「デッドレター」トピック/バケットに送信して、人間が検査できるようにします。
  2. Secret Manager: アプリで API キーや機密性の高い構成が必要な場合は、文字列をハードコーディングするのではなく、Secret Manager に保存して Cloud Run から安全にアクセスします。
  3. Eventarc: より柔軟なイベント ルーティングを実現するために、Pub/Sub から Eventarc にアップグレードします。これにより、複雑な監査ログや他の GCP サービス イベントに基づいてトリガーできます。

もちろん、独自のアイデアを思いついて、Antigravity を使って実装することもできます。

8. まとめ

Google Antigravity を使用して、スケーラブルでサーバーレスの AI 搭載ドキュメント パイプラインを数分で構築できました。具体的には、以下の方法について学習しました。

  • AI を使用してアーキテクチャを計画します。
  • コード生成からデプロイと検証まで、アプリケーションの生成を行う Antigravity を指示して管理します。
  • チュートリアルでデプロイと検証を確認します。

リファレンス ドキュメント