生成AIと従来のプログラミングを組み合わせる際に考えていること(2025年2月時点)

## はじめに

私が所属しているチームではAIと従来のプログラミングを組み合わせる機会が増えています。
AIによる産業構造転換の波は、世界的に見ても避けられない状況です。
この記事ではこの状況に対する私自身の思考を整理し、私の見解を述べます。

## 現在の知見
- 「設問と採点はまだまだ人間の仕事であり続ける」
- 「生成AIは反復作業を爆発的に加速させるが品質の向上に直結するとは限らない」
- 「予測可能な結果を得るためにコーディングやプログラミングは依然として有効な手段である」

## 現在の所見に至るまでに参考にした記事

### 「今後生成AIとどう向き合うべきなのか？ 現場のエンジニアと研究者が最新研究事例から語り合う」

https://codezine.jp/article/detail/20111

2024年末に発表され、非常に大きな反響を呼んだ記事です。
和田卓人氏が述べた「労力は外注できるが、能力は外注できない」という言葉は生成AI、プログラミング、そして人間による目視手作業の役割分担を考える上で重要な示唆を与えるものであると考えています。
私自身の知見である「設問と採点はまだまだ人間の仕事であり続ける」は和田氏の言う「能力」を私なりに具体的に解釈したものです。
生成AIを使った経験のある方なら、AIがハルシネーションを起こしたり「曖昧な質問に対して曖昧な回答しか返さない」場面に遭遇したことがあると思います。 
このような状況に対して適切な判断を行い、設問を改善したり生成AI以外の方法を検討できる能力は人間が保持すべき重要なスキルであると考えています。

### 「生成AIのお陰で必要とされる判断量が激増して死ぬほど忙しくなった話」

https://note.com/kirik/n/n0903921b3b6a

これはやまもといちろう氏によってAIが生成したアウトプットを受け取る側の立場から執筆された記事です。
生成AIによって反復作業の速度とアウトプット量は増えるものの「設問と評価は人間が行わなければならない」ため仕事量は増える可能性があることを示しています。

興味深いのは、この記事にAIの活用可能性を逆説的に示唆するかもしれない記述がある点です。
この記事では生成AIの出力について「つまらない人を集めた会議でよく出がちな平凡な結論にしかならない」と述べていますが、これは裏を返せば **「どんな人でも同じような結果になる作業」であれば生成AIに任せられる** ということも考えられます。人間ならば一瞬で判断できることが「プログラミングすると大量の分岐処理が必要となる作業」になることは珍しくありません。システムの構成部品の一つをプログラミングで実装するかわりに生成AIで実装するという流れは増えるでしょう。

「AIに依頼した反復作業の増加量だけ人間の設問と評価の仕事量が増加する」「仕事の内容やどのような出力を期待するのかによって、生成AIが有効なのか旧来からの手法が有効なのかが分かれる」ことを考慮して、無批判に生成AIを導入するべき又は旧来の手法を取り続けるべきではないということなのだと私は考えています。

### "You Still Need to Learn to Write Code in the Age of LLMs"

https://blog.dillerdigital.com/?p=31

私がメンテナンスしているOSSの共同メンテナーがLinkedInでシェアした、Pythonコーディングカリキュラムサービスを提供する[Diller Digital](https://dillerdigital.com/)のTim Diller氏による記事です。

Diller氏は、生成AIの「自然言語で依頼されたことに対して自然言語で結果を返す」能力がパラダイムシフトのように語られていることについて、下記のようなPythonコードスニペットを例に出して _it ignores the fact that **we already use human language to program computers**._ (私訳: 「**私たちはすでに人間言語を使ってコンピュータをプログラミングしている**という事実を無視しています。」)という指摘をしています。

```py
gold_watch_orders = 0
for employee in employee_list:
    gold_watch_orders += will_retire(employee.name)
```

Diller氏はプログラミング初心者でもこのコードを見たときに「従業員リストから退職者数を確認し、金時計の発注数を決定している」というコードの意図を理解できると述べています。

Diller Digitalはコーディングカリキュラムを提供する企業であり視点が多少プログラマー寄りであることを考慮すべきですが、 _The act of writing the code causes you to think about your problem more clearly._ (私訳: 「コードを書くという行為は問題をより明確に考えることにつながります。」) やコーディングについて _how to solve problems in a clear, unambiguous way._ (私訳: 「明確で曖昧でない方法で問題を解決する方法」)であるということに私は同意しています。

### "Jensen Huang is Wrong about Coding"

https://medium.com/@nanecone/jensen-huang-is-wrong-about-coding-24c86a6e2203

これは[「将来はAIがコーディングを行うようになるため子供たちはもうコーディングを学ぶ必要はない」というNVIDIAのCEOであるジェンソン・フアン氏の考え](https://www.tomshardware.com/tech-industry/artificial-intelligence/jensen-huang-advises-against-learning-to-code-leave-it-up-to-ai)に対するNathan Anecone氏による反論です。前述のDiller氏の記事でも引用されています。

記事中の _Natural Language is Underpowered and Overrated_ (私訳: 「自然言語は力不足で過大評価されている」)セクションには _The utility of technical languages is that they are denotative: they say one thing and one thing only. Natural language is connotative, a statement in a natural language can mean different things depending on the context. It’s strengths are also its weaknesses, because that ambiguity is anathema to the precision you need to program well._ (私訳: 「技術言語の有用性はそれが指示的であることです。つまり一つのことだけを意味します。自然言語は含意的であり自然言語の記述は文脈によって異なる意味を持つ可能性があります。その長所は同時に短所でもあり、その曖昧さは優れたプログラミングに必要な精度とは相容れません。」)と述べられています。

また _Any programmer will tell you that struggling to try to explain what they need in words is often way more time consuming and inefficient than just coding it._ (私訳: 「言葉で必要なものを説明しようとすることが、単にコーディングするよりもはるかに時間がかかり、非効率的であることを、プログラマーなら誰でも教えてくれるでしょう。」)とも述べています。

これらはプログラミングと生成AIの役割分担を考える上で重要な視点であると考えています。

### "Anthropic" - nedbatchelder.com

https://nedbatchelder.com/blog/202407/anthropic.html

これはPythonでテストカバレッジを計測するライブラリ[`coveragepy`](https://github.com/nedbat/coveragepy)([PyPI](https://pypi.org/project/coverage/))のメンテナーである[Ned Batchelder](https://github.com/nedbat)氏が[Claude](https://docs.anthropic.com/ja/home)を開発している[Anthropic](https://www.anthropic.com/)に参加したことを報告している記事です。

Batchelder氏は _I know essentially nothing about how LLMs work and are built._ (私訳: 「私はLLMがどのように機能し構築されているかについて本質的に何も知りません。」) と述べているようにLLMやAIに関する専門家ではなく、_My main concern is that people will use AI to make the world worse in various ways._ (私訳: 「私の主な懸念は人々がAIを使って世界をさまざまな方法で悪化させることです。」)と述べているようにAIの負の側面についても懸念を示しています。

それでもBatchelder氏は自身の役割について _AI and LLMs aren’t going away, so maybe I can help Anthropic pull towards the good._ (私訳: 「AIとLLMがなくなることはないので、私がAnthropicを善の方向へ引っ張るのを手伝えるかもしれません。」)と述べています。

このような記述から、AnthropicがBatchelder氏を採用した理由は、「カバレッジ計測の専門家としてカバレッジの数値の高さだけではコードの品質を測れないことを深く理解しているであろう氏の知見」であると私は推測しています。

今後、コーディングやレビューを行う際にはこうした数値指標に囚われないコードベースの真の品質を見極める能力がますます重要になってくると考えています。

## 結びにかえて

私はAIを(過去の歴史的事例にもあった)労働集約的な作業を資本集約的に置き換える技術革新のひとつに当てはまるものだと捉えています。

一方、電卓が普及した現代でも小学生が九九を学習するように、「技術革新によって人間が学習しなくてもよくなった」ということではなく「技術革新によって人間の学習すべき内容が変化する」と考えるべきです。

生成AIがどれだけ進歩しても「質問者よりも高度な回答を生成AIが生成したとして、質問者がその回答を評価できない」という問題は依然として残り続けます。人間が最終的にAIより賢くあるべき必要性はこれからも存在し続けます。

生成AIの発展に伴い、プログラミングには「予測可能な出力」という生成AIでは達成困難な要素がより強く求められるようになると考えています。テストファースト・自動テスト・テスト駆動開発・CI・QAの重要性は今後さらに増していくでしょう。