claude-code-bash-patterns について
claude-code-bash-patterns は、Claude Code の Bash ツールの使い方を解説するスキルで、コマンドの組み立て、シェルフック、Git ワークフロー、CLI の利用を扱います。再利用可能なコマンドパターンやフックによる保護策を求める Claude Code ユーザー向けです。
主な機能
- 01コマンド連結と条件実行
- 02並列コマンド実行の指針
- 03Heredoc と出力処理のパターン
- 04ツール実行前後のフック例
- 05Git と CLI のワークフロー案内
- 06危険なコマンドのガード設定
活用シーン
- 01依存関係のあるビルドとテストの実行
- 02フックによる Bash 呼び出しの記録や遮断
- 03Git の状況確認とコミット準備
- 04gh によるプルリクエスト作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jackspace/ claudeskillz --skill claude-code-bash-patternsインストール後、Claude Code で/claude-code-bash-patternsを入力して読み込まれたか確認します。
同梱ファイルREADME.mdSKILL.json
詳細
Claude Code Bash パターン
ステータス: 本番環境対応 ✅ 最終更新日: 2025-11-07 依存関係: Claude Code CLI(最新バージョン) 公式ドキュメント: https://docs.claude.com/en/docs/claude-code/tools
クイックスタート(10 分)
1. Bash ツールを理解する
Bash ツールは、コマンドライン操作を実行するための Claude Code の主要なインターフェースです。専用ツール(Read、Grep、Glob)とは異なり、Bash ツールは複雑なワークフロー向けにシェルへ直接アクセスできます。
主な特徴:
- セッションの永続性: 会話中、コマンドは永続的な bash セッション内で実行されます
- 環境の継承: 環境変数と作業ディレクトリを継承します
- 出力制限: 出力は 30,000 文字で切り詰められます
- デフォルトのタイムアウト: 2 分(最大 10 分まで設定可能)
Bash ツールを使用する場面:
- ✅ CLI ツール(git、npm、wrangler、gh など)の実行
- ✅ コマンドの連結(順次操作)
- ✅ プロセスのオーケストレーション(ビルド、テスト、デプロイ)
- ✅ 環境のセットアップと管理
Bash ツールを使用しない場面:
- ❌ ファイルの読み取り → 代わりに Read ツールを使用
- ❌ ファイルパターンの検索 → 代わりに Glob ツールを使用
- ❌ コンテンツの検索 → 代わりに Grep ツールを使用
- ❌ ファイルの編集 → 代わりに Edit ツールを使用
2. 基本的なコマンドパターン
# Single command
npm install
# Sequential with && (stops on first failure)
npm install && npm run build
# Sequential with ; (continues regardless)
npm install ; npm run build
# Parallel execution (make multiple Bash tool calls)
# Call 1: git status
# Call 2: git diff
# Call 3: git log
基本原則: 失敗を考慮する場合は &&、考慮しない場合は ;、操作が独立している場合は並列呼び出しを使用します。
3. 最初のフックを設定する
フックを使うと、ツールの実行前後にコードを実行できます。ここでは簡単な監査ロガーを紹介します。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"[$(date -Iseconds)] $(echo \"$CLAUDE_TOOL_INPUT\" | jq -r '.tool_input.command')\" >> ~/.claude/bash-audit.log"
}
]
}
]
}
}
これを ~/.claude/settings.json に保存すると、すべての bash コマンドがタイムスタンプ付きで記録されます。
5 つの主要パターン
パターン 1: コマンドの連結
使用する場面: 各操作が前の操作の成功に依存する順次処理
構文: command1 && command2 && command3
例: ビルドとデプロイのワークフロー
npm install && npm run build && npx wrangler deploy
重要な理由:
- 最初の失敗時に停止します(エラーの連鎖を防ぎます)
- エラーメッセージを明確に保ちます(何が失敗したかを正確に把握できます)
- トークンを節約できます(コマンド間でステータスを確認する必要がありません)
アンチパターン: 失敗を考慮する場合に ; を使用する
# ❌ Wrong: Continues even if install fails
npm install ; npm run build
# ✅ Correct: Stops if install fails
npm install && npm run build
応用: || を使った条件付き実行
# Run tests, or echo failure message
npm test || echo "Tests failed, not deploying"
# Try npm ci, fall back to npm install
npm ci || npm install
パターン 2: 並列実行
使用する場面: 同時に実行できる独立した操作
方法: 1 つのメッセージ内で複数の Bash ツール呼び出しを行います
例: Git ワークフローのコミット前分析
# Claude makes 3 parallel Bash calls in one message:
Call 1: git status
Call 2: git diff --staged
Call 3: git log -5 --oneline
メリット:
- 順次実行より約 40% 高速です(呼び出し間の待ち時間がありません)
- コンテキストの使用量を減らします(すべての結果がまとめて返されます)
- ユーザー体験が向上します(即座に実行されたように見えます)
重要: 本当に独立した操作のみを並列化してください。呼び出し 2 が呼び出し 1 の出力に依存する場合は、順次実行してください。
パターン 3: 複数行コンテンツのための HEREDOC
使用する場面: Git コミット、ファイル作成、改行を含む複雑な文字列
構文: cat <<'EOF' ... EOF
例: 詳細なメッセージを付けた Git コミット
git commit -m "$(cat <<'EOF'
feat(auth): Add JWT verification middleware
Implement custom JWT template support for Clerk auth.
Extracts email and metadata claims for user context.
🤖 Generated with Claude Code
Co-Authored-By: Claude <[email protected]>
EOF
)"
シングルクォートを使う理由: <<'EOF' を使うと、コンテンツ内の変数展開を防げます。変数を展開する場合は <<"EOF" を使用します。
よくある間違い: $() ラッパーを引用符で囲み忘れる
# ❌ Wrong: Newlines lost
git commit -m $(cat <<'EOF'
Line 1
Line 2
EOF
)
# ✅ Correct: Preserves newlines
git commit -m "$(cat <<'EOF'
Line 1
Line 2
EOF
)"
パターン 4: 出力の取得と処理
使用する場面: コマンドの出力を使用前に処理する必要がある場合
パターン: $() によるコマンド置換
例: 現在のブランチ名を取得する
BRANCH=$(git rev-parse --abbrev-ref HEAD)
echo "Current branch: $BRANCH"
例: 出力に基づく条件ロジック
if git diff --quiet; then
echo "No changes detected"
else
echo "Changes detected, running tests..."
npm test
fi
制限: 出力は 30,000 文字で切り詰められます。出力が大きい場合は、次のようにします。
# Limit output
npm test 2>&1 | head -100
# Or save to file
npm test > test-results.txt && tail -50 test-results.txt
パターン 5: 条件付き実行
使用する場面: 条件に応じて異なる操作を行う場合
パターン: && / || を使ったテストコマンド
例: ファイルに変更があった場合のみテストを実行する
git diff --quiet || npm test
例: ファイルの有無に応じて異なるコマンドを実行する
[ -f package-lock.json ] && npm ci || npm install
例: 複数条件のロジック
if [ -f pnpm-lock.yaml ]; then
pnpm install
elif [ -f yarn.lock ]; then
yarn install
else
npm install
fi
フック: 高度な自動化
フックは、ツールの実行前後に実行されるシェルコマンドまたは Claude プロンプトです。セキュリティガード、後片付け担当、自動化ヘルパーとして機能します。
PreToolUse:セキュリティガード
目的:ツールの実行前に動作し、実行をブロックしたり、動作を変更したりできます。
終了コード:
0= 実行を許可1= 一般的なエラーでブロック2= カスタムエラーメッセージ(stderr から)でブロック
ユースケース 1:危険なコマンドをブロックする
ファイル:~/.claude/hooks/dangerous-command-guard.py
#!/usr/bin/env python3
import json
import sys
import re
# Read hook input from stdin
data = json.load(sys.stdin)
command = data.get('tool_input', {}).get('command', '')
# Dangerous patterns to block
DANGEROUS = [
r'rm\s+-rf\s+/', # Delete root
r'dd\s+if=', # Disk operations
r'mkfs\.', # Format filesystem
r':()\{.*\}:', # Fork bomb
r'sudo\s+rm', # Sudo delete
r'git\s+push.*--force.*main', # Force push to main
]
for pattern in DANGEROUS:
if re.search(pattern, command):
print(f"BLOCKED: Dangerous command pattern '{pattern}'", file=sys.stderr)
sys.exit(2)
# Allow execution
sys.exit(0)
設定:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "python3 ~/.claude/hooks/dangerous-command-guard.py"
}
]
}
]
}
}
ユースケース 2:すべての Bash コマンドを記録する
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"[$(date -Iseconds)] $(echo \"$CLAUDE_TOOL_INPUT\" | jq -r '.tool_input.command')\" >> ~/.claude/bash-audit.log"
}
]
}
結果:すべての Bash コマンドがタイムスタンプ付きで ~/.claude/bash-audit.log に記録されます。
ユースケース 3:パッケージマネージャーを強制する
ロックファイルを確認し、誤ったパッケージマネージャーをブロックします。
#!/bin/bash
# File: ~/.claude/hooks/package-manager-enforcer.sh
COMMAND=$(echo "$CLAUDE_TOOL_INPUT" | jq -r '.tool_input.command')
if [ -f pnpm-lock.yaml ] && echo "$COMMAND" | grep -qE '^(npm|yarn) '; then
echo "ERROR: This repo uses pnpm. Please use 'pnpm' instead of 'npm' or 'yarn'." >&2
exit 2
fi
if [ -f yarn.lock ] && echo "$COMMAND" | grep -qE '^(npm|pnpm) '; then
echo "ERROR: This repo uses yarn. Please use 'yarn' instead of 'npm' or 'pnpm'." >&2
exit 2
fi
exit 0
PostToolUse:クリーンアップ担当
目的:ツールの実行が成功した後(終了コードが 0 の場合のみ)に動作します。
例:ファイル編集後に自動フォーマットする
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "FILE=$(echo \"$CLAUDE_TOOL_INPUT\" | jq -r '.tool_input.file_path'); [ -f \"$FILE\" ] && prettier --write \"$FILE\" || true"
}
]
}
例:コード変更後にテストを実行する
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "FILE=$(echo \"$CLAUDE_TOOL_INPUT\" | jq -r '.tool_input.file_path'); if echo \"$FILE\" | grep -qE '\\.(ts|tsx|js|jsx)$'; then npm test -- \"$FILE\"; fi"
}
]
}
SessionStart:環境のセットアップ
目的:セッションの開始時に一度だけ実行され、環境をセットアップします。
例:プロジェクト固有の環境を読み込む
{
"hooks": {
"SessionStart": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "[ -f .envrc ] && source .envrc || true; env > $CLAUDE_ENV_FILE"
}
]
}
]
}
}
フックで使用できる環境変数:
$CLAUDE_TOOL_INPUT- ツール呼び出しの JSON 文字列$CLAUDE_ENV_FILE- 環境ファイルへのパス- 標準の環境変数(
$HOME、$USER、$PWDなど)
Git ワークフロー(本番環境でテスト済み)
これらのパターンは、Anthropic のエンジニアリングチームが Git 操作の 90% 以上で使用しています。
パターン:的確な Git コミット
ステップ 1:コンテキストを収集する(並列呼び出し)
# Call 1
git status
# Call 2
git diff --staged
# Call 3
git log -5 --oneline
並列にする理由:各操作は独立しており、応答が速く、ユーザー体験も向上します。
ステップ 2:変更を分析する
- 実際のコード変更(ファイル名だけではありません!)を確認します。
- git log のコミットメッセージのスタイルに合わせます。
- 「何を」ではなく「なぜ」に焦点を当てます。
- メッセージは簡潔にします(1~2 文)。
ステップ 3:HEREDOC を使ってコミットする
git add [files] && git commit -m "$(cat <<'EOF'
feat(auth): Add JWT verification middleware
Implement custom JWT template support for Clerk auth.
Extracts email and metadata claims for user context.
🤖 Generated with Claude Code
Co-Authored-By: Claude <[email protected]>
EOF
)"
ステップ 4:確認する
git status
重要:pre-commit フックによってファイルが変更された場合:
- 作成者を確認します:
git log -1 --format='%an %ae' - プッシュされていないことを確認します:
git status(「ahead of origin」と表示されるはずです) - 両方の条件を満たす場合:
git add . && git commit --amend --no-edit - 条件を満たさない場合:
git add . && git commit -m "Apply pre-commit hook changes"
パターン:プルリクエストの作成
ステップ 1:ブランチの状態を把握する(並列)
# Call 1
git status
# Call 2
git diff main...HEAD
# Call 3
git log main..HEAD --oneline
ステップ 2:すべてのコミットを分析する(最新のものだけではありません!)
- ブランチが main から分岐して以降、何が変更されたか?
- このブランチの全体的な目的は何か?
- 何をテストする必要があるか?
ステップ 3:gh CLI で PR を作成する
gh pr create --title "feat: User Authentication" --body "$(cat <<'EOF'
## Summary
- Implement JWT verification with Clerk
- Add login/logout endpoints
- Update database schema for users table
## Test Plan
- [ ] Verify JWT token validation
- [ ] Test login flow
- [ ] Test logout flow
- [ ] Confirm database migrations work
🤖 Generated with Claude Code
EOF
)"
結果:明確な概要とテスト計画を含む、プロフェッショナルな PR が作成されます。
CLI ツールとの連携
GitHub CLI(gh)
Claude は gh CLI をデフォルトで認識しています。一般的なパターン:
# View PR comments
gh api repos/owner/repo/pulls/123/comments
# Check CI status
gh run list --limit 5
# Create issue
gh issue create --title "Bug: Description" --body "Details here"
# Comment on PR
gh pr comment 123 --body "LGTM! 🚀"
Wrangler(Cloudflare)
ローカルインストールでは npx を先頭に付けます:
# Deploy worker
npx wrangler deploy
# Run D1 migrations
npx wrangler d1 migrations apply my-db --remote
# Tail logs
npx wrangler tail
# Execute D1 query
npx wrangler d1 execute my-db --command "SELECT * FROM users LIMIT 5"
カスタム CLI ツール
Claude に CLI について教える方法:
オプション 1:CLAUDE.md に記載する
## Custom Tools
**mycli**: Internal deployment tool
Usage: `mycli deploy --env production --service api`
Help: `mycli --help` for full options
Config: `.mycli.json` in project root
オプション 2:Claude に調べさせる
When encountering mycli commands, run `mycli --help` first to discover available options.
オプション 3:カスタムコマンドを作成する(.claude/commands/deploy.md)
Deploy using our internal mycli tool:
1. Run `mycli --version` to verify installation
2. Check current environment: `mycli env current`
3. Deploy to staging: `mycli deploy --env staging --service api`
4. Run smoke tests: `mycli test smoke --env staging`
5. If tests pass, deploy to production: `mycli deploy --env production --service api`
セキュリティ設定
1. 危険なコマンドガード(PreToolUse フック)
同梱スクリプトを参照してください:scripts/dangerous-command-guard.py
ブロックするコマンド:
rm -rf /(ルートを削除)dd if=(ディスク操作)mkfs.*(ファイルシステムのフォーマット):(){ :|:& };:(フォークボム)sudo rm(危険な sudo による削除)git push --force main(main ブランチへの強制プッシュ)
インストール:
# Copy script
cp scripts/dangerous-command-guard.py ~/.claude/hooks/
chmod +x ~/.claude/hooks/dangerous-command-guard.py
# Configure in ~/.claude/settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "python3 ~/.claude/hooks/dangerous-command-guard.py"
}
]
}
]
}
}
2. 本番環境ファイルの保護
本番環境の設定ファイルが変更されないようにします:
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "FILE=$(echo \"$CLAUDE_TOOL_INPUT\" | jq -r '.tool_input.file_path // empty'); if echo \"$FILE\" | grep -qE '(^|\\/)(production\\.env|\\.env\\.production|prod\\.config)$'; then echo 'ERROR: Cannot modify production config files' >&2; exit 2; fi"
}
]
}
3. 監査ログ
コンプライアンスのため、すべての Bash コマンドを記録します:
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "echo \"[$(date -Iseconds)] User: $USER | Command: $(echo \"$CLAUDE_TOOL_INPUT\" | jq -r '.tool_input.command')\" >> ~/.claude/audit.log"
}
]
}
監査ログを表示:
tail -50 ~/.claude/audit.log
カスタムコマンド(.claude/commands/)
カスタムコマンドは、呼び出すとプロンプトに展開される Markdown ファイルです。
カスタムコマンドの作成
ファイル:.claude/commands/deploy-staging.md
Deploy the current branch to staging environment:
1. Verify branch is not main (exit if main)
2. Run full test suite (npm test)
3. Build production bundle (npm run build)
4. Deploy with wrangler to staging (npx wrangler deploy --env staging)
5. Run smoke tests against staging URL
6. Share deployment URL with user
使用方法:
User: /deploy-staging
Claude: [Executes the workflow from the markdown file]
カスタムコマンドのベストプラクティス
✅ 推奨事項:
- アトミックにします(明確なワークフローを1つにします)
- 検証手順を含めます
- 想定される状態を記述します
- ロールバック手順を追加します
- 命令形を使用します
❌ 避けること:
- 複雑にしすぎないでください(複数のコマンドに分割します)
- 対話型プロンプトを含めないでください
- 状態を決めつけないでください(必ず検証します)
コマンドライブラリの例:
/deploy-staging- ステージング環境にデプロイします/deploy-production- 本番環境にデプロイします(安全性チェック付き)/run-tests- テストスイート全体を実行します/check-types- TypeScript の型チェックを実行します/format-code- すべてのコードファイルをフォーマットします/create-migration- データベースのマイグレーションを作成します
重要なルール
必ず行うこと ✅
1. まず専用ツールを使う
Bash は強力ですが、専用ツールがあるタスクでは非効率です:
# ❌ Wrong: Use Bash for file reading
cat file.txt
# ✅ Correct: Use Read tool
Read(file_path="file.txt")
# ❌ Wrong: Use Bash for file search
find . -name "*.ts"
# ✅ Correct: Use Glob tool
Glob(pattern="**/*.ts")
# ❌ Wrong: Use Bash for content search
grep "pattern" file.txt
# ✅ Correct: Use Grep tool
Grep(pattern="pattern", path="file.txt")
理由:専用ツールは高速で、トークンの使用量が少なく、より適切な形式で出力します。
2. スペースを含むパスは引用符で囲む
# ❌ Wrong: Breaks on spaces
cd /Users/name/My Documents
# ✅ Correct: Quoted path
cd "/Users/name/My Documents"
3. 依存関係には && を使う
# ❌ Wrong: Continues even if install fails
npm install ; npm run build
# ✅ Correct: Stops on failure
npm install && npm run build
4. 独立した操作は並列で実行する
# ❌ Wrong: Sequential when could be parallel
git status && git diff && git log
# ✅ Correct: Make 3 parallel Bash tool calls in one message
5. 複数行の文字列には HEREDOC を使う
# ❌ Wrong: Escaping nightmare
git commit -m "line1\nline2\nline3"
# ✅ Correct: HEREDOC
git commit -m "$(cat <<'EOF'
line1
line2
line3
EOF
)"
6. 必ず説明を記載する
# ❌ Wrong: No context for user
Bash(command="complex-script.sh")
# ✅ Correct: Clear purpose
Bash(
command="complex-script.sh",
description="Run integration tests on staging database"
)
絶対にしないこと ❌
1. 対話型コマンドを使わない
ユーザー入力を必要とするコマンドは停止したままになります:
# ❌ Wrong: Will hang waiting for input
vim file.txt
nano file.txt
less output.txt
npm install # If package.json has prompts
# ✅ Correct: Use non-interactive alternatives
# Use Edit/Write tools for file editing
npm install --yes
2. 改行でコマンドを連結しない
# ❌ Wrong: Doesn't work as expected
command1
command2
# ✅ Correct: Use && or ;
command1 && command2
3. 終了コードを無視しない
# ❌ Wrong: Success message even if command failed
risky-command ; echo "Success!"
# ✅ Correct: Check exit code
risky-command && echo "Success!" || echo "Failed!"
4. cd を多用しない
エージェントモードでは、呼び出し間で作業ディレクトリは保持されません:
# ❌ Wrong: cd doesn't persist
# Call 1: cd /path/to/project
# Call 2: npm test # Runs in original directory!
# ✅ Correct: Use absolute paths or --prefix
npm test --prefix /path/to/project
# ✅ Or chain in single command
cd /path/to/project && npm test
5. エラー処理を省略しない
# ❌ Wrong: No error handling
./script.sh
./cleanup.sh
# ✅ Correct: Handle failures
./script.sh || { echo "Script failed" >&2; exit 1; }
./cleanup.sh
既知の問題の防止
このスキルは、情報源が記載された12件の既知の問題を防ぎます:
問題 #1:Git Bash で cygpath コマンドが見つからない(Windows)
エラー:bash: line 1: cygpath: command not found
情報源:https://github.com/anthropics/claude-code/issues/9883
発生する理由:Bash ツールが MSYS/Git Bash 上で Cygwin 専用の cygpath を使おうとします
防止策:
- Windows では Git Bash の代わりに WSL を使います
- Git Bash を使う場合は
CLAUDE_CODE_GIT_BASH_PATHを設定します - cygpath が必要な場合は Cygwin をインストールします
問題 #2:パイプコマンドの失敗
エラー:echo test|grep test が "test" ではなくエラーを返します
情報源:https://github.com/anthropics/claude-code/issues/774
発生する理由:一部の設定でパイプの解析に問題があります
防止策:
# ❌ Avoid direct pipes
echo test|grep test
# ✅ Use explicit bash -c
bash -c 'echo test | grep test'
# ✅ Or use specialized tools (Grep tool instead)
問題 #3:コマンドのタイムアウト(Promise が停止したままになる)
エラー:A hanging Promise was canceled
情報源:Bash ツールのデフォルトのタイムアウトは 2 分です
発生する理由:タイムアウトが設定されていない長時間実行コマンドです
防止策:
# For long operations, set timeout explicitly
Bash(
command="npm run build",
timeout=600000, # 10 minutes
description="Build production bundle (may take several minutes)"
)
# Or run in background
Bash(
command="npm run build > build.log 2>&1 &",
description="Start build in background"
)
問題 #4:出力の切り詰めによる欠落
エラー:重要な出力が応答に含まれません 情報源:Bash ツールは出力を 30,000 文字で切り詰めます 発生する理由:コマンド出力が大きく、上限を超えています
防止策:
# ❌ Wrong: Full output may be truncated
npm test
# ✅ Correct: Limit output
npm test 2>&1 | head -100
# ✅ Or save to file
npm test > test-results.txt && tail -50 test-results.txt
問題 #5:「適切なシェルが見つかりません」(Windows)
エラー:CLI が「適切なシェルが見つかりません」というエラーで失敗します 情報源:https://github.com/anthropics/claude-code/issues/3461 発生する理由:Git Bash 環境でシェルの検出に問題があります
防止策:
- SHELL 環境変数を明示的に設定します
- 互換性を高めるために WSL を使います
- 最新バージョンの Claude Code CLI をインストールします
問題 #6:Bash ツールへのアクセスが失われる
エラー:Claude が Bash() ツールを実行できなくなります 情報源:https://github.com/anthropics/claude-code/issues/1888 発生する理由:セッション状態の破損。長時間のアイドル状態の後に発生することがよくあります
防止策:
- Bash が使えなくなった場合は Claude Code セッションを再起動します
/permissionsコマンドで権限を確認しますrestart: trueパラメーターを使って Bash セッションをリセットします
問題 #7:対話型プロンプトによる停止
エラー:出力がないまま、コマンドが停止し続けます 発生する理由:コマンドが対話型入力(パスワードや確認)を求めています
防止策:
# ❌ Wrong: Will hang
npm install # If package.json has interactive prompts
# ✅ Correct: Non-interactive flags
npm install --yes
# ✅ Correct: Provide input via stdin
echo "yes" | command-that-needs-confirmation
問題 #8:アクセス許可エラー
エラー:permission denied または command not found
発生する理由:スクリプトに実行権限がないか、PATH に含まれていません
防止策:
# Make script executable first
chmod +x script.sh && ./script.sh
# Use full path
/usr/local/bin/mycli deploy
# Or use interpreter directly
python3 script.py
node script.js
問題 #9:環境変数が保持されない
エラー:あるコマンドで設定した変数が次のコマンドで使用できません 原因:呼び出しの間にエージェントのスレッドが環境をリセットします
予防策:
# ❌ Wrong: Split across calls
# Call 1: export API_KEY=abc123
# Call 2: curl -H "Authorization: $API_KEY" ... # $API_KEY empty!
# ✅ Correct: Same command
export API_KEY=abc123 && curl -H "Authorization: $API_KEY" ...
# ✅ Or use SessionStart hook
問題 #10:Git コミットフックによる変更が検出されない
エラー:pre-commit フックがファイルを変更しますが、コミットに失敗します 原因:ステージング後にフックがファイルを変更します
予防策:
# After commit fails due to hook changes:
# 1. Check if you can amend (not pushed, authored by you)
git log -1 --format='%an %ae'
# 2. If safe, amend
git add . && git commit --amend --no-edit
# 3. If not safe, make new commit
git add . && git commit -m "Apply pre-commit hook changes"
問題 #11:ワイルドカード権限のマッチングが機能しない
エラー:Bash(*) または Bash(*:*) でアクセスが許可されません
出典:https://github.com/anthropics/claude-code/issues/462
原因:許可リストの構文が一致していません
予防策:
// ❌ Wrong
{"allowedTools": ["Bash(*)"]}
// ✅ Correct
{"allowedTools": ["Bash"]}
// Or specific patterns
{"allowedTools": ["Bash(git *)", "Bash(npm *)"]}
問題 #12:危険なコマンドの実行
エラー:誤って rm -rf / を実行したり、main に強制プッシュしたりします
原因:破壊的な操作に対するガードレールがありません
予防策:危険なコマンドガードを備えた PreToolUse フックを使用します(「セキュリティ」セクションを参照)
同梱リソースの使用
スクリプト(scripts/)
1. dangerous-command-guard.py 目的:危険な bash パターンをブロックする PreToolUse フック 使用方法:settings.json で設定します(「セキュリティ」セクションを参照)
2. bash-audit-logger.sh 目的:すべての bash コマンドをタイムスタンプ付きで記録します 使用方法:PreToolUse フックとして設定します
3. package-manager-enforcer.sh 目的:ロックファイルに基づいて pnpm/yarn/npm を強制します 使用方法:PreToolUse フックとして設定します
リファレンス(references/)
1. git-workflows.md Git 自動化パターン、コミットメッセージの形式、PR 作成について詳しく説明します
2. hooks-examples.md 一般的なシナリオ向けのフック設定例をすべて紹介します
3. cli-tool-integration.md カスタム CLI ツールを Claude Code と統合する方法を説明します
4. security-best-practices.md bash 自動化に関する包括的なセキュリティガイドです
5. troubleshooting-guide.md 既知の 12 件の問題すべてに対する詳しい解決策です
テンプレート(templates/)
1. settings.json フックの設定例を含む、完全な settings.json です
2. dangerous-commands.json ブロックする危険なパターンの一覧です
3. custom-command-template.md .claude/commands/ ファイルを作成するためのテンプレートです
4. github-workflow.yml Claude Code と統合する GitHub Actions です
5. .envrc.example 環境管理のための direnv 統合です
依存関係
必須:
- Claude Code CLI(最新バージョン)
- bash 4.0 以上(永続セッションのサポート)
任意(特定の機能向け):
jq(フックでの JSON 処理) -brew install jq/apt install jqgh(GitHub CLI 統合) -brew install gh/apt install gh- Python 3.7 以上(Python ベースのフック向け)
- direnv(環境管理) -
brew install direnv
公式ドキュメント
- Bash ツールリファレンス:https://docs.claude.com/en/docs/claude-code/tools
- Claude Code フック:https://docs.claude.com/en/docs/claude-code/hooks
- Claude Code のベストプラクティス:https://www.anthropic.com/engineering/claude-code-best-practices
- MCP によるコード実行:https://www.anthropic.com/engineering/code-execution-with-mcp
- Cloudflare Code Mode:https://blog.cloudflare.com/code-mode/
本番環境での例
このスキルは、次の実際の使用例に基づいています:
- WordPress Auditor:Git ワークフロー、PR の自動化
- claude-skills repo:カスタムコマンド、フックの設定
- 複数のクライアントプロジェクト:CLI ツールのオーケストレーション
測定された効果:
- トークンの削減:約 55%(手動での試行錯誤との比較)
- エラーの防止:記録された 12 件の問題 → 発生 0 件
- 時間の短縮:並列実行によりワークフローが約 40%高速化
- セキュリティ:フックにより危険なコマンドを 100%防止
完全セットアップチェックリスト
- Claude Code CLI がインストールされ、更新されている
- Bash 4.0 以降が利用可能(
bash --version) - jq がインストールされている(フック用):
brew install jqまたはapt install jq - gh CLI がインストールされている(Git ワークフロー用):
brew install ghまたはapt install gh - 設定ディレクトリが作成されている:
mkdir -p ~/.claude/hooks - フックスクリプトを
~/.claude/hooks/にコピーした - スクリプトを実行可能にした:
chmod +x ~/.claude/hooks/*.sh - 使用するフックを設定して
~/.claude/settings.jsonを構成した - 危険なコマンドのガードをテストした
- Bash の監査ログを確認した
-
.claude/commands/に最初のカスタムコマンドを作成した - Git ワークフローパターンをテストした
質問や問題がありますか?
- 詳しい解決方法については
references/troubleshooting-guide.mdを確認してください - 設定例については
references/hooks-examples.mdを確認してください - 公式ドキュメントを参照してください:https://docs.claude.com/en/docs/claude-code/hooks
- 上記のセットアップチェックリストのすべての手順を確認してください