どうもまた3号です。
先週福岡に出張に行きました。
空港についてラーメンを食べ、博多駅についてラーメンを食べ、晩御飯を食べた後にラーメンを食べ、昼食にラーメンを食べ、
とやっていたら健康診断で血圧が見たことない数値になってました。関係あるかわかりませんが参りました。
はじめに
というわけで本題です。
AppSheetを使っていて、「Googleドライブ内の社内規定や過去の議事録を検索して、さらにAIに要約させたい」と思ったことはありませんか?
今回は、AppSheetとGoogle Cloudの AI Applications(Vertex AI Agent Builder の機能の一部)を連携させ、高度なAI検索機能を実装するまでの過程を共有します。
Node.jsのサンプルコードはあっても、AppSheet(Google Apps Script)での実装情報は少なく、特に権限周りやURLの仕様でかなり苦戦しました。その解決策をまとめます。
実現したこと
・AppSheetで検索ワードを入力。
・GAS経由で AI Applications のAPIを叩く。
・Googleドライブ内のドキュメント(Workspaceデータ) を検索。
・検索結果だけでなく、AIによる要約・回答(営業トークスクリプトの生成など) も取得。
・結果をスプレッドシートに書き戻し、AppSheetで表示。
アーキテクチャ概要
・AppSheet: 検索ワード入力用フォーム(AutomationでGASをキック)
・Google Apps Script (GAS): APIリクエストの実行
・AI Applications: 検索&生成AIエンジン
・Google Sheets: 結果の格納先
実装のポイントとハマりどころ(解決策)
今回、最も共有したいのが以下の「ハマりポイント」です。
1. 認証は「サービスアカウント」ではなく「ユーザー認証」で!
最初はセキュリティを考慮して「サービスアカウント」で実装しようとしましたが、エラーは出ないのに「検索結果が0件」になる現象が発生。
理由: Google DriveなどのWorkspaceデータを検索する場合、セキュリティ(ACL)の観点から「ロボット(サービスアカウント)」による検索は制限されており、「実行ユーザー本人(OAuth)」 の権限でアクセスする必要があります。
- 解決策: GASの
ScriptApp.getOAuthToken()を使用し、マニフェスト(appsscript.json)にhttps://www.googleapis.com/auth/drive.readonly等のスコープを追加することで、ユーザー自身の権限としてAPIを叩くようにしました。
2. GASとGCPプロジェクトの「紐付け」が必須
コードは合っているのにAPIが通らない現象が発生。 GASはデフォルトで独自のGCPプロジェクトを持っていますが、これでは外部からのアクセスとみなされ、Workspaceデータへのアクセスが遮断されていました。
- 解決策: GASのエディタ設定から「GCPプロジェクト番号」を入力し、GASを AI Applications があるプロジェクト内部で動かす設定に変更しました。
3. API URLの罠:「DataStores」ではなく「Engines」
公式ドキュメントのサンプル(Node.js)を参考にURLを構築していましたが、 404 Not Found が頻発。 実は、作成した AI Applications の種類によって、URLのパターンが異なっていました。
- DataStoreパターン:
.../dataStores/{ID}/...(従来のVertex AI Searchなど) - Engineパターン:
.../engines/{ID}/...← AI Applications(Agent Builder)で作った場合はこっち!
コンソールの curl コマンドサンプルをよく確認し、v1alpha バージョンの engines エンドポイントを使うことで解決しました。
4. コンソールで設定したプロンプトが反映されない?
GCPコンソール画面で「あなたは優秀な営業アシスタントです」と設定しても、API経由だと無視されてしまいました。これはコンソール設定がWidget用だからです。
- 解決策: APIのリクエストボディ(
payload)内のmodelPromptSpecに、直接プロンプト(role定義)を記述することで解決。これにより、検索結果をもとにした「トークスクリプトの作成」などが可能になりました。
まとめ
AppSheet単体では難しい「非構造化データ(ドキュメント)の検索」も、AI Applications と組み合わせることで強力なツールになります。 ただし、Workspaceデータを扱う場合は「権限のスコープ」「プロジェクトの紐付け」「Engine型のAPIエンドポイント」の3点に注意が必要です。
同じエラーで悩んでいる方の参考になれば幸いです!
また、弊社ではAppSheetのマンツーマンセミナーも行っております。
そもそも作り方よくわかんないよという方はまずこちらがおススメです!!
