コンテンツにスキップ
Qiita Com Tateishi T Items 03529caccd796a8a8dcf

Claude Codeのフックで「自分専用セカンドブレイン」を作る ─ 10本超のフック構成と実装例

  • URL: https://qiita.com/tateishi-t/items/03529caccd796a8a8dcf
  • 日付: 2026-06-26
  • Tier: Tier 3
  • 要旨: Claude Codeのhooks機能を10本超・3層構造(global/project/project-local)・5カテゴリで構成した個人運用事例の詳細レポート。Stopフックでセッションを自動的にObsidian Vaultに保存する仕組み、PreToolUse(Read)でoffset/limit未指定時にsystemMessageで自己リマインドするフック、3層構造による設定分離の設計が主に紹介されている。自動push起因の.env.bakキー漏洩・launchdサンドボックスによるファイル生成失敗・フック過多による起動重化・ゾンビフックの発見という4件のアクシデント事例と対応も共有されている。

詳細

  • フックイベント: SessionStart・Stop・PreToolUse・PostToolUse・SubagentStop・Notification。matcherでツール名フィルタ可能
  • 3層構造:
    • Global(~/.claude/settings.json): 全プロジェクト共通フック・デニーリスト・Wiki同期
    • Project(/.claude/settings.json): チーム共有のプロジェクト固有フック(typecheck・機密保護)
    • Project Local(/.claude/settings.local.json): gitignore対象の個人許可リスト・MCP有効化
  • 紹介フック3本:
    1. session-end-to-vault.sh(Stopフック): セッション終了時に会話をObsidian Vaultへ自動保存
    2. PreToolUse(Read)リマインダー: jqで.tool_input.offsetまたは.limitがnullのときsystemMessage返却 → 大ファイル全文Readを抑制
    3. hot-md-updater.sh(Stopフック): Claude Haikuを呼んで当日作業サマリを~/.claude/hot.mdに生成し次セッションで自動読み込み
  • アクシデント事例:
    1. 自動pushフックで.env.bakのAPIキーがリポジトリに混入 → gitleaksで数週間後に発見。git filter-repoで履歴削除・キーローテーション
    2. launchdサンドボックスでスクリプト成功ログが出るのにファイルが生成されない → WorkingDirectory明示と実体ファイル存在チェック追加で解決
    3. SessionStartフック過多で起動が重化 → async: true活用と不要フックの棚卸し(半年に1回)
    4. settings.jsonに登録漏れのゾンビフックが3本 → スクリプトとhooksセクションの突き合わせと出力ログ確認を習慣化