はじめに 🚨
昭和の刑事ドラマの取調室。机の上には電気スタンド、そしてカツ丼。刑事が机を叩いて叫びます。
「知っていることをすべて吐け!」
実はこの台詞、AIエージェントと仕事をしている私たちこそ、毎日言うべきなのかもしれません。
Claude Code などのAIエージェントに作業を頼むと、チャットやターミナルには数行〜数十行の返信が返ってきます。私たちはそれを読んで「よし、次はこれだ」と判断し、作業を進めていきます。
でも、その返信は LLMが知っていること・考えたことのすべて でしょうか?
答えはノーです。画面に出てくる返信は、LLMが調査・推論した内容を 読みやすく要約した一部 にすぎません。この記事では、取調べのように LLMに知っていることをすべて吐かせる 方法として、指示のたびにmdファイルへ出力させる 運用を紹介します。
やることはシンプルで、こんなルールを指示やCLAUDE.mdに加えるだけです 👇
## 作業ログ(調書)の出力
- 指示を1つ受けるたびに、`docs/logs/<YYYYMMDD_HHMM>_<トピック>.md` に以下を出力すること
- 調査したこと(読んだファイル、確認したコマンドと結果)
- 検討した選択肢と、採用・不採用にした理由
- 前提にした仮定、未確認の事項
- 懸念点・リスク・次にやるべきこと
- チャットへの返信は要約でよい。詳細はファイルに書くこと
3行まとめ ✨
- 🗣️ LLMのチャット返信は「供述の要約」にすぎず、LLMは返信した内容以上のことを知っている
- 💸 人間相手なら追加の質問で気軽に深掘りできるが、LLMへの追加の質問にはトークン・時間・コンテキストのコストがかかる
- 📄 指示のたびにmdファイル(調書)へ全部吐かせれば、要約以外の情報も手に入る。出力にコストはかかるが、知らないまま進めて手戻りするより安く済む可能性がある(並列作業ではなおさら)
容疑者(LLM)は要約しか話さない 🗣️
LLMがチャットやターミナルに返す内容は、作業の途中で得た情報のごく一部です。
たとえば「このバグを直して」と頼んだとき、エージェントは裏で次のようなことをしています。
- 関連するファイルを何本も読む
- 原因の候補をいくつか挙げ、1つずつ検証する
- 修正方法を複数考え、影響範囲を比べて1つを選ぶ
- 「この関数は他からも呼ばれているが、今回は問題ないだろう」といった仮定を置く
ところが、取調室で出てくる供述はたいていこうです。
〇〇の null チェックが漏れていたのが原因でした。
△△.ts に null チェックを追加し、テストが通ることを確認しました。
簡潔で、筋も通っています。しかし刑事の勘が告げます。「……それだけか?」🕵️
返信が短いこと自体は悪くありません。毎回すべてを書かれたら読むのが大変です。問題は、供述に出てこなかった情報の中に、作業者の判断を左右するものが含まれていることがある ことです。
- 🤔 なぜ別の修正方法を選ばなかったのか
- ⚠️ どんな仮定を置いたのか(その仮定は本当に正しいのか)
- 🔍 調べたけれど関係なかったこと、調べきれなかったこと
- 📌 ついでに気づいた別の問題
ホシ(LLM)は返信以上のことを知っている 🧠
ポイントは、LLMはこれらの情報を「知らない」のではなく「話していないだけ」 だということです。
とはいえ、LLMに黙秘のつもりはありません。検討した選択肢も、置いた仮定も、作業中のコンテキストにはちゃんと残っています。「読む人の負担にならないように」と気を利かせて要約した結果、表に出てこないだけです。
つまり、刑事(作業者)が見ている情報と、容疑者(LLM)が持っている情報の間には、常にギャップがあります。
人間なら問い詰めるのは簡単。LLMだとコストがかかる 💸
人間の場合 👥
同僚から「直しておきました」と報告を受けたら、「ちなみに他の方法も考えた?」「そこ、他の画面に影響ない?」と気軽に聞き返せます。相手の頭には経緯が残っているので、すぐに答えが返ってきます。追加で質問するコストはほぼゼロです。
LLMの場合 🤖
LLMにも同じように追加で質問できます。ただし、問い詰めるたびにコストがかかります。
- トークン・料金: 質問のたびに、それまでの会話全体を含めたリクエストが送られる
- 時間: 返答が生成されるのを待つ必要がある
- コンテキスト: 会話が長くなるほどコンテキストを消費し、要約(コンパクション)が走ると細部の情報が失われることもある
- 問い詰める側の負担: そもそも「何を聞けばいいか」を作業者が思いつかなければ質問できない
特に最後の点が重要です。供述に出てこない情報は、存在すること自体に気づけない ので、問い詰める糸口すら見つかりません。
指示のたびに「調書」を取る 📄
そこで、取調べの基本に立ち返ります。話を聞いたら、調書を取る のです。
具体的には、1回の指示ごとに、詳細をmdファイルへ出力させます。チャットの返信は要約のままでかまいません。そのかわり、要約の元になった情報をファイルにすべて吐き出してもらいます。
調書(出力ファイル)の例
# 〇〇画面で発生するエラーの修正
## 調査したこと
- src/foo/bar.ts, src/foo/baz.ts を確認
- エラーは `user.profile` が null のときに発生(再現手順: ...)
## 検討した選択肢
1. 呼び出し元で null チェック → 呼び出し元が5箇所あるため不採用
2. `getProfile()` 内で null チェック(採用)
3. API側で必ず profile を返すようにする → 影響範囲が大きいため見送り
## 置いた仮定・未確認事項
- profile が null になるのは新規登録直後のみと仮定(未確認)
## 気づいたこと・懸念点
- 同様のパターンが src/hoge.ts にもあるが、今回は未修正
この調書があれば、刑事(作業者)はチャットの要約だけでは分からなかったことを知れます。
- 「選択肢3も検討していたのか。実はそっちが本筋だな」
- 「その仮定は違う。既存ユーザーでも null になる」
- 「src/hoge.ts も直しておいてくれ」
といった、供述(要約)からは出てこなかった判断 ができるようになります 💡
取調べのコツ 🛠️
- CLAUDE.md などに書いておく: 毎回「吐け!」と言わなくても調書が出てくるようにする
- 出力先とファイル名のルールを決める: タイムスタンプ付きにすると、時系列で追いやすい
- 聞く項目を決めておく: 「調査したこと」「検討した選択肢」「仮定」「懸念点」など、要約で落ちやすい項目を指定する
- 調書を全部読まなくてもいい: 気になったときや、重要な判断の前だけ読むという使い方でも十分効果がある
調書を取るコスト vs 知らないまま進めるコスト ⚖️
もちろん、調書を取るにはコストがかかります。
- 出力トークンが増える(料金がかかる)
- 書き出す分だけ、1回の作業時間が延びる
- 作業者が調書を読む時間もかかる
それでも、作業者が知らないまま作業を進めるより、トータルのコストは安くなる可能性があります。
LLMが置いた誤った仮定や、作業者の意図とずれた選択に気づかないまま次の指示を重ねると、後で大きな手戻りが発生します。数ステップ先で問題に気づいたときには、そこまでの作業をやり直すことになり、調書にかけたコストよりずっと大きな時間とトークンを失いかねません。いわば 誤認逮捕 のまま捜査を進めてしまうようなものです。
| 調書を取る | 調書を取らない | |
|---|---|---|
| 1回あたりのコスト | 多い | 少ない |
| ずれに気づくタイミング | 早い(その場で気づける) | 遅い(数ステップ後に気づく) |
| 手戻りの大きさ | 小さい | 大きくなりがち |
複数の事件を抱えるなら「1回の判断の正しさ」がより効く 🔀
複数のタスクを並列で進めている場合、この効果はさらに大きくなります。いくつもの事件を同時に抱える刑事のようなものです。
並列作業では、作業者は複数のエージェント(セッション)を行き来しながら、それぞれに指示を出していきます。このとき、
- 1つのタスクで判断を誤ると、手戻りのためにそのタスクへ何度も戻る必要がある
- 戻るたびに「このタスクはどこまで進んでいて、何が問題だったか」を思い出すコンテキストスイッチが発生する
- その間、他のタスクへの指示が止まり、全体の進みが遅くなる
つまり、並列作業では 1回1回の判断が正しいことが、トータルの作業時間に直結 します。
調書が残っていれば、タスクに戻ってきたときも経緯をすぐに把握でき、判断の精度も上がります。1回の出力にかかる時間が多少増えても、判断を誤って何度も往復するより、トータルの作業時間は短くなる可能性があります ⏱️
まとめ 🎯
- LLMのチャット返信は供述の要約にすぎず、LLMはそれ以上のことを知っている
- 人間相手と違い、LLMへの追加の質問にはトークン・時間・コンテキストのコストがかかり、そもそも何を聞けばいいか気づけないこともある
- 指示のたびにmdファイル(調書)へ詳細を出力させれば、要約の外側にある情報も作業者が知れる
- 調書を取るにはコストがかかるが、知らないまま進めて手戻りするより安くなる可能性がある
- 並列作業では1回の判断の正しさがトータルの作業時間を左右するので、特に効果的
カツ丼は要りません。CLAUDE.md に「作業ログをmdファイルに出力する」というルールを1つ追加して、LLMに 知っていることをすべて吐かせて みてください 🍚👀