AIにコーディングさせると毎回コードが変わることについて思うことを書いてみます。
❓️与えている仕様が少ない、前提条件が複雑
コード内容が変わるのは、与えている仕様が少なすぎる場合な気がします。
なので、ある程度前提条件や仕様を与えると毎回近いコードにはなる気がします。
もっとも、かなり細かい指示が必要になると思います。
作るモジュールの粒度が大きい場合、与える情報が少なくなりがちです。なので、できるだけモジュールの粒度は小さくするほうが良いと思います。
たとえば、テーブル定義書をCSVでつくって、そこからモデルやSQLつくれといったら、同じコードができます。単純であればあるほど。
一方、ざっくりと画面つくってというと、いろいろな前提条件が考えられるので、コード内容はブレが多くなります。
rulesなどで技術スタックを定義し、細かくモジュールの仕様をつくり、実行すると比較的意図したコードになると思います。
👫人間がコーディングする場合も、要求仕様が同じでも千差万別
同じ仕様、同じ人間でも書き方が変わったりすることはままあります。まして、人間が変わればコードはやはり変わります。
ただ、プログラムの良さでもあると思いますが、とにかくどんな書き方をしても、要求仕様を満たすことはできます。ポイントを要求仕様を満たしているかだと思います。
仕様は同じなのに、言語、ライブラリが変わればコード内容は変わります。
でも、要求される仕様さえ満たしておけばOKです。
なので、要求仕様を満たしているかが大切であってコードそのものがいつも同じである必要はあまりないと感じています。
テストコードを書いて、かならず要求仕様を満たしているかのチェックは必要だと思います。
⚒️AIだからこそごっそり書き直しはOK
人間だと書いたものを書き直すとかなり時間がかかります。
でも、AIは作るものがはっきりしていれば、短時間でコーディングしてくれます。
ある時点まで作ってきた仕様をドキュメントにしておけば、
作り直し自体はゼロからするときより早いと思います。
🗂️工程やモジュール単位で設計やタスクをまとめる
大きめのアプリをつくるとどうしても、ごっそりリファクタリングすることがあります。
といっても、開発工程を小さくわけて、どこからやり直すのかのポイントは分けておくべきだと思います。
たとえば、Webアプリであれば以下のように工程ごとにタスクグループをわけて、特定のタスクグループから作業をやりなおすようにすればよいと思います。
Webアプリの開発工程
1.開発環境構築
2.DB構築
3.API構築
4.画面作成(共通部分)
5.画面作成(個別部分)
6.テストコード作成(ユニットテスト、Playwrightなどの画面テスト)
7.本番環境構築
8.デプロイ
多分、上記の1-3、7-8はそんなにやり直すこともないと思います。
4~6あたりは結構、作り直しが発生すると思います。
2-3のDB、APIはすべてのリソースをごっそり変えることはそれほどなくて、
テーブル追加や列の更新など既存リソースの変更ぐらいが多いと思います。
📜必ず仕様やタスクはファイルで保存しておく
AIなのでリファクタリングすること自体を避ける必要はあまりない気がします。
ただ、そのためには、要求仕様やタスクを記録しておく事が必要です。
ある程度ソフトウェア開発になれていると最初にドキュメントをつくり、タスクファイルをつくって、小さくAIにモジュールをつくらせていくと思います。
一方、あまりソフトウェア開発に慣れていない場合、ゴールシークプロンプトで要求仕様に向けて、AIとチャットをしながらアプリをつくると思います。この場合でも、かならずつくったものの仕様やタスクに関するドキュメントをAIに作らせておくべきだと思います。
ドキュメントやタスクをファイルに残すことはとても重要だと思います。ただ、それの作り方は経験値によって変わると思います。
以下のプロジェクト情報をコードで残すという記事は深く同意します。
仕様書・設計書だけでなく、指示もファイルにしておくとよいと思います。というかチャットでたくさんの情報を与えるのは限界があります。