第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 コマンドの追加ガード

PreToolUseBash を 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 を設定してください。

  1. .claude/settings.json を編集 (もしくは新規作成)
  2. PostToolUse + matcher "Edit|Write"
  3. command に ruff format $CLAUDE_PROJECT_DIR を設定
  4. Claude Code セッションで何かファイルを編集し、自動フォーマットを確認
▶ Playground を開いて実行
Hands-on Exercise

演習: 危険コマンドブロックの Hook

Bash ツール呼び出しで rm -rf が含まれていたらブロックする PreToolUse Hook を作ってください。

Hook スクリプト (bash) を .claude/scripts/guard.sh に置き、settings.json から呼び出します。

▶ Playground を開いて実行

理解度チェック

4 問のクイズで理解度を確認しましょう。

クイズを開く
🎉

まとめ

お疲れ様でした!