汎用向けでは役に立つ

仕事においても生成AIの利用の波がやってきて、たまに使うようになった。誰もが書いたことのあるような一般的なコードはすぐに生成できるし、精度もかなり高いように感じる。やりたいことが明確になっていて、誰かが過去に取り組んだことがある問題ならばかなり役立つだろう。こうした用途ではDevOps(開発運用連携チーム)にとってうってつけである。

個人的に試している範囲では、SQLの生成が特に強いように感じる。言語仕様もコンパクトであるし、それによってやりたいこともある程度の範囲で決まっているからだ。私は普段PostgreSQLを使うことが多いのだが、たまにSQL Serverではどう書いたっけ?みたいなことが起きるので、理屈はわかっていてもやり方(方言)だけわからないものに対しては便利であるし、時間短縮にもなる。

ビジネスロジックは難しい

汎用プログラミング言語のコードを生成することについてはやや否定的な立場である。新しいビジネス課題やニッチな問題に取り組んでいるのであれば現状の生成AIはそれほど役に立たない。これは生成AIの回答が集合知によるものであり、良くも悪くも普通レベルの回答の域を出ないからだ。当たり前だが、世界中でこの問題に取り組んでいる人間が自分しかいないんじゃないかと言えるような問題は難しい。そして私は新規開発をすることが多いので、こういった問題にぶち当たりやすい。

また、誰がコードの正当性を保証するのかも課題である。欲を言えばコードの正当性を検証するコードも生成してやる必要があるし、仮にテストコードを生成してコードカバレッジがあったとしても、それはすべてのテストを通過しただけであって、仕様に対して論理的に正しいかは人の目で見てみなければわからない。

その点では結果だけが生み出されてしまう恐ろしさがある。最近ではGoogle検索でもAIによる回答が出るが、中身が間違っていることが多々あるので、生成AIを鵜呑みにできる時代はまだ遠いように思う。それならば現時点では最初から自分で書いた方が早い。むしろ自分が書いたコードを入力して問題点を指摘してもらうほうがいいかもしれない。

職人技

生成されたコードに対していくら指摘しても堂々巡りになり、一向に改善されないこともある。これは前に書いた通り集合知にその情報が不足しているからである。利用者が少ないプログラミング言語ではそのような現象が起きやすい。

求道者的にこだわりやエレガントさを追求しているのであればプロンプトに苦労するだろう。綺麗なインデントや折り返し、コード揃えなどは人間の美的感覚によるものなので、満足いく結果が得られず、人の手で修正してやる手間が必要になる。

似たようにカリカリにチューニングするような職人技コードも難しい。これは感覚的なものではなく高度な論理性を持ち、場合によりけりで一般化できないことが多いからだ。

生成AIの登場でプログラマの仕事が奪われると煽っている商材屋やウェブマーケターがいるが、こういった集合知にない知識を持っているプログラマは最後まで生き残り続けるだろう。生成AIで仕事を奪われるようであれば、私も含めてそれまでだったということだ。それに彼らは仕事が奪われることを憂いているわけではなく、生成AI自体が金儲けの材料なので、そんなことは気にもとめていない。

まとめ

生成AIの登場によってコード生成が容易になったと言えるが、シンギュラリティに到達していない現時点では、その正しさを担保するのは依然人間の仕事である。また、新しい概念やビジネスロジックも同様で、生成AIはまだそれに対応できるほどの銀の弾丸足り得ない。

などと否定的な意見を書き続けてきたが、用法用量を守っていれば強力なツールであるのは間違いないし、腰を据えてまで書くコードでなければ、生成AIを使った時短術はやることが多い現代においては大いに役立つだろう。それでこなした仕事の分だけ給料も上がればいいのだが。