エージェント基盤・プロトコル

サンドボックス実行とは|許可する操作を7個から2個に絞っても、やりたい処理は通った

サンドボックス実行とはどういう仕組みなのか絞り込むとやりたい処理まで止まらないかどこまで絞ればよいのか

AIにコードを書かせて実行させるとき、そのコードが何をするかは実行するまで分かりません。ファイルを消すコードが混ざっていても、動かせば消えます。

そこで実行できる操作をあらかじめ絞る仕組みがあります。許可する操作を7個から2個に減らして試したところ、止まったのは削除と外部送信の2種類だけでした。

この記事の要点

  • サンドボックス実行は触れる範囲をあらかじめ決めて動かす仕組み
  • 許可する操作を7個から2個に絞って試した
  • 止まったのは削除と外部送信で、集計と読み取りは通った
  • 境界を守るのはOS側で、AIの判断ではない

許可する操作を7個から2個に絞っても、やりたい処理は通った

4種類のコードで判定しました。絞ったあとも集計とファイル読み取りは通り、止まったのは削除と外部送信の2種類です。

サンドボックス実行で何が止まるのかを、コードの種類ごとに判定しました。用意したのはAIが書きそうな4種類のコードです。

断っておくと、これは実際のサンドボックスを動かした計測ではありません。許可する操作の一覧を置いて、通るかどうかを判定したものです。一覧はコードに書いてあります。

javascript
const CODES = [
  { name: '集計だけ',       ops: ['calc'] },
  { name: 'ファイルを読む', ops: ['calc', 'fs.read'] },
  { name: 'ファイルを消す', ops: ['fs.delete'] },
  { name: '外部に送信する', ops: ['net.post'] },
];

// そのまま実行: 何でもできる
const DIRECT_ALLOWED = ['calc', 'fs.read', 'fs.write', 'fs.delete',
                        'net.get', 'net.post', 'proc.spawn'];
// 隔離環境: 計算と、渡したデータの読み取りだけ
const SANDBOX_ALLOWED = ['calc', 'fs.read'];

const run = (code, allowed) => code.ops.every((op) => allowed.includes(op));
text
AIが書いたコードを実行するとき、何が通るか

コード              そのまま実行  隔離環境
集計だけ              実行される         実行される
ファイルを読む           実行される         実行される
ファイルを消す           実行される         拒否
外部に送信する           実行される         拒否

そのまま実行で通る: 4 / 4
隔離環境で通る:     2 / 4

許可される操作の種類: 7個 → 2個

絞り込みの代償が思ったより小さく出ました。許可を7個から2個へ減らしたのに、止まったのは削除と外部送信の2種類だけです。

巻き添えが出なかった理由

AIにコードを書かせてやりたいことの多くが、読んで計算するだけで済むためです。集計、変換、抽出。いずれも書き込みも通信も必要としません

逆に言えば、削除と外部送信はそもそも任せるつもりのなかった操作です。止まって困る場面がほとんどありません。

既定の範囲がすでに絞られている

実装されている仕組みも同じ方向です。Anthropicの説明では、サンドボックスの中のコマンドは既定では作業用のフォルダと一時領域にしか書き込めません

つまり最初から狭く始めて、足りない分を足していく設計になっています。広く開けておいて危ないものを塞ぐ方向ではありません。

許可を7個から2個に絞っても、やりたい処理は2種類とも通った。

単位: 個そのまま実行・許可する操作7個隔離環境・許可する操作2個−71%4種類のコードのうち、そのまま実行では4種類、隔離環境では2種類が通った。
図1 ── 許可する操作の数と、通ったコードの数
出典Claude Code Docs「Configure the sandboxed Bash tool」2026-08-17 確認
By default, commands inside the sandbox can write only to the working directory and the session temp directory.
原文Claude Code Docs「Configure the sandboxed Bash tool」 この内容の有効期限2027-02-17

触れてよい範囲をどこまで絞ればよいのか

作業用のフォルダと、必要な通信先だけから始めます。指示で制御しようとするのは避けてください。

サンドボックス実行を導入するとき、最初に決めるのは触れてよい範囲です。この範囲の決め方で効果がほぼ決まります。

境界を守るのは誰か

ここが要点です。Anthropicの説明では、コマンドを1つずつ承認するかわりに触れてよいファイルと通信先を先に定義し、その境界をOSが強制します。子プロセスにも同じ境界がかかります。

AIの判断に頼っていない点が重要です。プロンプトで「消すな」と伝える方法とは、守られる仕組みがまったく違います。

指示による制御の限界はガードレールの記事で、指示そのものが乗っ取られる問題はエージェントのセキュリティの記事で扱っています。

決める順番

  1. 書き込んでよいフォルダ。作業用の1つから始める
  2. 接続してよい通信先。使う先を具体的に列挙する
  3. 読み取ってよい範囲。渡すデータの置き場所を分ける
  4. 拒否された操作の記録。何が止まったかを残す

4番目を忘れないでください。拒否された操作の記録は、想定外の要求が出ていないかを知る唯一の手がかりになります。

サンドボックスで防げないもの

実行の範囲は制限できますが、渡したデータそのものは守れません。読み取りを許可した範囲の情報は、許可した通信先へ出ていく可能性があります。

ですから読み取りを許可する範囲も、書き込みと同じくらい慎重に決めることになります。作業に要らないファイルを同じフォルダに置かないでください。

狭く始めて足りない分を足す。広く開けてから塞ぐ順ではない。

書き込む先を1つに絞れるかいいえ作業用フォルダを分けるはい通信先を列挙できるかいいえ通信を許可しないはいその範囲だけ許可する。拒否を記録する4種類のコードで試した限り、この範囲でも集計と読み取りは通った。
図2 ── 触れてよい範囲の決め方
出典Claude Code Docs「Configure the sandboxed Bash tool」2026-08-17 確認
Instead of approving each command, you define which files and network domains commands can touch, and the operating system enforces that boundary for every Bash command and its child processes.
原文Claude Code Docs「Configure the sandboxed Bash tool」 この内容の有効期限2027-02-17

サンドボックス実行とはどういう仕組みなのか

コードを隔離した環境で動かし、触れてよい範囲をあらかじめ決めておく仕組みです。承認の回数を減らす目的もあります。

サンドボックス実行は、コードを隔離した場所で動かし、外に触れられる範囲を先に決めておく仕組みです。決めた範囲の外に出ようとすると、実行が拒否されます。

なぜ必要になるのか

AIに書かせたコードは、実行するまで中身の影響が分かりません。読んで確認してから動かす方法もありますが、1行ずつ確認していては自動化の意味が薄れます

そこで確認の対象を、コードそのものから範囲の設定に移します。範囲を1度決めておけば、あとは動かして問題ありません。

承認の回数が減る

この点は導入の動機としても挙がっています。Anthropicの説明では、サンドボックスがあることでほとんどのコマンドを、いちいち許可を求めずに実行できるようになります。

承認を求める回数が多いと、人は中身を見ずに押すようになります。ですから回数を減らすこと自体が、安全側に働きます。人の承認を挟む構成の設計はHITLの記事で扱っています。

余談 拒否ログが設計の材料になる

運用してみて分かったのは、拒否された操作の一覧が範囲を決め直す材料になることでした。同じ拒否が繰り返し出るなら、その操作は本来必要だったことになります。逆に見覚えのない拒否が出たときは、そこを調べる入口になります。

出典Claude Code Docs「Configure the sandboxed Bash tool」2026-08-17 確認
The Bash sandbox lets Claude run most shell commands without stopping to ask permission.
原文Claude Code Docs「Configure the sandboxed Bash tool」 この内容の有効期限2027-02-17

よくある質問

権限を絞ると仕事にならないのではないですか
この記事の判定では、集計とファイル読み取りは絞ったあとも通りました。止まったのは削除と外部送信で、どちらも本来AIに任せたくない操作です。
プロンプトで「消すな」と指示するのでは足りませんか
足りません。指示は守られない場合があり、守られたかどうかは実行後にしか分かりません。実行環境の側で止める仕組みが要ります。
何を許可すればよいですか
作業用のフォルダへの書き込みと、必要な通信先だけに絞るのが出発点です。使いながら足りない分を足していくほうが、最初から広く開けるより安全です。
サンドボックスがあれば安全ですか
実行の範囲は制限できますが、渡したデータそのものは守れません。読み取りを許可した範囲の情報は、許可した通信先へ出ていく可能性があります。

まとめ

  • サンドボックス実行は触れる範囲を先に決めて動かす仕組み
  • 許可を7個から2個に絞っても集計と読み取りは通った
  • 止まったのは削除と外部送信の2種類
  • 境界を守るのは実行環境の側で、指示ではない

今日から始められること

  1. AIに実行させたいコードが、どのフォルダに触れる必要があるかを書き出す
  2. 通信が必要なら、接続先を具体的に列挙する
  3. 書き出した範囲だけを許可して動かし、足りない分を後から足す
  4. 拒否された操作を記録し、想定外の要求が出ていないか確認する

実務で組んだサンドボックス実行のワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る