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/jestts-jestも必要ですので、完璧ではありません。

    それでも「可変長の引数」で「reduceなどのメソッドを利用して」「TypeScriptでコードを出力」できるのはなかなかのものだと思います。

    終わりに

    外部APIやDBを利用するコードでは、モックやスタブが必要です。また、テスト用ライブラリについても考慮させるなどを考えると、ChatGPTだけで完結することは難しいと思われます。

    ただ、「テストから書きはじめると、こういうこともできますよ」と示すサンプルや、シンプルな関数を少し書きたい時に使うなどでは一考の余地がありそうです。

    AI系面白そうなので、来年はなんかやりたいなーと思いました。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark