API連携!スプレッドシートタスク管理入門
学習ポイント
- Google Apps Script (GAS) を用いたタスク管理APIの作成とデプロイ方法」、「シェルスクリプトを介してCodexエージェントに外部ツールを実行させる設定」、「議事録から抽出したタスクをスプレッドシートへ自動登録・一覧取得するワークフロー
〜議事録タスクをスプレッドシートに自動登録しよう〜
1. 本講義のゴール
これまで作成した「議事録作成・タスク抽出エージェント」に「ツール(道具)」を持たせることで、外部システム(Google スプレッドシート)と連携させます。
「考える」だけでなく、「実際にアクション(読み書き)を行う」エージェントへと進化させ、業務の完全自動化を目指します。
【完成イメージ】
会議音声文字起こし → 議事録自動作成 → タスク自動抽出 → Googleスプレッドシートへ自動登録
2. 実装ステップ
STEP 1:Googleスプレッドシートの準備
データベースとなるスプレッドシートを作成し、以下の構成で設定します。
シート名を
tasksに変更する。1行目(ヘッダー行)に以下のカラム名を入力する(※スペル正確に)。
STEP 2:Google Apps Script (GAS) でAPIを作成
スプレッドシートを外部から操作するための「窓口(API)」を作ります。
スプレッドシートのメニュー「拡張機能」→「Apps Script」を開く。
プロジェクト名を変更(例:「第5回 Codex講座」)。
エディタに講義用コード(
doPostおよびdoGet関数)を貼り付ける。デプロイ(公開)設定 ※重要
情報の取得:
function doPost(e) {
// リクエストボディ(JSON文字列)をオブジェクトに変換
var data = JSON.parse(e.postData.contents);
// スプレッドシートとシートを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('tasks');
// タイムスタンプを自動で入れる
var timestamp = new Date();
// 1行分のデータ(ヘッダーの順番と合わせる)
var row = [
timestamp,
data.title || '',
data.description || '',
data.due_date || '',
data.assignee || '',
data.status || ''
];
// シートの一番下に行を追加
sheet.appendRow(row);
// 呼び出し元にJSONでレスポンスを返す(※レスポンスは講義では深追いしない)
var result = {
ok: true,
message: 'タスクを1件追加しました',
received: data
};
return ContentService
.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
}function doGet(e) {
// from_date パラメータ(例: 2025-02-01)があれば読み取る
var fromDate = null;
if (e && e.parameter && e.parameter.from_date) {
fromDate = new Date(e.parameter.from_date);
}
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('tasks');
var values = sheet.getDataRange().getValues(); // 2次元配列
var tasks = [];
// 1行目はヘッダーなので 2行目からループ
for (var i = 1; i < values.length; i++) {
var row = values[i];
// due_date(4番目の列=index 3)でフィルタ
if (fromDate) {
var dueValue = row[3];
var dueDate = (dueValue instanceof Date) ? dueValue : new Date(dueValue);
if (dueDate < fromDate) {
continue; // 指定日より前はスキップ
}
}
// 行 → オブジェクトに変換
tasks.push({
timestamp: row[0],
title: row[1],
description: row[2],
due_date: row[3],
assignee: row[4],
status: row[5]
});
}
var result = {
ok: true,
count: tasks.length,
tasks: tasks
};
return ContentService
.createTextOutput(JSON.stringify(result))
.setMimeType(ContentService.MimeType.JSON);
}STEP 3:Codex環境の設定
CodexがAPIにアクセスするための準備を行います。
1. 環境変数の設定 (.env)
プロジェクトルートに .env ファイルを作成し、GASで取得した情報を記述します。
DEPLOYMENT_ID=取得したデプロイID
WEB_APP_URL=取得したウェブアプリURL2. ツール用スクリプトの作成
Codexが実行するシェルスクリプトを作成します。
create_task.sh(タスク追加ツール)get_tasks.sh(タスク取得ツール)
プロンプト例
.envファイルにGoogle App Scriptのアクセス情報を記録しておきました。
以下のような形式で、タスクを1件作成できるAPIを作成しました。
curl -X POST "WEB_APP_URL" \
-d '{
"title": "SNS投稿アイディアを10件作成する",
"description": "商品の販促のために楽しく伝わるSNS投稿を考える",
"due_date": "2025-12-01",
"assignee": "佐藤さん",
"status": "未着手"
}'
codexがタスクをスプレッドシートに保存できるように、create_task.shという名前のシェルスクリプトを作成してください。
また、シェルスクリプトの作成後、実際に実行してタスクを追加してください。スプレッドシートからタスクの一覧を取得するAPIを追加しました。
.envファイルにGoogle App Scriptのアクセス情報を記録してあります。
例
WEB_APP_URL?from_date=2025-02-01
タスク一覧を取得するget_tasks.shという名前のシェルスクリプトを作成してください。
作成後、実際に実行してタスクを取得してください。STEP 4:エージェントへのツール組み込み
AGENTS.md(またはエージェント定義ファイル)を編集し、エージェントにツールの使い方を教えます。
【定義のポイント】
タスク追加ツール:
タスク一覧取得ツール:
プロンプト例
AGENTS.mdに ##タスクの登録 ##タスクの取得 という機能を追加してください。
create_task.shとget_tasks.shをcodexが自動で実行して、タスク管理の操作をできるようにしてください。3. 動作確認(演習)
以下の流れでチャットを行い、正しく動作するか確認しましょう。
タスクの登録:
タスクの確認:
4. 今後の活用アイデア
今回の仕組み(Codex + 外部ツール連携)は、様々な業務に応用可能です。
営業・商談管理: 商談メモから「ネクストアクション」をCRMやシートに自動登録。
カレンダー連携: タスクの期限をGoogleカレンダーに予定として登録。
チャット通知: 特定のステータスになったらSlackやTeamsに通知を送る。
情報収集: 指定したキーワードでWeb検索を行い、結果をシートにまとめる。