🤖

ChatGPT (GPT4o) と TDD ライクなペアプロするとどうなるか試した

2024/05/19に公開

(2024/09/15)
o1-preview で似たようなことをやった

https://zenn.dev/sterashima78/articles/2b6fafc86415b6

はじめに

以前 GPT4 で試したのでどうなるか試してみたくなった。

https://zenn.dev/sterashima78/articles/7876bd00aa2115

やりとり

こちらからの質問は前回と同じになるようにしている。
(時間が経ってライブラリのバージョンが上がったのもあり記述が適当っぽくないのもあるがあえてそのままにしている)

https://chatgpt.com/share/bebbd705-b1ed-4b40-a8df-471c2353d4ac

実装したコード

https://stackblitz.com/edit/vitejs-vite-nnlrzm

やり取りをして感じたこと

  • こっちの指示をちゃんと聞いてくれる
    • 同じ指示だけど、今回は本当にコードだけを返すようになった
  • 出力するコードの精度が高い
    • ほとんど大した間違いをしなかった
    • いちいち指摘したけど、こっちで変更するでも問題ないレベル
    • レスポンスがめちゃくちゃ早いから直させてもそんなにめんどくさくない
  • コードの理解力が高い
    • 以前は相手に忖度したコメントを足さないと意図を理解できなくて実装ができなかったけど、そのコメントを消してもちゃんと理解して適切な実装をしてくれた

おわりに

以前試したときから一年ちょっとだが、かなりの性能向上を実感できた。
また、性能が向上したことで改めてこのスタイルが有効であると感じた。

人間がプログラムを書くときと同様に、入力とする情報の豊富さと、出力の検証が大事であることがわかった。
出力の検証は、次の変更のための入力になる。つまり、失敗によって得られる情報量が多い価値のあるテストを書く必要がある。これも人間が行うプログラミングと同様の構図になっている。

画像の入力を解釈する能力も高くなっていることが確認できているので、画像なども入力とすることでスタイリングも含めてある程度お任せできるようになるかもしれない。
その場合も、どうやって見た目を検証するかが大事になると思っている。

入力に対する検証とフィードバックは定型的なものなので、これは自動的にできると思う。
そうすると、構築対象を十分に理解できる多様な表現の入力と、対象を自動的に検証でき必要な変更を示唆するテストを用意することで、とりあえずそれっぽい出力が得られるだろうという考えがより強くなった。

ここで得られるそれっぽい出力の精度を高めるためには、プログラムの基礎となるパーツがより重量になると思う。結果としてWebフロントエンドの領域ではデザインシステムや、明快なインターフェースな汎用ロジックを実装したライブラリなどの重要度が増すだろうと考えた。

ということで ChatGPT などを使ったコード生成を行うにあたっては以下が大事になると思った。

  • 構築対象を理解するために十分な情報を多様な観点で整理する
  • 出力された構築物が要件を満たしているかを検証するためのテスト
    • このテストは構築対象を理解するという意味で有用な入力にもなる
  • 再利用可能で用法が明快なソフトウェアモジュール

つまりこれまでと何も変わっていないということだ。

Discussion