【初学者向け】「入門!生成 AI を使った検索システム」のハンズオンを改めて実施してみよう
tl;dr
🖊️ 以下のハンズオン「入門!生成 AI を使った検索システム」の内容を、ご自身で実施する際に参考としていただくために執筆しました。
- https://cloudonair.withgoogle.com/events/dev-genai-handson-25q2
- https://cloudonair.withgoogle.com/events/ai-search-25q3
⚠️ 本記事では、ハンズオンの前半( Vertex AI Search を用いた検索エンジンの作成、及び検索の実行まで)を扱います。
🗒️ ハンズオン実施に必要なソースコードは以下です。
はじめに
みなさん、こんにちは。Google Cloud パートナーエンジニアの Sho です。
本ブログは Google Cloud Japan Advent Calendar 2025 の 23 日目の記事です。
本ブログの内容は、2025 年の春、及び秋に実施したのハンズオンの内容を、みなさまご自身でも実施していただく際のお供としていただくための参考書を目指して執筆したものになります。
ご注意
本記事ではハンズオンの前半(検索エンジンの作成)を扱います。後半部分(Cloud Run へのデプロイ)を試したい場合は、本記事の最後に継続して実施する方法を記載してありますので、トライしてみてください。
- https://cloudonair.withgoogle.com/events/dev-genai-handson-25q2
- https://cloudonair.withgoogle.com/events/ai-search-25q3
AI Agent Bootcamp について
AI Agent Bootcamp は、Google Cloud の生成 AI を体験できる参加費無料(事前登録制)のハンズオン ウェビナーです。Google Cloud のカスタマー エンジニアの解説を聞きながら、不明点はチャットツールを通じて質問することが可能です。本シリーズでは、生成 AI や AI エージェントをテーマに「Gemini」や「Vertex AI」をはじめとした Google と Google Cloud の様々なプロダクトを学べるセミナーをご用意しています。
本ハンズオンは、 AI Agent Bootcamp の中で実施されたハンズオンのうちの一つになります。さっそく、内容の解説に入っていきましょう。
※ 本ハンズオンについては実施済みのアーカイブも提供(春、秋)しておりますので、そちらも合わせてご確認いただけますと理解が深まると思います。
本ハンズオンの目的
本ハンズオンでは、ユーザーが入力した検索クエリに対して、適切な結果を取得しつつ、回答の概要を取得するアプリケーションを構築する方法を学びます。具体的には、Cloud Storage に検索対象の PDF ファイル(今回は生成 AI を活用した Google Cloud の事例紹介ドキュメント)を設置し、Vertex AI Search で検索可能なデータ形式に変換し、 Cloud Run にデプロイしたアプリケーションから検索を行えるようにします。前半部分では検索エンジンの作成、後半部分では、検索エンジン(API)をアプリケーションから実行するアプリケーションの開発を行います。
上記を学ぶことで、例えば PDF 形式で保持されている社内文書を検索可能としながら、AI の要約も取得するアプリケーションが構築できます。

背景
多くの文書に対して検索を行いたいと考えたとき、検索エンジンを作成する必要があります。実は、検索エンジンの作成には多くの作業(下記)が必要です。

特に重要なのは上記の Build(構築) にあたる部分です。Build 処理を簡単に説明すると、データを検索可能な単位に分割し、柔軟な検索ができるようにベクトル化を行い、検索可能なデータ形式に実施し、ユーザのクエリを解釈するような処理を入れる、といったものです。
これらの処理を独自で実施しようとすると非常に大変です。そこで、Google Cloud が提供する Vertex AI Search を利用すると、Build の全ての処理を GUI(画面での操作)のみで実施することができるようになります。
ハンズオン開始準備とご注意
それではハンズオンを開始していきます。
本ハンズオンでは有償のサービスを利用するため、課金が有効な Google Cloud 環境が必要です。今回のハンズオンで発生する課金は微小(数セント)ですが、ご注意ください。課金が発生しないようにするためには、作成したリソースを全て削除していただくようにお願いします。
Google Cloud では、新規登録を行っていただいたユーザーの皆様に対して $300 の無料クレジットを発行しておりますので、そちらもご活用ください。
発生する可能性がある課金
本ハンズオンを実施することで、以下の課金が発生する可能性があります。
- Cloud Storage 費用(無料枠内。5GB / month まで)
- Vertex AI Search 実行費用(0.10 ドル未満)
- Vertex AI Search インデックスサイズ費用(0.01 ドル未満)
- Cloud Run 実行費用(0.01 ドル未満)
[1] Google Cloud コンソールを開く
Google Cloud コンソールにアクセスします。
コンソールが英語で表示された場合は、言語を日本語に変更します。
画面右上の縦三点アイコンをクリックし Preferences をクリックします。

設定が表示されたら、Language & region クリックし、Langauge を 日本語 に設定して、Save ボタンを押しましょう。

再度 Google Cloud コンソール にアクセスし、表示が日本語になっていればOKです。
[2] Cloud Shell を開く
画面右上の Cloud Shell をアクティブ にするボタンを押します。画面下半分にターミナル画面が表示されます。Cloud Shell の承認 画面が表示されたら、承認 を押してください。

[3] ソースコードの取得
ターミナルが表示されたら、以下のコマンドをコピー & ペーストして実行します。
# ソースコードを GitHub から取得
git clone https://github.com/shonuma/vertex-ai-search-hands-on-202505.git
# ソースコードのディレクトリに移動
cd ~/vertex-ai-search-hands-on-202505
# チュートリアル画面の表示
teachme tutorial.md
画面右側にチュートリアル画面が表示されたら成功です。

チュートリアル画面の開始ボタンを押すと、ハンズオンの進行手順が表示されますので、そちらを参照しながらハンズオンを進めてください。
開始 ボタンを押した後、次へ で進める事ができます。
以降の項目では、チュートリアル内容の補足や、実施時のポイントを抽出して記載しています。
[4] ステップ 1〜3: 準備、API の有効化
- ステップ1: 概要の説明です。
- ステップ2: Google Cloud プロジェクト ID を環境変数
GOOGLE_CLOUD_PROJECTに設定する手順です。Cloud Shell でハンズオンを実施されている場合、デフォルトで設定されているので実行は不要です。 - ステップ3: 今後のハンズオンで必要なシステムの API を有効します。
有効にする API のリストは以下です。
- Cloud Run
- Vertex AI
- Vertex AI Search
- Cloud Storage
- Firestore
gcloud services enable \
run.googleapis.com \
aiplatform.googleapis.com \
storage.googleapis.com \
firestore.googleapis.com \
discoveryengine.googleapis.com
[5] ステップ 4: 作業者に Cloud Storage の権限を付与する
本ハンズオンでは、Cloud Storage にデータを設置する必要があります。本ステップでは、Cloud Storage にアクセスするための権限を実行者(現在ハンズオンを実行しているユーザー)に付与します。
ユーザー ID は Google Cloud コンソールへログイン済みのメールアドレス となっており、Google Cloud コンソール右上部のユーザーアイコンをクリックすると取得できます。
※スクリーンショットではマスクされていますが、正式なメールアドレス形式のコピーを行ってください。(例: sho@example.com )

ユーザー ID(メールアドレス)がコピーできたら、<user_id> をユーザー ID に差し替えて、以下のコマンドを実行します。USER_ID という環境変数に、メールアドレスを代入する処理です。
export USER_ID=<先ほどコピーしたユーザーID
以下のコマンドを実行して、指定したメールアドレスが表示されたら成功です。
echo $USER_ID
以下が実行例です。

成功したら、以下のコマンドを実行します。${GOOGLE_CLOUD_PROJECT} や ${USER_ID} は環境変数となり、以前の手順で代入した値が指定されます。
# 先ほど指定したユーザーID(自分自身)に、Cloud Storage へアクセスするための権限を付与するコマンド
gcloud projects \
add-iam-policy-binding \
${GOOGLE_CLOUD_PROJECT} \
--member "user:${USER_ID}" \
--role=roles/storage.objectUser
実行した結果エラーが表示されなければ成功です。
※実際にどのようなコマンドが実行されているかを知りたい場合は、コマンドの先頭に echo をつけて実行することで確認が行えます。
echo gcloud projects \
add-iam-policy-binding \
${GOOGLE_CLOUD_PROJECT} \
--member "user:${USER_ID}" \
--role=roles/storage.objectUser
[6] ステップ 5〜6: Cloud Storage の設定
次のステップは、Cloud Storage の作成と、事例の PDF データの設置です。
以下の流れになっています。
- Cloud Storage バケットの作成
- 公開されている Cloud Storage のバケットから PDF データをコピーして持ってくる
# バケットの作成
gcloud storage buckets create \
gs://${GOOGLE_CLOUD_PROJECT}-search-handson \
--location=asia-northeast1 \
--project \
${GOOGLE_CLOUD_PROJECT}
# データのコピー
gcloud storage cp -r \
gs://dev-genai-handson-25q2-static/pdfs \
gs://${GOOGLE_CLOUD_PROJECT}-search-handson/
以下が確認コマンドです。
# ディレクトリが作成されていることを確認
gcloud storage ls \
gs://${GOOGLE_CLOUD_PROJECT}-search-handson/
何らかの値が帰ってきたら成功です(何も表示されなかったら、バケットが作成されていないか、コピーがうまくいっていない可能性が高いです)
上記のように、コマンドを実行した後に 処理が成功したかどうかを確認する 癖をつけておくと、ステップでつまずいた際の原因究明の参考になります。
[7] ステップ 7〜9: 検索エンジンの作成
Vertex AI Search を実行するために必要な API の有効化を実施します。Gen App Builder にアクセスするか、画面上部のサービス検索ウィンドウから AI Applications を検索してページを開きます。

初回のアクセスの場合、API の有効化を行うかどうかを聞かれますので、Continue and activate the API をクリックして有効化を行いましょう。

ステップ 9 に記載されている手順通り、データストアを作成します。

Cloud Storage は様々なデータ形式に対応しています。
今回の検索対象は PDF データのため、非構造化ドキュメント を選択しましょう。

続いて、同期の頻度を指定します。
今回はハンズオンのため 1 回限りを選択します。定期的にアップデートが行われるような場合、定期実行(1,3,5日ごと) を指定しておくと、更新のたびにデータストアを再作成する手間が省けます。

最後に、同期を行う Cloud Storage のパスを指定します。
ステップ 6 で作成したバケットを指定しましょう。ファイルパスを貼り付けていただいても良いですし、参照 ボタンを押すことで該当のバケットを指定いただいても良いです。
ここでエラーが出る場合、実行者に Cloud Storage の操作権限の付与が正しく行えていないが、バケットの作成が正しく行えていないかの原因が考えられるので、ステップ 4〜6 の手順を見直してみてください。
全ての設定が完了したら、続行 ボタンを押しましょう。

最後に、データストアの名称を決めます。名称は任意ですが、今回は genai-handson-2025-gcs を指定しています。
ドキュメント処理オプション、生成 AI のオプションは未指定で問題ありません。

ドキュメント処理オプションで指定できるパーサーについて
デフォルトの Digital Parser の他、画像内の文字列等を読み取るための OCR Parserや、図や表の読み取り精度が向上する Layout Parser も指定できます。Digital Parser 以外は Document AI のサービスを利用するため、別途料金がかかる点にご注意ください。
作成時に以下の画面が表示された場合は、全般的な料金を選択してください。

作成 を押し、データストアが正常に作成されると、以下のように画面が遷移して、作成したデータストアが表示されます。

[8] ステップ 10: 検索エンジンの作成
次は、先ほど作成したデータストアを検索するためのアプリを作成します。
メニューから、アプリ を選択します。

アプリはまだ一つもない状態ですので、新しいアプリを作成 ボタンを押してください。

アプリの種類を聞かれますので、カスタム検索 を選択します。

続いて検索アプリの設定を行っていきます。
Enterprise エディションの機能、構成レスポンスはチェックを付けたままにします。これらの機能を有効にすることで、検索結果の要約や、検索結果の要約に含まれるデータソースの表示(検索結果から引用)が行えるようになります。
アプリ名は genai-handson-2025-app を指定し、会社名は Google Cloud を指定します。
会社名、組織名を指定することで、生成 AI モデルが単語を会社名であると理解できたり、「我が社の〜」といった検索クエリに対して会社名を考慮するなど、検索結果に良い影響を与えることができます。ロケーションは global のままで OK です。
全て確認できたら、続行を押します。

続いて、接続するデータストアを選択します。ステップ 9 の手順が成功していれば、ここで先ほど作成したデータストア名 genai-handson-2025-gcs が表示されているはずです。チェックボックスを押して、続行を押します。

価格についてはデータストア同様、全般的な料金 を選択してください。

作成 を押すと、アプリケーションが作成されます。
[9] ステップ 11: 検索のプレビュー画面
遷移した画面には沢山の情報が記載されていますが、最初に プレビュー ボタンを押してみましょう。

検索ウィンドウが表示された画面に遷移したかと思います。
ここで、好きな検索単語を入れてみましょう。自然文でも構いません。おすすめの検索単語例をいくつか記載します。
- Cloud Run の事例
- GKE の事例
- 生成AIを使った事例

以下は Cloud Run の事例 と検索した例です。
生成 AI による要約、及び検索結果が表示されたでしょうか。

検索プレビューの準備がまだできていません というエラーや、検索結果が一件も出てこないといった状況に遭遇した場合、データストアの作成が完了していない可能性があります。
一定時間(10分程度)待ってから再度検索を行ってみてください。
[10] 検索エンジンの構成を変更してみる
最後に検索エンジンの挙動をカスタマイズしてみましょう。左メニューの 構成 を選択します。

構成では、検索エンジンのカスタマイズを行えます。
本項目で設定したカスタマイズは API には反映されず、プレビューやウィジェットのみに反映されることに注意してください。
ここでは、生成 AI からの概要をカスタマイズしてみましょう。
回答のカスタマイズ の項目に、以下の文章を入れてください。
小学生でもわかるように説明してください。

また、サマリー言語(生成する概要の言語)を 日本語(Japanese) に設定しておきます。これにより、英語や中国語等で回答されるリスクを軽減します。

上記を入れたら、画面下の 保存して公開 ボタンを押しましょう。
ウィジェット構成を更新しました と表示されたら、再度検索を行ってみます。以下のように概要のトーンが変更されていれば、成功です。
※ 以下の例では小学生でもわかりやすい平易な表現になっていることがわかります。

以上でハンズオン(前半)は終了です。お疲れ様でした ☕
[11] 環境の削除
ここでハンズオンを終了する場合、プロジェクトを削除することで課金を抑止できます。削除方法は公式ページ を参考にしてください。
削除を行いたくない場合、以下の手順で課金が発生しない状況に戻すことができます。
(11-1) Vertex AI Search アプリケーションの削除
アプリのページを開き、アプリの項目の右端にある縦三点リーダーをクリックして、削除を実施します。

(11-2) Vertex AI Search データストアの削除
データストアのページを開き、アプリの項目の右端にある縦三点リーダーをクリックして、削除を実施します。
※ アプリと同様の手順です。データストアと紐づいているアプリがあると、データストアを削除できません。
(11-3) Cloud Storage バケットの削除
Cloud Storage バケットの一覧ページを開き、データストア名 <プロジェクトID>-search-handson が記載されたバケットを削除します。
以上でクリーンナップは終了です。お疲れ様でした🧹
続けてハンズオンを実施する場合
チュートリアルの ステップ 13 以降が後半の内容になります。チュートリアルの 次へ を押して、以降のステップを続けることで、最後まで実施が可能です。

最後まで実施した場合、Cloud Run のインスタンスがいくつか起動しますので、本手順 を参考に、起動したインスタンスを削除することで課金を抑止できおます。
さいごに
本記事では、本年実施されたハンズオンコンテンツをもとに、Vertex AI Search を使って検索エンジンを作成する手順を振り返りました。
2026 年も同様の企画を実施予定ですので、奮ってご参加いただけますと幸いです。
Discussion