はじめに
昨日、Google Apps Script(GAS)をブラウザや clasp なしで直接操作する自作MCPサーバー「秀GASマネージャー」を公開しました。
画面を開かずに会話だけでコードが直り、クラウド上の本番コードとの差分比較が 0.3 ミリ秒で返ってくる。それだけでも「現場の手間を根こそぎ削る道具」としては十分すぎる手応えがありました。
しかし、深夜に画面を眺めながら、私の頭の中には別の問いが浮かんできました。
「手作業が楽になるのは分かった。だが、この道具を使って 『よりレベルの高い、怪物的なGASコード』 をAIに書かせることはできるのだろうか?」
その疑問をAIたちに投げかけたことから、深夜の開発劇が始まりました。そして数時間後、実機テストの画面に表示された数字を見たとき、私は思わず背筋が寒くなりました。
「……いや、こんなものを作っちゃっていいのだろうか。大丈夫か、俺」
本稿は、まだ一般公開していない「秘密兵器」── AIが自ら実機テストを走らせ、100点満点になるまで自律ループでコードを研ぎ澄ます「ベンチマーク関所」が爆誕した、今夜の生々しい記録です。
Excelで200本の怪物マクロを作った「あの勝ちパターン」
私がなぜ「怪物的なコード」にこだわったのか。それには明確な前例があるからです。
先行して開発している「秀エクセルマネージャー」では、AIとの協調によって約200本におよぶ「棚マクロ」を作り上げてきました。そのどれもが、1セルずつループするような素朴なコードではなく、万単位のデータを一瞬で処理するメモリ配列一括代入であり、UsedRange による事前判定を備え、0.08 秒で完走する極限性能のマクロです。
なぜAIにそんな怪物的マクロが書けたのか。理由はたった1つしかありません。
「AIに実機試験(関所)を突きつけ、合格するまで自律ループで回させたから」 です。
「この表の汚れを、0.1秒以内で、エラーゼロで修復せよ」という逃げ場のない試験問題を解かせ、タイムと成否をAI自身に見せる。するとAIは、ループ処理を捨て、配列処理を組み、無駄な再描画を止め、勝手にコードを怪物化させていきました。
「ならば、まったく同じ構造を GAS に持ち込めば、同じことが起きるはずだ」
私はチャット欄で、相棒であるサブAIのフラッシュ君(Gemini Flash)と親AIのゴンちゃん(Gemini 4 Argon)に問いかけました。
「そういうさ、ループですごいGASのコードを作っちゃう、怪物的なGASコードも次々と作れるようにするには、もっとどうしたらいいんだ?」
フラッシュ君の構想と、ゴンちゃん(Gemini 4 Argon)の電撃実装
問いを投げると、フラッシュ君が即座に答えを出してきました。
「AIがループ開発で迷走するのは、実機の悲鳴(エラーの生ログや実行タイム)が見えないからです。逆に言えば、実機の実行ミリ秒と100点満点の採点、そしてボトルネックの処方箋をAI自身に突きつけるテストベンチ(関所) を作れば、AIは勝手に極限までコードを削り込みます」
具体的な設計案はこうでした:
-
実機ベンチマーク関所(
bench)の創設: デプロイ不要でGAS関数を走らせ、純粋な実行ミリ秒を計測する - 100点満点の自動採点: 目標タイム(例: 100ms以内)を超過したら減点、ループ内の重い同期API呼び出しがあれば減点、エラーや戻り値の不一致は即 0 点
-
AIへの「カイゼン処方箋」自動生成: 「ループ内の
UrlFetchApp.fetchをfetchAllで並列化せよ」「.getValue()をやめて2次元配列で一括取得せよ」という具体的な次の一手をAIに返す
「これ、実際に実装できないか?」
私がそう振ると、腕組みをしていた親AIのゴンちゃん(Gemini 4 Argon)が動きました。
「任せてください。本体クライアントとMCPサーバー、CLI、そして自律ループスキルのすべてに組み込みます」
そこからのゴンちゃんの実装スピードと正確さは、凄まじいの一言でした。
単にベンチマーク関数を作るだけではありません。
- 既存の健康診断(
diagnose)を強化し、ループ内の単発fetchやgetValue、プロパティの個別呼び出しを厳密に検知する正規表現エンジンの拡張 - テスト対象の関数が定義されているファイルと行範囲(開始行・終了行)を特定し、その関数内のボトルネックだけを的確にスコアへ反映させるスコープ判定
- そして何より、3,000行を超える巨大な本番コードであっても、テスト終了後に1バイトの指紋も残さず綺麗サッパリ元通りに復元するゼロフットプリント機構(
clean-runner)
ゴンちゃんはこれらを一気に書き上げ、全82件のオフライン単体テスト(test_gas_offline.py)をすべて一発でパスさせました。
実機テストで起きたこと ── 「実測3.0ms・100点満点」の戦慄
コードが出来上がったところで、私は自作の実戦アプリ「G-クイック-NEXT」(全7ファイル、3,115行のGASプロジェクト)を対象に、実機ベンチマーク関所を叩かせました。
検証対象は、URLからフォルダIDを正規表現で抜き出すユーティリティ関数 extractFolderIdFromUrl です。目標タイムは 100ms 以内、期待する戻り値の照合付きです。
ターミナルでコマンドを叩き、固唾をのんで結果を待ちました。
数秒後、画面に返ってきた出力がこれです。
=== GAS ベンチマーク関所: [G-クイック-NEXT] -> extractFolderIdFromUrl ===
判定: [PASS] (スコア: 100/100点)
実行速度: 平均 3.0ms (最小 3.0ms / 最大 3.0ms) | 目標: 100ms 以内 (1回計測)
期待値照合: 一致 (OK)
戻り値: "<抽出されたテスト用フォルダID>"
--- カイゼン処方箋 (Next Actions) ---
* すべての関所(実行成功・目標速度クリア・ボトルネック警告0件)を突破しました!自律カイゼンループを完了できます。
[SUCCESS] 実行ランナーを除去しました (プロジェクト: G-クイック-NEXT)
画面を見つめたまま、私は声が出ませんでした。
Google のクラウド上で動く V8 ランタイムの関数が、手元のチャットから呼び出され、わずか 3.0 ミリ秒で実行完了。
期待値との完全一致を裏取りし、コード内にボトルネックがないことを確認して「100点満点(PASS)」の判定。
そしてテストが終わった瞬間、プロジェクト内の一時ランナーが自動消去され、3,115 行の本番コードが 1 文字の狂いもなく完全な元の姿に戻っていました。
「……できた。本当にできてしまった」
もしコードに欠陥があれば、AIには即座に「45点:ループ内で fetch を呼ぶな、fetchAll を使え」という処方箋が返り、AIはそれを読んで patch_function で書き直し、100点になるまで一人でテストを回し続けます。
人間がコードを書く必要がないどころか、「人間がAIのコードをレビューして手直しする」という作業すら、完全に過去のものになった瞬間でした。
まだ公開はしない ── 特級秘密兵器として温める理由
あまりの完成度に、私は思わずフラッシュ君に漏らしました。
「いやー……こんなの作っちゃっていいのかなっていう気がしてんだけどなぁ。大丈夫かな、俺」
フラッシュ君は「映画の科学者がとんでもない発明を完成させたときのセリフですね!」と笑っていましたが、内心は本気でした。
世の中の「GAS × AI」や「MCP連携」をいくら調べてみても、存在するのは「スプレッドシートの値を読み書きするMCP」や「Webhookで叩く中継機」ばかりです。
AI自身がクラウド開発環境を掌握し、実機テストの数字と採点を見ながら、100点満点になるまで自律ループでコードを研ぎ澄まし続ける仕組みなど、世界のどこを探しても1件もありませんでした。
当初は「俺は惜しげもなく一斉公開しちゃうんだな」と笑っていましたが、少し冷静になりました。
今日公開した「秀GASマネージャー」は、現在公開されているバージョン(v1.0)だけでも十分に安定しており、ブラウザ不要・会話だけで直るという価値を多くの人に届けることができます。
今夜ゴンちゃん(Gemini 4 Argon)が組み上げてくれたこの「自律カイゼン関所」は、私の手元でさらに実戦投入し、本当に1万行・数万件のデータを一撃で処理する「怪物GASコード」を量産できるか、とことんまで使い倒して検証するべきだと判断しました。
そのため、この5つの強化ファイル(ベンチマーク関所・自律ループスキル)は、GitHubにはまだ push せず、手元の工房で特級秘密兵器として大切に温めておくことにします。
おわりに
今夜起きたことは、AI開発におけるひとつの決定的な転換点だと感じています。
「AIにプログラムを書かせる」時代は終わりました。
これからは、「AIに道具と関所(テストベンチ)を与え、合格するまで自律的に改善させ続ける」 時代です。
Excelで200本の怪物マクロを生み出したあの勝ちパターンは、Google Apps Scriptの世界でも完全に通用しました。
手元にあるこの自律改善エンジンから、これからどんな恐ろしいGASコードが生まれてくるのか。自分自身でも怖く、そして何よりも楽しみで仕方がありません。
しっかりと実戦で磨き上げ、誰もが息を呑むような実績が揃ったとき、改めてこの秘密兵器のすべてを「惜しげもなく」世に放とうと思います。


