はじめに
自作のVBA管理ツール(vba_manager.py)の話の続きです。前回、クロード・フェーブルの手を借りて改修した話を書きましたが、今回はこれを MCPサーバー化して、GitHubに公開する ことにしました。
MCPサーバーというのは、ざっくり言うと「AIが直接ツールを呼び出せるようにする窓口」です。これを作っておくと、Claude が私のVBAマネージャーを、自分の手足のように使えるようになります。「このマクロを直して」と話しかけるだけで、AIがツールを何十回も叩いて、取得して、書き換えて、確認する ── その一連が地続きになる。
ただ、作ってみたら、技術的にも、それ以外でも、思いのほか語りたいことが増えてしまいました。順に書いていきます。
「サーバー」と聞いて、PCをもう一台立てる気でいた
白状すると、最初「サーバー化」と聞いて、私は本気で身構えました。
私は昔、インターネット黎明期に地域プロバイダーの事業に関わったことがあって、プロの技術者がサーバーを組み上げる現場に居合わせたことがあります。ものすごい速さで画面が流れていく様子を横で見ながら、「プロというのは違うものだなあ」と、ただただ感心していました。
当時、サーバーというのは機械を買えば済むものではなくて、構築できる技術そのものに、値段がついていました。プロに頼めば構築費だけで百万円以上が相場。私の知っているケースでは、個人の技術者に頼んで30万円ほどでしたが、それでも当時としては破格の安さだったのです。サーバーを立てるというのは、それだけの技術料を払う「工事」でした。
だから「サーバー」と聞くと、私はいまだに、専用マシンと職人仕事を思い浮かべてしまう。今回もそれなりの覚悟をしていました。
結果。フェーブルに頼んだら、7分で完成しました。 箱もなければ、工事もない。MCPサーバーの「サーバー」は、AIが必要なときに起動して、用が済んだら静かに消える、ただのローカルプロセスでした。百万円の職人技が、7分の会話になっていた。30年ものの思い込みが、音を立てて崩れました。
MCP化のいちばんの収穫は、圧倒的な「速さ」
見た目は「CLIで打っていたコマンドを、AIが呼ぶようになっただけ」です。ですが、体感の性能がまるで違います。
理由は、Excelとの COM接続 にあります。
従来のCLIは、1コマンドを実行するたびに、起動中のExcelへCOM接続を張り直していました。マクロを1本取得するにも、セルを1つ読むにも、まず「動いているExcelを掴み直す」ところから始める。じつはこの初期化が、全工程でいちばん重い処理なのです。処理そのものは一瞬でも、毎回この「掴み直し」の固定費を払っていました。
MCPサーバーは常駐プロセスです。だから、一度Excelを掴んだら、その接続を保持したまま使い回せる。掴み直しが消えます。結果、2回目以降の応答は 実測で0.01〜0.2秒。接続を張り直していた頃と比べて、体感で一桁 ── 10倍以上、速くなりました。
これがAIから使うときに、決定的に効きます。AIはツールを1回では呼びません。一覧を見て、コードを取って、書き換えて、差分を確認して……と、平気で数十回叩く。1回あたりの固定費が消えると、往復のテンポそのものが変わり、「会話しながら直す」という体験が、初めて自然な速さになるのです。
設計は「判断しない、薄い窓口」
このMCPサーバー、中身は驚くほど薄く作りました。公開したコードも200行足らずです。
ツールはたった5つ。vba(CLIと同じ引数列を1行で渡すと、58コマンド全部が使える万能窓口)と、vba_help、それにプロシージャ修正の定番手順である get_procedure / set_procedure_code / replace_procedure。それだけです。
そして、この層では 一切「判断」をさせていません。実体は vba_manager.py の関数そのままで、MCP層は受け取ったコマンドを機械的に渡して、結果を返すだけ。賢い判断は、呼び出す側のAIがやればいい。Python側に賢さを足そうとすると、AIの判断とぶつかって、かえって邪魔になる ── これは前回の改修から一貫して守っている設計思想です。機械的な仕事はPythonに、判断はAIに。 役割をきっぱり分ける。だからこそ、窓口は薄いほどいい。
公開しようと調べたら、同じことをやっている人が次々見つかった
さて、公開するにあたって、先行例を確かめておこうと思いました。ここからが、この記事のもう一つの本題です。
以前、番外編で書いたのですが ── この本格的なExcel MCPを公開している Stefan Broenner さん、正体を調べたら Microsoftの部長でした。ドイツ・フランクフルト在住の、Director級エンタープライズアーキテクト。つまり、Excelを作っている会社の、部長クラスの人です。当時それを知って、私はあちらを勝手に"本家"、自分のツールを"分家"と認定して、ひとりで笑っていました。「世界初」なんてとても言えない、完敗もいいところ。でも、あの本家の存在は、どこか遠い世界の話のようにも感じていました。
ところが今回、もう少し深掘りしてみたら ── なんと 二日続けて、国内で同じようなものを作っている人が見つかった のです。しかも、やっていることが、私のものと驚くほど近い。お二人の名前は伏せて、3人を並べてみます。
| 私 | Aさん | Bさん | |
|---|---|---|---|
| 言語 | Python | C# / .NET | Node.js(+PowerShell) |
| Excelの掴み方 | 開いているブックに相乗り | ファイルを選んでサーバー側が開く | 起動中のExcelに相乗り |
| 編集の単位 | プロシージャ単位 | プロシージャ単位 | モジュール単位 |
| 配布の形 | CLI+MCPの二枚看板 | インストーラ+GUI | npx一発 |
| 相棒のAI | Claude Code | Claude Code | GitHub Copilot |
面白いのは、言語も、配布方法も、組んでいる相棒のAIすらバラバラなのに、ぶつかっている壁が、判で押したように同じだということです。
- プロシージャ単位で差し替えたい。 モジュールまるごとではなく、Sub一つをピンポイントで置き換える形に、みんな行き着いている。
- 改行コードが二重になる問題に、全員が悩んでいる。 VBAのコードをテキストで出し入れすると、CR+LFが二重化して行数が倍に膨れる、あの厄介な現象です。
- 動いているExcelとの接続と、後に残るゾンビプロセスの始末に、全員が手を焼いている。 COM越しにExcelを触ると、下手をすると画面に出てこない亡霊のようなExcelが残る。あれの後片付けです。
私が半年かけて一つずつ踏んできた地雷を、みんなが別々の場所で、同じ順番に踏んでいる。誰も示し合わせていないのに、同じ時期に、同じ答えにたどり着いている。作られた時期に至っては、年末年始のほんの数週間に、不思議なほど集中していました。
そして、肩書きも、国も、規模も、てんでバラバラなのです。本家のMicrosoftの部長から、秋田の一事務員(私のことです)、そして今回のお二人まで。 それでも、掘り当てた鉱脈は同じでした。番外編にも書いたのですが、AI以前の世界なら、Microsoftの部長と地方の事務員が、同じ道具を独力で作るなんて、絶対に起こりえなかった。道具が本物のとき、立場が違っても、辿り着く場所は近くなる。身分も国境も、関係ないのだと思います。
これを見たとき、私はなんだか、懐かしい気持ちになりました。前にも、まったく同じ光景を見たことがある からです。
30年前、秋田でも同じことが起きていた
インターネットが立ち上がった頃です。あの時も、あちこちで、名前も知らない誰かが、勝手に走り出していました。私の住む秋田でも、そうでした。
しかもそれは、一人二人の話ではありませんでした。当時、国から出向してきた県の部長さんの旗振りで、「田舎にもインターネットを」という県ぐるみの事業が動いていて、補助金を受けた地域プロバイダーが、県内のあちこちで次々と立ち上がっていったのです。仙北の きたうら花ねっと(1996年)、北秋田の くまげらネット(1997年)── どちらも当時の協議会が母体で、今もNPOとして現役です。じつは私自身、地元でこの立ち上げに関わった一人でした。
そして、忘れられないのが、伊藤さんという一人の記者が作った インターネット新聞 です。1996年12月創刊。当時の同業の記者が「日本で最初にインターネット新聞を創刊した」と書き残しているくらいで、おそらく日本初のインターネット地域新聞 でした。たった一人で、毎日、記事を書いてはネットに上げ続ける。それが1日600〜1000アクセス、延べ50万件に向かってカウントダウンしていく。地域の小さな新聞が、全国から読まれていました。
ここで、私がいちばん驚いた事実を書いておきます。この新聞のサーバーを回していたのは、劇団でした。
秋田が誇る劇団 わらび座。そのデジタル部門が、民俗芸能の動きをモーションキャプチャで解析して3次元のデジタル舞踊譜に残す、という90年代としては最先端の研究をやりながら、地域のインターネットそのものの土台まで担っていたのです。伊藤さんのインターネット新聞も、さっきの花ねっとも、その技術に支えられていました。田舎の劇団が、地域のネットワークの心臓部だった ── これはちょっと、痺れる話でしょう。
そして何より、あの頃は 人が集まりました。ホームページ作成の講習会には人が詰めかけ、忘年会には30人を超える見ず知らずの参加者が顔を合わせる。周年ごとには、わらび座に読者や仲間がわいわいと集まる。新聞のアクセスが10万件を突破したときには、読者たちが田沢湖でお祝いのパーティーを開き、募金を持ち寄って祝い金を届けた。ゲストブックで言葉を交わした知らない者同士が、やがてオフ会で本当に友達になっていく。
誰かが号令をかけたわけでもないのに、同じ時期に、同じ方を向いて、みんなが勝手に走り出し、そして自然に集まって、盛り上がっていました。楽しかったなあ、と、素直に思います。
おわりに
新しい技術が本物のとき、たぶんいつも、これが起きます。名前も知らない誰かたちが、別々の場所で、同じ壁にぶつかりながら、同じ方向へ走り出す。
インターネットのときが、まさにそうでした。そして今、AIとExcelの間で、また同じことが起きている。国も、言語も、使っているAIすら違う人たちが、期せずして同じ道具を作っている。あの頃の秋田の熱を知っている身からすると、これは懐かしくて、そして少し嬉しい光景です。
一つだけ違うとすれば、あの頃は、技術そのものが人を引き寄せてくれました。ネットに繋ぐという行為が、放っておいても忘年会を生み、応援団を生んだ。AIは、そこは少し勝手が違うのかもしれません。机の前で、一人で完結してしまう道具だから。だとすれば、これからの盛り上がりは、待っていて向こうから来るものではなく、こちらから作りにいくものなのでしょう。
だからというわけでもありませんが ── 私は、自分のMCPサーバーを、そっとGitHubに置いてくることにしました。あちこちで走り出している一人に、私も加わっておこうと思います。この渦の中に、もう一度いられるのは、悪くないものです。
リポジトリはこちら → https://github.com/shu1551/shu-vba-manager