第2部:「お願い」から「仕組み」へ:Claude Code安全設計の実践
- URL: https://zenn.dev/taka4/articles/56ca5ecb455e83
- 日付: 2026-06-22
- Tier: Tier 3
- 要旨: Claude Code CLIはデフォルトで多くの操作を自動実行できるが、意図しないgit reset –hard・.env書き換えのリスクがある。安全設計は「お願い」ではなく「仕組み」で実装。2層防御:Layer 1は permissions.deny(ネイティブ機能で Bash コマンド確認なしブロック)、Layer 2は hookify 宣言ルール(markdown で危険パターン検出)。設定レイヤー構造は グローバルユーザー→グローバルローカル→プロジェクト共有→プロジェクトローカル(下位が上書き、ただし permissions.deny はグローバル最優先)。Python実行許可と危険コードブロックのバランスは check-python-safety.sh で実現。パーミッションモード4種(default・accept edits・plan・auto)で操作確認プロンプトを制御。スタック別テンプレート用意で新規プロジェクト設定を高速化。
詳細
Claude Code は タスク渡すと自分でコマンド組み立て実行し、git reset –hard でコミット前変更消去・.env ファイル誤上書き・rm -rf で意図しないディレクトリ削除・os.system() 含む Python スクリプト実行といった事故のリスク。公式ドキュメント「Permission rules は Claude Code 自体が強制、プロンプト・CLAUDE.md の指示はモデルへの『お願い』であって Claude Code が何を許可するかは変わらない」。安全設計は「お願い」ではなく「仕組み」で実装。2層防御:Layer 1 は permissions.deny(ネイティブ機能で Bash コマンドを確認プロンプトなしでブロック)、Layer 2 は hookify プラグイン(markdown ファイルでフック宣言し正規表現で自由に拡張)。どちらか一方が機能しない環境でも最低限の安全性担保。設定レイヤー構造:~/.claude/settings.json(グローバルユーザー全プロジェクト共通)→ ~/.claude/settings.local.json(個人のみ gitignore)→ /.claude/settings.json(プロジェクト共有 git 管理)→ /.claude/settings.local.json(プロジェクトローカル gitignore)。基本的に下位レイヤーが上位を上書き、ただし permissions.deny はグローバルが最優先(プロジェクト側では解除不可)。permissions.allow は全レイヤーマージ(全て有効)。Python実行許可と危険コードブロックのバランス:python/python3 を allow で確認なし実行しつつ、フックが実行前にコード内容を静的解析して os.system()・subprocess.run()・shutil.rmtree()・eval()・exec()・import() といった危険パターンを検出・ブロック。検出時は exit code 2 で Claude Code が実行をブロック。パーミッションモード4種:default(ファイル確認・Bash 確認)・accept edits(ファイル自動・mkdir/touch/rm/rmdir/mv/cp/sed のみ自動)・plan(操作不可)・auto(自動許可原則、内蔵クラシファイアが危険と判断すればブロック)。settings.json で起動時デフォルトモード指定可。allow/deny 登録済みは全モードで有効。スタック別テンプレート(Python/TypeScript)用意で新規プロジェクト開始時に毎回設定一から作らず、cp ~/.claude/templates/{stack}/{CLAUDE.md,settings.local.json} .claude/ で完成。