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.
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
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
$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. 下の青いボタンを押して
creating-hooks.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
creating-hooksフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
フックの作成
自動化とワークフローのカスタマイズのための Claude Code フックの作成に関するガイドです。
クイックスタート
- フックイベントを選択 (いつトリガーすべきか?)
- settings.json で設定
- フックスクリプトを作成
- フックをテスト
ワークフロー: 新しいフックの作成
進捗状況:
- [ ] フックイベントを選択
- [ ] settings.json に追加
- [ ] フックスクリプトを作成
- [ ] テストと検証
ステップ 1: フックイベントを選択
| イベント | トリガーされるタイミング | 一般的な用途 |
|---|---|---|
PreToolUse |
ツールが実行される前 | ツールのブロック/変更 |
PostToolUse |
ツールが成功した後 | 検証、ログ記録、フィードバック |
UserPromptSubmit |
ユーザーがメッセージを送信 | コンテキストの挿入、検証 |
SessionStart |
セッション開始時 | コンテキストのロード、状態の初期化 |
SessionEnd |
セッション終了時 | クリーンアップ、状態の保存 |
Stop |
エージェントが終了 | 続行すべきかどうかの判断 |
完全なイベントリファレンス: reference.md
ステップ 2: settings.json を設定
場所の優先順位 (高い方が優先):
.claude/settings.local.json(ローカル、コミットされない).claude/settings.json(プロジェクト)~/.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,askPostToolUse:block(理由付き)UserPromptSubmit:block(理由付き)Stop:block(理由が必要)
セキュリティのベストプラクティス
- すべての変数を引用符で囲む:
$VARではなく"$VAR" - 絶対パスを使用:
"$CLAUDE_PROJECT_DIR/..." - 入力を検証: 処理前に確認
- パスのトラバーサルをブロック:
..を含むパスを拒否 - タイムアウトを設定: 暴走スクリプトを防止
環境変数
すべてのフックで使用可能:
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
- Choose hook event (when should it trigger?)
- Configure in settings.json
- Create hook script
- 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):
.claude/settings.local.json(local, not committed).claude/settings.json(project)~/.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,askPostToolUse:block(with reason)UserPromptSubmit:block(with reason)Stop:block(requires reason)
Security Best Practices
- Quote all variables:
"$VAR"not$VAR - Use absolute paths:
"$CLAUDE_PROJECT_DIR/..." - Validate inputs: Check before processing
- Block path traversal: Reject paths with
.. - Set timeouts: Prevent runaway scripts
Environment Variables
Available in all hooks:
CLAUDE_PROJECT_DIR- Project root pathCLAUDE_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.