AppSheetのBot(Automation)を使って、ユーザーの入力をGoogleの生成AI「Gemini API」に送信し、返ってきた文章をアプリに反映させる仕組みを作ったときの備忘録です。
このページでは、Apps Scriptのコードと、AppSheet側のAutomation(Bot)の設定を中心に記録しています。
この記事でやること
- ユーザーの入力をきっかけに、Gemini APIで文章を生成
- Apps Script経由でAPIとやり取りする
- 結果をAppSheetのテーブルに自動反映
使ったもの
構成 | 役割 |
---|---|
AppSheet | ユーザー入力とBot実行 |
Google Sheets | データ保存 |
Google Apps Script | Gemini APIと通信 |
Gemini API(Google AI Studio) | テキスト生成 |
Apps Scriptのコード
AppSheetから渡されたプロンプト(質問やキーワード)をGemini APIに送って、テキストを返す関数です。
function createTextWithGemini(prompt) {
const apikey = PropertiesService.getScriptProperties().getProperty("GEMINI_API_KEY");
const MODEL = "gemini-2.0-flash";
const url = "https://generativelanguage.googleapis.com/v1beta/models/" + MODEL + ":generateContent?key=" + apikey;
const requestBody = {
contents: [{ parts: [{ text: prompt }] }]
};
const options = {
method: "POST",
headers: { "Content-Type": "application/json" },
payload: JSON.stringify(requestBody)
};
try {
const response = UrlFetchApp.fetch(url, options);
const responseData = JSON.parse(response.getContentText());
const generatedText = responseData.candidates[0].content.parts[0].text;
return generatedText;
} catch (error) {
Logger.log("エラーが起きました:" + error);
}
}
ポイント
- APIキーはスクリプトプロパティ(
GEMINI_API_KEY
)に登録しておく - モデルは軽量な
gemini-2.0-flash
を使用(用途によって変更可)
AppSheet側の設定
① トリガー(Botのイベント)
対象テーブルで「入力列(例:質問)」が変更されたときにBotを起動。
イベントタイプは 「Updates」。
実行例

② プロセス(Functionの設定)
Botのステップで、Apps Scriptを呼び出す。
ステップタイプは 「Call a script function」。
- 関数名:
createTextWithGemini
- 引数(prompt):
"質問内容: " & [質問]
など、AppSheet式で構成
実行例

③ 結果を列に書き込む
次のステップで、返ってきたテキストをテーブルに保存。Index(StepResults, 1)
を使うと、関数の戻り値を取り出せる。
実行例

この記事ではまったこと
どこで止まっているのか分からない問題
AppSheetとGASを連携すると、処理が止まったときに「AppSheet側なのかGAS側なのか」がすぐには分かりませんでした。
そのため、以下の2点を常に確認する必要があります。
- ① GASの実行ログ:「実行」メニュー → 「実行ログ(旧:コンソールログ)」や「実行数」タブ
- ② AppSheetのMonitor: Manage → Monitor タブ →Automation MonitorのLaunch automation monitorをクリック
実行ログの出力は必須
GASの中では、必ず Logger.log()
や console.log()
を使って、
どこまで処理が進んだか、どんな値が入っているかを出力するようにしておくとデバッグが圧倒的に楽になります。
// 値の確認
Logger.log("受け取ったプロンプト:" + prompt);
// レスポンス確認
Logger.log("Gemini APIの返答:" + generatedText);
エラー時に catch
節で内容を出力しておくのも重要です。
} catch (error) {
Logger.log("エラーが起きました:" + error);
}
その他注意点
- AppSheetから外部APIには直接POSTできない(Webhook除く)
- プロンプトの作り方(与える文の構成)次第で、AIの返答の精度が大きく変わる
メモ
今回は、AppSheetとGemini APIをつなぐためのGASとAppSheetのAutomationをまとめました。
アプリとしての完成形(例:英単語クイズやレビュー生成など)は、書籍で出版予定です。
以下の書籍では画像認識をさせたものを紹介しています。手順も詳しく説明していますのでぜひ手に取って見てください。
コメント