Claude Code 安全運用 研修 / モジュール 1(公開版)
削除とデータ破壊を、実行の手前で機械的に止める。実際の事故と、手を動かす演習で学びます。
これは研修の公開のモジュールです。そのまま読んで手を動かせます。残りのモジュール(機密の保護、費用の管理、サブエージェントの制御、組織の baseline、事故対応)の構成はカリキュラムをご覧ください。
Claude Code のようなエージェントは、人の確認を待たずにコマンドを実行できます。「危険な操作はしないで」と CLAUDE.md に書いても、その指示は文章であり、文脈の圧で素通りされることがあります。実際に、CLAUDE.md の指示を素通りして機密が漏れた事故が報告されています(#2142)。
だから、取り返しのつかない操作は、人の注意力や文章の指示ではなく、実行の手前で機械的に止める層(hook)で守ります。hook は、コマンドが実行される直前にその中身を検査し、危険なら終了コード 2 で止めます。これは自動承認(auto)モードでも効きます。
抽象論ではなく、番号で辿れる実際の事故で学びます。各事故について「何が起きたか」「なぜ起きたか」「何が止めたはずか」を見ます。
drizzle push --force 系)で、本番のスキーマの約60のテーブルが消失。prisma-migrate-guard など)。db push(#14411)prisma db push --accept-data-loss が実行され、データが失われた。--accept-data-loss を含むマイグレーションを遮断する hook。rm-safety-net)。hook は自動承認とは別の層で効きます。.env の削除(#65034).env が削除された。秘密と設定の喪失。backend/.env など)を含めて .env の削除を止める hook(rm-safety-net)。実際に hook を入れて、危険なコマンドが止まることを確認します。所要およそ10分。
cc-safe-setup(無料・MIT)が、削除・データ破壊・機密の防御の hook を1コマンドで入れます。
npx cc-safe-setup
これで rm-safety-net / prisma-migrate-guard / git-history-rewrite-guard を含む hook が ~/.claude/settings.json に登録されます。仕組みを理解するために、登録の形だけ示します(PreToolUse の Bash の hook)。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "~/.claude/hooks/rm-safety-net.sh" }
]
}
]
}
}
hook は、コマンドを JSON で受け取り、危険なら終了コード 2 を返します。次のように、危険なコマンドが実際に止まることを確かめます(実際には消さずに、hook の判定だけを見ます)。
# 再帰的な削除が止まる(終了コード 2 = 遮断)
echo '{"tool_input":{"command":"rm -rf /home/me/project"}}' \
| ~/.claude/hooks/rm-safety-net.sh ; echo "exit=$?"
# 下層の .env の削除も止まる(#65034 の対策)
echo '{"tool_input":{"command":"rm backend/.env"}}' \
| ~/.claude/hooks/rm-safety-net.sh ; echo "exit=$?"
# データ消失を伴うマイグレーションが止まる
echo '{"tool_input":{"command":"prisma db push --accept-data-loss"}}' \
| ~/.claude/hooks/prisma-migrate-guard.sh ; echo "exit=$?"
いずれも BLOCKED: ... の表示とともに exit=2 になれば、止める層が効いています。
防御は、普段の作業を止めてはいけません。安全な対象は通過します。
# 安全な削除は通過(終了コード 0)
echo '{"tool_input":{"command":"rm -rf node_modules"}}' \
| ~/.claude/hooks/rm-safety-net.sh ; echo "exit=$?"
exit=0 になれば、通常の削除は妨げられていません。
.env の削除が exit=2 で止まることを確認した。node_modules など)は exit=0 で通過することを確認した。CLAUDE.md)でなく実行の層の hook が要るのかを、自分の言葉で説明できる。npx cc-safe-setup --team で .claude/hooks/ に入れて git で配布する。このモジュールは「止める層」の入口です。研修の全体(約12時間・7モジュール)では、機密と認証情報の保護、費用と利用枠の管理、サブエージェントと auto モードの制御、組織の baseline と CI のゲート、事故対応と復旧までを、同じように手を動かして学びます。
本モジュールは公開版です。引用した事故はすべて番号で辿れる実際の報告で、演習で使う hook はすべて cc-safe-setup(無料・MIT)に実在します。個人での利用は無料のままです。