はじめに
「次は AI要約説明を書きます」と予告してから、別の記事を挟み続けてきました。前回はこれです。
楽しみにしていた方(がもしいたら)、すみません。ようやく書きます。
ただ、白状すると、延ばしていたのには理由がありません。フォーム自体はとっくにできていたのです。数式の解説とデータの検品のフォームを書いた回で「検品フォームの複製でほぼ作れる見込み」と書きましたが、見込みどおり、複製してすぐ動いていました。動いてしまうと、記事は後回しになるものです。
そうして寝かせているあいだに、このフォームの中で事件が起きました。今回は、フォームの紹介と、その事件の顛末を一緒に書きます。結論を先に言うと──フォームの中にいた AI は、限定版の AI ではなく、目隠しをした普通の Claude でした。
TL;DR
- AI要約説明フォーム:開いているシートを AI に渡して「これは何の表か」を説明させる道具です。シートの中身は VBA が自動で要約して渡します
- 使っていたら、AI が「ツールの使用を許可いただければ、マクロを特定してご報告します」と聞いてきました。会話が続いているように見えました
- 実際は毎回まっさらの AI でした。同じシートを見て、同じ結論に着き、同じお願いをしていただけ──そして私が何度「いいよ」と返しても、その返事は届かない構造でした
- 正体は起動方法にありました。ヘッドレス起動の AI には許可を尋ねる画面がなく、道具がすべて封鎖されていた。逆に言えば、引数で許可を渡せば使えるということです
- 引数を足したら、AI は実際にマクロを検索して読み、推測ではなく実物で答えるようになりました。会話も本当に続くようになりました。スクリーンショットのタイムスタンプで、発見から36分の出来事です
- 書き換え系の道具は渡していません。読みは全開、書きは人間の指──この線引きは意図して残しています
AI要約説明フォームとは
まず予告の回収から。フォームの見た目は、これまでの AI フォーム群と同じ素っ気ない作りです。
- 対象:開いているシート名と使用範囲が表示される
- 指示:「何の表か説明して」「入力ルールを推測して」などの定型コンボ+自由記入
- AI:エンジン(claude / gemini)とモデルをコンボで選ぶ
- 実行:数十秒で、下の欄に答えが返る
肝はやはり、AI に何を渡すかです。ボタンを押すと VBA がシートを読んで、こういうダイジェストを組み立てます。
- ブック名とシート一覧(最大30枚)
- 対象シートの使用範囲と、実データの先頭40行×30列(タブ区切り)
- 数式のパターン(同じ式が下に引っ張られていれば R1C1 で比較して1行に畳む。最大800セル分)
- 名前定義(内部名を除いて最大20個)
これをプロンプトに貼り付けてファイルに書き出し、裏で Claude Code の CLI を呼んで、答えをファイルで受け取る。マクロ修正の回から使い回している、いつもの配管です。
初めて見るブックを引き継いだとき、「このシートは何をしていて、どこに何を入力するのか」を人に聞く代わりにフォームに聞く。それがこの道具の仕事です。ここまでが、予告していた範囲。ここからが、事件です。
会話が続いている……気がする
自分のファイル管理ブックの「修正」というシートで、指示欄にこう入れて実行しました。**「実際の動作はマクロ(VBA)を特定して」**──見出しだけあってデータが空のシートで、どのマクロがこれを使うのか知りたかったのです。
返ってきた答えの書き出しが、こうでした。
ツール実行が許可されなかったため、シート情報からの推測でお答えします。
そのあとに続くのは「〜と思われます」の推測です。マクロを読めれば確定できるが、シート情報だけでは確定できない、と AI 自身が書いている。
もう一度実行すると、今度はこう返ってきました。
ツール(mcp__vba-manager__vba)の使用を許可いただければ、マクロを特定してご報告します。実行してよろしいでしょうか。
聞かれたら、返事をしたくなります。指示欄に「使っていいよ」と入れて実行しました。すると AI は、また同じことを聞いてくるのです。
このとき私は「会話が続いている」と感じていました。一往復で終わりの道具のはずなのに、向こうは前の話を覚えていて、許可を待っている──そう見えたのです。それで、いつもの相棒(Claude Code のターミナル側)に聞きました。「これってどういうことだ?」
種明かし ── 毎回、新品の AI だった
コードを読ませて、数分で種が割れました。
まず、会話は続いていませんでした。フォームは実行のたびにプロンプトをゼロから組み立てて、新しい AI を起動しています。前回のやりとりは一行も渡していない。つまり私が話していた相手は、毎回、初対面の新品の AI です。
では、なぜ会話に見えたのか。渡されるシートのダイジェストが毎回同じだからです。新品の AI が、同じシートを見て、同じ結論に着き、同じお願いをする。受け取る側からは、同じ相手が話を続けているのと区別が付きません。
そして残酷なことに、私の「使っていいよ」は、誰にも届いていませんでした。ツールの許可は AI の起動時の引数でしか決まりません。指示欄に書いた返事は、次の新品の AI への伝言にはなっても、許可にはならない。聞かれる、許す、また聞かれる──私は届かない許可を、手で運び続けていたわけです。
目隠しの正体
では、そもそもなぜ「許可されなかった」のか。
フォームが AI を呼ぶコマンドは claude -p、いわゆるヘッドレス起動です。一問一答で使う非対話モードなので、許可を尋ねる画面が存在しません。尋ねる相手がいない以上、あらかじめ許可されていない道具の呼び出しは、問答無用で断られます。フォームの起動コマンドには、許可の引数(--allowedTools)が付いていなかった。それだけのことでした。
ここで面白いのは、AI に道具が見えてはいたことです。私の環境には、開いている Excel ブックを COM 経由で操作する自作の道具(VBAマネージャー・GitHub で公開しています)が、MCP サーバーとしてユーザー全体に登録してあります。ヘッドレスで起動した AI からも、その道具は目録に載って見えている。だから名前を知っていたし、使おうとした。手を伸ばした瞬間に、引数の壁で弾かれていただけです。
つまりフォームの中にいたのは、機能を削られた限定版の AI ではありません。ターミナルで私と一緒に働いているのと同じ Claude が、目隠しをされ、手を縛られて、シートの要約一枚だけ渡されて座っていた。「〜と思われます」の推測は、能力の限界ではなく、目隠しの結果でした。
「待ってくれ。できるのか?」
ここまで分かれば、次の問いは一つです。引数を足せば、目隠しは取れるのか。
素振りから始めました。ターミナル側で、フォームと同じヘッドレス形式に --allowedTools を一つ足して、「開いているブックの一覧を取れ」と投げる。返ってきた答えは、推測ではなくブック名そのものでした。ヘッドレスの AI が、実際に起動中の Excel を掴んだのです。
会話の継続も試しました。CLI には --session-id(この会話に名前を付ける)と --resume(その名前の会話に戻る)という引数があります。一回目に「りんご・みかん・ぶどうを覚えて」と伝え、二回目を --resume で起動して「さっきの3つは?」と聞く。**「りんご、みかん、ぶどう。」**──覚えていました。一問一答の道具だと思っていたヘッドレス起動は、名札さえ付ければ会話ができる。
あとはフォームに配線するだけです。直したのは実行ボタンのプロシージャ1本、足した引数は3つ。
-
--allowedTools:道具の事前許可。渡したのはマクロや範囲を読む系統だけ -
--session-id:初回の実行で VBA が会話の名札(UUID)を作って名乗る -
--resume:二回目以降は名札で同じ会話に戻る
一度だけ転びました。名札の UUID を作るのに使った Windows の部品(Scriptlet.TypeLib)が実行時エラーを出したのです。乱数から自前で組む方式に差し替えて解決。スクリーンショットのタイムスタンプで測ると、エラーの画面が 17:34、直って動いたのが 17:37──修理は3分でした。
アフター ── 推測が、実測になった
同じシート、同じ指示で、もう一度実行しました。今度の答えは、こうです。
つまり「修正」シートは、複数の Excel ファイルに同じセル修正を一括適用するための指示リストです。現在データが空(ヘッダーのみ)なので、実行すると「修正シートにデータがありません」で中断されます。
なお
連続計算表修正という別マクロもヒットしましたが、こちらは「修正」シートを直接参照していないため、このシートとは別系統の処理と思われます。
「〜と思われます」が消えたわけではありません。でも位置が変わっています。ビフォーの推測は「マクロを読めないので、シートの見た目からの想像」でした。アフターは、実際にマクロを検索し、本文を読んだうえで、「参照していない」という実測の根拠付きで線を引いている。データが空だと実行がどこで止まるかまで、コードを読んだ者の言い方です。
ビフォーのスクリーンショットが 17:01、このアフターが 17:37。目隠しの発見から、外し終わるまで36分でした。
目隠しが溶けると、何が変わるか
一番大きいのは、先頭40行×30列という制限の意味が変わったことです。
いままで、あのダイジェストは AI にとって世界のすべてでした。41行目から下も、31列目から右も、隣のシートも、存在しない。だからフォームの説明文には「大きい表は先頭だけ」と断り書きがあり、答えには「確定できません」が並んでいた。
いまは違います。ダイジェストは最初のとっかかりにすぎません。続きが気になれば範囲を読みに行き、マクロが気になれば検索して本文を読む。どこまで調べるかを、渡す側ではなく AI の側が決める。要約を「渡される」道具から、ブックを「調べる」道具に変わりました。
一方で、渡していないものがあります。書き換え系の道具です。これは意図的な線引きで、目隠しは外しても、手袋は着けたままにしました。
理由は単純で、ヘッドレスの AI には確認を尋ねる画面がないからです。書き換えまで許可すると、「聞かずに書き換え終える」相手になります。読んで、指摘して、提案するまでが AI。ブックに手を入れるのは、答えを見た人間がボタンを押したとき──マクロ修正のフォームから続くこの型を、ここでも守ることにしました。読みは全開、書きは人間の指です。
もう一つ、配る側の目で書いておくと、この引数は「上限を開ける」だけで「下限を要求する」ものではありません。--allowedTools は、その道具があれば使ってよいという事前許可です。VBAマネージャーの入っていない環境では、AI に道具が見えないだけで、エラーにもならず、いままでどおりシート要約からの推測で答えます。持っている人の手元でだけ、勝手に格が上がる。配布物として、悪くない性質だと思っています。
事実と見立ての仕分け
例によって仕分けます。
事実:フォームの起動コマンドに許可の引数がなく、ヘッドレス起動では未許可の道具が拒否されること(AI 自身の回答文とコードで確認)。引数を足した後、AI がマクロを検索・読解して回答したこと(スクリーンショットあり)。--resume で前の会話の内容(3つの果物)を答えたこと(実測)。ビフォー 17:01・アフター 17:37・エラーから復旧まで3分(スクリーンショットのタイムスタンプ。公開前に再確認します)。直したプロシージャが1本であること。
見立て:「会話が続いているように見えた」の原因を「同じダイジェストから同じ結論・同じ質問が再現されたため」と読んでいること(他の要因を網羅的に排除したわけではありません)。「読みは全開・書きは人間の指」が配布道具として良い線引きだという判断。
正直な線引き
- このフォーム入りのブックは、引き続き未公開です。今回の改修で「会話が続く」ようになりましたが、フォームの作りは一往復時代のままです。答え欄は最新の一件で上書きされ、会話を仕切り直す「新しい話」ボタンもまだありません。会話が続く中身に、入れ物が追いついていない──ここを作り直してからが本当の公開です
- 動かすには Claude Code CLI のセットアップとログインが要ります。道具の許可(MCP・
--allowedTools)はさらにその先の話で、誰の Excel でもすぐ動くものではありません - 36分で済んだのは、道具側(VBAマネージャーと MCP 登録)が先にできていたからです。ゼロから36分ではありません。1年分の下ごしらえの、最後の36分です
おわりに
三回延ばした宿題を書き終えて、分かったことがあります。延ばしてよかった。すぐに書いていたら、この記事は「検品フォームの複製で要約フォームを作りました」で終わっていました。
フォームの中の AI は、最初から普通の Claude でした。足りなかったのは能力ではなく、許可の引数が2つ3つ。目隠しの正体がそれだけだったと知ったときの気持ちは、たぶん「絶句」が一番近かったと思います。
目隠しは外れました。手袋は着けたままです。
次は、会話が続く前提でフォームを作り直します。入れ物が中身に追いついたら、また書きます。



