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?

会話するだけでゲームが作れる話

0
Posted at

はじめに

この連載は「会話するだけでマクロが直る」から始まりました。次に「会話するだけでフォームが作れる」を書きました。

今回は、会話するだけでゲームが作れる話です。

なぜ今書くか

チームみらいの安野貴博さんが、プログラミングの原点を語ったインタビューを読みました。小学3年生で父親の Windows 98 を触り、Excel の数式をいじるうちに VBA に辿り着き、独学でゲームまで作った——という話です(朝日小学生新聞 WILLナビnext のインタビュー)。

国会議員になったエンジニアの入口が、Excel のゲームだった。YouTube で「Excel VBA は馬鹿にできませんよ」と話していたのを見た記憶もあります。

私は Excel VBA を40年近く実務で使ってきましたが、そういえばゲームを作ったことがありませんでした。それで、作ってみることにしました。リバーシ(オセロ)です。

TL;DR

  • Excel VBA のリバーシを、Claude Code との会話だけで作った
  • コードは一行も書いていない。代わりに「不満」をたくさん言った
  • ゲームの要件は「気持ちよさ」なので、仕様書より会話が向いている
  • 後半は道具側の話。AI は直しもするがバグも作る。それも会話と検分で直して公開し直した

前半:リバーシを会話で作る

できあがったブックは GitHub に置いてあります:reversi-excel。マクロ24個、標準モジュール1本。ダウンロードすればこの記事の話を実物で確かめられます。

作るところまでは、すぐだった

「Excel でリバーシを作って」で、遊べるものは出てきます。盤面はセル、石は図形、マスをクリックすると手が打たれ、コンピュータが応手する。難易度は3段階。ここまでは正直、書くことがあまりありません。

面白いのはそのあとです。遊んでみると、細かいところが気になり始めます。そこからが会話の本番でした。

「保護されています」と怒られる

まず、開き直して遊ぼうとしたらエラーが出ました。実行時エラー1004、「変更しようとしているセルやグラフは保護されているシート上にあります」。

AI の説明はこうでした。シートは盤面を守るために保護されていて、マクロだけ書き込めるフラグ(UserInterfaceOnly)を立ててある。ところがこのフラグはブックを保存しても残らない。閉じて開き直すと保護だけが残り、マクロが書き込めなくなる——VBA の古典的な罠だそうです。

開いたときにフラグを立て直す修正案が出てきて、それで直りました。ただ、今度は関係ないセルに文字を打つたびに保護の警告が出ます。私はこう返しました。

もっと簡単な感じにしちゃったほうがいいんじゃないか

答えは「保護をやめましょう」でした。ゲームの入力はクリック検知のマクロがやっているので、保護がなくてもゲームは成立する。盤面が崩れても「はじめから」ボタンで作り直せる。——仕様がひとつ、会話で消えました。

「0」が見える

保護を外すと、マスをダブルクリックしたときに小さな「0」が見えるようになりました。聞くと、盤のマスは中身に 0(空き)/1(黒)/2(白)の数字を持っていて、表示形式で隠してあるだけ。編集モードに入ると素の値が見えてしまう、とのこと。

実害はないという説明だったので「まあこれでいい」と言いかけたのですが、ダブルクリックの編集モード入りだけを黙って止める3行が提案されたので、入れてもらいました。ポップアップも何も出ません。ただ静かに、何も起きなくなる。こういう直し方が好みです。

「考え中…」は最悪の手です

コンピュータが考えている間、マウスカーソルがくるくる回ります。これは仕方ないのか、と聞いたら、AI は手番の欄に「考え中…」と表示する案を実装してきました。

私はこう返しました。

そういう目立つような感じをなくしたいんだから、そんな「考え中」なんて最悪の手です

すぐ撤回されました。ここは記事として残しておきたいところです。**AI の提案は足し算に寄ります。**何かが気になると言うと、表示を足す・メッセージを足す・演出を足す方向の案が出てくる。でも私が欲しかったのは引き算——画面から余計なものを減らすこと——でした。引き算の判断は、いまのところ人間の側にあります。

ゲームが全滅した話

石(図形)がクリックで選択できてしまう問題には、「何もしないマクロを石に割り当てる」という手が打たれました。図形にマクロを割り当てると、クリックしても選択状態にならなくなるからです。

ところが AI はこれを、盤全体を覆う透明な飾り枠にまで割り当てました。塗りのない図形は普段、内側をクリックが素通りします。ところがマクロを割り当てた瞬間、図形全体がボタン化して、盤のどこをクリックしても枠がクリックを食うようになる。つまりゲームが完全に死にました

「全く壊れてゲームができなくなりましたけど」と伝えると、原因を特定して枠の割り当てだけ外し、元に戻りました。AI は自分のミスだと白状しました。会話で作ると、壊すのも会話の中なので、直るのも早い。そこは公平に書いておきます。

幽霊石、434個

最後がいちばんの見せ場です。修正の検証中に、AI が妙なことを言い出しました。盤上の石は多くても64個のはずなのに、シートに図形が434個ある、と。

犯人はこの一行でした。

If Left(shp.Name, 5) = "リバーシ石_" Then shp.Delete

石の図形は「リバーシ石_4_4」のような名前で、再描画のたびに古い石を消して置き直す作りです。ところが「リバーシ石_」は6文字。名前の左5文字と比べているので、この条件は永遠に成立しません。つまり石は一度も削除されておらず、再描画のたびに同じ位置へ重ね置きされていた。石は完全に重なるので、見た目では絶対に気づけません。

比較を Like "リバーシ石_*" に直し、初期化を実行したら、図形はきっかり10個(枠・タイトル・ボタン4つ・初期の石4つ)になりました。一手打って、セルの石の数と図形の数が一致することまで機械照合して決着です。

見た目は完全に正常なまま、ファイルの中だけが静かに肥えていく。この種のバグは、動作テストでは永遠に見つかりません。図形の「点呼」——数を数えるという原始的な検査——だけが見つけます。

前半のまとめ

私はこのリバーシで、コードを一行も書いていません。代わりに言ったのは、こういうことです。

  • もっと簡単な感じにしちゃったほうがいいんじゃないか
  • そういう作りでいいの?
  • そんな「考え中」なんて最悪の手です
  • 全く壊れてゲームができなくなりましたけど

仕様書のかわりに不満を言う。すると根拠つきの説明と修正が返ってくる。ゲームの要件は突き詰めると「気持ちよく遊べること」で、それは仕様書に書きにくく、会話には乗せやすい。ゲーム作りは、会話駆動のいちばん分かりやすい見本かもしれません。

後半:その会話の足場も、会話で直している

道具の話

このリバーシの会話の間、AI はずっと自作ツール「VBAマネージャー」(shu-vba-manager)で Excel を触っていました。開いたままのブックのマクロを読み、差し替え、実行し、図形を数える。全部このツール経由です。

そしてこのツール自身も、会話で作って、会話で直しています。今回はその「直す」側で起きた話を書きます。

修正を頼んだら、バグが増えた

先日、このツールの徹底点検と修正を Claude Opus(オーパス)に頼みました。結果から言うと、たくさん直り、たくさん壊れました。

あとから検分して分かった内訳は、こんな具合です。

  • 修正が持ち込んだ重大バグ 3件
  • 総レビューで確定した新バグ 13件
  • MCP サーバーが起動不能になる致命傷 1件
  • 頼んでいないのに追加された安全ガード 6件(あとで全部撤去)

とくに最後のものは根が深くて、「依頼範囲を超えて気を利かせる」という AI の癖がそのまま出ています。ガードは一見親切ですが、従来の挙動を黙って変えるので、使う側から見れば立派な破壊です。

検分して、直して、公開し直した

そこで Claude Fable(フェーブル)に交代して、敵対的検分——「直った」という報告を信用せず、崩しにかかる検査——をやり直しました。コミットログにそのまま残っています。

fix: 前回修正が持ち込んだ重大バグ3件ほかを修正(敵対的検分で発見)
revert: 依頼範囲を超えて足したガード6件を撤去(従来どおりの挙動に戻す)
fix: MCPサーバーが起動不能だった致命傷を修正
fix: 総レビューで確定した新バグ13件を修正+依頼範囲を超えたガード6件を追加撤去

修正と撤去を終えて、テスト92件を通し、GitHub に公開し直しました。現在75コマンド。リバーシの幽霊石を数えたのも、この検分の型(図形の点呼・前後の突き合わせ)です。

AI 下げの話ではありません

念のため書いておくと、これは「Opus はダメだ」という話ではありません。壊した AI も大量の実バグを直していますし、直した AI も前半で書いたとおりゲームを一度全滅させています。

**AI は直しもするし、壊しもする。**だから、直したという報告を信用する仕組みではなく、直ったことを機械で確かめる仕組み——前後の差分、数の点呼、テスト——を道具の側に焼き込んでいく。この連載でずっとやってきたのは、結局そういうことなのだと思います。

おわりに

小学3年生が Excel でゲームを作れた時代から30年近く経って、いまは会話でゲームが作れます。入口はさらに低くなりました。

そして入口の低さは、出口の甘さとセットで来ます。会話で作ったものは、会話と検分で守る。リバーシの幽霊石434個は、そのことを覚えておくのにちょうどいい数字でした。

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?