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

コードインタプリタとは|10,000円を3社に分けたら9,999円になった

コードインタプリタとはどういう仕組みなのか計算をコードにさせると何が変わるのかどこまで実行させてよいのか

AIに金額の配分を任せると、合計が元の金額に戻らないことがあります。10,000円を3社に均等配分したら9,999円になる、という類のずれです。

実際に計算したところ、素朴なやり方では4件中1件で合計がずれました。コードで処理すれば0件です。

この記事の要点

  • コードインタプリタはAIが書いたコードを隔離環境で実行する仕組み
  • 素朴な配分では4件中1件で合計がずれた
  • コードで処理すると0件
  • 0.1 + 0.20.3 にならない。実行すればその場で分かる

10,000円を3社に分けたら9,999円になった

配分4件を実際に計算しました。素朴なやり方では1件で合計がずれ、コードで処理すると0件です。

コードインタプリタが要る場面を確かめるため、実際に計算しました。題材は端数の出る配分を4件です。

配分の計算も小数の比較も、本当に実行して得た値です。想定ではありません。

javascript
// 素朴な計算: 比率をかけて四捨五入するだけ。合計がずれる
function naive(c) {
  const sum = c.parts.reduce((a, b) => a + b, 0);
  const out = c.parts.map((p) => Math.round((c.total * p) / sum));
  return { out, sum: out.reduce((a, b) => a + b, 0) };
}

// コードで処理: 端数を配り直して、合計を必ず一致させる
function exact(c) {
  const sum = c.parts.reduce((a, b) => a + b, 0);
  const out = c.parts.map((p) => Math.floor((c.total * p) / sum));
  let rest = c.total - out.reduce((a, b) => a + b, 0);
  // 余りは小数部の大きい順に1円ずつ配る
  /* ... */
}
text
題材              合計     素朴な計算の内訳          合計   一致
3社に均等配分          10000   3333 / 3333 / 3333      9999   ずれ
売上比で配分           88000   32560 / 36080 / 19360  88000   一致
日割り(7/31日)       45000   10161 / 34839          45000   一致
端数の出ない配分         12000   3000 / 3000 / 3000 / 3000 12000   一致

題材              合計     コードで処理した内訳       合計   一致
3社に均等配分          10000   3334 / 3333 / 3333     10000   一致

合計が合わなかった件数  素朴な計算: 1 / 4   コードで処理: 0 / 4

小数の足し算をそのまま比べた場合
  0.1 + 0.2          = 0.30000000000000004
  0.1 + 0.2 === 0.3  → false
  整数に直して比較    → true

1件だけずれました。10,000円を3で割ると3333.33…になるため、四捨五入した3社ぶんを足しても9,999円にしかなりません

ずれは小さいが必ず残る

差は1円です。ところがこの1円は消えません。同じ処理を月に100件走らせれば、その月だけで100円合わないことになります。

しかも合わないことに気づくのは、たいてい締めの段階です。どの件でずれたかを後から探すのは骨が折れます。

小数の比較でも同じことが起きる

もうひとつ実行して確かめたのが小数の扱いです。0.1 + 0.2 の結果は 0.30000000000000004 で、0.3 と等しいかを比べると false になりました。

整数に直してから比べれば true になります。この種の性質は、実行して初めて表に出ます。

検算をその場で行える

コードを実行できることの本当の利点は、計算そのものより合計が一致するかをその場で確かめられる点にあります。

合わなければ結果を返させない、という作りにできます。文章の中で計算させている限り、この検査は挟めません。

1円のずれは消えない。件数を重ねれば締めで必ず表に出る。

充足 1 / 4配分の合計が元の金額に戻る10,000円を3社に均等配分すると9,999円になる。4件中1件でずれた小数の比較が期待どおりになる0.1 + 0.2 は 0.30000000000000004 で、0.3 と等しくない端数の出ない配分では合う12,000円を4等分するような場合は割り切れるのでずれないずれたことがその場で分かる検算を挟めないので、締めの段階まで表に出ない配分4件を実際に計算した結果。コードで処理した場合はいずれも合計が一致した。
図1 ── 素朴な計算が満たすかどうか
出典Claude Platform Docs「Code execution tool」2026-08-17 確認
Run Python and bash code in a sandboxed container to analyze data, generate files, and iterate on solutions.
原文Claude Platform Docs「Code execution tool」 この内容の有効期限2027-02-17

コードインタプリタとはどういう仕組みなのか

AIが書いたコードを、隔離された環境でそのまま実行させます。結果を受け取って、続きの判断に使えます。

コードインタプリタは、AIにコードを書かせ、それを隔離された環境で実行して結果を返す仕組みです。文章の中で計算させるのとは別物になります。

できること

Anthropicの説明では、コマンドの実行とファイルの操作、そしてコードを書くこと自体を、安全に隔離された環境で行えるとされています。

同じ文書には、データの分析、図の作成、複雑な計算、コマンドの実行、ファイルの作成と編集、受け取ったファイルの処理が、やりとりの中で直接できると書かれています。

結果を見て書き直せる

実行できることの効き目は、誤りがその場で表に出る点にあります。動かなければエラーが返り、書き直せます。

文章の中で計算させた場合、誤っていても何も返りません。ですから受け取る側が検算するまで気づけません。

隔離された場所で動く

実行の場所も押さえておいてください。隔離された環境で動くので、呼ぶ側の環境がそのまま触られるわけではありません。触れる範囲を環境側で決める考え方はサンドボックス実行の記事で扱っています。

余談 検算をコードに入れておく

運用していて効いたのは、計算の最後に検算を書かせておくことでした。配分なら合計が元の金額に戻るか、日割りなら日数の合計が期間と一致するか。合わなければその場でエラーになるので、結果が外に出ません。

出典Claude Platform Docs「Code execution tool」2026-08-17 確認
The code execution tool allows Claude to run Bash commands and manipulate files, including writing code, in a secure, sandboxed environment.
原文Claude Platform Docs「Code execution tool」 この内容の有効期限2027-02-17

どこまでの処理を実行させてよいのか

合計や整合が求められる計算から始めます。実行できる範囲は環境側で絞ってください。

コードインタプリタを使うかどうかは、その処理に検算が要るかで決まります。前の節の1円のずれが、その分かれ目でした。

任せる処理

  1. 合計が一致しなければならない計算。配分、按分、日割り
  2. 件数が多く手で確かめられない集計。突き合わせ、重複の検出
  3. 桁や境目が絡む処理。日付の差、税の端数
  4. ひと目で答えが出る計算。わざわざ実行する必要がない

4番目に注意してください。2つの数を足すだけの処理に実行を挟むと、往復が増えて遅くなるだけです。

実行できる範囲を絞る

隔離されているとはいえ、実行できる操作は絞っておいてください。計算に必要なのは読み取りと計算だけで、外部への送信は要りません。

この絞り込みの効き方はサンドボックス実行の記事で数字とともに扱っています。許可する操作を7個から2個に絞っても、集計と読み取りは通りました。

結果を鵜呑みにしない

実行結果はコードのとおりに動いた結果であって、正しい答えとは限りません。書かれたコードが間違っていれば、間違った結果がきれいに返ってきます。

ですから検算をコードの中に入れます。合計が一致しなければ結果を返さない、という形にしておけば、誤りが外に出る手前で止まります。

ひと目で分かる計算に実行を挟むと、遅くなるだけ。

合計や整合を確かめる必要があるかいいえそのまま答えさせるはい検算をコードに書けるかいいえ先に検算の条件を決めるはいコードを書かせて実行する配分4件の実測では、素朴な計算で1件、コードで処理して0件が合計不一致だった。
図2 ── コードを実行させるかどうかの判断
実行したコードを残すどんなコードを実行したかを記録しておくと、結果がおかしかったときに原因を追えます。結果だけ残しても、どう計算したかは分かりません。記録の設計はエージェント可観測性の記事で扱っています。
出典Claude Platform Docs「Code execution tool」2026-08-17 確認
Claude can analyze data, create visualizations, perform complex calculations, run system commands, create and edit files, and process uploaded files directly within the API conversation.
原文Claude Platform Docs「Code execution tool」 この内容の有効期限2027-02-17

よくある質問

計算くらいならコードなしでもできませんか
桁の小さい計算はできます。ただし端数の配分や日付の差のように、合計を一致させる必要がある処理では、実行して確かめるほうが確実です。
実行はどこで行われますか
隔離された環境で行われます。呼ぶ側の環境をそのまま使うわけではないため、外部への影響は限定されます。
何ができますか
データの集計、図の作成、ファイルの作成と編集、コマンドの実行などが挙げられています。
実行結果は信用できますか
コードのとおりに動いた結果です。ですからコードが間違っていれば結果も間違います。合計が一致するかといった検算を、コードの中に入れておくのが確実です。

まとめ

  • コードインタプリタは書いたコードを隔離環境で実行する仕組み
  • 端数の配分では4件中1件で合計がずれた
  • コードで処理すれば0件に収まる
  • 実行できると検算をその場で行えるのが要点

今日から始められること

  1. AIに任せている処理のうち、金額や日数の計算を含むものを書き出す
  2. その処理で合計や整合が求められるかを確かめる
  3. 求められるなら、コードを書かせて実行させる形に変える
  4. 検算をコードの中に入れ、合わない場合は結果を返させない

実務で組んだコードインタプリタのワークフローには、値段が付きます

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

出品の仕組みを見る