Skip to content
Documentation
Command

/start-10-3

Lesson command

From plugin
ai-agent-camp
345200 skills8 agents200 commands
Install
$ npx -y skills add minicoohei/ai-agent-camp --agent claude-code

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/start-10-3

Context preview

What this command does when you run it.

Lesson command

Command definition

start-10-3.md
description: "Lesson command"
chapter: "courses/aiagent/lesson03-core/module10-gas"
prerequisites: ["start-10-1", "start-10-2"]
duration: "約30分"
level: "intermediate"
tags: ["gas", "sheets", "google", "automation"]
nonInteractiveMode: deferred

🎓 Lesson 10-3: Google Sheets自動化・データ処理レポート

📍 このセッションでやること

**Lesson 10-3: GASとGoogle Sheets連携** へようこそ!

| 項目 | 内容 | |------|------| | ゴール | GASからスプレッドシートの読み書き・データ処理・レポート生成を自動化する | | 所要時間 | 約30分 | | 使うスキル | gas-clasp-ops, Google Sheets API, gogcli | | 前提条件 | Lesson 10-1・Lesson 10-2 完了、GASプロジェクト作成済み | | 教材ページ | [Module 10: GAS](https://ai-agent.camp/ja/course/module-10) を並行参照 |

**このセッションの流れ:** 1. スプレッドシートアクセス 2. データ読み取り機能 3. データ書き込み機能 4. レポート生成機能 5. 自動化ワークフロー

セッション終了時には、Sheets連携の自動化ができるようになっています。

> **💡 ヒント**: AIの応答が途中で止まった場合は「続きを表示して」「止まってるよ」と入力すると再開します。これはCursorの仕様で、故障ではありません。

---

🎯 準備チェック

まずは準備が整っているか確認しましょう。

**AskQuestionの設定:**

{
  "title": "🎯 セッション開始前の確認",
  "questions": [{
    "id": "readiness",
    "prompt": "準備はできていますか?",
    "options": [
      {"id": "ready", "label": "準備OK!始めましょう"},
      {"id": "check_prereq", "label": "前提条件を確認したい"},
      {"id": "view_html", "label": "先に教材ページを見たい"},
      {"id": "different_lesson", "label": "別のレッスンに移動したい"}
    ]
  }]
}

(ready → Step 1へ) (check_prereq → 前提条件の確認を実行) (view_html → 教材ページのパスを案内) (different_lesson → モジュール一覧を表示)

---

🚀 Step 1: スプレッドシートアクセス

AskUserQuestion(AskQuestion)で「このまま進める / 例だけ確認 / スキップ」を選べます。

**AskQuestionの設定例:**

{
  "title": "🚀 Step 1: スプレッドシートアクセス",
  "questions": [{
    "id": "step_action",
    "prompt": "このステップをどうしますか?",
    "options": [
      {"id": "practice", "label": "このまま進める"},
      {"id": "review", "label": "例だけ確認する"},
      {"id": "skip", "label": "スキップする"}
    ]
  }]
}

**選択後の案内(例)**: 入力内容:

gas-example ディレクトリに Sheets.gs ファイルを作成し、以下の内容を記述してください:

function getActiveSpreadsheet() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  if (!ss) {
    Logger.log("アクティブなスプレッドシートがありません。新規作成してください。");
    return null;
  }
  Logger.log("スプレッドシート: " + ss.getName());
  Logger.log("スプレッドシートID: " + ss.getId());
  return ss;
}

function getAllSheets() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  if (!ss) return [];

  const sheets = ss.getSheets();
  Logger.log("全シート数: " + sheets.length);

  sheets.forEach(sheet => {
    Logger.log("- " + sheet.getName() + " (" + sheet.getLastRow() + "行)");
  });

  return sheets;
}

clasp push で同期してください。

**期待される結果**: Sheets.gs がGoogleドライブに同期されます。

---

🚀 Step 2: データ読み取り機能

AskUserQuestion(AskQuestion)で「このまま進める / 例だけ確認 / スキップ」を選べます。

**AskQuestionの設定例:**

{
  "title": "🚀 Step 2: データ読み取り機能",
  "questions": [{
    "id": "step_action",
    "prompt": "このステップをどうしますか?",
    "options": [
      {"id": "practice", "label": "このまま進める"},
      {"id": "review", "label": "例だけ確認する"},
      {"id": "skip", "label": "スキップする"}
    ]
  }]
}

**選択後の案内(例)**: 入力内容:

Sheets.gs に以下のデータ読み取り関数を追加してください:

function getDataRange(sheetName, range) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);
  if (!sheet) {
    Logger.log("シートが見つかりません: " + sheetName);
    return [];
  }

  const data = sheet.getRange(range).getValues();
  Logger.log("データ取得: " + range + " (" + data.length + "行)");
  return data;
}

function getAllData(sheetName) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);
  if (!sheet) return [];

  const lastRow = sheet.getLastRow();
  const lastColumn = sheet.getLastColumn();

  if (lastRow < 1) {
    Logger.log("データがありません");
    return [];
  }

  return sheet.getRange(1, 1, lastRow, lastColumn).getValues();
}

clasp push で同期してください。

**期待される結果**: スプレッドシートからデータを読み取る関数が追加されます。

---

🚀 Step 3: データ書き込み機能

AskUserQuestion(AskQuestion)で「このまま進める / 例だけ確認 / スキップ」を選べます。

**AskQuestionの設定例:**

{
  "title": "🚀 Step 3: データ書き込み機能",
  "questions": [{
    "id": "step_action",
    "prompt": "このステップをどうしますか?",
    "options": [
      {"id": "practice", "label": "このまま進める"},
      {"id": "review", "label": "例だけ確認する"},
      {"id": "skip", "label": "スキップする"}
    ]
  }]
}

**選択後の案内(例)**: 入力内容:

Sheets.gs に以下のデータ書き込み関数を追加してください:

function writeSingleCell(sheetName, cell, value) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);
  if (!sheet) {
    Logger.log("シートが見つかりません: " + sheetName);
    return false;
  }

  sheet.getRange(cell).setValue(value);
  Logger.log("セル書き込み: " + cell + " = " + value);
  return true;
}

function appendRow(sheetName, rowData) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);
  if (!sheet) {
    Logger.log("シートが見つかりません: " + sheetName);
    return false;
  }

  sheet.appendRow(rowData);
  Logger.log("行追加: " + rowData.join(", "));
  return true;
}

function writeDataRange(sheetName, startCell, data) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);
  if (!sheet) return false;

  const rows = data.length;
  const cols = data[0].length;
  const range = sheet.getRange(startCell).offset(0, 0, rows, cols);
  range.setValues(data);

  Logger.log("範囲書き込み完了: " + rows + "行 x " + cols + "列");
  return true;
}

clasp push で同期してください。

**期待される結果**: スプレッドシートへのデータ書き込み関数が追加されます。

---

🚀 Step 4: レポート生成機能

AskUserQuestion(AskQuestion)で「このまま進める / 例だけ確認 / スキップ」を選べます。

**AskQuestionの設定例:**

{
  "title": "🚀 Step 4: レポート生成機能",
  "questions": [{
    "id": "step_action",
    "prompt": "このステップをどうしますか?",
    "options": [
      {"id": "practice", "label": "このまま進める"},
      {"id": "review", "label": "例だけ確認する"},
      {"id": "skip", "label": "スキップする"}
    ]
  }]
}

**選択後の案内(例)**: 入力内容:

Sheets.gs に以下のレポート生成関数を追加してください:

function generateSummaryReport(sourceSheetName, reportSheetName) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName(sourceSheetName);
  let reportSheet = ss.get
Read more
Ships withai-agent-camp

AI Agent Training for Non-Engineers - Complete Guide to Claude Code / Cursor / Codex ### ⚠️ Before you clone Official repository (maintained by the authors): Running AI agents from this repo grants them shell, file-write, and external-API permissions on your

Get the whole plugin