Claude Codeにhooks機能を追加しようとして .claude/settings.json
や .claude/settings.local.json
(以下、どちらも纏めて「設定ファイル」と記述)を直接編集する際は、以下の点に注意してください。
- Claude Codeを起動していない状態で設定ファイルを編集した場合
- 問題なし、Claude Codeを起動すればそのままhooks機能が有効化されている
- Claude Codeを起動している状態で設定ファイルを編集した場合
- Claude Codeを再起動する必要がある
- 複数セッション起動している場合は、一度全てのセッションを切断する
- ただし、再起動してもhooks機能が有効化されていない場合がある
- その時はClaude Codeを起動し、
/hooks
からコマンドを登録してあげる必要がある - もしかしたら初回は
/hooks
からの登録が必須かもしれない?
- その時はClaude Codeを起動し、
一部私の環境に依存している部分があるかも知れません。
困った時は /hooks
からのコマンド登録を一度試されることを推奨します。
公式ドキュメントに以下の記載があります。
構成の安全性
設定ファイル内のフックを直接編集しても、すぐには反映されません。
- 起動時にフックのスナップショットをキャプチャします
- セッション全体を通じてこのスナップショットを使用します
- フックが外部で変更された場合に警告します
- /hooks変更を適用するにはメニューでの確認が必要です
- これにより、悪意のあるフックの変更が現在のセッションに影響するのを防ぎます。
ということで、Claude Codeを起動している状態で設定ファイルを編集しても、hooksの更新がされません。
なので、Claude Codeを再起動する必要があります。
また、Claude Codeを起動していない状態で設定ファイルを編集した場合は、編集後の状態でhooksのスナップショットが取得されるため、立ち上げた段階から編集後のhooksが適用されているはずです。
注意点1.
Claude Codeを複数セッションを立ち上げているときは、すべてのセッションを切断することをお忘れなく…
私は2つ立ち上げたうちの1つだけセッションを切断した状態で設定ファイルを編集してしまって、全然設定が反映されなくて頭を抱えていました。
注意点2.
また、上記が原因なのかはわかりませんが、時には/hooks
からコマンドを登録しないと、設定ファイルをいくら編集しても全く反映されない、という事象にもぶつかりました。
上手く設定が反映されない時は、大人しく/hooks
からサイド設定し直す方が早そうです。
本当にhooksの設定ができているかを確認しましょう。
自分で設定した設定ファイルと、/hooks
コマンドの設定内容を見比べて、両者に同じ設定がされているかを確認してください。
例えば以下のような設定ファイルがあるとします。
.claude/settings.local.json
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "../script/slack-notify.sh \"Claude Code の作業が完了しました\""
}
]
}
],
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit",
"hooks": [
{
"type": "command",
"command": "../script/slack-notify.sh \"ファイルの編集が完了しました\""
}
]
}
],
"SubagentStop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "../script/slack-notify.sh \"タスクの実行が完了しました\""
}
]
}
]
}
}
上から、Stopイベント・PostToolUseイベント・SubagentStopイベントです。
これを確認していきます。
Claude Codeで/hooks
コマンドを実行すると、以下のような画面になります。
ここでまずは4. Stop
を選択します。
すると以下のように、Stopイベントに登録されているコマンドが確認できます。
2.はグローバル設定なので先程のjsonには含まれておらず、
3.としてローカル設定(=このディレクトリ配下で有効なhooks設定)のスクリプト実行コマンドが確認できます。
続いて、2. PostToolUse
を選択します。
すると以下のように、Matcherとcommand、両方の設定が確認できます。
↓
最後に5.SubagentStop
を確認します。
これは意図的に最初異なるパスを設定した状態でClaude Codeを起動し、その状態で設定ファイルを編集しました。
なので先ほどとは異なるパスのスクリプトを実行するように記載されています。
なので、Claude Codeを再起動します。/exit
から、再度ターミナルで claude
コマンドを実行してClaude Codeを起動します。
そして再度 /hooks
を実行。
再び5. SubagentStop
を確認すると、変更後の設定が反映されていました🙌
もし変更されていない場合は、1. + Add new hook...
から再度登録し直してみてください!
Views: 0