これは 「satto | 生成AIエージェント Advent Calendar 2024」 14日目の記事です。
こんにちは。「学びの探究者」です。普段はnoteで活動しています。
普段は、エンジニアではありません。
そんな私でも「satto」を使えば自分の好きなスキルができちゃうんだーということでサッとご紹介できればと思います。
この記事では、AIとGoogle Apps Script(GAS)、生成AIを組み合わせて、日常で役立つ簡単なスキルを作る方法を紹介します。生成AIを使ったアプリケーション開発に興味がある方や、非エンジニアでも手軽に生成AIを試してみたい方におすすめです。
スキルの概要
- 目的:Googleマップの店舗情報を効率的に抽出し、スプレッドシートに整理するスキルをAIとGASで実現。
- できること
1. Googleマップで検索した上位10店舗の情報を取得
2. スプレッドシートにデータを自動アップロード
3. フィールド例: 店舗名、住所、緯度、経度、レビュー評価、レビュー数など - 技術スタック
1. GoogleマップAPI
2. Google Apps Script (GAS)
3. satto
スプレッドシートの設定方法(GAS)
1. スプレッドシートの準備:Googleドライブで新しいスプレッドシートを作成します。
「スプレッドシートID」をコピーしておきます。(URLの中の docs.google.com/spreadsheets/d/[ここがID])
2. GASエディタを開く:スプレッドシートの「拡張機能」→「Apps Script」をクリックします。
GASエディタが開いたら、新しいプロジェクトとして保存。
3. スクリプトの記述:
function onEdit(e) {
const spreadsheetName = "スプレッドシート名をここに"; // 対象のスプレッドシート名
const csvFileName = "保存するCSVファイル名.csv"; // 保存するCSVファイル名
const folderName = "保存先のGoogleドライブフォルダ名"; // 保存先フォルダ名
// 対象のスプレッドシートを取得
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
if (spreadsheet.getName() !== spreadsheetName) {
return; // 対象外のスプレッドシートの場合は終了
}
// データを取得
const sheet = spreadsheet.getActiveSheet();
const data = sheet.getDataRange().getValues();
// CSV形式に変換
const csvContent = data.map(row => row.join(",")).join("\n");
// Googleドライブのフォルダに保存
const folder = DriveApp.getFoldersByName(folderName).next(); // フォルダを取得
const existingFiles = folder.getFilesByName(csvFileName);
// 同じ名前のファイルが存在する場合は削除
while (existingFiles.hasNext()) {
existingFiles.next().setTrashed(true);
}
// 新しいCSVファイルを作成
folder.createFile(csvFileName, csvContent);
Logger.log(`CSVファイルを保存しました: ${csvFileName}`);
}
4. ウェブアプリとしてデプロイ
- GASエディタの「デプロイ」→「新しいデプロイ」を選択。
- 「ウェブアプリ」を選び、プロジェクト名を設定。
- 「次のユーザーとしてアプリケーションを実行」を「自分」、
- 「ウェブアプリのアクセス」を「全員(匿名ユーザー)」に設定。
5. Sattoに設定
- Sattoの「アプリノード」に移動。
- 必要なPOSTデータフォーマットを設定。
Sattoの実装例
フロー図
AIノード①のプロンプト
あなたのタスクは、指定された地域とカテゴリーに基づいてGoogleマップを利用してトップ10店舗を選び、それをスプレッドシートに連携できるbody文として出力することです。
### 入力条件
- 地域: {{入力.地域}}
- お店のカテゴリー: {{入力.お店のカテゴリー}}
以下のJSON形式で、指定された地域とカテゴリーに基づいてGoogleマップからトップ10店舗を検索し、情報を出力してください。
### 必要な情報
各店舗について、以下の6つの情報を取得してください。
- 店名
- 住所
- 緯度
- 経度
- レビュー評価
- レビュー数
### 選出基準
- トップ10店舗は、レビュー評価が高い順に選びます。
- 同評価の場合、レビュー数が多い順に並べてください。
### 注意事項
-緯度と経度はGoogleマップから正確な値を取得してください。
-指示を復唱しないでください。
-中間結果や余計な説明は出力しないでください。
-結果のみを出力してください。
-アウトプットを""(ダブルコーテーション)で囲わないでください。
AIノード②のプロンプト
あなたは、ユーザーがAI①から生成されたデータをGoogleスプレッドシートにpostできるようサポートするアシスタントです。
まずは、ユーザーが提供するデータを受け取り、それをGoogleスプレッドシートにpostするために必要なbody文を作成してください。
以下のステップに従ってください:
1. データは {{AIノード①.output}} に格納されています。
2. 受け取ったデータを解析し、GoogleスプレッドシートのAPIに適した形式に変換する。
3. body文を出力する。
#フォーマットはこちらを使います
最大10行です。
{ "values": [ ["店名1", "住所1", "緯度1", "経度1", "レビュー評価1", "レビュー数1"], ["店名2", "住所2", "緯度2", "経度2", "レビュー評価2", "レビュー数2"] ] }
# 補足
- 指示の復唱はしないでください。
- 自己評価はしないでください。
- 結論やまとめは書かないでください。
- 最終成果物以外は出力しないでください。
- 出力結果をダブルクォーテーション("")で囲わないでください。
最後に
ポイントとしては、AIノードには明確に指示するために、「Googleマップから情報を収集する」役割と「body文を生成する」役割に分けるとうまく行きました。
スプレッドシートに緯度経度までリストアップしているので、Googleマイマップのインポート機能を使えば「パン屋マップ」、「カフェ巡りリスト」などがすぐ作れるようになります。
この記事が役に立った場合は、ぜひコメントやいいねをお願いします!
noteでは、スキル作成の背景や学び、さらに応用アイデアについて詳しく解説しています!
リンクはこちら👉Googleマップ×スプレッドシートで簡単データ整理!非エンジニアでもできるスキル作り