ClaudeCode のhooks 再入門 & CLAUDE.md 勝手に育てるやつについて
これをやりたい+同じタイミングでブログ記事(=作業ログ)を生成してほしい
Claude Code for VS code extension
- /hooks を打つと、hooks configuration が表示されて、Terminalで実行するように促される


- CLIじゃないとダメぽいのでCLIでやる
まずhooks試してみる。


設定の保存先は3つ。そうそう。
ユーザー設定1つと、プロジェクト設定2つ
.local付けるか否かで変わるん忘れとったわ

hooksの作成終わって、claudeに、「pwd コマンド使って」って言う

hooksで設定したbashコマンド実行されて、ログ吐き出されてる

ちなみに、以下が公式サイトのコマンドだけど、上のhooksの設定保存先に合わせて出力先は変える必要があるね
jq -r '"\(.tool_input.command) - \(.tool_input.description // "No description")"' >> ~/.claude/bash-command-log.txt
あと、このhooksは不要なので容量増えてくだけなので後で消す
次は、SessionEndで取り敢えず通知飛ばすか
cmd + k で検索欄開いて、アシスタントに聞くってやつで、notify-send って何?って聞いた

notify-send 自体は、Claude Code のドキュメントには詳しく説明されていません。これは Linux のデスクトップ通知システムの標準コマンド です。
Claude Code のドキュメントでは、Notification フックの例として使用されていますが、notify-send コマンド自体の説明はありません。Linux システムで利用可能な外部コマンドです。
うむ、そんなコマンド入ってないな
$ which notify
notifyd notifyutil
じゃあ次は、macでデスクトップ通知する方法探すか
てことで取り敢えずコマンド入れてみる
これが良さそう
$ brew install terminal-notifier
==> Auto-updating Homebrew..
...
$ which terminal-notifier
/opt/homebrew/bin/terminal-notifier
$ terminal-notifier -message "タスクが完了しました"

その前に、sound変更したい
この部分
$ terminal-notifier -title 'Claude Code' -subtitle '処理完了' -message 'すべてのタスクが終了しました' -sound default
defaultにしてる部分をmacの設定画面の通知音の名前に変えてみれば良いかも?てことで試す

$ terminal-notifier -title 'Claude Code' -subtitle '処理完了' -message 'すべてのタスクが終了しました' -sound Crystal
ん、なんか音違くね?同じCrystalなのに。
一応、ファイルの場所と言われる箇所見てみる
Crystalなくね?
$ ls /System/Library/Sounds/
Basso.aiff Blow.aiff Bottle.aiff Frog.aiff Funk.aiff Glass.aiff Hero.aiff Morse.aiff Ping.aiff Pop.aiff Purr.aiff Sosumi.aiff Submarine.aiff Tink.aiff
よくわかんないけど、macの設定画面で「Crystal」の音は、「Glass」というものと同じ音でした。(自分の耳がおかしくなければ)
なので、コマンドは以下になりそう👏
$ terminal-notifier -title 'Claude Code' -subtitle '処理完了' -message 'すべてのタスクが終了しました' -sound Glass
じゃあ気を取り直して話を戻して
hooksのSessionEndで、terminal-notifierを設定して、claudeを/exit したら通知来るかどうか確認する
前述と同じように、SessionEndに対して、hooksを作成していく

defaultの部分はGlassに後から、settings.local.jsonを書き換えました。

そしたらclaudeを/exitしてみる
$ claude
▐▛███▜▌ Claude Code v2.0.49
▝▜█████▛▘ Sonnet 4.5 · Claude Max
▘▘ ▝▝ ~/xxxxx
> /exit
⎿ Bye!
──────────────────────────────────────────────────────────────────────────────────────────────
>
──────────────────────────────────────────────────────────────────────────────────────────────
⏵⏵ accept edits on (shift+tab to cycle) Thinking off (tab to toggle)
ピロ〜〜〜〜ん🎵
はいキタ〜㊗️
よしよし、じゃあ、呼び出す処理を今回の本題の suggest-claude-md-hook.sh に変更する
最終こんな感じ
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
...
"hooks": {
"SessionEnd": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "bin/suggest-claude-md-hook.sh"
}
]
}
],
"PreCompact": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "bin/suggest-claude-md-hook.sh"
}
]
}
]
}
}
取り敢えず、第一目標はこんな感じに動いた。
「この内容をCLAUDE.mdに追記してください」のように指示してください。
動画内で、ターミナルが立ち上がっていた部分、claudeの別sessionで会話が残っているので、session-id探して立ち上げ直せば、claudeに指示を出すことはできそう
ちなみに、
- Claude Code で特定sessionを探すとき、claude -r [session-id] で続きから始めたい時に便利だったツール
- npx ccsearch@latest search "xxxxxx" とかで検索できるの便利だった