Upgrade to Pro — share decks privately, control downloads, hide ads and more …

hookで自作する Claude Code の「実況ボード」

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

hookで自作する Claude Code の「実況ボード」

Claude Codeが随所随所で何してるのかを見える化した記録と手順の共有

Avatar for Shinya Saita

Shinya Saita

August 26, 2026

More Decks by Shinya Saita

Other Decks in Technology

Transcript

  1. Claude Code Meetup Osaka / Claudeはいま、何をしているのか 相棒はいま、 何をしているのか hookで自作する Claude

    Code の「実況ボード」 〜 ロギングと画面への反映 〜 斉田 真也 Claude Code Meetup Osaka / 2026.08.26 <LT 3回目> 斉田 真也 @ Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 1
  2. 自己紹介 斉田 真也(さいた しんや) 株式会社ラクスのバックエンドエンジニア Markdownエディタ Bokuchi を開発 趣味:ものづくり全般 /

    カードマジック Claude Codeは 公私ともに 頼る相棒 この登壇は3回目 ①失敗の資産化、②珍プレー好プレー GitHub: shinya / X: @saita̲shinya 2
  3. 7

  4. 今日のアジェンダ 0. 導入 ギャルに言われて気づいた作業を把握出来ていない状況 1. 今の現状 待たされる側のリアルな状況の整理 2. どうやって 実現したかか

    hook 3本 + statusline、bash合計50行弱 3. 実際に仕込んで どう?なんか見えた? 実データから見えたもの 斉田 真也 @ Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 25
  5. Claude Code Meetup Osaka / Claudeはいま、何をしているのか ちなみにhookとは・・・? Claude Codeのイベント駆動でコマンドを自動実行する仕組み ①

    きっかけ Claude Codeの中で 何かが起きる (プロンプト送信・応答完了 な ど) ② 自動実行 ➡ settings.json に書いておいた コマンドが呼ばれる (shellスクリプトでOK) ③ 好きなこと ➡ 記録する・通知する・ 止める・情報を足す Gitの pre-commit と同じ発想:「〇〇したら△△する」を先に仕込んでおく 中身は bash でも python でも、HTTP に投げるでも何でもいい Claudeに「毎回ログ書いてね」とお願いするのではなく、仕組みで勝手に動くのがポイント。 プロンプトは守られる保証はないけど、hookはモデルを経由しないので必ず実行されます 27
  6. Claude Code Meetup Osaka / Claudeはいま、何をしているのか hookは「いつ」発火するのか イベント名 発火するタイミング SessionStart

    Claude Codeを起動・再開したとき UserPromptSubmit 人間がプロンプトを送った瞬間 PreToolUse / PostToolUse ツール(Bash・Edit…)を実行する直前 / 直後 MessageDisplay Claudeの発言が画面に表示されるたび Stop Claudeが応答を終えたとき Notification 権限確認などの通知が出たとき 今日 全部で 28種類(2026年8月時点)。上は代表的なものだけ 今日使うのは の3つ。役割は全部 「時刻とひとことを記録する」 だけ 28
  7. 書き方:settings.json に「いつ・何を」を書くだけ スクリプト側の約束事は3つだけ 1. 入力:標準入力にJSONが降ってくる( session_id イベント固有) cwd hook_event_name +

    2. 出力:exit 0 で正常、exit 2 で「止める」(stderrの内容がClaudeに返る) 3. 今日は記録するだけなので 読んで・書いて・exit 0。それ以上は使わない 29
  8. Claude Code Meetup Osaka / Claudeはいま、何をしているのか 実際のsettings.jsonの例 ~/.claude/settings.json (全プロジェクト共通) or

    .claude/settings.json (プロジェクト単位) 斉田 真也 @ Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 30
  9. Claude Code Meetup Osaka / Claudeはいま、何をしているのか Claudeが働いている間、 人間は別に作業を監視しているわけじゃない 自分の場合・・・ いま何をしているのか、わからない

    いつから待っているのか、覚えてない 離席して戻ると、途中経過ログがめっちゃ出てる(主にコード差分) 1ターンにかかった時間は、記録には残らない 厳密に言うと残ってるけど見やすいわけじゃない 斉田 真也 @ Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 32
  10. Claude Code Meetup Osaka / Claudeはいま、何をしているのか 「実況ボード」的なものとその履歴が…欲しい!! プロンプト入力欄のすぐ下(statusline)に、常時これが出ていてほしい: 知りたいこと 表示イメージ

    いつ頼んだか 依頼 15:55:12 いま何をしているか Claudeの途中報告の最新3件 いつ終わったか 完了 16:02:40 (=所要時間がわかる) つまり:ロギング(記録する)と画面への反映(見せる)のセットが欲しい!! 斉田 真也 @ Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 33
  11. 全体像:hookが書き、statuslineが読む UserPromptSubmit MessageDisplay Stop turn-start.sh 開始時刻を記録 turn-message.sh 途中報告を記録 turn-end.sh 終了時刻を記録

    ⬇ 書く 状態ファイル (セッション単位のJSON) turn-times/<session̲id>.json + 通年ログ turn-times.jsonl ⬇ 毎秒読む(refreshInterval: 1) statusline turn-statusline.sh が整形して常時表示 ⏱ 36
  12. Claude Code Meetup Osaka / Claudeはいま、何をしているのか 記録係:開始と終了にshellを仕込む UserPromptSubmit(依頼した瞬間に発火)→ turn-start.sh input=$(cat)

    sid=$(echo "$input" | jq -r '.session_id') echo "{\"start\":\"$(date +%H:%M:%S)\"}" > "$dir/$sid.json" # 状態ファイル echo "{...\"event\":\"start\"...}" >> ~/.claude/logs/turn-times.jsonl # 通年ログ Stop(応答完了で発火)→ turn-end.sh jq --arg t "$(date +%H:%M:%S)" '.end = $t' "$f" > "$f.tmp" && mv "$f.tmp" "$f" 道具は bash と jq だけ。標準入力にJSONが来るので、jqで拾って書くだけ 斉田 真也 @ Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 37
  13. Claude Code Meetup Osaka / Claudeはいま、何をしているのか 実況の肝:途中報告を拾うshellも仕込む MessageDisplay(Claudeの発言表示ごとに発火)→ turn-message.sh text=$(echo

    "$input" | jq -r '(.delta // .assistant_message // "") | split("\n")[0] | .[0:40]') # 冒頭40字だけ jq '.steps = (((.steps // []) + [{"t":$t,"m":$m}]) | .[-3:])' ... # 直近3件だけ保持 Claudeは作業の合間に「〜を確認します」と実況してくれる その冒頭40字を時刻つきでロギング → それも実況テロップになる 実況自体の件数はそこまで要らない 一旦直近3件あれば、「いま何してるか」はだいたいわかる 全容を見たかったらログの方を見たら良い 斉田 真也 @ Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 38
  14. 依頼の裏側で何が起きていたかがわかりやすくなった 時刻 所要 何をしていたか(実況ログより) 13:33:42 2:44 ▶ 依頼。ナレッジ参照・ログ記録・最新動向の調査 13:36:26 0:37

    5フレームワーク軸で mdレポート初版 を作成 → レビュー依頼 13:37:03 3:24 13:40:27 1:20 13:41:47 0:36 13:42:23 2:20 13:44:43 計11:01 ⏸ ターン終了。サブエージェントのレビュー待ち ▶ レビュー結果は要修正5件(高2・中2・低1)→ 全件反映 → 再レビューへ ⏸ ターン終了。再レビュー待ち ▶ 再レビュー「指摘なし(合格)」→ HTML版を作成 完成。md+HTML の2ファイル納品 内訳まで見える:実作業 約7分(3ターン)+ レビュー待ち 約4分 待ち時間が見えるので、レビューにかかる時間の見積もりがしやすくなる 43
  15. Claude Code Meetup Osaka / Claudeはいま、何をしているのか とりあえず直近の稼働6日間分を集計 蓄積されたログ わかったこと ターン数:94回

    1ターン中央値:約2.3分 途中報告:339件 平均:約4.6分 またいだ作業場所:13ディレクトリ 最長:61.9分(1時間!) 体感でしかなかった「Claudeの仕事の長さ」が、見える化+実測値になった 5分以下ならあまり深く考える必要はない 1時間級なら次回以降依頼するか検討する もしくは、お昼ゴハンを食べに行く 斉田 真也 @ Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 44
  16. Claude Code Meetup Osaka / Claudeはいま、何をしているのか 副次的効果として・・・ 実行に時間が考える部分について、あらかじめ自分で深堀りしてから渡すように 時間短縮も出来る 役割分担する基準も形成された

    早く出来そうに見えて意外と時間がかかる部分もある 軽微なコード修正はマジで自分で直したほうが速い トークンを解釈しているうちにgrepして直したほうが良い 斉田 真也 @ Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 45
  17. Claude Code Meetup Osaka / Claudeはいま、何をしているのか まとめ:hookの活用による行動の見える化 1. hookとは? →

    イベント駆動で自分のシェルを呼べる LLMの指示ではなくClaudeに必ず課すことのできる縛り・ルール 2. 何をしたか? → 待ち時間のブラックボックス化を阻止 いつ頼んだ・いま何してる・何分かかった、を常時見える化 3. どうやって → hookが書き、statuslineが毎秒読む bash+jqで合計50行弱。仕様は憶えず、生JSONを実測して作る 4. どう変わった → タスクの渡し方や待ち方が変わった 実況の結果で「任せるか」「自分でやるか」もしくは、離席判断もできる 斉田 真也 @ Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 47
  18. Claude Code Meetup Osaka / Claudeはいま、何をしているのか おまけ 斉田 真也 @

    Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 48
  19. Claude Code Meetup Osaka / Claudeはいま、何をしているのか 今回紹介したhookの仕込み方 GitHub Gistで手順を公開しています Windows版

    https://gist.github.com/shinya/6d2b5167189c08711f9a157c8da58f06 Mac版 https://gist.github.com/shinya/754503369efe7a76dcd3a939abfc3aef めんどくさかったら以下から辿れます https://gist.github.com/shinya 斉田 真也 @ Claude Code Meetup Osaka / GitHub: shinya / X: @saita̲shinya 49
  20. 50

  21. Bokuchi、ぜひ使ってみてください 軽量 Markdown エディター (Tauri製・OSS・無料) 軽い・速い ̶ Electronより省メモリ 完全オフライン ̶

    書いたものは外に出ない 数式(KaTeX)・図(Mermaid)・スライド(Marp)対応 このスライドも Bokuchi で 記述・発表 開発にはClaude Codeの力も借りながらやっています。 現在GitHub Star 98! 後もう少しで100・・・! 52