/start-12-5
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-12-5
Context preview
What this command does when you run it.
Lesson command
Command definition
start-12-5.mddescription: "Lesson command"
chapter: "courses/aiagent/lesson03-core/module12-notion"
duration: "約25分"
prerequisites: ["start-12-4"]
level: "intermediate"
tags: ["notion", "ncli", "update", "write"]
nonInteractiveMode: deferred
🎓 Lesson 12-5: 書き込みと更新
📍 このセッションでやること
**Lesson 12-5: 書き込みと更新** へようこそ!
| 項目 | 内容 | |------|------| | ゴール | ncli で既存のNotionページ・DBエントリを更新し、ページの移動・編集を行う | | 所要時間 | 約25分 | | 使うスキル | ncli (Notion CLI) | | 前提条件 | Lesson 12-4 完了(ページ・DB作成ができる状態) |
**このセッションの流れ:** 1. サンドボックスページの準備 2. プロパティの更新 3. 本文の追記・編集 4. ページの移動 5. 変更の検証
セッション終了時には、既存のNotionコンテンツを自由に更新・編集できるようになっています。
> **💡 ヒント**: AIの応答が途中で止まった場合は「続きを表示して」「止まってるよ」と入力すると再開します。
---
🎯 準備チェック
まずは準備が整っているか確認しましょう。
**AskQuestionの設定:**
{
"title": "🎯 セッション開始前の確認",
"questions": [{
"id": "readiness",
"prompt": "準備はできていますか?",
"options": [
{"id": "ready", "label": "準備OK!始めましょう"},
{"id": "check_prereq", "label": "前提条件を確認したい"},
{"id": "different_lesson", "label": "別のレッスンに移動したい"}
]
}]
}(ready → Step 1へ) (check_prereq → Lesson 12-4 で作成したページ・DBが存在するか確認) (different_lesson → モジュール一覧を表示)
---
🚀 Step 1: サンドボックスページの準備
**AskQuestionの設定例:**
{
"title": "🚀 Step 1: サンドボックスページの準備",
"questions": [{
"id": "step_action",
"prompt": "このステップをどうしますか?",
"options": [
{"id": "practice", "label": "このまま進める"},
{"id": "review", "label": "例だけ確認する"},
{"id": "skip", "label": "スキップする(既存ページを使う)"}
]
}]
}**AIが実行すること:**
1. 更新テスト用のサンドボックスページを作成:
ncli page create --title "更新テスト用サンドボックス" --body "# 初期コンテンツ
このページは ncli の更新テスト用です。
## セクション1
- 項目A
- 項目B
## セクション2
ここに追記していきます。"
2. 作成されたページのIDとURLを記録する。
3. テスト用のサブページも作成(移動テスト用):
ncli page create --title "移動テスト用ページ" --body "このページを別の場所に移動するテストです。"
4. Lesson 12-4 で作成したタスク管理DBのURLも確認:
ncli search "タスク管理"
**期待される結果**: サンドボックスページとサブページが作成され、テスト準備が完了する。
---
🚀 Step 2: プロパティの更新(ncli page update)
**AskQuestionの設定例:**
{
"title": "🚀 Step 2: プロパティの更新",
"questions": [{
"id": "step_action",
"prompt": "このステップをどうしますか?",
"options": [
{"id": "practice", "label": "このまま進める"},
{"id": "review", "label": "例だけ確認する"},
{"id": "skip", "label": "スキップする"}
]
}]
}**AIが実行すること:**
1. まず更新前の状態を確認:
ncli fetch <タスクページID>
2. タスク管理DBのエントリを更新(ステータス変更):
ncli page update <タスクページID> --prop "Status=Done"
3. 複数プロパティを同時に更新:
ncli page update <タスクページID> --prop "Status=InProgress" --prop "Priority=High"
4. 更新後の状態を確認して変更前後を比較:
ncli fetch <タスクページID>
5. 変更前後の比較結果を表示:
| プロパティ | 変更前 | 変更後 | |-----------|--------|--------| | Status | Open | InProgress | | Priority | Medium | High |
**期待される結果**: プロパティが正しく更新され、変更前後の差分が確認できる。
---
🚀 Step 3: 本文の追記・編集
**AskQuestionの設定例:**
{
"title": "🚀 Step 3: 本文の追記・編集",
"questions": [{
"id": "step_action",
"prompt": "このステップをどうしますか?",
"options": [
{"id": "practice", "label": "このまま進める"},
{"id": "review", "label": "例だけ確認する"},
{"id": "skip", "label": "スキップする"}
]
}]
}**AIが実行すること:**
1. サンドボックスページに本文を追記:
ncli page update <サンドボックスページID> --body "## 追記セクション
以下は ncli page update で追記した内容です。
- 追記項目1: $(date +%Y-%m-%d_%H:%M)
- 追記項目2: 更新テスト完了"
2. 追記後の内容を確認:
ncli fetch <サンドボックスページID>
3. タイトルの変更も試す:
ncli page update <サンドボックスページID> --title "更新テスト用サンドボックス(編集済み)"
4. パイプ入力で長文を追記:
echo "## 自動生成セクション
このセクションはパイプ経由で追記されました。
更新日時: $(date)" | ncli page update <サンドボックスページID> --body -
5. 最終的な状態を確認し、変更履歴を整理して表示する。
**期待される結果**: ページの本文が追記・編集され、タイトルも変更できる。
---
🚀 Step 4: ページの移動(ncli page move)
**AskQuestionの設定例:**
{
"title": "🚀 Step 4: ページの移動",
"questions": [{
"id": "step_action",
"prompt": "このステップをどうしますか?",
"options": [
{"id": "practice", "label": "このまま進める"},
{"id": "review", "label": "例だけ確認する"},
{"id": "skip", "label": "スキップする"}
]
}]
}**AIが実行すること:**
1. 移動前のページの親を確認:
ncli fetch <移動テスト用ページID> --json
2. ページを別の場所に移動:
ncli page move <移動テスト用ページID> --to <サンドボックスページURL>
3. 移動後の状態を確認:
ncli fetch <移動テスト用ページID> --json
4. 移動結果を報告:
- 移動前の親ページ
- 移動後の親ページ
- ページのURLが変わったかどうか
5. Notionブラウザでサイドバーを確認し、ページが正しい場所に移動したか確認するよう案内する。
**補足**: ページを移動すると、そのページの子ページも一緒に移動します。重要なページを移動する前は、元の位置を記録しておくことをお勧めします。
**期待される結果**: ページが指定した親ページの下に移動する。
---
🚀 Step 5: 変更の検証(ncli fetch で確認)
**AskQuestionの設定例:**
{
"title": "🚀 Step 5: 変更の検証",
"questions": [{
"id": "step_action",
"prompt": "このステップをどうしますか?",
"options": [
{"id": "practice", "label": "このまま進める"},
{"id": "review", "label": "例だけ確認する"},
{"id": "skip", "label": "スキップする"}
]
}]
}**AIが実行すること:**
1. このレッスンで行った全変更を一覧で確認:
ncli fetch <サンドボックスページURL>
2. タスク管理DBの最新状態を取得:
ncli db query <タスク管理DB-URL>
3. 変更サマリーレポートを作成:
# 変更サマリー
## ページ更新
- サンドボックスページ: タイトル変更、本文追記
- 移動テスト用ページ: 親ページ変更
## DB更新
- タスク1: Status Open → InProgress, Priority Medium → High
- タスク2: (変更内容)
## ファイル操作
- 追記: X回
- 移動: X回
4. サマリーを `output/notion_update_summary.md` に保存する。
5. 受講者にNotionブラウザでの確認を案内し、CLIとブラウザの表示が一致するか確認してもらう。
**期待される結果**: 全変更が正しく反映され、サマリーレポートが生成される。
---
⚠️ よくあるトラブルと解決方法
**AskQuestionの設定例:**
{
"title": "トラブル内容を選択",
"questions": [{
"id": "trouble",
"prompt": "当てはまる内容を1つ選んでください",
"options": [
{"id": "trouble_1", "label": "page update でプロパティが更新されない"},
{"id": "trouble_2", "label": "本文の追記が上書きになってしまう"},
{"id": "trouble_3", "label": "page move で Permission denied エラー"},
{"id": "trouble_4", "label": "更新後に fetch しても変更が反映されない"}
]
}]
}トラブル1: page update でプロパティが更新されない
**原因**: プロパティ名または値の指定が間違っている **解決方法**:
以下を確認して
Read more
description: "Lesson command" chapter: "courses/aiagent/lesson03-core/module12-notion" duration: "約25分" prerequisites: ["start-12-4"] level: "intermediate" tags: ["notion", "ncli", "update", "write"] nonInteractiveMode: deferred
🎓 Lesson 12-5: 書き込みと更新
📍 このセッションでやること
**Lesson 12-5: 書き込みと更新** へようこそ!
| 項目 | 内容 | |------|------| | ゴール | ncli で既存のNotionページ・DBエントリを更新し、ページの移動・編集を行う | | 所要時間 | 約25分 | | 使うスキル | ncli (Notion CLI) | | 前提条件 | Lesson 12-4 完了(ページ・DB作成ができる状態) |
**このセッションの流れ:** 1. サンドボックスページの準備 2. プロパティの更新 3. 本文の追記・編集 4. ページの移動 5. 変更の検証
セッション終了時には、既存のNotionコンテンツを自由に更新・編集できるようになっています。
> **💡 ヒント**: AIの応答が途中で止まった場合は「続きを表示して」「止まってるよ」と入力すると再開します。
---
🎯 準備チェック
まずは準備が整っているか確認しましょう。
**AskQuestionの設定:**
{
"title": "🎯 セッション開始前の確認",
"questions": [{
"id": "readiness",
"prompt": "準備はできていますか?",
"options": [
{"id": "ready", "label": "準備OK!始めましょう"},
{"id": "check_prereq", "label": "前提条件を確認したい"},
{"id": "different_lesson", "label": "別のレッスンに移動したい"}
]
}]
}(ready → Step 1へ) (check_prereq → Lesson 12-4 で作成したページ・DBが存在するか確認) (different_lesson → モジュール一覧を表示)
---
🚀 Step 1: サンドボックスページの準備
**AskQuestionの設定例:**
{
"title": "🚀 Step 1: サンドボックスページの準備",
"questions": [{
"id": "step_action",
"prompt": "このステップをどうしますか?",
"options": [
{"id": "practice", "label": "このまま進める"},
{"id": "review", "label": "例だけ確認する"},
{"id": "skip", "label": "スキップする(既存ページを使う)"}
]
}]
}**AIが実行すること:**
1. 更新テスト用のサンドボックスページを作成:
ncli page create --title "更新テスト用サンドボックス" --body "# 初期コンテンツ このページは ncli の更新テスト用です。 ## セクション1 - 項目A - 項目B ## セクション2 ここに追記していきます。"
2. 作成されたページのIDとURLを記録する。
3. テスト用のサブページも作成(移動テスト用):
ncli page create --title "移動テスト用ページ" --body "このページを別の場所に移動するテストです。"
4. Lesson 12-4 で作成したタスク管理DBのURLも確認:
ncli search "タスク管理"
**期待される結果**: サンドボックスページとサブページが作成され、テスト準備が完了する。
---
🚀 Step 2: プロパティの更新(ncli page update)
**AskQuestionの設定例:**
{
"title": "🚀 Step 2: プロパティの更新",
"questions": [{
"id": "step_action",
"prompt": "このステップをどうしますか?",
"options": [
{"id": "practice", "label": "このまま進める"},
{"id": "review", "label": "例だけ確認する"},
{"id": "skip", "label": "スキップする"}
]
}]
}**AIが実行すること:**
1. まず更新前の状態を確認:
ncli fetch <タスクページID>
2. タスク管理DBのエントリを更新(ステータス変更):
ncli page update <タスクページID> --prop "Status=Done"
3. 複数プロパティを同時に更新:
ncli page update <タスクページID> --prop "Status=InProgress" --prop "Priority=High"
4. 更新後の状態を確認して変更前後を比較:
ncli fetch <タスクページID>
5. 変更前後の比較結果を表示:
| プロパティ | 変更前 | 変更後 | |-----------|--------|--------| | Status | Open | InProgress | | Priority | Medium | High |
**期待される結果**: プロパティが正しく更新され、変更前後の差分が確認できる。
---
🚀 Step 3: 本文の追記・編集
**AskQuestionの設定例:**
{
"title": "🚀 Step 3: 本文の追記・編集",
"questions": [{
"id": "step_action",
"prompt": "このステップをどうしますか?",
"options": [
{"id": "practice", "label": "このまま進める"},
{"id": "review", "label": "例だけ確認する"},
{"id": "skip", "label": "スキップする"}
]
}]
}**AIが実行すること:**
1. サンドボックスページに本文を追記:
ncli page update <サンドボックスページID> --body "## 追記セクション 以下は ncli page update で追記した内容です。 - 追記項目1: $(date +%Y-%m-%d_%H:%M) - 追記項目2: 更新テスト完了"
2. 追記後の内容を確認:
ncli fetch <サンドボックスページID>
3. タイトルの変更も試す:
ncli page update <サンドボックスページID> --title "更新テスト用サンドボックス(編集済み)"
4. パイプ入力で長文を追記:
echo "## 自動生成セクション このセクションはパイプ経由で追記されました。 更新日時: $(date)" | ncli page update <サンドボックスページID> --body -
5. 最終的な状態を確認し、変更履歴を整理して表示する。
**期待される結果**: ページの本文が追記・編集され、タイトルも変更できる。
---
🚀 Step 4: ページの移動(ncli page move)
**AskQuestionの設定例:**
{
"title": "🚀 Step 4: ページの移動",
"questions": [{
"id": "step_action",
"prompt": "このステップをどうしますか?",
"options": [
{"id": "practice", "label": "このまま進める"},
{"id": "review", "label": "例だけ確認する"},
{"id": "skip", "label": "スキップする"}
]
}]
}**AIが実行すること:**
1. 移動前のページの親を確認:
ncli fetch <移動テスト用ページID> --json
2. ページを別の場所に移動:
ncli page move <移動テスト用ページID> --to <サンドボックスページURL>
3. 移動後の状態を確認:
ncli fetch <移動テスト用ページID> --json
4. 移動結果を報告:
- 移動前の親ページ
- 移動後の親ページ
- ページのURLが変わったかどうか
5. Notionブラウザでサイドバーを確認し、ページが正しい場所に移動したか確認するよう案内する。
**補足**: ページを移動すると、そのページの子ページも一緒に移動します。重要なページを移動する前は、元の位置を記録しておくことをお勧めします。
**期待される結果**: ページが指定した親ページの下に移動する。
---
🚀 Step 5: 変更の検証(ncli fetch で確認)
**AskQuestionの設定例:**
{
"title": "🚀 Step 5: 変更の検証",
"questions": [{
"id": "step_action",
"prompt": "このステップをどうしますか?",
"options": [
{"id": "practice", "label": "このまま進める"},
{"id": "review", "label": "例だけ確認する"},
{"id": "skip", "label": "スキップする"}
]
}]
}**AIが実行すること:**
1. このレッスンで行った全変更を一覧で確認:
ncli fetch <サンドボックスページURL>
2. タスク管理DBの最新状態を取得:
ncli db query <タスク管理DB-URL>
3. 変更サマリーレポートを作成:
# 変更サマリー ## ページ更新 - サンドボックスページ: タイトル変更、本文追記 - 移動テスト用ページ: 親ページ変更 ## DB更新 - タスク1: Status Open → InProgress, Priority Medium → High - タスク2: (変更内容) ## ファイル操作 - 追記: X回 - 移動: X回
4. サマリーを `output/notion_update_summary.md` に保存する。
5. 受講者にNotionブラウザでの確認を案内し、CLIとブラウザの表示が一致するか確認してもらう。
**期待される結果**: 全変更が正しく反映され、サマリーレポートが生成される。
---
⚠️ よくあるトラブルと解決方法
**AskQuestionの設定例:**
{
"title": "トラブル内容を選択",
"questions": [{
"id": "trouble",
"prompt": "当てはまる内容を1つ選んでください",
"options": [
{"id": "trouble_1", "label": "page update でプロパティが更新されない"},
{"id": "trouble_2", "label": "本文の追記が上書きになってしまう"},
{"id": "trouble_3", "label": "page move で Permission denied エラー"},
{"id": "trouble_4", "label": "更新後に fetch しても変更が反映されない"}
]
}]
}トラブル1: page update でプロパティが更新されない
**原因**: プロパティ名または値の指定が間違っている **解決方法**:
以下を確認して
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
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

