>100 Views
November 14, 26
スライド概要
はじめまして、yukikoと申します。 IT教育支援や、DX推進が可能です。 ◆ スキル LPIC レベル2 AI / Python Splunk BI(データ可視化・分析) ◆ その他 新卒・未経験の学生向けに、エンジニア転職を応援する資料を趣味で作成しています。 もしよろしければご活用ください。
うさうさ研修工房 | Udemy講座 受講者用 Claude Codeの拡張機能と /goal・フックで業務自動化 Skills・Subagents・MCP・Hooks・/goal | Windows / VSCode 対応
この講座で作るもの 「頼む」だけでなく「強制する」自動化 バグ入りコード テスト4件が失敗 ▶ スキル等 手順と役割分担 ▶ フック 危険・ズルを強制ブロック ▶ /goal 通るまで続ける 最後は結果を Notionに記録して、 1コマンドで「直す →記録」まで通す 題材:前の講座のダッシュボード(わざとバグを3か所入れてある) うさうさ研修工房 | Claude Code業務自動化講座 2
はじめに 対象・到達目標・前提 対象 到達目標 前提 Claude Codeを使い始めた 拡張機能を使い分けられる Windows・VSCode・Node.js 22 開発・DX・業務改善のエンジニア フックで安全な自動化を作れる 毎回同じ指示を出して疲れている人 /goalに測れる完了条件を書ける Claude Code(/goalは v2.1.139 以 上) Notionアカウント(記録の演習用) うさうさ研修工房 | Claude Code業務自動化講座 3
全体ロードマップ スロープ設計:知識 → 橋渡し → 実践 前半|知識編 1 2 3 4 全体地図 環境と安全 スキル・コマンド サブエージェント 拡張機能の使い分け 権限・最小権限 手順を資産に 役割分担とMCP 橋渡し:/goal を初めて使う(測れる小さなゴール) 後半|実践編 5 6 7 8 フック基礎 /goal 実践 組み合わせ 安全・コスト ブロック・検査 条件の書き方 一気通貫 止め方・運用 うさうさ研修工房 | Claude Code業務自動化講座 4
PART 1 前半|知識編 全体地図・安全・スキル・サブエージェント・MCP(Chapter 1〜4)
Chapter 1 | 全体地図 拡張機能の 6つの道具 道具 役割 いつ使う CLAUDE.md プロジェクトの常識を毎回伝える ルール・コマンド・禁止事項 スラッシュコマンド よく使う指示を 1コマンドに 定型の依頼を再利用したい スキル 手順と知識を必要なときに読ませる 作業の進め方を資産にしたい サブエージェント 別の文脈・限定した権限で作業 調査・確認を任せ、本流を汚さない フック 決まった場面でコマンドを必ず実行 ブロック・検査・通知を強制したい MCP 外部サービスにつなぐ Notionなど社外のツールを操作 うさうさ研修工房 | Claude Code業務自動化講座 6
Chapter 1 | 全体地図 「お願い」と「強制」は別物 お願い(確率的) 強制(確定的) 完了まで続ける プロンプト・CLAUDE.md・スキル フック・permissions /goal・Stopフック Claudeが読んで従う。守られないこ ともある コードや設定が必ず実行・拒否する 条件が満たされるまで、次のターン に進ませる 使い分けの合言葉:「必ず守らせたいこと」は、フックで強制する うさうさ研修工房 | Claude Code業務自動化講座 7
Chapter 1 | 全体地図 題材:バグ入りのダッシュボード 状態 npm test の結果 出発点(バグ入り) 62件中 4件失敗(3か所のバグ) ゴール 62件すべて成功。tests/ は変更しない • バグ1:終了日を含めない(期間の境界) • バグ2:0件の平均単価が 0 になる(null にすべき) • バグ3:空欄の金額を受け入れてしまう • テストは仕様。テストを書き換えて通すのは禁止(フックで強制) うさうさ研修工房 | Claude Code業務自動化講座 8
Chapter 1 | 全体地図 リポジトリの .claude/ を読む claude-code-automation-lab .claude/ settings.json hooks/ skills/ agents/ commands/ .mcp.json.example 権限とフックの設定 フックのスクリプト( Node.js) fix-failing-tests notion-test-recorder test-runner / code-reviewer fix-and-record / record-tests Notion MCP の設定例 うさうさ研修工房 | Claude Code業務自動化講座 • 全部、ファイルで管理(チームで共有できる) • コードと同じようにレビュー・履歴管理する • フックの設定は、人が読んで確認する 9
Chapter 2 | 環境と安全 セットアップ・チェックリスト 項目 確認方法 Node.js 22(LTS) node -v Claude Code claude --version(/goal は v2.1.139 以上) 演習リポジトリ npm install → npm test(4件失敗が正常) フックの単体テスト npm run test:hooks(15件成功) 信頼ダイアログ このフォルダで claude を起動し、内容を確認して承認 ※ 仕様や画面は更新される。迷ったら公式ドキュメントで最新を確認する うさうさ研修工房 | Claude Code業務自動化講座 10
Chapter 2 | 環境と安全 permissions:許可と拒否を決める .claude/settings.json • allow:毎回の確認なしで実行してよいもの { • deny:絶対に読ませない・実行させない • 最小権限:必要なものだけ許可する • ルールの書き方は更新されることがある "permissions": { "allow": [ "Bash(npm test)", "Bash(npx vitest run:*)", "Bash(git diff:*)" ], "deny": [ "Read(./.env)", "Read(./.env.*)" ] } } うさうさ研修工房 | Claude Code業務自動化講座 11
Chapter 2 | 環境と安全 守りを5層に重ねる 層 手段 この講座の例 許可 permissions の allow / deny .env を読ませない 実行前の検査 PreToolUse フック rm -rf・tests/ の書き換えをブロック 実行後の検査 PostToolUse フック 編集直後に速いテスト 完了の判定 Stopフック・/goal npm test が通るまで 人の確認 PRレビュー・git diff tests/ に変更がないこと うさうさ研修工房 | Claude Code業務自動化講座 12
Chapter 3 | スキルとコマンド スキル:手順を資産にする .claude/skills/fix-failing-tests/SKILL.md • description が「いつ使うか」の手がかり --name: fix-failing-tests description: 失敗しているテストを、テストを 書き換えずに、実装側を最小限で直して 通す手順。「npm test を通して」で使う。 --- • 原則・手順・やってはいけないこと・報告を書 く • 「通ったはず」ではなく、実行結果を見せさせ る ## 原則 - テストを書き換えない(直すのは js/) - 最小の変更で直す - 直したと言う前に npm test を実行して示す うさうさ研修工房 | Claude Code業務自動化講座 13
Chapter 3 | スキルとコマンド コマンド: 1語で呼び出す .claude/commands/fix-and-record.md • /fix-and-record と打つだけで実行 --description: テストが通るまで実装を直し、 結果をNotionに記録する --- • $ARGUMENTS に追加の指示を渡せる • スキルを組み合わせて呼び出せる 次の順で進めてください。 1. fix-failing-tests スキルの手順で、 npm test が通るまで実装を直す 2. npm run test:json で結果を出し、 notion-test-recorder の手順でNotionに記録 3. 直した内容と最終結果を報告 追加の指示:$ARGUMENTS うさうさ研修工房 | Claude Code業務自動化講座 14
Chapter 4 | サブエージェント・ MCP サブエージェント:役割と権限を絞る .claude/agents/test-runner.md • 別の文脈で動く=本流の会話を汚さない --name: test-runner description: テストを実行して、失敗したテストと 原因の候補を短く報告する専用エージェント。 コードは変更しない。 tools: Bash, Read, Grep, Glob --- • tools で道具を絞る(書き込み系を持たせな い) • 調査・確認・レビューを任せるのに向く あなたはテスト実行の担当です。 コードは変更しません。 ## 守ること - ファイルを編集・作成・削除しない - ログを丸ごと貼らない。要点だけ返す うさうさ研修工房 | Claude Code業務自動化講座 15
Chapter 4 | サブエージェント・ MCP
MCP:Notionにつなぐ
PowerShell / .mcp.json.example
•
登録後、Claude Code内で /mcp から認証
claude mcp add --transport http notion \
https://mcp.notion.com/mcp
•
認証画面でワークスペース名を必ず確認
•
許可するのは対象のDBだけ(最小権限)
•
前の講座の記録スキルと接続する
# または、プロジェクトの設定ファイル
{
"mcpServers": {
"notion": {
"type": "http",
"url": "https://mcp.notion.com/mcp"
}
}
}
うさうさ研修工房 | Claude Code業務自動化講座
16
橋渡し | 成功体験 /goal を初めて使う 1 2 3 小さな条件 状態を見る 止め方 1ターンで終わる、測れる条件から始 める 引数なしの /goal で、いまの目標を確 認 /goal clear で解除。まず止め方を知る 最初の /goal(バグを直す前の状態で) /goal npm test の失敗件数を表示して、4件であることを確認する ※ /goal は Claude Code v2.1.139 以上で使える うさうさ研修工房 | Claude Code業務自動化講座 17
PART 2 後半|実践編 フック・/goal・組み合わせ・安全(Chapter 5〜8)
Chapter 5 | フック基礎 フックは「標準入力の JSON → 終了コード」 終了コード / 出力 意味 0 成功。何もブロックしない( PreToolUseでも「承認」にはならない) 2(標準エラーに理由) ブロック。理由が Claude に返る(ブロックできるイベントのみ) 1 など ブロックにならない。ユーザーにエラーが見えるだけ 0 + JSON(decision: block) PostToolUse・Stop で、理由を Claude に返して続行させる • 入力:tool_name・tool_input・cwd・session_id などが標準入力にJSONで渡される • 置き場所:~/.claude/settings.json、.claude/settings.json、.claude/settings.local.json うさうさ研修工房 | Claude Code業務自動化講座 19
Chapter 5 | フック基礎
PreToolUse:危険なコマンドをブロック
.claude/hooks/block-dangerous.js
•
Bash の実行前に、コマンド文字列を検査
const RULES = [
[/\brm\s+(-[a-z]*r[a-z]*f|...)/i,
'rm -rf(再帰的な強制削除)'],
[/\bgit\s+push\b[^|;&]*(--force\b|\s-f\b)/i,
'git push --force(履歴の上書き)'],
[/\bnpm\s+publish\b/i, 'npm publish'],
];
for (const [pattern, label] of RULES) {
if (pattern.test(command)) {
console.error(`ブロックしました:${label}`);
process.exit(2);
}
}
process.exit(0);
•
終了コード2+理由で、Claudeに別の方法
を考えさせる
•
PowerShellの Remove-Item -Recurse
-Force も対象
うさうさ研修工房 | Claude Code業務自動化講座
20
Chapter 5 | フック基礎 PreToolUse:テストの書き換えを禁止 .claude/hooks/protect.config.json • 「テストを書き換えて通した」というズルを防 ぐ • 秘密情報・CI設定・フック自体も保護 • 設定を変えるだけで、ルールを足せる { "protected": [ { "pattern": "^tests/", "reason": "テストを書き換えて通すことは禁止" }, { "pattern": "(^|/)\\.env($|\\.)", "reason": "秘密情報" }, { "pattern": "^\\.github/workflows/", "reason": "CI設定は人がレビューする" }, { "pattern": "^\\.claude/(settings|hooks)", "reason": "自動化の設定を変更させない" } ] } うさうさ研修工房 | Claude Code業務自動化講座 21
Chapter 5 | フック基礎
PostToolUse:編集直後にテスト
.claude/hooks/post-edit-check.js
•
PostToolUse はもう実行済みなのでブロッ
クできない
•
代わりに decision:block のJSONで理由を
返す
•
失敗した行だけを要約して返す(ログは短く)
if (!/^js\/.+\.js$/.test(file)) process.exit(0);
const r = spawnSync(
'npx vitest run tests/unit --reporter=dot',
{ shell: true, timeout: 60_000, encoding: 'utf8' });
if (r.status === 0) process.exit(0);
const reason = `${file} の編集直後のテストが失敗`
+ '\n' + summarizeFailures(r.stdout + r.stderr);
process.stdout.write(
JSON.stringify({ decision: 'block', reason }));
うさうさ研修工房 | Claude Code業務自動化講座
22
Chapter 5 | フック基礎
フックは単体でテストできる
.claude/hooks/__tests__/hooks.test.js
•
const run = (script, input, env = {}) =>
spawnSync(process.execPath, [join(hooks, script)], {
input: JSON.stringify(input),
encoding: 'utf8', env: { ...process.env, ...env } });
npm run test:hooks(Node標準のテストラ
ンナー)
•
Claude Code を起動せずに、15件を確認
できる
•
フックもコード。テストを書いて守る
test('危険なコマンドは終了コード2でブロック', () => {
const r = run('block-dangerous.js',
bash('git push --force origin main'));
assert.equal(r.status, 2);
assert.match(r.stderr, /ブロックしました/);
});
うさうさ研修工房 | Claude Code業務自動化講座
23
Chapter 6 | /goal 実践 /goal とは:完了条件を 1つ置く できること 仕組み 注意 完了条件を1つ置くと、条件が満たさ れるまで、ターンをまたいで作業を続 ける。条件は最大4,000文字 セッション限定のプロンプト型Stopフッ クのラッパー。ターンが終わるたびに、 小型の高速モデル(既定はHaiku)が 条件を判定する 評価者が見るのは会話に出たものだ け。条件は「Claudeが出力に示せる 証拠」で書く。信頼ダイアログの承認 が必要 ※ v2.1.139 以上。仕様は更新されるので、公式ドキュメントで最新を確認する うさうさ研修工房 | Claude Code業務自動化講座 24
Chapter 6 | /goal 実践 良い条件の 4要素 要素 意味 例 終了状態 何が真になれば終わりか npm test が全件成功 確認方法 Claudeが証拠を出せる手段 コマンドを実行し、終了コードと件数を表示 制約 やってはいけないこと git diff --name-only に tests/ が出ない 安全上限 暴走を止める線 20ターンで止めて、未完了なら理由を報告 うさうさ研修工房 | Claude Code業務自動化講座 25
Chapter 6 | /goal 実践 悪い条件を、測れる条件に直す 悪い(測れない) 良い(測れる) テストをきれいに直して npm test が終了コード0で、成功件数が全テスト数と一致する コードを良くして npm test が通り、変更が js/ 内の3ファイル以内(git diff --stat) 全部終わるまで続けて …または20ターンに達したら止めて、残りを報告する 曖昧な条件は、終わらない・トークンを使いすぎる。必ず上限ターンを入れる うさうさ研修工房 | Claude Code業務自動化講座 26
Chapter 6 | /goal 実践 演習:4件の失敗を /goal で直す Claude Code /goal `npm test` が終了コード0で全件成功し、 `git diff --name-only` の出力に tests/ が 含まれていないこと。毎ターン、npm test の 件数と git diff の結果を表示すること。 20ターンで止めて、未完了なら理由を報告すること。 • 4要素がすべて入っている • テストを書き換えるとフックがブロックする • 途中で /goal で状態を見る • 終わったら git diff で tests/ が無事か確認 # 状態の確認 /goal # 解除 /goal clear うさうさ研修工房 | Claude Code業務自動化講座 27
Chapter 7 | 組み合わせ
Stopフック:確定的な完了ゲート
.claude/hooks/stop-gate.js
•
const r = spawnSync('npm test --silent',
{ shell: true, cwd, encoding: 'utf8' });
if (r.status === 0) process.exit(0); // 終わってよい
モデルでなく、スクリプトが判定=毎回同じ
結果
•
必ず上限回数を付ける(無限ループ防止)
•
有効化:settings.stopgate.example.json
を参考に追加
const count = readCount() + 1;
if (count > max) {
// 既定は3回
process.exit(0);
// 上限。人が確認する
}
writeCount(count);
process.stdout.write(JSON.stringify({
decision: 'block',
reason: `npm test がまだ失敗(${count}/${max}回目)` }));
うさうさ研修工房 | Claude Code業務自動化講座
28
Chapter 7 | 組み合わせ /loop・/goal・Stopフックの使い分け 手段 次のターンのきっかけ 終わりを決めるのは /loop 時間の間隔 人が止める/Claudeが完了と判断 /goal 前のターンの終了 小型モデルが条件を評価 Stopフック 前のターンの終了 自作スクリプト(確定的)またはプロンプト • /goal はセッション限定の手軽な近道。Stopフックは設定ファイルに置き、全セッションに効く • 毎回同じ結果にしたい確認(終了コード)はStopフック、柔軟な判断は /goal • 両方を有効にすると、どちらも毎ターン動く うさうさ研修工房 | Claude Code業務自動化講座 29
Chapter 7 | 組み合わせ 一気通貫:直す → 守る → 記録 /fix-and-record コマンドで開始 /goal / Stop 通るまで続ける ▶ fix-failing-tests ▶ npm test 手順(スキル) 全件成功 ▶ test-runner 確認(サブエージェント) ▶ notion-test-recorde ▶ ▶ r スキルで記録 フック ブロック+編集直後の検査 Notion テスト結果DB 拡張機能は、単独でなく「重ねて」使うと強い うさうさ研修工房 | Claude Code業務自動化講座 30
Chapter 8 | 安全・コスト・運用 フックは「任意のコマンドを実行できる設定」 信頼できる設定だけ 確認なしで動く場合 自分で書き換えさせない 他人のリポジトリの .claude/settings.json を、中身を読ま ずに信頼しない コミットされたフックは、非対話の実行 でも確認なしに動くことがある。PRで 必ずレビュー 設定とフック自体を保護する (protect.config.json) フックの設定変更は、コードの変更と同じ重さでレビューする うさうさ研修工房 | Claude Code業務自動化講座 31
Chapter 8 | 安全・コスト・運用 コストと「止め方」 状況 止め方 /goal を止めたい /goal clear(または /clear) 実行中の処理を止めたい Ctrl+C フックが暴走している 設定の hooks を外す/disableAllHooks Stopゲートが止まらない 上限回数で自動停止(STOP_GATE_MAX) • /goal はターンごとに評価も動く。曖昧な条件はトークンを使いすぎる • 目標ごとの予算上限は確認できていない→ 上限ターンを必ず入れる うさうさ研修工房 | Claude Code業務自動化講座 32
確認テストと効果測定 学んだ確認と、導入効果の測り方 確認テスト(例) 効果測定の指標 Q1. 「必ず守らせたい」ことは、どの道具で実現する? ・定型作業にかかる時間(導入前後) Q2. PostToolUseフックが失敗を伝える方法は? ・手戻り(テストの書き換え・誤操作)の件数 Q3. /goal の条件に必ず入れるものは? ・フックが止めた危険操作の件数 ・/goal の1回あたりのターン数 うさうさ研修工房 | Claude Code業務自動化講座 33
まとめ 任せきるために、守りを先に作る ① 必ず守らせたいことはフックで強制 ② /goal は測れる条件+上限ターン ③ フックの変更もレ ビュー | 次の一歩:自分の定型業務を1つ選んで自動化