仕様書の基本と仕組み 第14章 バイブコーディングの活用

先日、池袋のジュンク堂に行きました。最近では技術書も Kindle 版で買う事も多く、そうなると Amazon 一択になってしまって物理的な書店には行かなくしまったのですが、大量の本をざっと眺めて背表紙を見てピンとものを買ってくる、という楽しみはやっぱり書店でしか味わえないものなのです。エンターテイメントと言えますね。
さて、ジュンク堂のコンピュータコーナーを見て、自著があったりなかったりして最近の傾向を確かめます。私の場合、C# 系の本が多いのですが、ジュンク堂の C# コーナーは C 言語といっしょくたになる位に小さくなっていて「ああ、タイトルに C# って付くと、それだけで本屋では隅に追いやられそうだ」と思ってしまう訳です。同人誌界隈の技術書典には行かないので、その傾向はわからないのですが、一般的にはそう、ということです。
他に何が増えているかというと「AI」です。もう「ChatGPT」すら古くなっているようなコーナーではありますが、兎に角エレベーター直近にあるコーナーは AI で占められています。あまり流行を追わなかったジュンク堂ですらそうなのですから、一般書店ならなおさらでしょう(ちなみに、一般書店のコンピューターコーナーは相当縮小されてしまって、Excel 本とか、スマホアプリの使い方とかが多いですね。まあ、作る側には回らないのと、長く続く不況のせいもあるでしょうけど、MOS をはじめとする資格本が多くなっています)。ジュンク堂の場合は、MCP があったはずなのですが、飽きてしまったらしくオライリーのプロンプトエンジニアリングの本が平積みになっていました。生成 AI そのものから、AI エージェントによる自動化が話題になり、AI 駆動という触れ込みから、再び「プロンプトエンジニアリング」を見直そうという向きになっています。さて、プロンプトエンジニアリングとはいえ、初期の ChatGPT の頃に流行ったなっちゃんって本じゃなくて、論文級のオライリーの本が置いてあるのが好感が持てますね。私も PDF で持っています。

コンピューター本の執筆をしている者としては(テクニカルライターと言うと足を使って取材をしている人を示しそうで、私の場合、モニタ上でぽちぽちやっていることが多く「テクニカルライター」というと語弊がありそうで怖いのですよ。コードは書くから「プログラマ」だし、名詞的には「ソフトウェア開発者」にしてあります。エンジニアは工学的な専門家になるでしょうから、「エンジニア」を付けるのもちょっと、という訳で)、AI の本を出せば売れるんではないか?とか「AI の本を出しませんか?」という話を聞いたりも聞かなかったりもするのですが、いえいえ、AI の本や「AI 駆動」の本はみなさんが書き始めていて、年末前には出版されてしまうので、いまから執筆しても無理なんですよ。それに、まあ、AI 駆動というのは、ちょっと前のプロンプトエンジニアリングブームの響きもあって、私的には避けてきたいところですね。あえて「○○駆動」とう枠組みに入れない方がよさそうです。

とは言え、

図解入門 よくわかる最新 システム開発者のための仕様書の基本と仕組み[第4版]

が棚に平置きになっておりました。平積みは水平に本を置くのですが、私としては棚に平置きになっているほうが嬉しいです。表紙が目の高さにあるので、平置きに目線をしたに下げるよりも、目線を上げて探すことが多いです。さらに言えば、スペース的にお得ですからね。他の本も並べられます。
どうやら、AI エージェント絡みで「spec 駆動(仕様駆動)」というワードが広がっています。いわゆる、ドキュメントに従って AI エージェントを動かそう、という話です。なんのことはない、従来型のウォーターフォール型や計画駆動を AI エージェントに置き換えただけなのですが、どうやら、最近の若い人には「仕様書を書く」ということが馴染みがないようで、仕様書の書き方がわからない、そもそも仕様や設計をまとめて書き下すことができない、という風潮があるようです。ようです、と言っているのは、目の前にしたことがない(…ことはないのですが、これは企業秘密としておきましょう、まあ、40代ぐらいの人でもできないし、60代近い人たちも、人まねでやっているだけで、理論的なことを学んでいない人が多いので、あまり、要件/仕様/設計が出来ている人はいません。アジャイルというか、カウボーイコーディングの人が多いのです。あまり関わりたいくないのですが、私の向こうがコーディングされている場合は ok です。被害を被らないし)訳でもないのですが、そのような傾向がみられます。

ちなみに、知らないことは罪ではありません。知らないことにより回りくどいことをやって失敗してしまうこともあるでしょうが、まあ、それは子供ならば仕方ないですね、というところです。大人ならば、まあ、馘になってしまうかもしれませんが、それも仕方がありません。
なので、知らないならば、知ればよいのです。「無知の知」もそうですが、無知だと思えば、知っておけば良いのです。概略でも知って、おけば、知ったかぶりをして、知っている人との話もあうでしょう。

さて、仕様書の話に戻りましょう。AI 駆動あるいは、AI エージェントの活用の仕方は、この本には書いてありません。この本では、仕様「書」や設計「書」などのドキュメントをベースにして開発が進んでいきます。ドキュメントに焦点を当てたのは、片方で、要件定義とか PMBOK の本とかが既にあったからです。当時の企画段階で、既に知識ベースの本はでていたので、じゃあ「書」にターゲットを置いてやってみましょう、と企画を通したのがこれです。幸い、といいますか、このドキュメントベースというスタイルは一般的には受けがいいらしく、第4版となって長く続いています。「改版のために、何か付け加えることはできませんか?」と言われて、章を少しずつ追加して今に至っています。

開発プロジェクトとしては第9章ぐらいで完結しています。その後の章は版を重ねるときに無理矢理追加してものです。無理矢理とはいえ、無理矢理を押したのは私の頭脳に対してなので、全体を通してみればなんとなく意味のあるような章立てにしてあります。ご安心ください。

第14章 バイブコーディングの活用

皆さんご存じの通り、秀和システムが潰れて、秀和システム新社になりました。面倒なので、前者を旧社、後者を新社と呼び分けますが、この手の図解シリーズはどうなるんでしょう?といのが一般読者的に興味があるところです。図解入門シリーズは、結構専門的なモノが多く著者も大学関係の人や専門家が多いんですよね。

それは、さておき、今後版を重ねるかどうか不明になってしまったので、第14章を追加してしまいましょう。せっかくなので、AI 駆動の話を絡めていきます。先に書いた通り「AI 駆動」という言葉はバズワードになりそうなので、ここでは避けておきます。「バイブコーディング(vibe coding)」も消えそうなのですが、プロンプトエンジニアリングぐらいは残るんじゃぁないでしょうか。

以下、阿部さんが顧客、加藤さんが開発マネージャーでお読みください。

保守を請け負っていて月1には WEB ミーティングをしているのだが、阿部さんからちょっと相談ごとが来た。
阿部「加藤さん、ちょっと相談があるんだけど。実は、最近うちの会社でも AI エージェントというモノを使い始めたんですよ。お客への案内メールをいままで Excel の VBA マクロを使っていたのだけど、ちょっと自動化をしようと思って書き直しているところでね。AI 駆動というのか、そのあたりなんだけど、ええと、それでね、加藤さんのところは使っている?」
加藤「なるほど。最近は AI が流行っていますよね。チャットで相談を受けたり、AI エージェントを使ってコーディングをしたりして、うちでも便利に使っています。Google とか OpenAI とかいろいろな会社のものがあるので、好きなモノで大丈夫ですね。有償版もあるのですが、まずは無料からどんな感じで作るか試してみるのがお勧めですよ」
阿部「そうなんだ。それは安心そうだ。それで、ちょっと相談があってですね」
加藤「はい、なんでしょう?」
阿部「システムの話じゃないけど、いいかな?」
加藤「もちろん、どうぞ」

加藤は嫌な予感がした。システムの話じゃないから、受注という訳でもなさそうだ。でも、システムが不具合がでたわけでもないし、打合せは月1にやっているわけだし。まあ、「AI エージェント」とか「AI 駆動」という言葉出てくる時点で、何かにハマった感じがする。

阿部「実は、Excel VBA のマクロを打ちの若手が書き直しているらしいのだけど、どうも、クラウドが必要だとか、データベースが必要だとか言い出してね。単にメールの自動配信なのだから、クライドを使わないといけない訳でもないハズなんだが、やたらに詳しく説得してくるんだよ。AWS とか Google Cloud とか、Azure とか、いろいろなクラウドがあるけど、AWS 一択だというんだよね。理由を聞くと、AI がそう勧めてくるから、という話なんだが、どう思う?」
加藤「なるほど。AI エージェントを使って、クラウドを選定しているんですね。まあ、AI エージェントは、いろいろな情報を集めて、最適なものを提案してくれるので、便利ですよね」
阿部「そうなんだ。それで、ちょっと相談があってですね。理由を聞くと、AI がそう言っているから、の一点張りで、料金とかコスト面はきっちりと出てくるのだけど、ランニングコストがどうなのかとか、そもそもクラウドにする必要があるかどうか、の検討が全くないような気がして」
加藤「AI エージェントは、あくまでも提案をしてくれるだけですからね。うまくプロンプトを入れると、比較をしてくれますが、それは試してみましたか?」
阿部「ざっと、比較はしているらしいんだけど。それに仕様書は Word 文書で統一しているのだけど、どうも markdown 形式じゃないと駄目と言いだしてね。うちのシステムは加藤さんのところで Word に統一して貰って随分整理されているのだけど、ここに markdown という形式を混ぜても大丈夫なものかな?」
加藤「markdown 形式自体はテキスト形式なので問題はないですね。Word と書き方が違うので、相互に完全に変換することはできないですが、AI エージェントを使って仕様書を読み込む点ではどちらの形式を使っても問題ないはずです」
阿部「そうなんだ。それは安心そうだ。じゃあ、これはこれでいいのかな。コスト面が気になってしかたながいのだけど。若手1人でいけるのならば、いいんだけど、専任じゃないから、仕事の片手間にできるだろうか。ああ、ほんとうは加藤さんのところに発注すればいい話なのだけど、実は、そこまで予算がなくてね・・・」
加藤「ああ、予算面は別にかまいませんよ。現在のシステムの保守と運用が続いているだけでひとまず十分ですから。私が気になるのは Excel VBA マクロの移植というところですよね。確かにメール関係をクラウドに持って行くのは今後の拡張を考えればそうかもしれないのですが、素直に言って、そこまでスケールを広げる必要があるのか?というのは疑問ですよね」
阿部「そうそう、そうなんだよ。いま動いている Excel VBA で十分なのに、それをクラウドに持って行くのは無駄じゃないかと思うんだよね。AI エージェントは、そういうことは考えないのかな?」
加藤「いやぁ、考えないことはないのですが、AI エージェントは提案をしてくれるだけでから、そこの切り分けは人間が判断するしかないですね」
阿部「そうか、やっぱり、人間がやらなきゃだめだよね。で、ここが相談なんだけど、その AI エージェントの件をちょっと見てくれないかな。コードのレビューというか、設計書のレビューというか」

ああ、そういうことか、と加藤は思った。保守・運用を担当しているのだから、ちょっと位サービスをしてもよいけど、コードレビューをするにはやりすぎかなと思うし、さてどうしたものか。阿部さんの話を聞く限り、どうも「AI 駆動」に何か幻想を抱きすぎているという気がする。いや、阿部さんは解っているらしいのだけど、若手の人が問題だろう。ひょっとすると、生成 AI とか AI エージェントに過大な期待を抱いているのだろう。

AI がなんでも答えてくれるわけではない。「幻覚(ハルシネーション)」という言葉は随分一般に浸透しけど、最近の「AI 駆動」の中の spec 駆動には勘違いが多い気がする。そこは設計書や仕様書をまとめていない世代には仕方がないが。いっそんこと、AI ペアプロの形でコードレビューを AI に任せるとか、チケット駆動式に思いついた機能を少しずつ実装していくほうがいいのではないだろうか。まあ、若手のコーディングスキルがどの程度かわからないが、あまり細々としたものをこちらに持ってきてもらうよりも、内製できるツールは内製して貰ったほうがいいし、ここは、ちょっとだけ労力がかけますか。

と、加藤が0.1秒で思ったかどうかは定かではないが、ちょっとした沈黙の後に加藤は答えた。

加藤「そうですね。まずは、AI エージェントに渡したプロンプトを見せて頂けますか。AI 駆動方式でやっているのでしたら、claud..md とか requirements.md とか、そういうファイルがあるはずですから」
阿部「そうですね。助かります。じゃあ、後でメールで送るので、ちょっと待っててください」

今月の月1のミーティングが無事終わり、加藤は阿部からのメールを受け取った。claud.md だけじゃなくて、requirements.md も添付されている。spec.md もある。excel_mail.md もあるし。spec_test_pattern.md もある。結構、いろいろなファイルがあるな。ああ、なんとなくわかった。「この匂いは、ChatGPT を使って腐ってしまっている匂いだぜ」、と脳内の声が響いてから、加藤は実装担当のプログラマである長島さんに言った。

加藤「長嶋さん、ちょっと悪いのだけど、この阿部さんのメールの件を見て貰えるかな」
長嶋「ええ!、まあいいんですが、これ残業ですか?」
加藤「いや、残業じゃないよ。ちょっとしたサービスだよ。まあ、1時間ぐらいで終わると思うけど」
長嶋「サービスですか、まあ、阿部さんの頼みならば仕方ないですよね。残業にならないように1時間だけってことでいいですね」
加藤「そうそう、1時間だけね。1時間だけ。で、内容は、AI 駆動でクラウドを選定しているらしいんだけど、ちょっと過大な期待を抱いているようで、そこをちょっと見て貰えるかな。プロンプトも添付されているから、そこも見て貰えると助かるよ」
長嶋「あ、ああああ、ああ、ああああああ・・・、そういうことですか。わかりました。ちょっと見てみますよ」

どうやら、長島さんには何か通じたようだ。弊社では、数か月間から AI エージェントで GitHub Copilot を使っている。GitHub Copilot は、Visual Studio Code の拡張機能として動き、GitHub Pro に月10$ で加入できる AI エージェント入門編として…という宣伝文句はどうでもいいのだが、入口には Copilot がちょうどよい。一応、Claude Code もにも加入して貰って試験的に使っている。ただ、長島さんが言うには「夜中に動かすような大規模プロジェクトならば、確かにペイができるんでしょうが、うちぐらいの中小規模のプロジェクトとなると、昼間に流すことが多いので、あまり綿密な設計に踏み込まないほうが結果的に効率がよいですよね。色々ですが、いろいろ」とのことだった。

それはさておき、夜中に AI エージェントを動かして、翌日に結果をみたときにコーディングの出力が止まっていることが多いそうだ。できたとしても頓珍漢なものがでてくる。まるで、3D プリンターのもじゃもじゃのようだが、そういうこともあるだろう。仕方がない。markdown の設計書をきっちりと直して、何回か流すとできあがるらしいが、そこまで労力を掛けるものかどうかが疑問だ。

長島「加藤さん、できあがりましたよ」
加藤「おお、早いね。ええ、早いというか、数行しか経ってないのだけど、できた?」
長島「ええ、まあ、ざっと見た感じでは、というか、もとのファイルを見ても仕方がないんですけどね。*.md ファイルがたくさんあるところを見ると、細かく設計を煮詰めすぎです」
加藤「やっぱり…」
長島「AI エージェントとか AI 駆動の書籍を読むと、設計をきめ細やかにと書いてあるものが多くて、以前のウォーターフォール開発を思わせるものが多いのですが、そもそも、そんなにきっちりと設計ができる訳がないんです。というか、きちんとできないから、アジャイル開発やチケット駆動がでてきたわけで、そこを無視して、AI 駆動だけ設計をきっちりとやろうとしても無理があるんですよ」
加藤「同意見だ」
長島「専門家ならばまだしも、素人…と言っていは言い方が悪いのですが、設計書を書いたことがない若い人の場合には、もっと逐一動作確認をしながら AI コーディングを進めていったほうがいいですよ」
加藤「なるほどね。確かにね。まあ、そうだよね。で、どうする?」
長島「最初のプロンプトはこんな感じで大丈夫ですよ」

設計.md
```
# Excel VBA マクロの移行

# 目的

- 既存の Excel VBA マクロのメール配信を、Python を使って書き直す
- クラウドは使わない

# 機能

- Excel VBA マクロの機能を Python に移植する
- メール配信機能を実装する
- 配信先は、Excel シートに記述してある
- 配信元は、コード内に .env として記述する
- メール配信の結果をログファイルに残す

# 制約条件

- クラウドは使わない
- メール配信先は 100 件程度
- メール配信は一日一回程度
```

長島「このぐらいで、十分ですね。もとの Excel VBA マクロの量がわからないので、なんともいえないのですが、クラウドに移行する必要がないところを見れば、そんなに件数は多くないでしょう。Excel VBA から Python に移行するのであれば、AI の力が借りれるし、少しずつコードを移植すれば確実に終わると思います。さすがに、一晩でおわりというわけにはいかないでしょうが。1週間あれば形にはなると思いますよ」
加藤「ありがとう。まあ、そうだよね。じゃあ、これを阿部さんに早速送っておくよ」
長島「加藤さん、ちょっと送るのは待ってくださいよ。即レスしてしまうと、IT 屋の立場がなくなりますからね、もうちょっと寝かせておいて、今週末か来週の月曜日の夕方あたりに送るってのはどうででしょう?それなりに仕事をした風にして」
加藤「ああ、確かに、じゃあ、メールで、月曜日に午後に自動送信にしておいて設定しておいて、と・・・」

果たして、阿部さんのところの若手がうまくいったかどうかは、来月のミーティングで聞いてみよう。そこそこの規模があれば、こちらで受けるとしようか、と加藤は思った。

カテゴリー: 開発 パーマリンク