ChatGPTにJestのテストコードを渡して、TypeScriptの開発をやらせてみた
この記事は、「TypeScript Advent Calendar 2022」13日目の記事です。 以前、ChatGPTを使ってStripeを使ったコードを書かせてみました。 https://remoneko.life/ […]
目次
この記事は、「TypeScript Advent Calendar 2022」13日目の記事です。
以前、ChatGPTを使ってStripeを使ったコードを書かせてみました。
https://remoneko.life/create-example-code-of-stripe-using-chat-gpt/
この記事では、「ちゃんと動くかの確認はしないとですね」と締めました。
しかしその後、「もしかしてテストコードを渡せば、出力後に確認する必要がない」可能性が思い浮かび、早速試してみました。
簡単なadd関数を試す
本当にできるか不明なので、簡単な関数で試します。
今回ChatGPTに渡したテストコードはこちらです。
it("test", () => expect(add(1,2)).toEqual(3))
テキストでの指示は、次のように行いました。
Jestで、以下のテストが成功する、add関数をNode.jsで実装して
it(“test”, () => expect(add(1,2)).toEqual(3))
その結果得られた回答がこちらです。
丁寧なことに、ファイル名やテストコマンドの実行方法まで紹介してくれています。
TypeScriptで、引数が可変長な関数の実装を指示してみる
いけそうなことはわかったので、TypeScriptで書かせてみます。
せっかくなので、可変長な引数を取るadd
関数を指示しました。
想定しているコード
add(1, 2)
からadd(1, 2, 3, 4, 5)
まで、引数を可変長にとる関数を想定します。
export function add(...numbers: number[]): number {
return numbers.reduce((acc, current) => acc + current, 0);
}
テストコード
it.each
などが動くか定かでない + チャット型の入力欄に複雑なコードを送りにくいため、素直にit
でテストケースを複数指定します。
it("1+1=2", () => expect(add(1,1)).toEqual(2)
it("1+2+3=6", () => expect(add(1,2,3)).toEqual(6)
it("1+2+3+4+5+6=21", () => expect(add(1,2,3,4,5,6)).toEqual(21)
指示内容
指示内容は、先ほどのテストケースを満たすTypeScriptコードを書くことを要求します。
Jestで以下のテストが成功する、add関数をTypeScriptで実装して
it("1+1=2", () => expect(add(1,1)).toEqual(2)
it("1+2+3=6", () => expect(add(1,2,3)).toEqual(6)
it("1+2+3+4+5+6=21", () => expect(add(1,2,3,4,5,6)).toEqual(21)
ChatGPTからの回答
こちらが得られた回答です。
npm
コマンドでテストコードを実行する方法も指示されています。
実際には、@types/jest
やts-jest
も必要ですので、完璧ではありません。
それでも「可変長の引数」で「reduceなどのメソッドを利用して」「TypeScriptでコードを出力」できるのはなかなかのものだと思います。
終わりに
外部APIやDBを利用するコードでは、モックやスタブが必要です。また、テスト用ライブラリについても考慮させるなどを考えると、ChatGPTだけで完結することは難しいと思われます。
ただ、「テストから書きはじめると、こういうこともできますよ」と示すサンプルや、シンプルな関数を少し書きたい時に使うなどでは一考の余地がありそうです。
AI系面白そうなので、来年はなんかやりたいなーと思いました。