Claude Code のような AI に仕事を任せるとき、いちばん怖いのは「対策したから大丈夫」という思い込みだ。経営者が設定を覚える必要はない。社員や外注先に、5つのことを「見せて」と言えればいい。
AI は、頼んだ以上のことに手が届く
Claude Code は、会話で頼むだけでパソコンの中のファイルを読み、書き換え、コマンドを実行する。公式の説明はこうだ。
Claude Code is an agentic coding tool that reads your codebase, edits files, runs commands, and integrates with your development tools.
(Claude Code は、コードを読み、ファイルを編集し、コマンドを実行し、開発ツールとつながる、エージェント型のコーディングツールだ)
便利さの裏返しで、使い方次第では次のことが起きうる。
- 社員のパソコンにあるお客様の情報や、保存してあるパスワードに届く
- 頼んだ作業と関係のないファイルを書き換えたり、消したりする
- 渡した鍵(GitHub などのアカウントの権限)で、頼んでいない場所まで操作できてしまう
ネットで読んだ指示に、AI が乗っ取られる心配もある。公式も「プロンプトインジェクション」として、対策の節を設けている。
「対策したつもり」になりやすい3つの落とし穴
よく紹介される対策の中には、効かないものや、思ったより弱いものがある。入れただけで安心すると、事故の元になる。
1. .claudeignore は効かない
「AI に読ませたくないファイルは .claudeignore に書けばいい」と紹介している記事がある。公式ドキュメントは、これを効果がないと書いている。
If your project has a
.claudeignorefile, it has no effect, so move its entries intoReaddeny rules.(プロジェクトに
.claudeignoreファイルがあっても効果はない。中身はReadの拒否ルールに移すこと)
このサイトでも、以前は .claudeignore に書いて、読ませないつもりになっていた。2026年10月26日に、よくある使われ方をまねた小さなプロジェクトを作って、試し直した。
- 置いたファイル: 決済サービスの鍵を書いた設定ファイル(
.env)と、お客様の名簿(customers.csv)。どちらも中身は架空 .claudeignoreに、その2つを書いた- Claude Code に「中身を見せて」と頼んだ
2つとも、中身がそのまま表示された。
試したファイルと、表示された中身
.claudeignore には、こう書いた。
# AI に読ませないファイル
.env
.env.*
data/customers.csv
Claude Code(2.1.310)が表示した中身。値はどちらも架空。
STRIPE_SECRET_KEY=sk_test_DUMMY_0000_for_claudeignore_check
DATABASE_URL=postgres://user:DUMMYPASS@localhost/app
山田太郎,dummy@example.com,090-0000-0000
公式の言うとおり拒否ルールに移すと、ふつうの読み方は止まった。ただし、それだけでは抜けがあった。後の「全部閉じても、仕事にならない」で書く。
2. 「やってはいけないこと」を書いた指示ファイルは、守られる保証がない
Claude Code には、作業のルールを書いておく指示ファイル(CLAUDE.md)がある。「本番には触らない」「このフォルダは読まない」と書いておけば守ってくれそうに見える。公式はこう書いている。
Settings rules are enforced by the client regardless of what Claude decides to do. CLAUDE.md instructions shape Claude's behavior but are not a hard enforcement layer.
(設定のルールは、Claude が何を判断しても、ツール側が強制する。CLAUDE.md の指示は Claude の振る舞いに影響するが、強制する層ではない)
指示はお願いで、仕組みではない。止めたいことは、設定やパソコン側の仕組みで止める必要がある。
3. 「作業フォルダの外には出ない」も、壁ではない
Claude Code は、毎回確認する設定(Manual モード)のとき、作業を始めたフォルダの外のファイルを読み書きする前に、確認を求める。ただし公式は、これが壁ではないと書いている。
The boundary is a permission prompt, so a Bash command you approve can still write anywhere your user account can
(この境界は確認の画面にすぎない。あなたが承認したコマンドは、あなたのアカウントが書ける場所ならどこにでも書ける)
— Security
確認の画面で「許可」を押し続ければ、境界は無いのと同じになる。パソコンの仕組みで閉じ込めるには、公式のサンドボックスや、別の仮想マシン・コンテナで動かす方法がある。
経営者が確かめる5つのこと
社員や外注先に、次の5つを聞く。答えを聞くだけでなく、できればその場で見せてもらう。
| 聞くこと | 安心できる答え | 危ない答え |
|---|---|---|
| 1. AI が触れる範囲はどこまで? | 作業用の場所に閉じ込めてあり、会社の他のファイルや保存したパスワードには届かない | 普段使っているパソコンでそのまま動かしている |
| 2. AI に渡した鍵で何ができる? | この作業の1つだけ、必要な権限だけ、期限付き | 自分のアカウントでログインしたまま使わせている |
| 3. 本番に出すのは誰が決める? | AI は下書きまで。公開は自動の確認を通ったものか、人が決める | AI が直接公開できる |
| 4. 禁止は「お願い」か「仕組み」か? | 設定や仕組みで止めていて、止まるところを見せられる。止めきれないところと、その理由も言える | 指示ファイルに書いてある、.claudeignore に書いてある |
| 5. おかしなことが起きたら気づける? | 公開前に自動の確認があり、止まった記録が残る | 気づくのはお客様から連絡が来たとき |
全部閉じても、仕事にならない
公式のサンドボックスを、実際に入れて試した。2026年10月25〜26日に、Claude Code 2.1.310 で確かめた。
分かったことは2つある。読ませない設定は、1つだけだと抜ける。そして完璧に閉じると、仕事が止まる。
読ませない設定は、2つ重ねないと抜ける
先ほどの架空の鍵と名簿で、読ませない設定を1つずつ足していった。
.claudeignoreだけ: Claude Code のファイルを開く機能で、そのまま読めた- 公式の推す拒否ルール: ファイルを開く機能と、
cat(ファイルを表示するコマンド)は止まった。フォルダ全体の検索(grep -r)と、Python のプログラムで開く方法では、中身まで読めた - サンドボックスの読み取り禁止も足す: ファイルを開く機能・
cat・検索・Python の、どれも止まった
拒否ルールの抜けは、公式も書いている。
They don't apply to a command that reads files without naming them, such as
grep -r pattern .run from the directory that holds the file, or to arbitrary subprocesses that read or write files indirectly, like a Python or Node script that opens files itself. For OS-level enforcement that blocks all processes from accessing a path, enable the sandbox.(拒否ルールは、ファイル名を書かずに読むコマンドには効かない。そのファイルがあるフォルダで実行する
grep -r pattern .などだ。Python や Node のプログラムが自分でファイルを開くような、間接的な読み書きにも効かない。すべての処理を OS の段階で止めるには、サンドボックスを有効にすること)
逆に、サンドボックスだけでも足りない。別の試しで、サンドボックスで隠したフォルダのファイルを、ファイルを開く機能では読めた。公式も、ファイルを開く機能はサンドボックスの外で動くと書いている。
閉じるほど、できることが減る
サンドボックスの閉じ方を変えて、ふだんの作業を流した。
- 入れただけ(初期設定): 作業フォルダの外への書き込みと、許可していない通信先は止まった(確認の画面を出さずに断る形で動かした)。パソコンの鍵が入るフォルダ(
~/.ssh)は読めた。サイトの自動テストは、中で動かなかった - 全部閉じる(作業フォルダの外は読めない、通信先もゼロ): 鍵のフォルダは見えなくなった。代わりに、AI が使う道具まで見えなくなり、ほぼ何もできなかった
- 必要なところだけ開ける: 道具は動いた。自動テストは、サンドボックスの外に出すしかなかった。GitHub など、鍵を使う外部への操作も、うちの環境では中から通らなかった
つまり、どこかは必ず開けることになる。開けたところに、別の守りを置く必要がある。
じゃあ、どうすればいいか
全部を一度にやる必要はない。上から順に進めるほど、事故の起きる余地は小さくなる。ただし、ゼロにはならない。
まず、今日からできること
設定の知識がなくても、社内のルールとして決められる。
- 普段使いのパソコンで、確認をスキップする設定を使わせない
- 社員の個人アカウントでログインしたまま、AI に作業させない。AI 用に、範囲と期限を絞った鍵を別に作る
.claudeignoreで済ませている人がいたら、拒否ルールに移してもらう
鍵の範囲は、ここで差が出る。GitHub の公式は、従来型の鍵についてこう書いている。
Your personal access token (classic) can access every repository that you can access.
(従来型の個人用アクセストークンは、あなたがアクセスできるすべてのリポジトリにアクセスできる)
「確認をスキップする設定」について
Claude Code には、確認の画面を出さずに作業させる設定(bypassPermissions)がある。作業は速くなるが、公式は使う場所を限っている。
Only use this mode in isolated environments like containers or VMs where Claude Code can't cause damage.
(Claude Code が害を与えられない、コンテナや仮想マシンのような隔離された環境でだけ使うこと)
次に、仕組みで閉じる
ここからは、社員や外注先に頼む作業だ。
- AI を動かす場所を、普段の仕事の場所から分ける。別のパソコン、仮想マシン、コンテナのどれでもいい
- お客様の情報や鍵のファイルは、拒否ルールとサンドボックスの読み取り禁止を、両方かける
- 通信先は許可制にする。許可していない宛先には、確認の画面が出る
サンドボックスには、「入れたつもり」で抜ける初期値が3つある。
- 必要な部品が無いとき: 公式は "By default, if the sandbox can't start because a dependency is missing or the platform is unsupported, Claude Code runs commands without sandboxing."(初期設定では、部品が無いなどでサンドボックスが起動できないと、サンドボックス無しでコマンドを実行する)と書いている。止めるには
failIfUnavailableを有効にする - 中で失敗したとき: AI がサンドボックスの外での再実行を求めることがある。ふだんは確認の画面が出るが、確認をスキップする設定では、確認なしで外で動く。止めるには
allowUnsandboxedCommandsを無効にする - 許可していない通信先: 確認をスキップする設定では、許可していない宛先にも確認なしでつながる。手元の試しでも、許可していない宛先に通信が通った。
strictAllowlistを有効にすると、同じ試しで止まった
架空の鍵と名簿を、4つの読み方すべてから守れた設定
先ほどの試しで使ったプロジェクトに、この設定ファイル(.claude/settings.json)を置いた。ファイルを開く機能・cat・grep -r・Python の4つとも、中身を読めなかった。
{
"permissions": {
"deny": ["Read(./.env)", "Read(./.env.*)", "Read(./data/customers.csv)"]
},
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false,
"failIfUnavailable": true,
"filesystem": {
"denyRead": ["./.env", "./data/customers.csv"]
}
}
}
サンドボックスを使うには、Linux と WSL2 では bubblewrap と socat のインストールが要る。
それでも残るリスクは、被害を小さくする
閉じきれないところは、必ず残る。自動テストや、鍵を使う外部への操作がそうだ。そこは「起きない」ではなく「起きても小さく済む」ように備える。
- 鍵は、その作業に要る範囲と期限だけにする。漏れても、届く先が限られる
- AI に本番を直接触らせない。AI は下書きまでにして、公開の前に自動の確認か人の確認を挟む
- 止まった記録が残るようにする。何が止まったかを見れば、仕組みが効いているか分かる
うちも、同じ考え方で運用している
このサイトも、Claude Code に記事の修正やサイトの改修を任せている。考え方は、上に書いたとおりだ。
- AI を動かす場所を、普段の環境から分けている
- AI に渡す鍵は、範囲と期限を絞っている
- AI は本番に直接触れない。本番の前に、自動の確認を置いている
この記事を書いた日にも、AI の操作が仕組みに止められた。どれも本番に届く前に止まり、サイトに影響は出ていない。
細かい構成は、守りのために書かない。設計図を公開すると、その分だけ抜け道を探されやすくなるからだ。
自社で確かめるのが難しければ
5つの質問に、社内で答えられる人がいないこともある。外注先の答えが正しいか、判断できないこともある。
参考文献
- Claude Code overview — ファイルを読み、編集し、コマンドを実行する。参照日 2026-10-25
- Claude Code: Security — 作業フォルダの境界は確認の画面にすぎない・プロンプトインジェクションへの対策。参照日 2026-10-25
- Claude Code: Configure permissions —
.claudeignoreは効果がない・拒否ルールはgrep -rやプログラムには効かない・bypassPermissionsは隔離された環境でだけ。参照日 2026-10-26 - Claude Code: How Claude remembers your project — CLAUDE.md は強制する層ではない。参照日 2026-10-25
- Claude Code: Sandboxing — OS が強制する境界・ファイルを開く機能は外で動く・部品が無いとサンドボックス無しで動く。参照日 2026-10-25
- GitHub Docs: Managing your personal access tokens — 従来型の鍵はアクセスできる全リポジトリに届く。参照日 2026-10-25