jpskill.com
🛠️ 開発・MCP コミュニティ

creating-hooks

Creates Claude Code hooks for automation and workflow customization. Guides through hook events, configuration, and script creation. Use when user wants to create a hook, automate Claude Code, or asks about hook events.

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o creating-hooks.zip https://jpskill.com/download/17587.zip && unzip -o creating-hooks.zip && rm creating-hooks.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/17587.zip -OutFile "$d\creating-hooks.zip"; Expand-Archive "$d\creating-hooks.zip" -DestinationPath $d -Force; ri "$d\creating-hooks.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して creating-hooks.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → creating-hooks フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

フックの作成

自動化とワークフローのカスタマイズのための Claude Code フックの作成に関するガイドです。

クイックスタート

  1. フックイベントを選択 (いつトリガーすべきか?)
  2. settings.json で設定
  3. フックスクリプトを作成
  4. フックをテスト

ワークフロー: 新しいフックの作成

進捗状況:
- [ ] フックイベントを選択
- [ ] settings.json に追加
- [ ] フックスクリプトを作成
- [ ] テストと検証

ステップ 1: フックイベントを選択

イベント トリガーされるタイミング 一般的な用途
PreToolUse ツールが実行される前 ツールのブロック/変更
PostToolUse ツールが成功した後 検証、ログ記録、フィードバック
UserPromptSubmit ユーザーがメッセージを送信 コンテキストの挿入、検証
SessionStart セッション開始時 コンテキストのロード、状態の初期化
SessionEnd セッション終了時 クリーンアップ、状態の保存
Stop エージェントが終了 続行すべきかどうかの判断

完全なイベントリファレンス: reference.md

ステップ 2: settings.json を設定

場所の優先順位 (高い方が優先):

  1. .claude/settings.local.json (ローカル、コミットされない)
  2. .claude/settings.json (プロジェクト)
  3. ~/.claude/settings.json (ユーザー)

基本的な構造:

{
  "hooks": {
    "EventName": [
      {
        "matcher": "ToolPattern",
        "hooks": [
          {
            "type": "command",
            "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/my-hook.sh\""
          }
        ]
      }
    ]
  }
}

ステップ 3: フックスクリプトを作成

templates/ ディレクトリのテンプレートを使用してください。

主な要件:

  • stdin から JSON を読み取る
  • 制御に終了コードを使用 (0=成功、2=ブロック)
  • 決定のために JSON を出力

ステップ 4: テスト

テスト入力でフックを手動で実行:

echo '{"tool_name":"Write"}' | bash .claude/hooks/my-hook.sh

フックの設定

マッチャーパターン

"matcher": "Write"           // 完全一致
"matcher": "Edit|Write"      // 複数のツール
"matcher": "mcp__.*"         // MCP ツール (正規表現)
"matcher": "*"               // すべてのツール

マッチャーは以下に適用されます: PreToolUse, PostToolUse, PermissionRequest

タイムアウト

{
  "type": "command",
  "command": "...",
  "timeout": 120
}

デフォルト: 60 秒。最大推奨: 300 秒。

終了コード

コード 意味 動作
0 成功 通常通り続行
2 ブロック アクションを停止、エラーを表示
その他 非ブロックエラー ログのみ (詳細モード)

JSON 出力

決定のために JSON を stdout に返します:

{
  "decision": "block",
  "reason": "Why blocked",
  "additionalContext": "Info for Claude"
}

イベントごとの決定値:

  • PreToolUse: allow, deny, ask
  • PostToolUse: block (理由付き)
  • UserPromptSubmit: block (理由付き)
  • Stop: block (理由が必要)

セキュリティのベストプラクティス

  1. すべての変数を引用符で囲む: $VAR ではなく "$VAR"
  2. 絶対パスを使用: "$CLAUDE_PROJECT_DIR/..."
  3. 入力を検証: 処理前に確認
  4. パスのトラバーサルをブロック: .. を含むパスを拒否
  5. タイムアウトを設定: 暴走スクリプトを防止

環境変数

すべてのフックで使用可能:

  • CLAUDE_PROJECT_DIR - プロジェクトのルートパス
  • CLAUDE_CODE_REMOTE - Web 環境の場合は "true"

SessionStart のみ:

  • CLAUDE_ENV_FILE - 環境変数を永続化するためのパス

一般的なパターン

セッション開始時にコンテキストを挿入

#!/bin/bash
# Claude のためのコンテキストを出力
echo '{"additionalContext": "Project uses TypeScript"}'
exit 0

危険なファイルの編集をブロック

#!/bin/bash
INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
if [[ "$FILE" == *".env"* ]]; then
  echo "Blocking edit to sensitive file" >&2
  exit 2
fi
exit 0

すべてのツールの使用状況をログに記録

#!/bin/bash
INPUT=$(cat)
TOOL=$(echo "$INPUT" | jq -r '.tool_name')
echo "$(date -Iseconds) $TOOL" >> "$CLAUDE_PROJECT_DIR/.claude/tool.log"
exit 0

完全なイベントの詳細とその他の例については、reference.md を参照してください。

📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Creating Hooks

Guides creation of Claude Code hooks for automation and workflow customization.

Quick Start

  1. Choose hook event (when should it trigger?)
  2. Configure in settings.json
  3. Create hook script
  4. Test the hook

Workflow: Create New Hook

Progress:
- [ ] Select hook event
- [ ] Add to settings.json
- [ ] Create hook script
- [ ] Test and validate

Step 1: Select Hook Event

Event When It Triggers Common Use
PreToolUse Before tool runs Block/modify tools
PostToolUse After tool succeeds Validate, log, feedback
UserPromptSubmit User sends message Inject context, validate
SessionStart Session begins Load context, init state
SessionEnd Session ends Cleanup, save state
Stop Agent finishes Decide if should continue

Full event reference: reference.md

Step 2: Configure settings.json

Location priority (highest wins):

  1. .claude/settings.local.json (local, not committed)
  2. .claude/settings.json (project)
  3. ~/.claude/settings.json (user)

Basic structure:

{
  "hooks": {
    "EventName": [
      {
        "matcher": "ToolPattern",
        "hooks": [
          {
            "type": "command",
            "command": "bash \"$CLAUDE_PROJECT_DIR/.claude/hooks/my-hook.sh\""
          }
        ]
      }
    ]
  }
}

Step 3: Create Hook Script

Use templates from templates/ directory.

Key requirements:

  • Read JSON from stdin
  • Use exit codes for control (0=success, 2=block)
  • Output JSON for decisions

Step 4: Test

Run hook manually with test input:

echo '{"tool_name":"Write"}' | bash .claude/hooks/my-hook.sh

Hook Configuration

Matcher Patterns

"matcher": "Write"           // Exact match
"matcher": "Edit|Write"      // Multiple tools
"matcher": "mcp__.*"         // MCP tools (regex)
"matcher": "*"               // All tools

Matchers apply to: PreToolUse, PostToolUse, PermissionRequest

Timeout

{
  "type": "command",
  "command": "...",
  "timeout": 120
}

Default: 60 seconds. Max recommended: 300 seconds.

Exit Codes

Code Meaning Behavior
0 Success Continue normally
2 Block Stop action, show error
Other Non-blocking error Log only (verbose mode)

JSON Output

Return JSON to stdout for decisions:

{
  "decision": "block",
  "reason": "Why blocked",
  "additionalContext": "Info for Claude"
}

Decision values by event:

  • PreToolUse: allow, deny, ask
  • PostToolUse: block (with reason)
  • UserPromptSubmit: block (with reason)
  • Stop: block (requires reason)

Security Best Practices

  1. Quote all variables: "$VAR" not $VAR
  2. Use absolute paths: "$CLAUDE_PROJECT_DIR/..."
  3. Validate inputs: Check before processing
  4. Block path traversal: Reject paths with ..
  5. Set timeouts: Prevent runaway scripts

Environment Variables

Available in all hooks:

  • CLAUDE_PROJECT_DIR - Project root path
  • CLAUDE_CODE_REMOTE - "true" if web environment

SessionStart only:

  • CLAUDE_ENV_FILE - Path to persist env vars

Common Patterns

Inject Context on Session Start

#!/bin/bash
# Output context for Claude
echo '{"additionalContext": "Project uses TypeScript"}'
exit 0

Block Dangerous File Edits

#!/bin/bash
INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
if [[ "$FILE" == *".env"* ]]; then
  echo "Blocking edit to sensitive file" >&2
  exit 2
fi
exit 0

Log All Tool Usage

#!/bin/bash
INPUT=$(cat)
TOOL=$(echo "$INPUT" | jq -r '.tool_name')
echo "$(date -Iseconds) $TOOL" >> "$CLAUDE_PROJECT_DIR/.claude/tool.log"
exit 0

See reference.md for complete event details and more examples.