🫥

彼(GPT-4)にスクリーンショットを撮るアプリを作ってデプロイまでしてもらった

2023/03/18に公開

まず最初に、私はここから皮切りを始めた…。

Goで指定したサイトのURLを送ったらスクリーンショットを撮って返してくれるwebアプリケーションの作り方とデプロイ方法を教えて

彼による返信はこうだ…。

  • chromedpが必要
  • インストールはこの方法でやってね
  • それを使ったアプリケーションのコードはこうだよ
  • デプロイするにはここにこうして(ここではHerokuを使うことを提示)

おっと…と私は思った。
Herokuではなく、GCPにデプロイしたいのだ。

そこで私はこう問い詰めた。

Herokuじゃなくて、GCPにデプロイしたい

すると彼は、嫌な顔色ひとつ見せずすかさず健気にGCPへのデプロイ方法を説明し始めた。

いや、待て…。
App Engineにデプロイしようとしていた。
Cloud Runにデプロイしたい…。
私はすかさず、彼の言葉を遮って要望を伝えた。

Cloud runを使ってデプロイしたい

ここまで来たら普通の人間なら、「こいつ面倒くさいな…」と怪訝な顔を見せるところ
顔色一つ変えず、彼は再び健気に説明を始めた。

かわいいやつめ。

  • GCPへのアクセスするにはgcloud sdkが必要だということ(これはすでにインストール済み)
  • デプロイする先のプロジェクト指定(これも自分のテスト用プロジェクトがあるので飛ばす)
  • Dockerfileを作成
  • Google Container Registryへのpush
  • Cloud Runへのデプロイコマンド

私は密かに上記を彼に書かせている間に、提示されたGoコードを転記し、ローカルで試すということを遂行していた…。

そこで気付いた。
確かにスクリーンショットを撮るアプリだが、本当に撮るだけで、画面上で確認することができないのだ。
これでは本当に動いてるのかコードを読むしかないじゃないか。
私は彼のコードをコピペで作りたいのだ。(結局少し自分の手で手直しはしたのだがそれには後述する理由があります)

そこで私は、注文を届けた。

画面にもスクリーンショットを表示したい

彼はまたしても健気に説明を始めた。

かわいいやつめ。

  • templatesを作る
  • それを先ほどのアプリケーションに組み込む方法

ここまで提示してくれたのだ。
さすがです。この提案を10秒足らずで完了してくれるのは、Go初心者の自分ではまず無理でした。
早速取り入れて立ち上げてみる。
これまではアプリケーションのURLに直にスクリーンショットを撮る先のURLのクエリストリングを埋め込む作業が必要だったのに、画面上にURLを入力する欄まで作ってくれてるではありませんか。

なんて気が利く子なの!

しかし、ここで私はあるミスをしていることに気付いたのである。
遡ること、デプロイ方法を聞いていた時代…。
私は、ふと、テストコードも書いてもらおうと思っていた。
以下の様なことも袖の下で要望していたのである。

上のアプリのテストを書いてください

彼は何食わぬ顔でテストコードを書き、それもちゃんと成功パターンと失敗パターンの両方の観点から捉えたテストであり、コードもパスしていた。
しかし、上記のtemplatesを追加したことによる変更によって、テストが通らなくなっていた。
ここで私がテストを直し始めたら、ただでさえGoに慣れてない上に、彼(つまり他者)の書いたコードを読むことになり、膨大な時間がかかる…!

いけない…!そんなことあってはいけない…!

これは彼の作品なんだ。私が口を出してはいけない…!

テストの変更点はある?

機械を相手ということもあり、相当投げやりなことを言い出していた。
彼は、当然ものの10秒で直したコードを提示してきたので、コピペで解決。
さすがです。

その後も、テストコード自体がスクリーンショットを撮る性質上、通信が走ってしまう可能性があったので、直そうと思ったのですが、かなりいろいろ注文したあとだったので、あの時のコードで通信部分をモックしてっていう要望の出し方が非常に難しかったため、あえなく断念。

ここが先述した自分で少し手直しが必要だった理由にもなり、やはり特定の時点でのコードを基にという条件をつけるのが難しい…。
そして彼もそれは分かっているらしく、条件を加えれば加えるほど、全体のコードではなく部分的な修正しか提示しなくなるので、自分でその箇所を探して差分を見て、変更を加えていく必要があった。

そうして出来上がったコードをデプロイするため、彼が教えてくれたデプロイ方法を試すも、途中でtemplatesの追加が入ったことや、chromedpがDockerに組み込まれていなかったりなど、少しお茶目なところを見せてくる彼。

お茶目で済めばいいのだが、コピペでしかやってない自分からしたらエラーが出たら、何でエラーが出るのか分からない恐怖に苛まれるので非常に精神衛生上良くない。

それでも、ひたすらエラーを彼に聞いたり、しつこくせがんだりしているうちにデプロイまでこじつける。

彼に見せるためにここに貼っておきますね。
あなたの作ったアプリですよ。
文字化けしてるけど。

地味に時間はかかったが、無事デプロイまででき、ほぼコピペだけでスクリーンショットを撮ってくれるアプリが完成しましたという楽しい話でした。

教訓として

  • 手順は上から順番に流していけるような質問にしないと、「あの時のコードに対して」みたいな書き方をすると複雑な返答になり、コードの修正ができなくなる。
  • 特にテストコードはその傾向が強く、モックとかの定義も最初からしておかないと定義を変えてもう一度説明させると部分の修正とかになり、コピペする方も大変。
  • 全てのコードを書かせる、とかはないとは思うが、やはり部分部分でその時その時の細かい仕様だけを渡して、あとで自分で繋ぎ合わせるという使い方が良いような実感。

あと、これは性能ではなく、単純に不満なんですが
plusに加入する時、GPT-4の説明に、4時間で50メッセージという説明があったにも関わらず
加入後、見てみたらメッセージ入力欄の上に3時間で25メッセージという無許可制限がかけられたのはちょっと面食らいました。
きっと彼だったら、涼しい顔で悪びれることなく「すみません、私が言ったことは間違っておりました。」と言うのでしょう。

Discussion