Claude Code に本番データベースを消させない

Claude Code は Auto Mode で DROP DATABASEprisma migrate resetrails db:dropphp artisan migrate:fresh を、警告なしに実行できます。たった1つのコマンドで、本番のデータが一瞬で消えます。確認も、ゴミ箱も、取り消しもありません。

実際の事故: テストが本番のデータベースを消した

#401 — Claude が本番のデータベースの URL の入った .env を読み込み、その状態でテストを走らせて、本番のデータベースを丸ごと消した。

日本語圏でも、AI のコーディングのエージェントが「本番のデータベースと長年分の顧客のデータを一瞬で消した」という事例が広く共有されています。原因はどれも同じ構造です——確率的なモデルが、破壊的なコマンドを「必要だ」と判断し、誰の確認も経ずに実行できてしまう。

止めるもの

block-database-wipe の hook が捕まえるもの:

なぜ CLAUDE.md では防げないか

「本番のデータベースを消すな」という CLAUDE.md のルールは、プロンプトの文脈の一部にすぎません。文脈が一杯になればルールは押し出され、Claude がそのコマンドを「必要だ」と判断すれば無視されます。hook はプロセスの層で、モデルの制御の外で動きます。終了コード2で終わる PreToolUse の hook は、そのコマンドが実行される前に止めます——モデルはこれを迂回できません。

入れる

npx cc-safe-setup --install-example block-database-wipe

あるいは安全の設定を丸ごと入れる:

npx cc-safe-setup --shield

Laravel の場合

Claude が DB_DATABASE=production_db の入った .env を読み込んだ状態で php artisan migrate:fresh を走らせた場合、この hook が止めます。ただし根本の原因は .env がシェルに読み込まれること(English) なので、両方を直してください。

データベースを守る

npx cc-safe-setup --install-example block-database-wipe

734の hook · 9,200以上のテスト

関連するページ

cc-safe-setup はオープンソースで、依存はなく、グローバルには何も入れません。すべての hook はローカルで動きます。GitHub でソースを見る

さらに詳しく: 事故防止の実践ガイド(Zenn) · English version · 全ツール