Claude Code フックを始める
シェルコマンドを登録してClaude Codeの動作をカスタマイズおよび拡張する方法を学ぶ
Claude Code フックは、Claude Codeのライフサイクルの様々な時点で実行される、ユーザー定義のシェルコマンドです。フックは、Claude Codeの動作に対する決定論的な制御を提供し、LLMが実行を選択することに依存するのではなく、特定のアクションが常に実行されることを保証します。
フックのリファレンスドキュメントについては、フックリファレンスを参照してください。
フックの使用例には以下があります:
- 通知: Claude Codeがあなたの入力や何かを実行する許可を待っているときの通知方法をカスタマイズします。
- 自動フォーマット: ファイル編集後に.tsファイルに対して
prettier
を、.goファイルに対してgofmt
を実行します。 - ログ記録: コンプライアンスやデバッグのために、実行されたすべてのコマンドを追跡・カウントします。
- フィードバック: Claude Codeがあなたのコードベース規約に従わないコードを生成した場合に、自動化されたフィードバックを提供します。
- カスタム権限: 本番ファイルや機密ディレクトリへの変更をブロックします。
これらのルールをプロンプト指示ではなくフックとしてエンコードすることで、提案を実行が期待されるたびに実行されるアプリレベルのコードに変換します。
フックはエージェントループ中に現在の環境の認証情報で自動的に実行されるため、フックを追加する際はセキュリティへの影響を考慮する必要があります。 例えば、悪意のあるフックコードはあなたのデータを流出させる可能性があります。フックを登録する前に、常にフックの実装を確認してください。
完全なセキュリティベストプラクティスについては、フックリファレンスドキュメントのセキュリティ考慮事項を参照してください。
フックイベント概要
Claude Codeは、ワークフローの異なる時点で実行される複数のフックイベントを提供します:
- PreToolUse: ツール呼び出しの前に実行(ブロック可能)
- PostToolUse: ツール呼び出し完了後に実行
- UserPromptSubmit: ユーザーがプロンプトを送信したときに、Claudeが処理する前に実行
- Notification: Claude Codeが通知を送信するときに実行
- Stop: Claude Codeが応答を終了するときに実行
- SubagentStop: サブエージェントタスクが完了するときに実行
- PreCompact: Claude Codeがコンパクト操作を実行しようとする前に実行
- SessionStart: Claude Codeが新しいセッションを開始するか、既存のセッションを再開するときに実行
- SessionEnd: Claude Codeセッションが終了するときに実行
各イベントは異なるデータを受信し、Claudeの動作を異なる方法で制御できます。
クイックスタート
このクイックスタートでは、Claude Codeが実行するシェルコマンドをログに記録するフックを追加します。
前提条件
コマンドラインでのJSON処理のためにjq
をインストールしてください。
ステップ1: フック設定を開く
/hooks
スラッシュコマンドを実行し、PreToolUse
フックイベントを選択します。
PreToolUse
フックはツール呼び出しの前に実行され、Claudeに何を異なって行うべきかのフィードバックを提供しながらそれらをブロックできます。
ステップ2: マッチャーを追加
+ Add new matcher…
を選択して、Bashツール呼び出しでのみフックを実行するようにします。
マッチャーにBash
と入力します。
*
を使用できます。ステップ3: フックを追加
+ Add new hook…
を選択し、このコマンドを入力します:
ステップ4: 設定を保存
保存場所として、ホームディレクトリにログを記録するためUser settings
を選択します。このフックは現在のプロジェクトだけでなく、すべてのプロジェクトに適用されます。
その後、REPLに戻るまでEscを押します。フックが登録されました!
ステップ5: フックを確認
再度/hooks
を実行するか、~/.claude/settings.json
をチェックして設定を確認します:
ステップ6: フックをテスト
Claudeにls
のような簡単なコマンドを実行するよう依頼し、ログファイルを確認します:
次のようなエントリが表示されるはずです:
その他の例
完全な実装例については、公開コードベースのbash command validator exampleを参照してください。
コードフォーマットフック
編集後にTypeScriptファイルを自動的にフォーマット:
Markdownフォーマットフック
markdownファイルの言語タグの欠落やフォーマット問題を自動的に修正:
この内容で.claude/hooks/markdown_formatter.py
を作成:
スクリプトを実行可能にします:
このフックは自動的に:
- ラベルのないコードブロック内のプログラミング言語を検出
- シンタックスハイライト用の適切な言語タグを追加
- コードコンテンツを保持しながら過度の空白行を修正
- markdownファイル(
.md
、.mdx
)のみを処理
カスタム通知フック
Claudeが入力を必要とするときにデスクトップ通知を取得:
ファイル保護フック
機密ファイルへの編集をブロック:
さらに学ぶ
- フックのリファレンスドキュメントについては、フックリファレンスを参照してください。
- 包括的なセキュリティベストプラクティスと安全ガイドラインについては、フックリファレンスドキュメントのセキュリティ考慮事項を参照してください。
- トラブルシューティング手順とデバッグ技術については、フックリファレンスドキュメントのデバッグを参照してください。