ChatGPTは、OpenAIが開発した大規模な対話型AIで、自然かつ流暢な文章を生成することができます。ChatGPT は人間同様に誤りを起こすことがあり、できないこともありますが、興味深いサービスです。
現在(2023年3月30日)のChatGPTは、一度にある程度の大きさまでのソースコードしかうまく扱えません。10万行、20万行に加えて依存するライブラリにそれ以上の行数が加わったソースコードを全て読ませた上で何かをさせるのは非常に困難です。プログラミングで役立てるのであれば、ふんわりしたやり取りでペアプログラミング、コマンドや大きくないコードについて生成してもらうかになるかと思います。また、その使い方であっても ChatGPT が誤る場合は少なからずあるため、常に検証することが必要です。この記事では、TypeScript のコードを生成する際(型付き言語なら共通してできそうです)、テストしやすく後に改修しやすいコードを生成してもらう方法を紹介します。
ChatGPTで扱えないサイズのソースコードをソースコードの生成で手伝ってもらう場合、以下のように必要な機能と入出力の型を定めたスケルトンを用意すると概ねうまくいきます。
次の TypeScript コードの実装をコメント付きで埋めてください。
```
/**
* HTML要素 a と b との距離を取得する
*/
export const getElDistance = (a: HTMLElement, b: HTMLElement): number => {
// ここに実装
}
```
ChatGPTには内部実装を、コメントの部分に書いてもらいます。具体的には、関数の入出力をざっくり用意して、内部とテストを ChatGPT に作ってもらうと良いでしょう。コメントの指示をしておくと、何がしたかったのかすぐにわかるためおすすめです。「次の○○の実装を埋めてください」という指示を与えると、ChatGPTは型に合ったコードを返してくれます。返されたコードが正しいか否かは、出力されたテストコードを元に改修済みのテストコードで行います。ChatGPTは計算が不得意なように、テストケースの分岐やら境界やらを網羅するのも不得意なため、あらかじめ想定しておいた入出力のテストケースを ChatGPT が返してきたテストコードに追加しておくことをおすすめします。
入出力の型さえ合っていれば、ある関数がまた別の関数の内部実装を知らずとも、プログラム間の各モジュールの協調ができ、各モジュールの確かさについては単体テストをすれば大部分の問題が解決できます。扱いやすいソースコードを作るための標語にある分割統治の考えに沿って、ChatGPTに分割後の部分を書いてもらい、ChatGPTのトークン数でまかないきれない大部分を人間が治める形にすると、現在の ChatGPT で扱えない規模のプログラミングの手伝いにソースコード生成を持ち込めます。また、生成されたコードは、機械的に自動生成した読みづらいコードではなく、小さな人間らしいコードなので、後に改修しやすくもなります。