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?

VBAマネージャーをMCPサーバー化してGitHubに公開した話

0
Posted at

はじめに

自作の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

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?