/start-10-3
Lesson command
$ npx -y skills add minicoohei/ai-agent-camp --agent claude-codeHow 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.mddescription: "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.getRead more
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.getAI 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
Other commands on ai-agent-camp.
- /check-setup.en
Top-level alias — see lesson/check-setup.en.md for the full body.
Open command - /check-setup.es
Alias de nivel superior — el cuerpo completo está en lesson/check-setup.es.md.
Open command - /check-setup
Top-level alias — see lesson/check-setup.md for the full body.
Open command - /check-security.en
Lesson command
Open command - /check-security.es
Lesson command
Open command - /check-security
Lesson command
Open command

