Claude Code Hooksを遊び倒す|海外勢のネタ設定が面白すぎた

開発

Claude Code の Hooks、使っていますか?「自動で Prettier かけるやつでしょ」くらいの認識の人も多いかもしれません。私もそうでした。

でも海外の Reddit や GitHub を漁ってみたら、想像以上に面白い使い方がたくさん出てきたんですよね。待機中に BGM を流すとか、瞑想アプリを起動するとか、セッションごとに Git ブランチを分けるとか。

今回は lint/format 以外で見つけたユニークな Hooks 設定を紹介します。

通知・エンタメ系のHooks

まずは「え、そんな使い方するの?」と思った系統から。

Voice Hooks - 各イベントにサウンドを割り当て

Claude Codeのイベントにサウンドを割り当てるプラグイン。セッション開始時にマリオのスタート音が鳴ります。

イベントサウンド
SessionStartマリオのスタート音
SessionEnd終了音
PreToolUseding
PostToolUsedong
# プロジェクトディレクトリで実行
mkdir -p .claude
git clone https://github.com/shanraisshan/claude-code-voice-hooks.git temp-hooks
cp -r temp-hooks/.claude/. .claude/
rm -rf temp-hooks

既に.claude/settings.jsonがある場合は、hookスクリプトをコピー後、hooksキーを手動でマージする必要があります。

OS自動検出で、Macはafplay、Linuxはpaplay、Windowsはwinsoundを使います。非同期hookなのでClaudeの実行をブロックしません。

音量がデカいので注意。イヤホンしてたらびっくりする。

筆者

Moo Plugin - パーミッション要求で「モー」

別ウィンドウで作業してると、Claude Codeがパーミッション待ちなのに気づかないことありますよね。5分後に「あ、まだ待ってた」みたいな。

このプラグインは、パーミッション要求時に牛の鳴き声「モー」を再生します。

{
  "hooks": {
    "PermissionRequest": [{
      "hooks": [{
        "type": "command",
        "command": "afplay ~/.claude/sounds/moo.wav"
      }]
    }]
  }
}

牛の鳴き声という発想がユニーク。地味に便利。

Elevator Music - 待機中にBGMを流す

Claude Code が処理中のとき、エレベーターミュージック(いわゆる保留音的なBGM)を自動再生するプラグイン。

{
  "hooks": {
    "Notification": [{
      "matcher": "idle_prompt|permission_prompt",
      "hooks": [{
        "type": "command",
        "command": "python3 ~/.claude/hooks/elevator-music.py"
      }]
    }]
  }
}

30秒で自動停止するので、無限再生の心配はありません。対応プレーヤーは ffplay、mpv、afplay(Mac標準)など。

長時間タスクを待ってるとき、無音より何か流れてる方が精神的に楽。

Clauditate - 待機中に呼吸エクササイズ

Claude Code が処理中のとき、自動で瞑想・呼吸エクササイズのアプリを表示してくれます。

npm install -g clauditate
clauditate --hook-claude

特徴的なのは「スマートタイミング」機能。毎回表示されるとうざいので、以下の条件で制御されています。

  • 勤務時間内のみ表示(デフォルト9時〜17時)
  • 前回の瞑想から60分以内は非表示
  • 1日の目標達成後は表示しない
  • 30分以内に2回スキップすると、2時間待機

日次・週次・月次の瞑想データも記録されるので、「今週どれくらい深呼吸したか」が可視化されます。健康意識高い系エンジニア向けですね。

TTS音声通知 - 完了を読み上げ

Stop hook でタスク完了時に「作業が完了しました」と音声で読み上げる設定。ElevenLabs、OpenAI TTS、pyttsx3(ローカル)の優先順位で対応しています。

# Stop hook で呼ばれる
def notify_completion(message):
    # ElevenLabs > OpenAI > pyttsx3 の優先順位で再生
    if elevenlabs_available():
        elevenlabs_speak(message)
    elif openai_available():
        openai_speak(message)
    else:
        pyttsx3_speak(message)

別の作業をしているときに「終わったよ」と教えてくれるのは地味に便利。Mac なら say コマンドでもっと簡単にできますね。

{
  "hooks": {
    "Stop": [{
      "hooks": [{
        "type": "command",
        "command": "say '処理が完了しました'"
      }]
    }]
  }
}

Git連携系のHooks

ここからは実用的な設定が多めです。

自動gitステージング

Claude Code がファイルを編集したら、自動で git add する設定。コミットは手動なので、変更を確認してからコミットできます。

{
  "hooks": {
    "PostToolUse": [{
      "matcher": "Edit|Write",
      "hooks": [{
        "type": "command",
        "command": "git add -A"
      }]
    }]
  }
}

これは割と定番かもしれませんが、「自分でステージングするの忘れがち」という人には便利ですよね。

Stop時に自動コミット

セッション終了時に、プロンプト内容をコミットメッセージにして自動コミットする設定。GitButler のブログで紹介されていました。

{
  "hooks": {
    "Stop": [{
      "hooks": [{
        "type": "command",
        "command": "python3 ~/.claude/hooks/auto-commit.py"
      }]
    }]
  }
}

スクリプト内で transcript_path から最新のプロンプトを抽出し、それをコミットメッセージにします。「何をお願いしたか」がそのまま履歴に残るので、後から見返しやすいです。

セッション別ブランチ管理

これが一番技術的に面白かった設定。並列で複数の Claude Code セッションを動かすとき、それぞれを別の Git ブランチに分離します。

同じブランチで並行作業してると変更が混ざって「どっちの編集だっけ?」ってなるんですよね。これ欲しかった。

筆者
{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Edit|Write",
      "hooks": [{
        "type": "command",
        "command": "~/.claude/hooks/setup-shadow-index.sh"
      }]
    }],
    "PostToolUse": [{
      "matcher": "Edit|Write",
      "hooks": [{
        "type": "command",
        "command": "~/.claude/hooks/stage-to-session.sh"
      }]
    }],
    "Stop": [{
      "hooks": [{
        "type": "command",
        "command": "~/.claude/hooks/commit-session-branch.sh"
      }]
    }]
  }
}

仕組みとしては、PreToolUse/PostToolUse/Stop の各フェーズでセッションごとにGit操作を分離します。GitButlerと連携すると、セッションごとに自動で別ブランチが作成され、変更が混ざる問題を回避できます。

これで「セッションAの変更とセッションBの変更が混ざる」問題を解決。複数セッションを本格的に使う人向けですね。

Jujutsu(jj)連携

Git の代替として注目されている Jujutsu との連携設定。「AI の編集を絶対に失わない」がコンセプトです。

{
  "hooks": {
    "Stop": [{
      "hooks": [{
        "type": "command",
        "command": "jj show"
      }]
    }]
  }
}

最初は jj commit を使っていたそうですが、jj は jj op logjj op restore で以前の状態を復元できるため、jj show だけで十分とのこと。コミット履歴を汚さずに、いつでもロールバックできる状態を維持できます。

Claude CodeでMacがスリープして困る?4つの解決策を比較してみた開発

高度な自動化系のHooks

SessionStart で課題を自動読み込み

セッション開始時に、GitHub の未解決 Issues や CI の失敗ステータスを自動で取得する設定。

{
  "hooks": {
    "SessionStart": [{
      "hooks": [{
        "type": "command",
        "command": "~/.claude/hooks/load-context.sh"
      }]
    }]
  }
}

「今日やるべきこと」をセッション開始時に Claude Code が把握してくれるので、「このIssue直して」とお願いするときに番号だけ伝えれば済みます。

サブエージェント制御

Claude Codeにはサブエージェント専用のHookイベントSubagentStartSubagentStopが用意されています。サブエージェントの開始・終了をトラッキングしたいときに便利です。

{
  "hooks": {
    "SubagentStart": [{
      "hooks": [{
        "type": "command",
        "command": "echo \"サブエージェント開始: $(date)\" >> ~/.claude/subagent.log"
      }]
    }],
    "SubagentStop": [{
      "hooks": [{
        "type": "command",
        "command": "say 'サブエージェント完了'"
      }]
    }]
  }
}

サブエージェントの実行時間を計測したり、完了通知を受け取ったりするのに使えます。

AI連携系Hooks

Claude Code単体じゃなくて、他のAIと組み合わせる設定。

Claude-Gemini Bridge - 大規模ファイルを自動委譲

これ技術的に面白い。Claude Codeが大きなファイルを読もうとしたとき、自動でGeminiに委譲するhook。

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Read|Grep|Glob|Task",
      "hooks": [{
        "type": "command",
        "command": "~/.claude/hooks/gemini-bridge.py"
      }]
    }]
  }
}

委譲の判断基準:

  • 50kトークン超(約200KB)のファイル → Geminiへ
  • 3ファイル以上のTask操作 → Geminiへ
  • 機密ファイル(.env, .key等)→ 自動除外

Claudeのコンテキストを節約しつつ、Geminiの大容量コンテキスト(100万〜200万トークン)を活用できます。

「適材適所でAIを使い分ける」を自動化してるの、発想がすごい。

筆者

Prompt Improver - 曖昧プロンプトを明確化

UserPromptSubmitで発火して、曖昧なプロンプトを検出したら明確化質問を自動生成するhook。claude-code-prompt-improverというプロジェクトで公開されています。

# マーケットプレイス経由でインストール
claude plugin marketplace add severity1/severity1-marketplace
claude plugin install prompt-improver@severity1-marketplace

例えば「このコード直して」と入力すると:

  • 「どの部分を直しますか?」
  • 「期待する動作は?」
  • 「エラーメッセージはありますか?」

といった質問を生成し、AskUserQuestionツールで確認してから実行します。

面白いのは、Pythonスクリプト自体は評価ロジックを持たない点。「このプロンプトは明確?曖昧?」という判断をClaude自身に委ねる設計です。評価のオーバーヘッドは約189トークンと軽量。

曖昧な指示でトークン消費するより、最初に明確化した方が効率的という発想です。*で始めるとバイパスできるので、急いでいるときは明確化をスキップできます。

まとめ

lint/format 以外の Hooks 設定、思った以上にバリエーションがありました。

試してみたいもの

  • TTS 音声通知(Mac の say コマンドで簡単に試せる)
  • セッション別ブランチ管理(同じブランチで並行AIコーディングしてると変更が混ざるので)
  • Claude-Gemini Bridge(大規模ファイルの自動委譲、コンテキスト節約になりそう)
  • Voice Hooks / Moo Plugin(通知音のカスタマイズ)

Hooks の設定は ~/.claude/settings.json(グローバル)か .claude/settings.json(プロジェクト)に書けます。まずは通知系から試してみると、Hooks の動作が理解しやすいと思います。

皆さんはどんなHooks設定を使っていますか?面白い使い方があればぜひ教えてください。

Ghostty入門|HashiCorp創業者が作った次世代ターミナルの設定ガイドMac
Thanks for reading!
Claude CodeHooks自動化GitGemini