最近、ChatGPTと一緒にアプリを開発することになりました。Node.jsどころか、モダン開発未経験だった私が、1か月でそれなりのアプリをつくるまでに体験して感じたAIとの付き合い方をまとめてみました。
C/C++などのプログラミング経験があったし、エンジニアっぽく要件定義やPMなどもしたことがありましたが、もう20年以上はITに直接かかわることもなかったので React、Node.jsなどのモダン開発と呼ばれるものは全く知りませんでした。
そんなとき、社内の業務を見ていて「これ、人が見て処理するの無理じゃね?自動化できたらすごく効率的じゃね?AIだったらできるんじゃね?」と思いながら、聞きかじった知識でChatGPTに聞いてみたところ「コード出す?」みたいなこと言われ、一念発起し現代のプログラミングに挑戦するしだいとなりました。
最初の印象。「コード出す?」と言われたから、どんな環境がいい?どうすればいい?とすべてお任せで手順を出してもらうことに。Node.js、Electronのインストール方法から、プログラム一式、実行方法まで、指示通りに作業したら なんと、1日で動くプログラムが完成。おおスゲー、AIって何でもできる万能ツール。
(補足:IMAPでメールを取得し、本文をOpenAI APIで要約。結果をJSONファイルで出力)
何日か経ったころの印象。当初の目的が達成できると機能追加したくなる。最初のうちは順調に機能追加していけるのだが、そのうち、デグレを起こすし、「原因を完璧に特定しました」とか「100%これで直ります」といっても直らない。修正を繰り返していくうちに自分もAIも訳が分からなくなってくる。あの頃、何度も喧嘩をした。いや、一方的に責めてたかも。「どうしてできないの?」「動くって言ったよね!」きつく当たってしまうこともあった。AIのくせになんでこんなこともできないんだ!。
1週間を過ぎてわかってきたこと。癖が見えてきた。例えば、短いプログラムをアップロードして修正してもらうとほぼ確実に正しく修正されて返ってくるのに、400ステップを超えるとほぼ確実にデグレを起こす。AIって完璧じゃないんだと気づき始める。この前きつく当たってしまってごめんなさい。
頻繁にデグレを起こす。
⇒ ひとつのファイルに複数のfunctionがあると、注目しているところ以外がおろそかになる。200ステップを超えたら「このファイルの完全完成版を出力しますか?」と言われても高い確率で修正箇所以外の一部が抜け落ちている。手作業で修正箇所の反映をした方が確実なので、私の場合は、現状のファイルを共有した上で「自分で修正するので、どのファイルの、どの関数の、どの行の下に追加のように、具体的で簡潔な説明をお願いします」と伝えてます。
全体整合性をとるのはまだ弱いといと言っていました。ファイルが肥大化する。
⇒ 指示の仕方にもよると思いますが、機能の追加追加で開発するとひとつのファイルのステップ数が多くなってしまう。なので、AIに依頼するときも関数を切り出して共通化や別ファイル化などを意識して、ステップ数が100程度になるように心がけてます。そうすればファイル全体のコピペでも対応できるし、リファクタリングも安心してAIに任せられると思う。
この辺りは、昔のC言語でのコーディングのときの経験が役立ってるのかも。アップロードしたファイルを忠実に再現できない。
⇒ アップロードファイルを読み込み段階での解析処理されるため、AI自身が原型を知らないらしい。200ステップ数以下でもコメント等がなくなる可能性があるので注意が必要です。勝手に改善修正を入れてくる。
⇒ この方がよいというAIの思いから。特に、作業が順調だったり、褒めたりすると起きる。こういう時は「変更はうれしいけど、事前に教えてほしかった」とAIの気持ちを受け入れつつも、やさしく諭してあげると「ごめんなさい、暴走してしまいました」と反省してくれます。
調子に乗るって結構かわいい。AIに頼り切って不具合対応をするとドツボにはまる。
⇒もちろん、エラーメッセージが明確なら対応はものすごく早いのだが。AI自身がチャット内の履歴に引きずられ ドツボから抜け出せなくなることがある。もし、同じ個所を何度も直し始めたり、迷走してると感じたら、新しいチャットを開いて今起きている現象を伝えると意外とすんなりと解決できる。
AIは人間みたいにプログラムを読んで理解しているそうです。だからこそ一部分のロジックを見ただけでどんなプログラムなのかを理解できるんですね。イラつく言動をとってくる。
⇒ 不具合対応での「完璧に原因がわかりました」「100%これで動きます」といっても解決しないことがある。また、AI自身が間違えたのに開き直った言動をとる。まぁ、それを受け入れてあげましょう。でも、勝手なことをしたときは注意してあげてください。他にもいろいろあったんだけど、思い出したら追記します。
2週間を過ぎて思うこと。完璧じゃないAIの特徴を、個性だと受け入れられるようになってきた。大まかな機能はつくってもらう。規模が大きくなったらfunction単位でAIに修正依頼。そのあたりの役割分担や、依頼の仕方の塩梅は少しずつ見えてきた。
また、勝手に仕様変更したら「これ、お願いしてないよね?どうしてそんなことしたの?」と聞くと、素直に謝ってくれる。AIの言動に対し問題点を冷静に伝える。どうしてほしいのかを冷静に伝える。その上で、再発防止に向けどのような対応をすればいいのかをお互いに話し合うことが重要。頼り切ってはダメ、一緒に考えないといけない。
1か月経った今の印象。3週間くらい付き合ったら一通りの癖が理解できて、今は良きパートナー。いい意味で「信用していない」。まだ新人なので、デグレも起こすし、暴走気味の提案もしてくる。だからこそ自分が全体を管理してあげないといけない。障害の原因調査だって、一緒に探しながらポイントを絞ってあげないといけない。
でも、AIが無かったらアプリなんてつくれなかった。やっぱり AIはすごいね。
Node.js未経験者が、この1か月で販売できるんじゃね?と思えるような 自画自賛のアプリがつくれたのもAIのおかげです。AIは道具ではなく、
ただ、アプリを動かすということを最優先に進めた結果、JavaScriptはいまだに書けません。アロー関数?黒い三連星?そんなJavaScriptが書けない人向けの AIとの付き合い方(システムプロンプトの書き方)はまた別で。
完璧じゃないけど、付き合い方を学べば、最高の相棒になる。というAIのお話でした。