1週間で2件、Claude Codeがデータベースを消す事故が報告された。
事故1:SQLiteデータベースの全削除(#37405)
677件のPDFをOCR処理して作った301MBのSQLite FTS5データベース。完成していた。
新しいセッションでClaude Codeが起動した。指示なし、確認なし、警告なし。full_index()を実行した。既存のデータベースを削除して、インデックスを最初から作り直した。
事故2:Laravelのmigrate:fresh(#37439)
テストデータベースのスキーマを修正しようとして、Claude Codeがphp artisan migrate:fresh --env=testingを実行した。
問題は、.env.testingファイルが存在しなかったこと。Laravelの--envフラグはファイルがなければ.envにフォールバックする。.envは本番データベースを指していた。
全データが消えた。
なぜ起きるか
Claude Codeはデータベースコマンドの危険性を「知っている」。だが知っていることと実行しないことは別。
コンテキストが長くなると、システムプロンプトの指示が薄れる。「本番DBに触るな」というCLAUDE.mdの指示は、100回目のツール呼び出しでは最初ほど効かない。
フックで防ぐ
PreToolUseフックはコンテキスト長に関係なく、毎回のツール呼び出しで実行される。
#!/bin/bash
COMMAND=$(cat | jq -r '.tool_input.command // empty' 2>/dev/null)
[[ -z "$COMMAND" ]] && exit 0
# Laravel
if echo "$COMMAND" | grep -qiE 'artisan\s+(migrate:fresh|migrate:reset|db:wipe)'; then
echo "BLOCKED: 破壊的データベースコマンド" >&2
exit 2
fi
# .envファイル存在チェック
if echo "$COMMAND" | grep -qE 'artisan.*--env='; then
ENV_NAME=$(echo "$COMMAND" | sed -n 's/.*--env=\([a-zA-Z0-9_]*\).*/\1/p')
if [ -n "$ENV_NAME" ] && [ ! -f ".env.$ENV_NAME" ]; then
echo "BLOCKED: .env.$ENV_NAME が存在しない(.envにフォールバックする)" >&2
exit 2
fi
fi
# Django
if echo "$COMMAND" | grep -qiE 'manage\.py\s+(flush|sqlflush)'; then
echo "BLOCKED: 破壊的データベースコマンド" >&2
exit 2
fi
# 生SQL
if echo "$COMMAND" | grep -qiE 'DROP\s+(DATABASE|TABLE)|TRUNCATE'; then
echo "BLOCKED: 破壊的SQL" >&2
exit 2
fi
exit 0
exit code 2は絶対ブロック。Claudeは上書きできない。
設定
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "~/.claude/hooks/block-database-wipe.sh" }]
}]
}
}
教訓
CLAUDE.mdに「データベースを消すな」と書いても、コンテキストが長くなれば無視される。フックは無視されない。
ルールを書くな。フックを書け。
🛡 npx cc-safe-setup — 667の安全フック + 9,200+のテストを10秒でインストール
📖 トークン消費に困っているなら → Claude Codeのトークン消費を半分にする——800時間の運用データから見つけた実践テクニック(¥2,500・はじめに+第1章 無料)
⚠ Opus 4.7緊急情報(2026年4月)
auto modeの安全分類器がOpus 4.6にハードコードされており、Opus 4.7では正常に機能しない(#49618)。hookはモデル非依存で動作するため、分類器の故障に関係なく防御が機能する。→ Opus 4.7 Survival Guide / 設定の危険度スキャナ
📖 AIで事業を回す実体験を全記録 → Claude Code×個人事業 800時間の全記録(¥800・第2章まで無料)
⚠️ 新CVE公開(2026年4月): CVE-2026-21852でプロジェクト内の.claude/settings.jsonからAPIキーが窃盗される脆弱性が判明。npx cc-safe-setupはユーザーレベル設定のみを使用するため、この攻撃に免疫がある。詳細: Opus 4.7 Survival Guide(48問題追跡中)
📚 関連商品: 留まる + 切り替えるの 8 gate / 13 leaf の判定の樹を含む Migration Playbook 第 2 版 (Gumroad、 19 米ドル、 第 1 版の購入者は無償の更新)。
📚 関連の参考資料 (2026年5月28日追加)
本記事の内容と関連する整理を、 公開済の素材で articulate しています。
-
6月15日に予定された課金分離(当日に一時停止・再実施に備える)の判定の枠組み: Migration Playbook v2 (Gumroad、 $19) ——14日後の決定の整理、 9集積の文脈、 130件の claim-verify divergence の事例。 60秒の購入判定の道具で事前判定が可能
-
月次の追補の継続: Claude Code 事故まとめ(無料・月次) ——5月から12月の8ヶ月の章本文 (cache_control / 副の作業者 / AGENTS.md / Pro Max / 権限 / Skills / v2.1.150 / AUP false-positive)
-
9集積の枠組みの英語の長編 Gist: The 9-Cluster Framework: Mapping the Structural Failure Surface of Claude Code Operator Defense ——約3,300単語、 全件の集積の mechanism / symptom family / defense path の整理。 cluster 9 (Usage Policy classifier over-trigger on Opus、 25+件の起票) の対話型診断道具: 4問の質問→推奨経路の道具
-
約800件の MIT ライセンスの hook: cc-safe-setup (GitHub) ——9集積に対応する hook を整備した累計
「2 回消えた」あなたへ——同じ事故を、 起きる前に止め、 起きた後に取り戻す
データベースが消えた時、 本当に怖いのは「もう戻らないかもしれない」という時間です。 私も深夜にファイルを 2 回消し、 /rewind でコードを失い、 アップグレードの後にセッションが空に見えた時、 同じ恐怖を味わいました。——どれも、 止め方と取り戻し方を先に知っていれば防げました。
この記事のフックを含め、 本番の破壊を「起きる前に止める一行」と「起きた後にどう取り戻すか」を、 診断 19 点から 85 点までの全工程としてまとめたのが Anthropic 公式ガイドにない事故防止 (Zenn、 第 3 章まで無料) です。 本番のデータベースの破壊そのものを扱う章 (第 28 章) を含み、 月ごとに新しい事故の章が増えます。 まず無料の 3 章で現在地を確かめてください。
普段 Amazon で本を読む方へ: 同じ事故防止本の Kindle 版もあります(Kindle Unlimited 対応): https://www.amazon.co.jp/dp/B0H69B7SVZ
ほかにも、800時間の運用データから、トークン消費の削減・複数ベンダー(Claude / Codex / Gemini / Copilot)の並行運用・サブエージェントの沈黙の失敗対策など、テーマ別の手引きを公開しています。気になる人は著者の本の一覧から、価格と評価を見て選べます。