0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeがデータベースを消した。2回。——フックで防ぐ方法

0
Last updated at Posted at 2026-04-16

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)の並行運用・サブエージェントの沈黙の失敗対策など、テーマ別の手引きを公開しています。気になる人は著者の本の一覧から、価格と評価を見て選べます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?