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

1. はじめに

fca14bb9f4bb74f4.png

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

学習内容

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

必要なもの

  • 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] をクリックします。

まず、アプリケーションのフォルダ(document-pipeline など)を作成し、エージェント マネージャーでワークスペースとして追加します。

6df2bebcee5608b7.png

エージェント マネージャーで、document-pipeline ワークスペースで会話を開始します。[Plan] モードも有効になっていることを確認します。

b7d18b5ec36004cf.png

右上の設定アイコン ⚙️ をクリックし、Review PolicyArtifact に設定し、Terminal Command Auto ExecutionTerminal に設定します。Asks for ReviewRequest Reviewこれにより、エージェントが実行する前に、各ステップで計画を確認して承認できます。

プロンプト

Antigravity に最初のプロンプトを指定する準備ができました。

まず、Antigravity が [Plan] モードになっていることを確認します。モデルには、[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] をクリックして続行します。

独自のテストをさらに実行する場合は、サンプル ファイルを Cloud Storage バケットにアップロードしてみてください。

gcloud storage cp <some-test-doc>.txt gs://doc-ingestion-{project-id}/

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

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

  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. 確認: [filename]、[upload_date]、[tags]、[word_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 の依存関係を一覧表示します。

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

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 に指示して管理する。
  • チュートリアルを使用してデプロイと検証を確認する。

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