117 lines
3.4 KiB
Markdown
117 lines
3.4 KiB
Markdown
# Hooks - Claude Codeフック集
|
||
|
||
Claude Codeのセッションやツール実行時に自動的に実行されるフックスクリプト集です。
|
||
|
||
## 利用可能なフック
|
||
|
||
### start-session.js
|
||
**イベント**: SessionStart
|
||
**目的**: セッション開始時に動作モードの設定を促す
|
||
|
||
セッション開始時にmode_listの実行と適切なモードの有効化を促します。
|
||
セッションのソースタイプ(startup/resume/clear/compact)に応じて適切な指示を提供します。
|
||
これにより、コンテキストリセット後も一貫した作業スタイルを維持できます。
|
||
|
||
### post-tool-use.sh
|
||
**イベント**: PostToolUse (Bashツール限定)
|
||
**目的**: cdコマンド実行後の現在ディレクトリをコンテキストに追加
|
||
|
||
Bashツールで`cd`コマンドが実行された際に、移動後の現在ディレクトリを`[cwd: /path/to/dir]`形式で
|
||
コンテキストに追加します。これにより、ディレクトリ移動の追跡が容易になります。
|
||
|
||
## フックの仕組み
|
||
|
||
### 実行フロー
|
||
1. Claude Codeが特定のイベント(SessionStart、PostToolUse等)を検出
|
||
2. `~/.claude/settings.json`のmatcherパターンに一致するか確認
|
||
3. 一致した場合、指定されたコマンドを実行
|
||
4. フックスクリプトがJSON形式で追加コンテキストを出力
|
||
5. Claude Codeがコンテキストを会話に追加
|
||
|
||
### JSON出力形式
|
||
```json
|
||
{
|
||
"hookSpecificOutput": {
|
||
"hookEventName": "EventName",
|
||
"additionalContext": "追加するテキスト"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 新規フックの作成方法
|
||
|
||
### 1. スクリプトの作成
|
||
```bash
|
||
cat > hooks/my-hook.sh << 'EOF'
|
||
#!/bin/bash
|
||
echo '{
|
||
"hookSpecificOutput": {
|
||
"hookEventName": "MyEvent",
|
||
"additionalContext": "カスタムメッセージ"
|
||
}
|
||
}'
|
||
EOF
|
||
```
|
||
|
||
### 2. 実行権限の付与
|
||
```bash
|
||
chmod +x hooks/my-hook.sh
|
||
```
|
||
|
||
### 3. settings.jsonへの登録
|
||
```json
|
||
"EventName": [
|
||
{
|
||
"matcher": "パターン",
|
||
"hooks": [
|
||
{
|
||
"type": "command",
|
||
"command": "~/Develop/otolab/ai-agent-prompts/hooks/my-hook.sh"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
```
|
||
|
||
## 環境変数
|
||
|
||
フックスクリプト内で利用可能な環境変数(イベントによって異なる):
|
||
|
||
### PostToolUse
|
||
- `CLAUDE_CODE_TOOL_NAME` - 実行されたツール名(例: "Bash", "Read", "Write")
|
||
- `CLAUDE_CODE_TOOL_PARAMS` - ツールパラメータ(JSON文字列)
|
||
- `CLAUDE_CODE_TOOL_RESULT` - ツール実行結果(利用可能な場合)
|
||
|
||
## デバッグ方法
|
||
|
||
### ログファイルへの出力
|
||
```bash
|
||
#!/bin/bash
|
||
# デバッグ情報をログファイルに記録
|
||
echo "$(date): Hook executed" >> /tmp/hook-debug.log
|
||
echo "Tool: $CLAUDE_CODE_TOOL_NAME" >> /tmp/hook-debug.log
|
||
```
|
||
|
||
### 環境変数の確認
|
||
```bash
|
||
#!/bin/bash
|
||
# すべての環境変数を記録
|
||
env > /tmp/hook-env.txt
|
||
```
|
||
|
||
## ベストプラクティス
|
||
|
||
1. **軽量に保つ**: フックの実行時間を最小限に
|
||
2. **エラーハンドリング**: 失敗してもセッションを妨げない
|
||
3. **条件分岐**: 必要な場合のみ出力を生成
|
||
4. **ログ記録**: デバッグ用のログは別ファイルに
|
||
|
||
## 注意事項
|
||
|
||
- フックスクリプトの出力はJSON形式である必要があります
|
||
- 不正なJSON出力はエラーになる可能性があります
|
||
- matcherパターンは正確に設定してください
|
||
- 設定変更後はClaude Codeの再起動が必要です
|
||
|
||
---
|
||
**作成**: 2025年10月6日 |