投稿する
📚 Codex講座

API連携!スプレッドシートタスク管理入門

Codexで作成したエージェントにGoogleスプレッドシートへの追記・読み出しツールを実装し、議事録から抽出したタスクの自動管理を実現する方法を解説します。

学習ポイント

  • Google Apps Script (GAS) を用いたタスク管理APIの作成とデプロイ方法」、「シェルスクリプトを介してCodexエージェントに外部ツールを実行させる設定」、「議事録から抽出したタスクをスプレッドシートへ自動登録・一覧取得するワークフロー

〜議事録タスクをスプレッドシートに自動登録しよう〜

1. 本講義のゴール

これまで作成した「議事録作成・タスク抽出エージェント」に「ツール(道具)」を持たせることで、外部システム(Google スプレッドシート)と連携させます。

「考える」だけでなく、「実際にアクション(読み書き)を行う」エージェントへと進化させ、業務の完全自動化を目指します。

【完成イメージ】

会議音声文字起こし → 議事録自動作成 → タスク自動抽出 → Googleスプレッドシートへ自動登録


2. 実装ステップ

STEP 1:Googleスプレッドシートの準備

データベースとなるスプレッドシートを作成し、以下の構成で設定します。

  1. シート名を tasks に変更する。

  2. 1行目(ヘッダー行)に以下のカラム名を入力する(※スペル正確に)。


STEP 2:Google Apps Script (GAS) でAPIを作成

スプレッドシートを外部から操作するための「窓口(API)」を作ります。

  1. スプレッドシートのメニュー「拡張機能」→「Apps Script」を開く。

  2. プロジェクト名を変更(例:「第5回 Codex講座」)。

  3. エディタに講義用コード(doPost および doGet 関数)を貼り付ける。

  4. デプロイ(公開)設定 ※重要

  5. 情報の取得:

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=取得したウェブアプリURL

2. ツール用スクリプトの作成

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. 動作確認(演習)

以下の流れでチャットを行い、正しく動作するか確認しましょう。

  1. タスクの登録:

  2. タスクの確認:


4. 今後の活用アイデア

今回の仕組み(Codex + 外部ツール連携)は、様々な業務に応用可能です。

  • 営業・商談管理: 商談メモから「ネクストアクション」をCRMやシートに自動登録。

  • カレンダー連携: タスクの期限をGoogleカレンダーに予定として登録。

  • チャット通知: 特定のステータスになったらSlackやTeamsに通知を送る。

  • 情報収集: 指定したキーワードでWeb検索を行い、結果をシートにまとめる。