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 に書くのは無駄ではありません。私が測った48試行では、禁止を書いた25試行で違反は0回でした。取り返せない操作(ファイルの削除)で測った回も同じ向きでした。違うのは保証の質です。ルールが効いているのはモデルがそう選んでいるからで、次も選ぶ保証はありません。しかも長い対話でルールが文脈から押し出されたあとは、私も測れていません。hook はプロセスの層で、モデルの制御の外で動きます。終了コード2で終わる PreToolUse の hook は、そのコマンドが実行される前に止めます。止めるのは終了コード2のときだけなので、hook 自身が落ちると黙って素通しします。入れたら一度は実際に止まることを確かめてください。

入れる

npx github:yurukusa/cc-safe-setup --install-example block-database-wipe

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

npx github:yurukusa/cc-safe-setup --shield

Laravel の場合

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

データベースを守る

npx github:yurukusa/cc-safe-setup --install-example block-database-wipe

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

関連するページ

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

さらに詳しく: 事故防止の実践ガイド(Zenn) / Kindle版(2026年6月時点の内容) · English version · 全ツール