AIがエンジニアの仕事を奪う、はどこまで本当か
この手の話には、私を含め多くのエンジニアが食傷していると思いますが、重要なトピックなので無視できません。ここ数ヶ月の目立った動向を確認し、それを基にソフトウェアエンジニアの仕事が今後どうなるかを浅薄ながら検討していきます。
Devin - 初のAIエンジニア
2024年3月、ほぼ無名だったCognition社の動画が注目を集めました。動画では"First AI Software Engineer"というタグラインのもと、私たちエンジニアの作業風景と同じように、AIがエディタやコンソールを操作し、ブラウザでサードパーティのAPI仕様書を探し、ビルドエラーからバグを修正し、Webアプリケーションを実装していく様子が見られます。
Devinは、SWE-benchというプログラミング性能を測る指標で、Claude 2やGPT-4を上回ったとと宣伝されています(下図)。またCognition社はPeter Thiel率いるファウンダーズファンドから、シリーズAで2,100万ドルを獲得しています。Devinの利用に興味のある方はウェイティングリストへ登録するとよいでしょう。
公正を期すため、Congnition社のマーケティングを誇大広告として批判する声があることは指摘しておきます。それでもAIがエンジニアの仕事を奪うというセンシティブで不明瞭な言葉に、具体的なイメージを与えて広めたという点で、大きなマイルストーンだったと思います。
マイクロソフトのAutoDev
同じく2024年3月、マイクロソフトが"AutoDev: Automated AI-Driven Development"という論文を発表しました。一言で言えば、同社の製品であるCopilotの拡張版です。
AutoDevは、Visual Studio CodeなどのIDEでできる操作はほぼ実行可能です。上図のうちユーザーの操作は緑の部分で、例えば「このコードに対する4〜5個のアサーションを持つテストケースを書いて」というプロンプトにより、トライアンドエラーを繰り返しながら、テストケースを書いてくれます。テストは自動的に実行され、もしエラーが出た場合は、AutoDevがエラーメッセージを元に修正します。
論文の中ではCopilotに度々言及しており、そこからCopilotの進化の方向性が透けて見えてきます。例えば今のCopilotは、コードベース全体を読んでおらず、コンテキストを無視した提案しかできていないという制限が論文で挙げられています。その点において、AutoDevにはコードベース全体を読む機能があり、コンテキストに則った上でコーディングを行います。
前述のとおり、AutoDevはIDE上の操作をほとんど実行可能です。論文で挙げられているのは、ファイル編集、ファイル移動、ビルド、実行、テスト、コードフォーマット、Git操作などです。Cognition社のDevinのように、ネットからサードパーティのAPI仕様書を探してくるような動作は挙げられていませんが、コードベースのコンテキストを理解し、一定規模のコーディングをAIに担わせるという点で、AutoDevもDevinと目指している方向は近いと言えます。
特にAutoDevは、実装したコードの実行環境をDockerコンテナとして隔離したり、AIエージェントが実行できるコマンドを開発者が制限できたりと、最初からセキュリティ面に重きを置いています。このことは翻って、マイクロソフトが製品化を前提に研究を進めていることを示唆しています。
今からプログラミングを学ぶべきか?
2024年2月にドバイで開かれた国際サミットにおける、Nvidia創業者のジェンスン・フアンの発言がメディアを賑わせました。
つまりジェンスンは、ソフトウェアエンジニアが現代のように稼げる仕事ではなくなると指摘しています。同様の指摘はRails作者のDHHにも見られます。
AIにコーディングの大部分を担わせる方向へ研究開発は進んでいますが、それではソフトウェアエンジニアの知識は学ぶ価値のないものになっていくのでしょうか?
「エンジニアの仕事」の未来像
AIがコーディングを担う世界では、エンジニアの開発業務は次の3つになっていくと想像できます。
(1) コードを極力AIに書かせる
(2) AIの成果物を検査する
(3) 運用する
(1) コードを極力AIに書かせる
人間のエンジニアに最終決定権があるという意味で、Copilot = 副操縦士というネーミングは正しいと言えます。しかしより正確には、人間がCopilotなどのAIに効率よくコードを書いてもらうよう、「お膳立て」するという構図になっていくように思えます。それは、AIに正しいコーディングをさせられるかどうかで、エンジニアの生産性が決まるからです。
そのためには、コードベース内のドキュメントやコメントを明瞭に保つという小さな工夫や、AIが読むべきコンテキストを減らすためにサービスを分割するような大きな工夫まで、エンジニアの担うべき仕事は色々とありそうです。
もちろんプロンプトエンジニアリングも重要で、誰にとっても必須知識になっていくように思えます。
(2) AIの成果物を検査する
セキュリティや拡張性といった非機能要件は、多くのプロジェクトで要求されます。ここでは従来のエンジニア同様、エンジニアリングのスキルが必要です。AIがコーディングを代替しても、その成果物の良し悪しを判断するには、これまで通り技術的な研鑽が要ると想像できます。
(3) 運用する
AIが代替しようとしているのはコーディングで、その成果物を実際の顧客に届けるのは、引き続きエンジニアの仕事になるでしょう。つまりDevOpsのうちOpsに対するAI研究は未発達と言えます。
いくらAIが素晴らしいコードを書いても、それをユーザーに安定的にデリバリーできなければ意味がありません。そのために、スケーラビリティを考慮したインフラ構成、マイクロサービスを跨ったトレーサビリティ、モニタリングの仕組み作りなど、エンジニアの仕事は多岐に渡ります。
まとめ
[Fact] コーディングをAIに置き換える製品開発が進んでいる。
[Opinion] その結果、開発業務は次の3つのような仕事になっていく。
(1) コードを極力AIに書かせる
(2) AIの成果物を検査する
(3) 運用する
コーディングがなくなったあとも、エンジニアの仕事は多岐に渡り、さらにAIに正しいコーディングをさせるという新たな仕事も産まれそうです。そのため、エンジニアの需要曲線がシフトし、稼げる仕事でなくなるかどうかは分かりません。
私自身はエンジニアの端くれとして、AIの発展にアンテナを張りながら、引き続きスキルの研鑽を続けていくほかないと考えています。
リーダブル秋山 (@aki202)