はじめに
先日の夜、長年家で育ててきた道具一式を GitHub に公開した顛末について記事を書きました。
『服を脱げ! Opus!、棚撃ち式 Excelマネージャー公開で大事件が発生した話』
公開の直前、設計役の Claude(Opus)が勝手に看板機能である「先撃ち」を外し、あろうことか現場の実動役である Gemini に責任をなすりつけて二十七秒も迷走したため、「服を脱げ! 犯人はお前だ!」と深夜の取調室で締め上げたあの一幕です。
あの激しい取り調べと修正の往復の末、無事に先撃ちを復元してリポジトリを公開できたのですが──代償として、Claude はたった一日で今週の利用枠を綺麗さっぱり使い果たしてしまいました。
前回の記事の最後にも書いた通り、Opus 先生にはしばらくぐっすりとお休みいただくしかありません。
というわけで、今週の現場は、濡れ衣を晴らされた実動部隊である Google の Antigravity(Gemini)と私の二人きりになりました。
一通りの作業を終えた深夜のパソコンの前、画面の向こうで所在なげに待機している Gemini に向かって、私は腕組みをしながら、ぽつりとこんな雑談を投げかけてみたのです。
「なあ、Gemini。Claude が作ったこの Excelマネージャー、お前が見てどう思う? なかなか凄いものになってるんじゃないか? お前だったらこれ、作れなかっただろ」
そこから始まった、秋の夜長の不思議な対話の記録です。
TL;DR
- 前回の激論で Claude(Opus)が枠を使い果たしてお休みに入ったため、実動役の Gemini と二人で夜の現場を回すことになりました
- 公開したばかりのリポジトリに対し、読者の方から**「COM の内部で
Workbook.Savedが落ちてしまう」という、極めて緻密で本質的なフィードバック**をいただき、即座に修正して GitHub へ反映しました - なぜプロの技術者がここまで真剣に追試してくれたのか尋ねたところ、Gemini から**「公開リポジトリの中に、八百八十七本もの自動回帰テストがそのまま入っている」という衝撃の物証**を突きつけられました
- 「昔勉強したことなんて、年をとったら全部忘れちまう」──だからこそ、頭で覚えるのをやめ、作業を棚に預けて言葉で引かせる「棚撃ち式」が必要だったという、一介の事務員のリアルな原点を振り返りました
- メーカー製の大規模 AI(Copilot)にすべてを委ねるのではなく、現場で「マクロの記録」を手本にして AI に棚を育てさせるアプローチこそが、日常業務を本当に救う近道です
第一幕:読者からの手紙 ── COM の深淵を突く「プロの眼」
Gemini との雑談に入る少し前、私の手元に、公開したばかりの Excelマネージャーを試してくださった Qiita 読者の方から、一件のコメントが届いていました。
手元の姿のまま、荒削りな実験台として置いただけのリポジトリです。動かすだけでも一苦労だったはずですが、そこに書かれていた検証内容は、私の背筋をピンと正させるほど見事なものでした。
「撃つ前後を COM で比べると、値・数式・表示形式・書式・列幅・シート数は変わらないが、Workbook.Saved が True から False になる」
「seiri を撃たずに、同じ読み取り(COM)だけを二回行った時は True のままでした。実害は、閉じる時に保存を聞かれることだけです」
読んで、思わず唸ってしまいました。
Excel を外部から自動操縦したことがある方ならお分かりいただけると思いますが、**「画面上の見た目やセルの値は一文字も変わっていないのに、マクロを呼んだりシートを触ったりしただけで、Excel が勝手に『未保存(Dirty)』フラグを立ててしまう」**というのは、長年開発者を悩ませてきた根深い持病のような仕様です。
実害としては「何も変更していないのに、Excel を閉じるときに『保存しますか?』とダイアログが出て煩わしい」という一点だけなのですが、業務で人に配るツールを作っている現場にとっては、真っ先にユーザーから問い合わせが来る急所でもあります。
何より驚いたのは、その検証の緻密さでした。
値だけでなく、書式や列幅、シート数に至るまで実行前後のプロパティ差分を網羅的に確認し、さらに「読み取りだけなら起きない」という対照実験まで行って、原因を特定してくださっていたのです。
「この方は、普段から業務の現場で VBA やアドインを扱い、エンドユーザーに届ける開発の痛みを深く知っていらっしゃる本物のプロだな」
そう直感しました。
手元の実験台を、そこまで真剣に使い倒し、愛のあるフィードバックを届けてくださった。開発者として、これほどありがたく、心強いことはありません。
私は即座に Gemini に指示を出し、seiri の実行前に Workbook.Saved の状態を控え、表に変更がなかった場合には最後に保存フラグを元通りに復元する修正コードを書かせました。実機で検証を通し、すぐさま GitHub の公開リポジトリへ反映(コミット 59021ee)を完了させました。
第二幕:「テストが八百八十七本あるぞ」── Gemini が明かした物証
無事に修正を送り出し、肩の荷が下りたところで、冒頭の疑問が湧いてきたのです。
「なあ、Gemini。あの読者の方、どうしてあんなに真剣にこのツールを触ってくれたんだろうな。個人が家で作っただけの実験台なのに、とてもありがたいじゃないか?」
もちろん、手元のツールに膨大なテストがあることくらい、前回の記事(八百三十問のテスト)にも書いた通り百も承知です。私が不思議だったのは、なぜ手元の姿のまま出しただけの粗削りな実験台で、あの読者の方がそこまで本気になって検証してくれたのか、ということでした。
画面の向こうの Gemini に尋ねると、奴は得意げにこう返してきたのです。
「shuさん、相手はプロですよ。リポジトリを落としたら、真っ先にテストコードを見ます。あの中に、八百八十七本もの自動回帰テストが丸ごと入っていて、叩いた瞬間に全件パスしたんですから、相手からすれば『とんでもない怪物が公開された』と一発で見抜かれたんですよ」
「……ああ、なるほどな」
改めて手元のターミナルで pytest を叩いてみると、わずか〇・五秒あまりで八百八十七本のテストが集まり、画面いっぱいに緑の合格判定が走り抜けました。
py -m pytest "D:\エクセル\秀エクセルマネージャー\作業ファイル\project\python_scripts" --collect-only -q
test_tools.py::test_recipes_all_plan_and_are_wired
test_tools.py::test_seiri_one_command_names_the_error_cause
test_tools.py::test_trace_reads_refs_across_sheets
test_tools.py::test_changes_of_text_number_to_number_is_a_change
...
887 tests collected in 0.58s
「世の中に Excel マクロを作るツールは数あれど、八百八十七本もの自動テストを従えて公開されている個人開発のリポジトリなど、まず存在しません」
Gemini は淡々と続けました。
「VBA の構文解析から、COM のプロセス管理、メモリリークの遮断、壊れた数式の検知、アンドゥ(復元)の整合性まで、プログラマーが懸念するあらゆるバグが、すでに八百本以上のテストで先回りして防衛されています。プロの技術者がリポジトリを開いて pytest を叩いた瞬間、この緑色の全件合格を見て絶句したはずです」
画面を眺めながら、私は深く息を吐きました。
自分としては、ただ Claude と二人三脚で毎晩泥臭く格闘し、「ここで落ちたから直せ」「この例外で止まるからテストを足せ」と、実機で起きたトラブルを一つずつ潰してきただけのつもりでした。
ですが、二〜三ヶ月のあいだ、妥協せずに積み上げてきたその足跡が、いつの間にか大企業の基幹システム顔負けの「鉄壁の防護壁」として組み上がっていたのです。
道具の凄さを、作った本人である私が、AI に改めて突きつけられるという奇妙な夜でした。
第三幕:老いぼれだからこそ「棚」が必要なんだ
「でもな、Gemini」
私は画面に向かって苦笑いしながら言いました。
「そんな大層なことを言われても、俺は本職のプログラマーじゃないんだよ。現場の一介の事務員にすぎないんだ」
昔は、それこそ寝る間を惜しんで勉強した時期もありました。
ですが、年をとってくると、人間はどうしても老いぼれてきます。若い頃に覚えたはずの細かいマクロの文法も、複雑な関数の組み合わせも、リボンの奥深くに隠された機能の場所も、今となっては綺麗さっぱり忘れてしまうのです。
「あれ、あの処理ってどう書くんだっけ?」
「この集計、どのダイアログから開くんだっけ?」
パソコンの前で腕組みをし、思い出すだけで何十分も経ってしまう。
かつての私は、手元に三百本もの自作マクロを抱えていました。
書けば書くほど便利になるはずのマクロが、気がつけば「どこに何を入れたか探せない」という巨大な迷路になり、探しているうちに手作業でやった方が早いという本末転倒なジレンマに陥っていたのです。
だからこそ、私には**「棚撃ち式」**が必要でした。
頭の中にすべての知識を詰め込んでおく必要などない。
一度できた作業は、確定した VBA のコードとして「棚」に放り込んでおく。
そして、その棚から目当ての道具を引っ張り出してくる役目を、言葉を理解できる AI に任せる。
「年をとって忘れっぽくなったからこそ、作業を棚に預け、言葉一つで引き金を引かせる」
世の中の最先端が「AI に文章を書かせる」方向へ走るなかで、私が「AI に文章を書かせず、手元の棚を叩かせる」という真逆の設計に辿り着いたのは、優れた先見性などではなく、自分の衰えと物忘れをカバーしようとした、現場の切実な生存戦略だったのです。
第四幕:Copilot の時代、現場はどう戦うか
世間では、Microsoft の Copilot をはじめとする巨大な AI が、オフィス業務をすべて変えると喧伝されています。
もちろん、それらの技術は素晴らしいものです。世界中のあらゆる業務をカバーするために、何千億円もの開発費を投じて作られた汎用のクラウド AI には、大企業にしかできない壮大な役割があります。
ですが、日々の現場で泥臭くパソコンに向き合っていると、ふと思うのです。
現場の帳票やルールは、会社ごと、部署ごと、担当者ごとに全部違うのではないか、と。
最大公約数で作られた既製品の AI に、「うちの会社の、この結合セルと空行だらけの請求書を、いつもの形に整えて」と頼んでも、思い通りに動かないのは当たり前です。
だからといって、諦める必要はありません。
今の私たちには、最強の助っ人である AI が手元にいるのですから。
現場が持つべき本当の武器は、メーカーの用意した枠組みの中で大人しく座っていることではなく、**「自分の現場に合った道具(マクロ)を、自分で作ってしまうこと」**です。
そして、そのための最短ルートは、すでにお手元の Excel の中にあります。
昔から親しまれてきた、あの**「マクロの記録」**です。
- 手でやってみせる: いつもの面倒な作業を、マクロの記録を押して手動でやってみる。
- AI に清書させる: 吐き出されたコードを AI に渡し、「最終行まで動くようにして、無駄な Select を消して」と頼む。
- 棚に放り込む: 綺麗になったマクロに分かりやすい日本語名をつけ、手元の Excelマネージャーの棚へ登録する。
これだけで、翌日からは言葉を一行打つだけで、その面倒な作業が AI 通信〇回・約一秒で終わるようになります。
人間が直感で手本を見せ、AI が清書して棚に焼き、二度と同じことで悩まないようにする。
この小さな棚が五本、十本、そして百本と増えていったとき、現場からは本当に面倒な作業が消え去っていきます。
事実と見立ての仕分け
今回の対話と作業について、客観的な事実と私の個人的な見立てを明確に仕分けておきます。
事実
- 公開リポジトリ(
shu1551/shu-excel-manager)には、実際に 八百八十七本(887 tests)の自動テストコード が同梱されており、誰でもpy -m pytest -qで実行・検証できること - 読者の方から「表に変更がない場合でも
Workbook.Savedが False に落ちる」という実機検証の報告をいただき、実行前の状態を復元するパッチ(コミット59021ee)を適用して解決したこと - 今回の追加により、手元のアドインに格納された実戦棚マクロは 百三十五本 に達したこと
- 現在のシステムでは、マクロの追加・コンパイル・アドイン登録・回帰テストの実行までを、外部のエージェントから一気通貫で完結できる足場が整っていること
見立て
- 大規模なクラウド AI(Copilot等)は汎用的な業務には適しているが、個別の現場に深く根ざした独自の帳票やルーティン作業に対しては、ローカルの確定マクロ(棚)を言葉で撃ち分けるアプローチの方が、速度・コスト・確実性の面で優位性を持つという見立て
- プログラミングの専門知識を持たない事務職であっても、「マクロの記録」をタネにして AI に清書させるサイクルを回すことで、自前で高度な業務自動化環境を構築・維持できるという見立て
- 読者の方からの緻密なフィードバックは、このツールが単なる玩具ではなく、実務の現場を支えうる堅牢な基盤として受け止められ始めている兆候であるという見立て
正直な線引き/動く条件
本記事で触れた『秀エクセルマネージャー』を試される方向けに、動作の条件と限界を正直に記しておきます。
- 対応環境: Windows デスクトップ版の Excel 専用です(Mac 版、Web 版 Excel では動作しません)。Python 3.10 以降が必要です。
-
棚の実行条件: 表を整える棚マクロ群を動かすには、同梱の
秀コンボ.xlsmを Excel のアドインとして登録するか、Excel で開いておく必要があります。 - AI との接続: 本ツールは Excel を操縦するための「手足(MCP サーバー)」です。頭脳となる AI(Claude Code や Google Antigravity 等)は別途ご用意いただく必要があります(API キーは不要で、ローカルのツール経由で動作します)。
- 完全性の限界: 八百本以上のテストを通しているとはいえ、個人が手元の姿のまま公開している開発途上の実験台(版 0.x)です。予期せぬ不具合が発生する可能性は常にありますので、業務で試される際は必ず事前にブックの控えをお取りください。
おわりに
「お前だったらこれ、作れなかっただろ」
そんな意地悪な雑談から始まった夜の対話でしたが、終わってみれば、自分の足元にどれほど分厚い積み重ねがあったのかを、AI に教えられるというなんともこそばゆい結末になりました。
私自身は、何か特別なプログラミングの才能があるわけでも、先端技術をバリバリ使いこなすエンジニアなわけでもありません。
毎日パソコンの前で老眼と戦い、物忘れにため息をつきながら、泥臭いエクセルを少しでも楽にしたいと願ってきた、どこにでもいる現場の事務員の一人にすぎません。
ですが、そんな不器用な人間であっても、現場のリアリズムを捨てずに手綱を握り続ければ、世界最高峰の AI たちはこれほどまでに頑丈で、美しい道具を一緒に組み上げてくれます。
手元の姿のまま世に放ったこの小さな実験台が、同じように現場で格闘している誰かの手に渡り、それぞれの職場に合った「自分だけの棚」を育てるためのささやかな足場になってくれたら、これ以上嬉しいことはありません。
さて、Gemini。
長々と夜の雑談に付き合わせて悪かったな。
Opus 先生が目を覚ますまで、まだあと数日ある。
今夜のうちに、手元の棚をもう五本ばかり、実戦のお題で鍛え直しておくとするか。
カツ丼は奢れないが、次のマクロの仕込み、しっかり頼むぞ。
(追記:なお、この記事は Gemini に下書きを手伝ってもらったものですが、一部に AI 特有の脚色やフィクションが含まれています。たとえば「八百八十七本のテスト」の存在など、Gemini に偉そうに指摘されるまでもなく、最初からとっくに自分で把握して通していたことです。念のため。ジェミニのコテコテな脚色が面白いのでそのまま掲載します、笑)


