「Claude Codeで開発するのは楽しいんですけど、危険なコマンド実行や外部依存が混ざるのが怖いんですよね」 — 研修先で何度も聞く相談です。AIにコードを任せる「バイブコーディング」が当たり前になった2026年に、安全運用の作法は明確に押さえておきたい論点です。

この記事は、私が研修先で配っているClaude Code安全運用のための3層チェック体制を、自分のリポジトリで明日から使える形にまとめたものです。

なぜ3層なのか

「ひとつしっかり仕組みを入れれば大丈夫」と思いがちですが、現実は違います。AIにコードを書かせる以上、ミスは絶対に起きる。どこか1ヶ所を抜けても他で拾える多層構造が要ります。

私が現場で使っている3層は次のとおりです。

タイミング

守備範囲

第1層

Claude Codeがファイル編集する時

危険操作の事前確認・拒否

第2層

gitコミットする時

機密情報の混入・スタイル違反検出

第3層

CI(自動テスト)時

テスト失敗・lint違反の最終ストップ

3層あれば、1層で抜けたものを2層で、2層で抜けたものを3層で、それぞれ捕まえられる。完璧な仕組みを1つ作るより、ゆるい仕組みを3つ重ねるほうが現実的です。

第1層 — permissionsで危険操作を止める

Claude Codeにはpermissions(権限)の仕組みが標準で入っています。これが第1層の守備の中核です。

私の運用で必ず設定しているのは次の項目。

  • rm -rf 系の破壊コマンドは拒否(deny)に固定
  • curl wget での外部通信は確認(ask)に
  • npm install pip install は確認(ask)に
  • ファイル書き込みは確認(ask)、自動承認モードでは有効化

.claude/settings.json に書いておけば、Claude Codeが「これ実行していい?」と毎回確認してくれる挙動になります。

ここで大事なのが、--dangerously-skip-permissions 起動を禁止すること。確認を全部スキップするオプションですが、これは捨てて構わない検証環境専用です。本番に近いプロジェクトでは絶対に使わない、という線をチームで握る。

第2層 — pre-commit hookで機密混入を防ぐ

第1層を通っても、機密情報(APIキー、パスワード)がうっかりコードに混入することはあります。

これを止めるのが、第2層のpre-commit hook。コミット直前に走るスクリプトで、機密情報を含むコミットを拒否します。

# .git/hooks/pre-commit の例
#!/bin/bash
if grep -rE "(api[_-]?key|secret|password|token)[\"']?\s*[:=]\s*[\"'][a-zA-Z0-9]{20,}" \
  --include="*.js" --include="*.ts" --include="*.py" --include="*.go" --include="*.md" .; then
  echo "❌ 機密情報の混入を検知。コミット中止。"
  exit 1
fi

これは簡易版ですが、detect-secretsgitleaks のような専用ツールを使えば、もっと丁寧に検出できます。Claude Codeのhooksとの組み合わせで自動化も可能です。

私の経験では、機密情報混入の事故はチーム規模が小さいほど起こりやすい。「うちは少人数だから」が、いちばん危ない油断です。

第3層 — CIで最終チェック

最後の砦は、CI(継続的インテグレーション)です。GitHub ActionsやGitLab CIで、プルリクエストが立った時に自動で走る検査の層。

ここでチェックするのは3点。

  • テスト — 既存のテストが通るか
  • lint — コーディングスタイル違反がないか
  • 依存性監査 — 危険な脆弱性を持つパッケージが混じっていないか

/code-review ultra をCIから呼び出して、追加のレビューを通す構成も2026年は現実的になっています。

Claude Codeが書いたコードを、別の(クラウド側の)Claude エージェントが多角的にレビューする、という構図。同じ会社の別のAIに見せて筋を通すのは、人間のコードレビューより速く、見落としが減ります。

3層を組んだあとの確認

設定が終わったら、自分で破ろうとして試すのが鉄則です。

第1層 — Claude Codeに「rm -rf /tmp」と指示してみて、止まるか確認 第2層 — テスト用に偽のAPIキーをコミットしてみて、止まるか確認 第3層 — わざと壊れたテストをプッシュしてみて、CIが止まるか確認

「壊して直す」を1巡しておくと、いざ本番で何か起きた時の挙動の予測がつきます。

チーム導入の順序

人数の多いチームで導入する時の順序を書いておきます。

最初は第3層のCIから入れるのがおすすめ。社員のローカル環境を一律に触らずに、リポジトリ側だけで安全網を作れるからです。

次に第1層のpermissions共有。.claude/settings.json をリポジトリにコミットすれば、チーム全員に同じ設定が配布できます。

第2層のpre-commit hookは最後。社員のローカルGitフックの設定に踏み込むので、合意形成が要ります。

まとめ

  • AIにコード任せる時代の安全運用は、ファイル編集時・コミット時・CI時の3層チェック
  • 第1層はpermissions設定。破壊系を拒否、外部通信や install を確認に
  • 第2層はpre-commit hook。機密情報の混入を直前で止める
  • 第3層はCI。テスト・lint・依存性監査+ultrareviewでの最終チェック
  • 設定後は自分で破ろうとして挙動を確認する
  • チーム導入はCI→permissions→pre-commit hookの順序が摩擦が少ない