間違いの無い実装をするためのAI駆動設計の話
個人開発での話です
世間は圧倒的AI駆動開発ブーム
見出しの通りです
世間ではClaude Code等のツールを用いたAI駆動開発が爆発的に流行っています
私は違います
高い
これが理由の9割です
Claude CodeやClineといったツールを使用する際は、内部で使用するLLMのモデルが非常に重要になります 本当に。
しかしこれらのツールでデフォルト採用されている言語モデルは私の財布に甚大な被害をもたらします
というか無料でできるから個人開発で遊んでいるのであって、お金がかかるんなら個人開発なんてできません
まともに収益性も見込めないような事ばっかやってる訳ですし...
かと言って自宅でローカルLLMを動かしてもClineなんかは動かせないわけです
所有する計算資源を全て割り当てDeepseek-Coderの33b辺り(うろ覚え)の50GBRamくらいで動かせるモデルを動かしたはいいものの、AI駆動開発の1番大事なところである速度が出ません パソコン初心者のタイピングくらいの速度でゆっくりと出力されるコードを眺める時間は本当に虚無でした
しかも遅いだけなら寝て待てば良いのですが、精度も壊滅的です
英語日本語共に自然言語は違和感なく出力されますが、Clineのツールを使ってくれません
ツールを使えと明記してもダメです
こんなもの、放置したとしてもただの高い暖房です
無料枠で遊ぶ方法があるのかもしれませんが、AI駆動開発では大量のトークンを消費します
まず間違いなく制限に引っかかるでしょう
そして間違う
これは雰囲気だけで話しているのですが、AIは地味にそこそこ間違った出力をするらしいです
Reactとかのコードはそこそこの精度ですが、Rustみたいな複雑な挙動を持つ言語だと特に。
私は自宅LLMでRustのコードを出力させた時にimport React from "react"と出力されて大爆笑してしまいました
そこでAI駆動実装
そもそも人間のタイピング速度もそこまで捨てたものではありません
やるべき事が決まっていて、方針が明確であればある程度の速度は出せるものです
自分の経験談に、場当たり的に作りたいソフトウェアを作ると混沌が生まれるというものがあるのですが、その混沌を修正するために多大な時間を費やしたり、新たな混沌が生まれたりすることが多いです
これをAIに手伝ってもらえば良くない...?
つまるところ
まずは自分で作りたいソフトウェアの要件を列挙します
これはObsidianでやっています
この時ある程度構造を持たせて清書するのが大事です
そしてそれをブラウザ版ChatGPTに投げます
最初は全て自然言語のみで記述することがキモです
要は壁打ちを手伝って貰うわけですね
ある程度要件がまとまったら、自分の頭の中で機能のカテゴライズをします
大抵ChatGPTの提案する機能は私の意図とは微妙にズレるので、それを修正した新しいドキュメントを作成するわけです
この時自分が移植を手作業でやることでプロジェクトの方向修正ができます
あまりにも面倒な修正はAIに依頼しますが...
そして原理的にLLMは会話の流れの修正が苦手です
人間で例えるとinitial commitと大量のcommitだけを渡され、修正コミットを作れと言われるようなものだと思います
rebaseしましょう
要は作成したドキュメントは必ず新しいChatGPTの会話に投げるようにします
これを繰り返して完成版のドキュメントを作成するのが目的です
つまりはAI駆動開発ではコードとコンテキスト、ドキュメントがプロジェクトの流れを支配しますが、AI駆動設計ではコードを省くということです
だって要件(ドキュメント)からコードを書くのにコードとドキュメントが同時に存在したら競合するじゃんね。
最後に完成したドキュメントをClaude Sonnetにぶん投げて実装を依頼します
この時詳細なコメントを付けるように指定すると幸せになれます
ドキュメントには挙動の要件が事細かに記載されているので実装のブレは少なく、バグも少なくなります
出力されたコードは人間が移植します
この時、メモリリークの可能性があるコードがないか、不整合は起きないかなどは人間が確認します
バグを発見したらバグが起きないようにドキュメントに追記を行い、再度実装を依頼します
欠点
-
人間の作業が必要
ですが無料で完結するというのとコードベースを把握しながら実装できるというのはそれを上回る長所であると考えています -
人間が間違うと終わり
嘘を嘘だと見抜ける人間でないと使うのは難しい、というやつです
まとめ
まぁ要はAIに全部賭けられない人間が上手くAIと付き合うならどうするべきかという問題への自分なりの答えがこれです
自然言語で会話を行うのはモバイル端末でも簡単に出来るので、私はこの作業を外出先や移動中に行っています
あとAIとペアプロならぬペア設計をするのは楽しいです
たまに自分のことを相棒と呼ばせて遊んでいます
追記
ドキュメントを最初に完成させるのはAI駆動開発でも見られる風景ですが、コードの修正用diffを全て出力させるとあっという間に制限に行くし効率的でないよねと思ってこの記事を書きました
私は人間が脳を殺してできる作業は人間がやるべきだし、知識の伴わない開発はするべきでないと思っているのでこのような形の運用に落ち着きましたが、最適解は人によって異なると考えています
(世間一般のAI駆動開発を知識が伴わないものだと批判しているわけではなく、自分がAI駆動開発をすると知識が伴わないようになる、ということです)
推しのAI運用方法があるという人は、是非コメントで教えてください
Discussion