🤖

ChatGPT Code Interpreterにプルリク作ってもらった。

2023/07/22に公開

ChatGPTの進化凄まじいですね

今回は先週公開されたCode Interpreterを触って遊んでみようと思ったらプルリクまで作ってもらえて、興奮してしまったので勢いで記事にします。

※ 実際にGitHubのプルリクを作ったのは自分です。GPTにお願いしたのはコードの変更とプルリクの概要の記載です。
※ 本記事は人間が執筆しています。どうせなら記事まで書いてもらおうか悩みましたが、GPTに記事書いてもらうのはもうn番煎じが否めないので普通に書きます。

きっかけ

ChatGPTのCode Interpreterは今までテキストでのみやり取りしていたGPTに対して「ファイルをアップロードしたり、ダウンロードする機能」と「Pythonコードがその場で実行される機能」が追加されたものです。

ファイルを一気にアップロードできることで、アプリのコードをzipファイルに圧縮して全てアップロードすればアプリ全体のコードについてinputした状態のGPTと会話できるとの噂を聞き自分でもやってみようと思いました。

目的がないと面白くないので、昨年末から趣味で作ったポケモン対戦記録アプリを題材にコードから仕様ドキュメントを書いてもらいながらCode Interpreterで遊んでみることにしました。

GPT初心者の自分が精一杯書いたプロンプトはこちらです。

このファイルはとあるFlutterアプリのソースコードになります。
このファイルのアプリケーションのドキュメントを作成したいです。
不明な点があれば随時私に質問しながらドキュメントを作成しましょう。


ドキュメントの作成の目的は新たに開発に参加するメンバーへのinputに使います。

GPTの返答はこちら

承知しました。まず、提供いただいたファイルを解凍し、その中身を確認します。

ファイルを解凍しました。解凍されたファイルは "lib" ディレクトリに格納されています。次にこのディレクトリの内容を見てみましょう。

"lib" ディレクトリの内容は次のとおりです:

feature
router.dart
theme.dart
main.dart
scaffold_messenger.dart
domain
constants
environment_config.dart
firebase_options.dart
providers
repository
presentation
util
これらのファイルとディレクトリは、おそらくアプリケーションの各部分を構成しています。それぞれの役割について、ドキュメントを作成していきます。一部のファイルやディレクトリの内容については、それが何を行っているのか正確に把握するために、コードの詳細を見る必要があるかもしれません。

次に、どの部分から始めますか?それとも一般的なアプリケーションの構造について先に説明しますか?

今回アップロードしたのはdartファイルが格納されているlibディレクトリのみです。プロジェクトファイルにはその他のファイルも多く含まれていますが、今回の目的では必要なく、ノイズになると嫌だったので、libディレクトリをzip化したものをアップロードしました。

すると、lib直下のディレクトリとファイル名を列挙してくれました。

「あ、こいつやるな」と確信した瞬間でした。

プルリクエストを作るまで

という感じで、ドキュメントを作成するために会話を続けていくとparty.dartというファイルの中身をみていくことになりました。
party.dartを見てもらうと下記の3つのプロバイダーが定義されていることがわかりました。

partyStreamProvider
partyFutureProvider
someProvider

someProviderってなんじゃ?と思ったのですが、アプリ開発初期にこちらの記事から参考のためにコピペさせていただいたものみたいで、現状全く使っていないがコード上に残ってしまっているようでした。

また、partyFutureProviderがどこで参照されているかを聞くとbattle_memo.dartで使われていることを教えてくれました。(これもすごい、、)

battle_memo.dartはBattleMemoPageクラスが宣言されているファイルで本来ならbattle_memo_page.dartと付けようと思っていたものを名前を間違えてしまったファイルのようです。

こうしてドキュメントを作成しようと思ったら2つの修正点が見つかってしまいました。

  1. 使用されていないsomeProviderが存在する。
  2. battle_memo.dartよりもbattle_memo_page.dartの方が良い。

ここで、気づきました。「Code Interpreterなら修正してファイル出力できるのでは?」

・battle_memo_page.dartに修正
・someProviderを削除

したコードをzipファイルに圧縮して出力できますか?

早速お願いしてみると、zipファイルを出力してくれました。
差分を確認してみるとbattle_memo_page.dartは適切に修正されていました。
someProviderの削除は、someProviderという文字が含まれた行が削除されていただけで、宣言全体を削除してはなかったです。

その後何度か会話とファイル出力、差分確認を繰り返し、someProviderの定義はどこからどこまでかを理解させた上で削除させることでsomeProviderの削除も実現しました。

ということで、出力してもらったzipファイルを解凍し、プロジェクトのlibディレクトリと交換してcommit&pushしてプルリクエストを作成しました。

プルリクエストの説明文は実装者が書くのが最も良いと思うので、GPTに書いてもらいました。

終わりに

今回の作業は自分がやったほうが明らかに早いですが、近い将来アプリケーション開発の進め方が大きく覆ることを改めて実感しました。

最後に今回の会話、プルリクエスト、アプリのリンクを貼って結びとします。

会話
プルリクエスト
ポケモン対戦記録アプリ:PokeScouter

Discussion