git-guardrails について
git-guardrailsは、Claude CodeのPreToolUseフックを設定し、AIエージェントによる指定の危険なGitコマンドを遮断するスキルです。プロジェクト単位と全体の設定、遮断パターンの変更、動作確認に対応します。
主な機能
- 01指定した破壊的なGitコマンドの遮断
- 02プロジェクト単位または全体へのフック設定
- 03遮断パターンのカスタマイズ
- 04許可・遮断コマンドによる設定確認
- 05端末での手動コマンド実行には非干渉
活用シーン
- 01エージェントによる変更のプッシュ防止
- 02ハードリセットやブランチの強制削除への対策
- 03新規プロジェクトへのGitガード追加
- 04手動実行が必要なGit操作のカスタマイズ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dedalus-erp-pas/ foundation-skills --skill git-guardrailsインストール後、Claude Code で/git-guardrailsを入力して読み込まれたか確認します。
同梱ファイルreference/block-dangerous-git.sh
詳細
Git ガードレール
PreToolUse フックを設定し、Claude Code が危険な git コマンドを実行する前に検知してブロックします。
前提条件
- jq:フックのスクリプトがツール入力を解析するために必要です。
brew install jqまたはapt-get install jqでインストールしてください。- 重要:
jqがインストールされていない場合、フックはフェイルオープンとなり、すべてのコマンドが許可されます。セットアップ後は、必ずjqが利用可能であることを確認してください。
- 重要:
このスキルを使うタイミング
次のような場合に有効化してください:
- AI エージェントによる破壊的な git 操作の実行を防ぎたい
- Claude Code に git の安全フックを追加したい
git push、git reset --hard、その他の危険なコマンドをブロックしたい- 新しいプロジェクトをセットアップしており、git 操作にガードレールを設けたい
ブロックされるコマンド
次のコマンドは実行前に検知され、ブロックされます。
| パターン | 説明 |
|---|---|
git push | すべての push 形式(未レビューの push を防止) |
git push --force | 強制 push(リモートの履歴を書き換えます) |
git push --force-with-lease | 強制 push の形式の一つ |
git reset --hard | コミットされていない変更をすべて破棄します |
git clean -f / git clean -fd | 未追跡ファイルを完全に削除します |
git branch -D | マージ確認なしでブランチを強制削除します |
git checkout . | 作業ツリーの変更をすべて破棄します |
git restore . | 作業ツリーの変更をすべて破棄します |
main/master に対する git rebase | 保護されたブランチの rebase を防ぎます |
ブロックされると、Claude にはこれらのコマンドを実行する権限がないことを伝えるメッセージが表示されます。必要な場合は、ユーザーが手動で実行してください。
セットアップ手順
ステップ 1:適用範囲を確認する
ユーザーに、このプロジェクトのみ(.claude/settings.json)にインストールするか、すべてのプロジェクト(~/.claude/settings.json)にインストールするかを尋ねます。
ステップ 2:フックスクリプトをコピーする
同梱のスクリプトは次の場所にあります:reference/block-dangerous-git.sh
適用範囲に応じて、対象の場所にコピーします。
- プロジェクト:
.claude/hooks/block-dangerous-git.sh - グローバル:
~/.claude/hooks/block-dangerous-git.sh
実行可能にします。
chmod +x <path-to-script>
ステップ 3:設定にフックを追加する
該当する設定ファイルに追加します。
プロジェクトスコープ(.claude/settings.json):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/block-dangerous-git.sh"
}
]
}
]
}
}
グローバルスコープ(~/.claude/settings.json):
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/block-dangerous-git.sh"
}
]
}
]
}
}
設定ファイルがすでに存在する場合は、既存の hooks.PreToolUse 配列にフックをマージしてください。他の設定を上書きしないでください。
ステップ 4:カスタマイズについて確認する
ブロック対象のパターンを追加または削除するか、ユーザーに尋ねます。必要に応じてコピーしたスクリプトを編集してください。
ユーザーが追加を希望することの多い例:
git stash dropをブロックする(stash の誤削除を防止)git tag -dをブロックする(タグの削除を防止)git pushは許可し、--force形式のみをブロックする
ステップ 5:インストールを確認する
フックが動作することを確認するため、簡単なテストを実行します。
echo '{"tool_input":{"command":"git push origin main"}}' | <path-to-script>
期待される結果:コード 2 で終了し、stderr に BLOCKED メッセージが出力されます。
安全なコマンドでもう一度テストします。
echo '{"tool_input":{"command":"git status"}}' | <path-to-script>
期待される結果:コード 0 で終了します(許可)。
動作の仕組み
Claude Code は、ツールの呼び出し前に実行される PreToolUse フックをサポートしています。このフックは次の処理を行います。
- ツール入力を JSON として stdin で受け取ります
jqを使ってcommandフィールドを抽出します- コマンドを危険なパターンのリストと照合します
- 一致した場合、コード 2 で終了します(Claude にコマンドがブロックされたことを伝えます)
- 一致しない場合、コード 0 で終了します(通常どおり実行できます)
重要な注意事項
- このフックは AI エージェントが実行するコマンドのみをブロックします。ユーザーは引き続き、ターミナルで任意の git コマンドを手動で実行できます。
- ブロック対象のパターンは正規表現で照合されるため、
git pushはgit push origin main --forceも検知します。 jqがインストールされていない場合、スクリプトはフェイルオープンとなり、すべてのコマンドが許可されます。jqが利用可能であることを確認してください。- このフックは git の設定を変更せず、Claude Code のツール呼び出しを検知するだけです。