『namael』開発記録 第8回・AIプログラミングは「機織り」とみつけたり
>> 前の記事「第7回・ChatGPTで究極のやっつけWEBデザイン」はこちら。
機織りとは?
(自分がやってきたAIベースの開発では)最初に生成してもらったコードについて、追加したい機能や修正したい内容を指示していく。
つまり、
「元のコードをコピペし、その下に修正や新規事項の要望を(原則)ひとつずつ書く」
スタイルが基本となる。
(※もちろん、生成してもらったコードが一応動くのを確認してから、次の指示を追加するんですよ!)
実際の例を見せちゃうとこんな感じ。
↓ ↓ ↓

ひたすらコレの繰り返しである。
しかも、一つの指示であんまりたくさんの機能を追加するようにお願いすると、各パートが滞りなく実装されたかどうかの確認も面倒になる。そこで、基本的にひとつずつひとつずつ、順番に順番に、元のコードへ修正や新規事項を追加していく……ことになる。
ひとつ修正(追加)したら動作確認を行い、今度はその確認済のコードをさらにコピペして、その下に次の指示を加えていく。
この繰り返し作業を「機織り」と称した意味をお分かりいただけただろうか(笑)。
コードの内容を説明してもらう
AIにプログラミングをさせていると、特に初学者の人は生成されたコードの意味ーー何をどう処理して目的の結果にたどり着いているのか分からないということもあると思う。当然、自分もそんなのばっかりだった。
そんなときにすることはただ一つ。
そのプログラムのコード(記載内容)すべてを貼り付けて、「このコードの処理内容を丁寧に解説してください」とお願いすればいい。
たとえばこんな感じ。

すると、こんな風に詳細に教えてくれる。
↓ ↓ ↓

この説明、実はこのあとに項目4ぐらいまであるんだけど、それを読んでいただくのが本意ではないので今回は省略。
説明を求めるときだけでなく、ドキュメント作成その他の用途にも使える
で、この説明機能、生成してもらったコードの内容が分からないときに質問するのもいいのだが、もっと有効な使い方がある。
それは、①ドキュメントを作成する場合や、②脆弱性チェックを行う場合……などである。
①ドキュメントの作成
個人開発だと、設計内容を他人に見せることがあまりない関係上、どうしてもドキュメント作成は億劫というか後手後手になりがちだ。
ただ、本業が忙しくて開発期間が空いたときや、問題点を他のエンジニアさんに質問したいときなど、どうしてもドキュメントがないと思い出せなかったり、他人に問題の所在を説明できなかったりする。
そんなとき、生成AIは後付けのドキュメント作成に効果を発揮してくれる。
②脆弱性チェックを行う
ChatGPTのプロンプトにコードを丸ごとコピペしたうえで、「このコード内に脆弱性の原因となる箇所があれば修正を提案してください」とお願いする。
これだけで、ChatGPTはコード中の問題箇所(外部からの攻撃のターゲットになりそうな部分)を探し出し、修正案を出してくれる。
完成させたサービスのリリース前には必ずやっておきたい処理だ。
動かないときは「コピペ+なんでェ?」
これは単純で、プログラムが動かない(=エラーを吐いて止まった)ときは基本、下記のように対処すればいい。
↓ ↓ ↓
<(コピペ)エラーを吐いているコードの全文>
「上記コードを実行したところ、下記のようなエラーが出ました。対応策を教えて下さい」
<(コピペ)エラーメッセージの全文>
上の内容をChatGPTのプロンプトに貼り付けて指示を出せば、考えられる原因や修正方法(あるいは、有効な検証手段)を教えてくれる。
ちなみに、上のようなエラーとは別に「動作はするが、本来望んだ結果にたどり着かない」というケースもある。
この場合は、まずどういう処理をしてその結果にたどり着いたのかを尋ねる。
↓ ↓ ↓
<(コピペ)ちゃんと動いていないコードの全文>
「上記コードを実行したところ、本来は◯◯という結果でなければいけないところ、××という結果が出ました。原因と対応策を教えて下さい」
ちなみに、PHPの場合、こういう症状はPHPのコードそのものというより、さらにその中にあるデータベースへの命令(SQL部分)がおかしいせいで発生することが多い。その場合は、PHPコード中のSQL部分のみをコピペして、その処理内容(=どういった処理をしているか?)を確認するのがいいだろう。
GPT4以下での注意点
ちなみに、GPT4およびそれ以前のバージョンを使うと、扱い切れるコードの量に制限があるため、以前に生成した部分を勝手に端折ってきたりする。結果、過去に存在したはずの機能が度重なる修正の過程でいつの間にか消えてなくなっていたことに後で気づくような事故がしばしば起きた。
一方、ChatGPT4oだとトークン数(≒一度に処理できるコードの長さ)に余裕があるため、元のコードに存在した処理内容が勝手に端折られるようなことはほとんどない。
が、逆にほんの1箇所変えれば済むような場合であってもご丁寧に頭からコードの全文を再出力してきたりするので、ときどき鬱陶しいんだけど(笑)。
