第6章 · Claude Code Advanced
Hooks で振る舞いを制御する
Hooks
→ で次のスライド · F でフルスクリーン · N で講師ノート · Esc で終了
重要キーワード
Hook
フック
イベント発生時に実行されるシェルコマンド
PreToolUse
ツール実行前
Claude がツールを呼ぶ直前のイベント
PostToolUse
ツール実行後
ツール実行直後のイベント
Exit Code
終了コード
0=成功 / 2=ブロック / その他=警告
Hooks (フック)
複雑な推論を要するタスクでは、Claude に **「考えながら答える」** よう促すと正答率が上がります。
質問を解く前に、ステップバイステップで思考過程を <thinking>...</thinking> に書いてください。
最終回答だけを <answer>...</answer> に書いてください。
Extended Thinking (拡張思考) との関係
Claude Opus 4.7 / Sonnet 4.6 などには Extended Thinking モードがあり、 モデル内部で長い思考連鎖を行ってから回答します。 プロンプトで明示的に CoT を書く代わりに、API パラメータでthinking を有効化できます。
client.messages.create(
model="claude-opus-4-7",
max_tokens=8000,
thinking={"type": "enabled", "budget_tokens": 4000},
messages=[...],
)
CoT を書くべきとき / 書くべきでないとき
✅ 書くべき: - 数学・論理パズル - 多段の推論を要する分析 - バグ調査などの探索 - 複雑な分類タスク ❌ 書かなくていい: - 単純な分類・抽出 (むしろノイズになる) - レイテンシが厳しいリアルタイム応答 - 大量バッチ処理 (コスト爆増)推論を見せる vs 見せない
ユーザーに CoT 部分を見せない 設計が一般的です。XML タグで分離してから抽出。import re
m = re.search(r"<answer>(.*?)</answer>", text, re.DOTALL)
final = m.group(1).strip() if m else text
CoT を試す
実際に CoT 有無で答えが変わるか比べましょう。 @@TRY_0@@ @@TRY_1@@本番運用パターン集 (コピペで使える)
パターン 1: 編集後に変更ファイルだけフォーマット (高速)
「全プロジェクトを毎回フォーマット」は遅すぎる。変更ファイルだけ に絞る:
wzxhzdk:0
→ 編集された そのファイルだけ ruff format が走る。100 ms 以内で終わる。
パターン 2: シークレット流出をブロック (PreToolUse)
.env や鍵ファイルへの 書き込み・読み込み を未然にブロック:
.claude/scripts/guard-secrets.sh:
wzxhzdk:1
settings.json:
wzxhzdk:2
→ Claude が .env を編集しようとした瞬間に止まり、stderr の文言を見て自己修正を試みる。
パターン 3: 全プロンプトをログに残す (監査)
wzxhzdk:3
→ 全プロンプトが klzzwxh:0007 に記録される。コンプライアンス要件のある現場で必須。
パターン 4: セッション終了時に WIP コミット
「Claude Code を閉じる前に必ず checkpoint」を強制:
wzxhzdk:4
→ 未コミット変更があればセッション終了時に自動 commit。作業ロスト防止。
パターン 5: 危険 git コマンドの追加ガード
PreToolUse で Bash を Inspect:
wzxhzdk:5
Hooks デバッグのコツ
/hooksで現在登録されている hook を確認- 失敗時は
~/.claude/logs/hooks.logに stderr が記録される (環境による) commandの中でset -xを入れると実行コマンドが見える- 開発中は
echoで$CLAUDE_TOOL_INPUT_JSONを出力し、構造を確認
Hands-on Exercise
演習: 編集後フォーマッタを Hook で強制
Python プロジェクトで Edit / Write 直後に ruff format が走る Hook を設定してください。
.claude/settings.jsonを編集 (もしくは新規作成)- PostToolUse + matcher "Edit|Write"
- command に
ruff format $CLAUDE_PROJECT_DIRを設定 - Claude Code セッションで何かファイルを編集し、自動フォーマットを確認
Hands-on Exercise
演習: 危険コマンドブロックの Hook
Bash ツール呼び出しで rm -rf が含まれていたらブロックする PreToolUse Hook を作ってください。
Hook スクリプト (bash) を .claude/scripts/guard.sh に置き、settings.json から呼び出します。
🎉
まとめ
お疲れ様でした!