0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「Excelの中にいたまま外と話す」仲間ができた話

0
Posted at

はじめに

七月に、ハルミさんという方のことを書きました。VBA を Git とテストに乗せて AI に育てさせる道具 xlflow と、いわゆる神エクセルを AI が読める形に畳む ExStruct。私の向きとは正反対の、けれど同じ景色を見ている人がいた、という話です。

あの記事の最後を、私はこう結びました。

そのときは、道の反対側から手を振ります。

公開したその日の夕方、ご本人からコメントをいただきました。

VBAをAIで扱えるようにしたいという思想が共通していて非常に親近感感じてます!
shuさんの活動も応援してます

面識のない方のことを勝手に書いた記事です。返事をいただけるとは思っていませんでした。

それから一か月とすこし。八月十七日に、ハルミさんが新しいものを出しました。読み終えて、これは手を振る日が来たのだと思いました。ただし、道の反対側からではありません。同じ側に立って、です。

TL;DR

  • ハルミさんが VBA-HTTP を公開しました。VBA のための本格的な HTTP クライアントです(MIT・GitHub)
  • 並行リクエスト、再試行、1GiB のストリーミング転送、プロキシ、認証、HTTP/2。数字は本人の記事に実測つきで出ています
  • これまでのハルミさんの道具は Excel の外で働くものでした。今回の部品は VBA の中で動きます。用途は「Excel の中にいたまま、外の世界と話す」──私が毎日やっていることの、土台の部分です
  • 作り方も面白い。本人は実装を1行も書いていません。 合格条件を与えて、AI が書き、静的解析とテストで自分で直し、休暇中に22時間、無人で回った
  • ハルミさんが示しているのは「できる」。私が示したいのは「効く」。主張は違いますが、前提は一つ──Excel × AI は本物である
  • 最後に、私がいま作っている Excelコンボ の近況を少しだけ。詳しい話は次回にします

出たもの

ハルミさんの記事はこちらです。

「VBAで本格的なHTTPクライアントを作った」。副題に、並行リクエスト、1GBストリーミング、そしてAIエージェントによる開発、とあります。

VBA から HTTP を投げたことのある人なら、WinHttp.WinHttpRequest.5.1MSXML2.XMLHTTP を使ったことがあると思います。GET と POST を送るだけなら、それで足ります。ハルミさんの記事も、そこから始まっています。足りなくなるのは、要求が増えたときだ、と。

複数の API をできるだけ短い時間で呼びたい。一時的な通信の失敗なら自動で再試行したい。Retry-After を正しく扱いたい。数 GB のファイルをメモリに丸ごと載せずに転送したい。プロキシや認証を扱いたい。通信を何千回繰り返してもハンドルが漏れないことを確かめたい。そういう要求に、VBA の標準部品だけで応えようとすると、だんだん苦しくなる。

そこで作ったのが VBA-HTTP です。記事から、私が「ほう」と声が出た数字を引きます。

  • 並行処理。それぞれ100ミリ秒待つリクエストを100件、逐次で 11.04秒、同時実行数16で 0.86秒。約12.86倍
  • 1GiB のダウンロード中に増えたメモリは、最大で約19MB

並行のほうは、ご本人が先に釘を刺しています。通信待ちが大きくなるよう意図的に作った性能試験であって、どんな処理でも12.86倍になるという意味ではない、と。数十件、数百件の API を順に呼ぶ処理では効く、という書き方です。私もその釘ごと引いておきます。

メモリのほうは、VBA の常識をひとつ外しています。1GB のファイルを送るために 1GB の Byte() を Excel の中に確保する設計は厳しい。だから少しずつ読み書きしながら流す。通常の通信は WinHttp.WinHttpRequest.5.1 に任せ、大容量転送や HTTP/2 の制御のような低い層だけ、Windows の winhttp.dll を直接呼ぶ。それでいて「黒魔術に寄せすぎない」──実行中に機械語を作ったり、VBA の内部を書き換えたりはしていない、と明記してあります。性能だけの実験ではなく、使えるライブラリであることを優先した、と。

再試行の節も、読んでいて背筋が伸びました。失敗したら3回やり直す、だけでは危ない。POST を不用意に再送すると、同じ処理が向こうで二重に走る。だから再送しても安全なメソッドか、Retry-After が返ったか、待ち時間に揺らぎを入れるか、全体の制限時間はどうか──そこまで見て、POST は明示の設定なしには簡単に再送しない。「とりあえず通信できる」ではなく「HTTP クライアントとして安全に使える」を重く見た、とあります。

そして試験の一覧。10,000回の通信のあとにリソースが漏れていないか。1GiB を送って受けてハッシュが一致するか。キャンセルとタイムアウトを何度も繰り返す。同時実行数が守られているか。配布物が改ざんされていたら拒めるか。実際の Excel の VBE でコンパイルが通るか。VBA のライブラリで、ここまで自動で確かめているものを、私はほかに知りません。

リポジトリは MIT で、導入は PowerShell のスクリプト一本です。

どこが「同じ側」なのか

七月の記事で、私はハルミさんの道具を「Excel を卒業するための道具」、自分の道具を「Excel に帰るための道具」と呼びました。向きが正反対だと。

xlflow は、VBA をブックから取り出して、Git とテストと自動化に乗せる道具です。ExStruct は、神エクセルから意味を抜き出して、外の AI に渡す道具です。どちらも Excel ので働く。そこに価値がありました。

VBA-HTTP は、違います。これは開発の道具ではなく、部品です。並行リクエストも、1GiB のストリーミングも、再試行も、全部 VBA が走っている最中の話です。外に出すための道具ではなく、中で使うための部品を、ハルミさんは作った。

そして部品の用途を考えると、もっとはっきりします。HTTP クライアントで何をするのか。Excel の中にいたまま、外の世界と話すのです。API を叩き、ファイルを取り、結果をブックに戻す。持ち出すのではなく、中にいたまま。

これは、私が Excelコンボでやっていることそのものです。Excel の中に AI を住まわせて、ブックを見ながら会話する。その会話は、VBA が外の AI へ HTTP を一本投げることで成り立っています。私の投げ方は素朴で、MSXML2.ServerXMLHTTP.6.0 を同期で送って、ADODB.Stream で UTF-8 を剥がす、それだけです。同じ場所に立って、ハルミさんは下へ掘り、私は上へ伸ばした。ハルミさんが作ったのは、私の道具の下半身にあたる部品でした。

だから「同じ側に来た」と思ったのです。向きの話ではなくて、立っている場所の話です。Excel の中にいたまま外と話す──その場所に、技術者の側から、もう一人来た。

下から来た

作り方が、また面白い

VBA-HTTP の記事には、もう一つのテーマがあります。本人は、実装のコードを1行も直接書いていないのです。

何を作るか、全体の構成、公開する API、合格条件、性能の目標、安全のためにどこまで許すか、どの問題を直すか──そういう判断は本人がした。実際のコードは AI のコーディングエージェント(Codex)が書いた。そのとき足場にしたのが、自分で作ってきた xlflow です。AI がコードを書き、静的解析をかけ、実際の Excel でコンパイルし、テストを走らせ、失敗の中身を読んで、直して、もう一度テストする。Python や Go では当たり前の開発の輪を、VBA にも用意した。

そして休暇中の話。Codex に指示を出したあと、22時間ほど無人で動き続けて、夏休みを楽しんでいる間に勝手に完成していた、この間まったく介入していない、と書いてあります。

ここで、私の側の話を少しだけ。同じ八月二十二日、私は Excelコンボの改修をしていました。AI が VBA を書き、差し替え、実際に動かして、結果を見て、直す。やっていることの輪は、ハルミさんのそれと同じ形です。違いは一つ。私はそこにいて、見ていた。「それは違う」と言い、「こっちに合わせろ」と言い、外れたらその場で引き戻す。ハルミさんは寝ていて、私は張り付いていた。

見ている

どちらが上でもありません。無人で回す輪は、人の注意力を使わずに、テストの壁時計だけを使う。有人の輪は、人の注意力を使うかわりに、外れをその場で見つける。同じ輪の、無人版と有人版です。ハルミさんの記事の中で私が一番うなずいた一文が、その違いをきれいに言い当てています。

「AIが一発で正しいコードを書けること」よりも、「間違えたとき、自分で間違いを検出して修正できること」の方が重要でした

無人で回すなら、これが全部です。有人で回すときも、実は同じです。私の場合、検出しているのが私の目だというだけで。

そしてもう一文。今回やっていたのは「AIにVBAを書かせる」というより「AIがVBAでソフトウェア開発をできる環境を作る」ことに近かった、と。

これは、私が一年かけて VBAマネージャーという道具を育ててきた理由と、ほとんど同じ言葉です。AI に VBA を書かせること自体は、もう難しくない。難しいのは、書いたあとです。通るのか、動くのか、壊していないか、戻せるのか。そこを整えることが、道具作りの本体だった。ハルミさんはそれを、テストと静的解析と無人の輪で整えた。私は、承認と退避と、開いたままのブックへの相乗りで整えた。整え方は違います。整えようとした場所は、同じです。

上流と下流

私は、Excel を毎日使う側の人間です。現場側、と言ってもいいかもしれません。ハルミさんは技術者側の人で、React も Rust も Go も書ける人が、VBA にこれだけの部品を作った。

二人が示しているものは、少し違います。

  • ハルミさんが示しているのは「できる」です。12.86倍、1GiB、10,000回のリークテスト。能力の証明
  • 私が示したいのは「効く」です。毎日使っている、xlsm 一個で配れる、エンジニアでない人が AI と組める。価値の証明

「できる」だけだと、で、誰が使うの、で終わります。「効く」だけだと、たまたまでしょ、で終わります。両方あって、初めて「実験室でも現場でも成り立つ」になる。

主張も違います。ハルミさんは VBA をモダンな開発の作法に乗せる──エンジニアが VBA を扱えるようにする。私は VBA を AI と会話する場にする──エンジニアでない人が AI と組めるようにする。読者は、むしろ逆を向いています。同じなのは主張ではなく、前提のほうです。Excel × AI は本物である。 前提が、技術者側と現場側の両方から支えられると、そこはもう動きません。

そして、同じ時期に同じ場所へ出てきたのは、偶然ではないと思っています。API が通り、値段が桁で下がり、AI がデスクトップに降りてきた。条件がそろったから、二人とも動いた。同じ理由で、三人目も四人目も来るはずです。いまはその最初の二人が、上流と下流に一人ずつ立っている──そういう絵だと、私は見ています。

事実と見立ての仕分け

例によって仕分けます。

事実。 VBA-HTTP の記事は2026年8月17日に公開され、数字(逐次11.04秒・同時16で0.86秒・1GiB でメモリ増約19MB・10,000回の通信試験)は記事とリポジトリに本人の記載があります。実装コードを本人は1行も書いておらず、AI(Codex)が書き、xlflow の静的解析とテストで回し、休暇中22時間無人で進んだ、というのも本人の記述です。リポジトリは MIT で、2026年8月22日時点でスター8・コミット130。7月9日の私の記事に、公開した日のうちにご本人からコメントが付いたこと、その文面も、コメント欄の実物です。末尾に書いた Excelコンボの「往復1回・1秒」も、2026年8月22日に私の一台(Windows 11・64bit Excel)で測った実測です。

見立て。 「同じ側に来た」は、私の読みです。ご本人の記事の顔は最後まで「AI エージェントによる開発の検証」で、VBA をどう評価しているかは書いてありません。「下半身にあたる部品」も、私の用途から見た言い方です。「上流と下流」「三人目が来る」も、私の見立てです。

正直な線引き

  • VBA-HTTP を、私はまだ自分の道具に組み込んでいません。読んで、試して、導入の形を確かめたところまでです。導入は PowerShell のスクリプトで数十本のモジュールをブックに取り込む形で、x64 の Office が前提、32bit は未検証、と README にあります。私の配り方(xlsm 一個)とは作法が違うので、どう使うかはこれから考えます
  • 私が読んだ範囲では、AI の答えを流しながら受け取る用途(チャンク応答を逐次読む)は書かれていませんでした。ストリーミングはファイルの送受信の話です。私の用途で効きそうなのは、一度に何十本も投げるとき──数式を大量のセルに撃つ、PDF を束で読ませる、のほうです
  • ハルミさんの記事は、AI に書かせたことの報告であって、VBA を論じた記事ではありません。「同じ側」は私が勝手に引いた線です。ご本人がどう思うかは、分かりません
  • 私の環境は Windows 11 と 64bit Excel、道具を作る相棒は Claude Code です

いま作っているもの(振りだけ)

最後に、私の側の近況を少しだけ。

Excelコンボという道具を作っています。Excel の中に AI を住まわせて、開いているブックを見ながら会話する窓です。今日は、よく頼む指示を選ぶ「定型」のタブが付いて、その中身をその場で増やしたり直したりできるようになりました。

定型タブ

もうひとつ、速さが変わりました。先日、Gemini の API を有料で使い始めた話を書きましたが、

エンジンをその API の直叩きにして、選んだ定型に応じて必要な材料を先に読んで渡すようにしたところ──**「このブック全体の構成を調べて」が、往復1回・1秒で返ってくる**ようになりました。シートの構成も、設定の中身も、書式の決まりごとも、ひととおり並んだ答えがです。私の一台での実測で、モデルはいちばん軽いものを使っています。

この窓が、ハルミさんの部品と同じ場所──Excel の中にいたまま、外の AI と話す──に立っています。今日一日、この速さのことも含めて、かなり思い切ったことを試しました。詳しい話は、次回に回します。

おわりに

七月に、道の反対側から手を振ると書きました。

八月、その人が、私と同じ側に部品を置きました。向きは今も違います。ハルミさんは品質と性能へ、私は配ることと会話へ。でも立っている場所は、同じになった。

だから今回は、反対側からではなく、隣から手を振ります。

隣から

仲間が、できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?