プログラミングの自動化はどこまで進んでいるか?――「生成AIとプログラミングの融合」最新事情
生成AIの活用が急速に進んでいる分野の1つがプログラミング支援である。今回はさまざまなプログラミング支援サービスやプログラミング自動化サービスを俯瞰しつつ、その可能性と将来性を考察する。
生成AIによるコーディング支援は開発ツールの必須機能に
ChatGPTに代表される生成AIの活用分野として、もっとも普及の進んでいる分野の1つがプログラミング支援やプログラミング自動化です。
当初は、記述中のコード補完や提案などを行うプログラマー支援として登場した機械学習サービスでしたが、いまでは自然言語で書いたコメントを読み取って、関数やメソッド全体のコードを生成するにとどまらず、要件を記述すればアプリケーション全体のコードを生成するAIサービスまで登場しつつあります。
ガートナーは、2028年までにエンタープライズソフトウェアエンジニアの75%がAIコードアシスタントを利用するとの予測を2024年4月に明らかにしています(*1)。同じくIDCも、2028年までに生成AIベースのツールがソフトウェアテストの70%を作成できるようになり、手動テストの必要性が減り、テストのカバレッジが向上することでソフトウェアのユーザビリティとコード品質の向上が実現するという予測を2024年1月に発表しています。
今後、プログラミングにおいて生成AIの支援は不可欠なものと考えられているのです。では、その現在地と将来像はどうなっているのでしょうか。まずは現在登場している主なプログラミング支援や自動化のサービスを紹介します。
現在、生成AIを活用したプログラミング支援として広く行われている方法は、おそらくChatGPTやGoogle Geminiといったチャット型の生成AIに対して自然言語で質問し、その回答をコーディングの参考とする方法でしょう。そうした単純な例を除くと、プログラマー向けにもっとも多く使われているAI支援サービスの代表例は「GitHub Copilot」です。
下の画面はGitHub CopilotのWebサイトに掲載されている紹介動画のものですが、GitHub Copilotはプログラマーが開発しているソースコード全体を把握して、全体の文脈に沿ったコード補完や生成を行います。画面の左にあるチャットを使って質問することも可能です。
生成AIによるコード補完やコード生成、チャット対応機能は、いまやGitHub Copilotだけでなく、AWSが提供する「AWS CodeWhisperer」、Googleが提供する「Gemini Code Assist」、GitLabが提供する「GitLab Duo Code Suggestions/Duo Chat」、JetBrainsが提供する「JetBrains AI Assitant」をはじめとして、主要なクラウドベンダーや開発ツールベンダーが相次いで提供しており、いまやモダンな開発環境には当然の機能となっています。
ピンチアウトで拡大
*1)
Gartner®, Press Release, April 11, 2024 “Gartner Says 75% of Enterprise Software Engineers Will Use AI Code Assistants by 2028”
https://www.gartner.com/en/newsroom/press-releases/2024-04-11-gartner-says-75-percent-of-enterprise-software-engineers-will-use-ai-code-assistants-by-2028
GARTNERは、Gartner Inc.または関連会社の米国およびその他の国における登録商標およびサービスマークであり、同社の許可に基づいて使用しています。All rights reserved.
自然言語の課題を起点にコードを生成するGitHub Copilot Workspace
GitHubはGitHub Copilotをさらに進化させた「GitHub Copilot Workspace」もテクニカルプレビューとして公開しています。
GitHub Copilotがプログラマーの“支援”という位置づけなのに対し、GitHub Copilot Workspace はプログラミングのほとんどすべての工程を自動的に実行してくれるというものです。
具体的には、自然言語で書かれたIssue(課題)をもとに、GitHub Copilot Workspace が仕様案と実装計画を示し、新規コードの生成や既存コードの修正を行ってくれます。
ピンチアウトで拡大
人間のように情報を参照してデバッグするDevin
2023年11月にGitHubが初めてGitHub Copilot Workspaceを発表したとき、生成AIがプログラミングの自動化をここまで進めるのかと多くのプログラマーに衝撃を与えました。しかし、それ以上のプログラミング自動化のビジョンを実現し、大きな驚きをもって迎えられたのが、AIスタートアップ企業のCognition AIが発表した自律型AIソフトウェアエンジニア「Devin」です。
Devinは人間がプロンプトで何らかの課題を与えると、まず課題解決のためのプランを生成します。ここまではGitHub Copilot Workspaceと似ていますが、Devinはまるで人間のエンジニアと同じように、関連するライブラリやAPI情報をWebブラウズによって参照し、Readmeなどの情報まで参考できるとされています。
さらに生成したコードをビルドして、実行後にエラーが出力されると、Devinは関連しそうなコードの場所にデバッグ用のPrint文を挿入し、出力された内容からエラーの原因を探ることができるとも説明されています。
このように、人間のプログラマーのごとく自律的に学び、デバッグできる能力を備えているのがDevinの特長です。Devinはまだ一般公開されていませんが、2024年5月にマイクロソフトはDevinの開発元であるCognition AIとの提携を発表、両社が共同でDevinを顧客に提供し、コードの移行やモダナイゼーションなどの複雑な作業を支援するとしています。
ローコード/ノーコード開発ツールと生成AIの組み合わせも
GitHub Copilot WorkspaceやDevinは、いわゆる汎用のプログラミング言語を使って生成AIがコーディングを行うものです。
一方で、ある程度の特定業務に特化してアプリケーション開発を容易に行える、いわゆるローコード/ノーコード開発ツールに生成AIを組み込むことで、アプリケーション開発を自動化する動きもあります。
例えばマイクロソフトはローコード/ノーコード開発ツール「Power Automate」に生成AIを組み込むことで、自然言語で容易にアプリケーションを生成できる機能を実現しようとしています。
なお、Power Automateはさまざまなコネクタにより複数のサービスやアプリケーションをワークフローのように接続する機能と、マウスやキーボードなどの操作をソフトウェアで自動化するRPA機能などを搭載したサービス連携サービスです。
また、AWSも2024年7月、ソフトウェア開発のスキルがなくとも、業務アプリケーションを数分で開発できる「AWS App Studio」を発表しました。
ピンチアウトで拡大
生成AIによるアプリ開発の自動化はプログラマーに新たな役割を
ここまで見てきたように、生成AIによるコーディング支援からアプリケーション自動生成まで、さまざまな試みが現在行われています。今後について考察してみましょう。
まず主要な開発環境においては、生成AIを活用したコーディング支援がもはや当たり前の機能になっている現状からして、IDCも予測するように、プログラマーにとって生成AIの活用が欠かせないものになっていくことは確実です。
一方で、生成AIがアプリケーションのほぼ全体を開発する手段として、GitHub Copilot WorkspaceやDevinのようにプログラマーを対象に汎用言語を使って開発するものと、マイクロソフトのPower AutomateやAWSのAWS App Studioのように一般ビジネスマンを対象に用途を絞って開発するという、2つのアプローチがあることも見えてきました。
つまり、アプリケーション開発が生成AIによって自動化されていくのはほぼ間違いないことに加え、アプリケーション開発はプログラマーだけのものではなく、非プログラマー(一般ビジネスマン)にとっても身近なものとなることが予想されるのです。それにより、非プログラマーであっても容易にアプリケーションを開発でき、自分たちの身近な業務を自分たちの手で効率化していくことが期待されます。
そうなったとき、職業プログラマーの仕事として期待されるのは、ビジネスそのものの効率化やデジタル化による変革といった深く踏み込んだ分野にシフトしていくのではないでしょうか。言い換えれば、生成AIによるプログラミングやアプリケーション開発の自動化は、プログラマーという職業に現在とは少し違った役割を求めていくのかもしれません。
※このコラムは不定期連載です。
※会社名および商標名は、それぞれの会社の商標あるいは登録商標です。
-
新野淳一/Junichi Niino
ブログメディア「Publickey」( http://www.publickey1.jp/ )運営者。IT系の雑誌編集者、オンラインメディア発行人を経て独立。新しいオンラインメディアの可能性を追求。