Alan Zeichick |シニアライター| 2024年10月8日
生成AIは、シェイクスピア風のソネットを書いたかと思えば、すぐに切り替えて、生のデータと分析に基づいた実用的なビジネスプランを作成することもできます。適切な入力と学習データが与えられれば、製品コンセプト、印象的な広告用ジングル、ロゴ、価格戦略付きのマーケティングプランまでも創出可能です。そう考えると、ソフトウェア開発ライフサイクル全体を通じて生成AIが開発チームを支援したり、Java、C++、JavaScript、SQL、その他企業が採用するあらゆる言語でコードを生成したりするのも、決して突飛な話ではありません。
生成AIにとって、コーディングは、英語、スペイン語、ラテン語で韻やリズムを踏んだ詩を書くことと本質的には変わりません。そして、生成AIをソフトウェア開発プロセスに活用することは、大きなチャンスでもあります。PwCのアナリストによれば、生成AIによるコード生成ツールを導入することで、開発チームの生産性が現時点でも20~50%向上する可能性があると言います。どのように機能するかを見てみましょう。
生成AI(生成AI)は、急速に進化するテクノロジであり、トレーニングデータに基づいて新たなコンテンツを生成するのに役立ちます。生成AIモデルは、ソフトウェアで構成された人工ニューラルネットワークを使って学習・生成を行います。ニューラルネットワークには、数十億から数兆にも及ぶパラメータ(数値)が含まれており、それらは膨大なデータを処理することで「訓練」されます。幸いなことに、効率的なモデルは、比較的多様で十分な数の安全かつ機能的なコードサンプルでトレーニングすれば、優れたプログラマーのように振る舞えるようになります。
生成AIがコードを学習するプロセスでは、大規模言語モデル(LLM)として訓練されながら、次にどのコマンドが来るべきかを予測し、その結果を検証していきます。予測が適切であればパラメータはある方向に調整され、不適切であれば別の方向に調整されます。こうした試行錯誤を重ねることで、生成AIは訓練データに基づいて正確な出力を生成する能力を磨いていきます。その精度が一定以上に達したと判断されれば、今度は入力されたプロンプトに基づいて新しいコードを自動生成する役割を担います。うまくいけばそのまま活用できますし、うまくいかない場合はAI開発者が原因を探ることになります。
良いニュース: 独自のコードに焦点を当てたLLMを作成する必要はありません。これは、大手ツール・プロバイダによってすでに用意されています。
主なポイント
現時点では、複雑なプログラムの仕様を自然言語で説明するだけで、生成AIがすぐに完成済みのアプリケーションを出力してくれる――というレベルにはまだ到達していません。 しかし、生成AIはすでに、エンタープライズ開発チームの作業を強化し、コード品質と個人の生産性を向上させるために使用されています。GenAIは、1つ以上のロールを担当するチームのメンバーと考えることができます。
生成AIは、ソフトウェア開発ライフサイクルのあらゆる段階で開発チームの生産性を高めることができるため、ソフトウェア開発にとって重要です。これは、現代の企業がソフトウェアを使用しているため、非常に重要です。もちろん、文書作成ソフトや表計算ソフト、会計・人事システムのような多くの業務アプリケーションは、市販のパッケージ製品として利用されています。しかし、競争力は、バックオフィス業務、Webサイト、データベース、モバイル・アプリケーションなどのカスタム・ソフトウェアを記述することで生まれます。
ただし、ここに大きな課題があります。高品質なコードを書くには、時間と専門知識が必要であり、社内の開発者であれ外部委託先であれ、それは変わりません。新しいアプリケーションが必要になったとき、すでにプロジェクトのバックログが山積みになっているというケースも少なくありません。さらに、開発者の採用と育成には時間がかかり、その間にもチャンスは過ぎていきます。生成AIを活用することで新しいアイデアをより早く形にし、本番環境へ投入することが可能になります。その結果、収益を伸ばす、コストを削減する、従業員や顧客の満足度を高めるといった形で、企業が掲げるミッションの達成に貢献できます。
生成AIは、企業のソフトウェア開発チームにとって価値あるサポートツールとなり得ます。そして他の開発支援ツールと同様に、その導入による効果は、組織の中で定義・測定・評価することが可能です。たとえば、GitHubやソース・コード管理システムなどの最新テクノロジを使用するすべての開発プラットフォームは、1日当たりのコード行数やコード品質など、開発者およびチームのパフォーマンスに関するメトリックを定期的に収集しています。
生成AIを、プロジェクト計画からアーキテクチャ設計、コード解析、テスト・QAに至るまで、開発ライフサイクル全体に活用するチームでは、作業スピードの大幅な向上が見られることも少なくありません。以下に、生成AIがもたらす具体的な利点を紹介します。
生成AIは、個々の開発者およびチームの生産性を向上させ、より質の高いソフトウェアをより迅速に作成できるように支援することで、エンタープライズ・ソフトウェア開発を支援します。特に便利な分野には、ソフトウェア・アーキテクチャの定義、製品計画の作成、コードの生成などがあります。
GenAIは、反復的なタスクの支援や、多くのプログラムに汎用的なボイラープレート・コードの生成にも強く、人間の開発者がカスタマイズして完了したり、他の場所で使用したりできます。GenAIは、ソフトウェアのソース・コードで、セキュリティの脆弱性などの欠陥や潜在的な問題、およびコードの機能がユーザー要件や企業標準から逸脱する可能性がある場所を確認するのにも役立ちます。
GenAIベースの開発ツールが、個々のエンタープライズ・ソフトウェア開発者のアシスタントとして、または完全なチーム・メンバーとして動作できる領域は多数あります。ここでは、ソフトウェア設計からソフトウェア導入まで、テクノロジが現在役立つ一般的な場所のいくつかを示します。
1.バグ検出およびデバッグ。GenAIシステムは、コード内のエラーを識別して修正したり、修正を提案するために効率的に役立ちます。もちろん、欠陥の修正を専門とする業界も存在します。オープンソースや商用ツールを使用すると、セキュリティや機能上の欠陥をソースコードからスキャンすることができます。これには、システムに高負荷がかかった場合にのみ発生する微妙なエラー、メモリリーク、マルチスレッド実行の問題、保護されたメモリへのアクセス試行など、さまざまな問題が含まれます。
ただし、生成AIはそれらのツールと連携する形で、さらに価値を加えることができます。たとえば、生成AIはプロンプトに基づいて「このコードは、開発者や関係者が意図した通りに動作するかどうか」を分析することができます。コードが正しくコンパイルされ、エラーなく実行されたとしても、本当に期待通りの処理を行っているかは別の話です。第2に、GenAIは、テスト・チームと開発者が微妙なエラーを理解し、誤ったコードのパターンを見つけ、修正を提案できるように、従来のツールからの不具合レポートを要約するのに役立ちます。
2.コード生成。GenAIは、プロンプトまたは仕様に基づいてコードの記述を自動化できます。前述のように、GenAIがすぐに複雑なビジネス・アプリケーションを生成することはほとんどありません。ただし、開発者が完了できるボイラープレート・コードや、複雑なアルゴリズムを実装したり、難しいプロシージャ・コールを行ったり、外部リソースにアクセスしたりする可能性のあるコード・スニペットの作成に役立ちます。
たとえば、多くの開発者は、データベース情報の読取り、書込みおよび更新にSQLを使用する方法を知っています。しかし、複雑なデータベース表を処理し、非常に大規模なデータ・セット間で効率的に実行できるSQLストアド・プロシージャを記述する技術があります。GenAIツールは、プロンプトを使用して、プログラマがデータベース・アクセスの要件を表現し、アプリケーションにコピーして貼り付けることができる推奨SQLコールまたはプロシージャを提供するのに役立ちます。
3.コードのレビュー。GenAIは、コードの品質、セキュリティおよびベスト・プラクティスの遵守を確認するのに役立ちます。コード・レビューは、ソフトウェア開発プロセスの重要な部分であり、チームは、画面または大規模なモニターに投影されたグループ設定の複雑なコードを確認して、適切な機能を検証し、改善すべき領域を提案します。開発者は、コードレビューをストレスに感じる場合があります。特に、欠点ばかりを見つける上級ソフトウェアエンジニアが同席している場合はなおさらです。コードレビューも非常に時間がかかり、多くの人は単に早く終わらせたいだけなので、その結果、不十分なレビューになってしまう可能性があります。
生成AI は、開発者に予備的なコードレビューを案内して、明らかなエラーを発見する手伝いをすることができます。これにより、ジュニア開発者の学習が促進され、対面でのレビューセッションの効率が向上します。GenAIは、グループ・コード・レビュー・チームの参加メンバーとしても機能し、追加の注意が必要な領域を強調して、改善を行う最善の方法に関する独自のガイダンスを提供することもできます。
4.ドキュメント作成。AIは、コードベースのドキュメントを自動的に生成または改善できます。どんなに優秀な開発者でも、数か月前に自分で書いたコードを見て「これ、なんでこうしたんだっけ?」と思うことは少なくありません。そのため、プロジェクトのアーキテクチャ全体から、各モジュールやマイクロサービスの目的に至るまで、あらゆるレベルでのドキュメントが非常に重要です。ドキュメントは、ライブラリやAPI、アルゴリズムなど、開発者が選択を行う際に複数の選択肢があった場合に、その決定の理由を明らかにする役割を果たします。選択した理由は何だったのでしょうか。生成AIは、開発作業中にその選択理由を開発者に尋ね、それをもとにわかりやすいドキュメントとして展開することができます。
また、GenAIを使用してコード自体を生成する場合(前述のNo. 2を参照)、コード・スニペットまたはマイクロサービスの機能とその適切な使用方法を説明する完全なドキュメントを記述できます。
5.学習とトレーニング。GenAIは、開発者のスキルを向上させるための簡単な例と説明を提供するのに役立ちます。ソフトウェア開発者、特に優秀なエンジニアほど、日々学び続けているものです。AIやマイクロサービスのような新しい技術、新しいツールや言語仕様、設計パターン、セキュリティ脆弱性、企業標準、ベストプラクティス、さらにはコンプライアンス要件の変化など、学ぶべきことは常に存在します。
多くのコースやクラス、社内のトレーニングやメンタリングがありますが、継続的な支援は価値があります。生成AI は、開発者が廃止予定の機能や古い API を使用しようとしている場合など、開発者が困難に直面している兆候を検知し、即時かつパーソナライズされたトレーニングを提供します。また、プロンプトを介して、開発者が新しいタスクやめったに使用しないタスクの実行方法を知らない場合や覚えていない場合に、すぐにガイダンスを提供することもできます。つまり、状況に応じて最適化された「インテリジェントなヘルプ画面」のような役割を果たします。
6.リファクタリング。生成AIは、既存のコードを最適化・再構成してパフォーマンスを向上させる作業においても役立ちます。リファクタリングは、ソフトウェア開発ライフサイクルの重要な部分です。コードの一部を取り、その機能を変更することなく、コードをより適切に実行できるようにします。これは、その速度とスケーラビリティの向上、メモリー消費の削減、アルゴリズムの更新、新しいマイクロプロセッサのショートカットの使用、または新しい言語命令の使用を意味する場合があります。開発者は通常、実行時のメトリクスをもとに、動作が遅い、リソースを多く消費している、エンドツーエンドの遅延を引き起こしているといった問題のある箇所を特定し、それらをリファクタリングの対象とします。
リファクタリングは、生成AI コード生成に最適な場面です。開発者は問題のあるコードをシステムに入力し、「より高速に動作するバージョンを作成できますか?」と質問できます。これはシンプルな使い方の例ですが、コードの機能とその仕組みを確認することで、生成AIの予測機能により、より優れたアプローチを見つけることができるようになります。さらに、古いコードとリファクタリングされたコードを比較してベンチマークできるので、リファクタリング・プロセスのメリットを判断しやすく、基礎となる機能が変更されていないことを確認することもできます。
7.テスト。GenAIは、テスト・ケースの作成、テスト・プロセスの自動化およびエッジ・ケースのシミュレートに役立ちます。ソフトウェア開発にはさまざまなテスト手法があり、たとえば、テスト駆動型開発(TDD)では、1行のコードを記述する前に、記述した内容が適切に機能するようにテスト・ケースを作成するように要求します。また、スプリントの最後にテストを行う手法や、専門のQAチームが別途テストを担当する手法などもあります。どの手法においても、ステークホルダーの関与の度合いは重要であり、継続的に関わるケースもあれば、リリース候補のみ確認するケースもあります。
生成AIは、こうした多様なテスト環境において、複数の役割を果たすことができます。バグ検出について言及しましたが、GenAIは、テスト自動化ツールとして使用できるスクリプトの記述にも役立ちます。これは、多くの開発者が面倒なプロセスです。このようなGenAI拡張ツールは、エッジ・ケース、つまり発生しそうもないが、コード・モジュール、ストアド・プロシージャまたはマイクロサービスによって適切に処理する必要がある状況のテストにも役立ちます。さらに、生成AIは、人間が書いたテスト・ケースを含むテスト・ケースを確認して、テストが適切かどうかを判断し、エラー条件やコードをハッキングしようとする試みなど、考えられるすべての状況を網羅しているかどうかを判断することができます。
「予測するのは難しい。特にそれが未来に関することならば」──これは米国の名野球選手ヨギ・ベラの言葉です。生成AIは、まだ新しい分野です。最初の例として登場したのは2020年代初頭で、たとえばテキスト生成に特化したChatGPTや、画像を生成するDALL·Eといった製品がその代表例です。一般消費者や企業の経営層が生成AIに本格的に関心を持ち始めたのは、2022年頃、つまりほんの2年前のことです。
生成AIをどう捉えるにしても、現在はまだ技術の初期段階にあるといえます。今後、ソフトウェア開発を含むさまざまな分野において、さらに多くのビジネス活用の可能性が見つかっていくことでしょう。
とはいえ、ここで少し未来を予測してみましょう。今後数年間で期待できることのひとつは、
現在すでに生成AIができること──コード生成、品質保証、ドキュメント作成、テストケース生成などの支援──を、より高精度かつ効果的に行えるようになることです。生成AIは、より会話型になり、開発者だけでなく非開発者ともより効果的に連携できるようになり、要件定義のプロセスを案内し、その要件をプロジェクト計画、ドキュメント、テストケース、コードへと変換する支援を行えるようになる可能性があります。
さらに先を見据えるなら、もしかすると将来、一部のソフトウェアは記述の必要がなくなるかもしれません。ビジネスユーザーが生成AIに「やりたいこと」を伝えるだけで、それを実現するアドホックなアプリケーションが即座に作成される──そんな時代が訪れる可能性もあります。ソフトウェア開発におけるGenAIの将来がどのようなものであれ、それを採用する企業にとっては大きな価値があるでしょう。
Oracleの生成AIは、現在、FusionやNetSuiteといった業務アプリケーションや、Oracle Database 23aiに組み込まれており、優れた機能を発揮しています。
注目すべき分野の1つは、新機能であるAPEX AI Assistantを使用してローコード・アプリケーション開発にGenAIとOracle APEXを使用する方法です。APEX AI Assistantは、複雑なタスクの開発を支援します。また、より広い範囲で、Oracle Cloud Infrastructure(OCI)アカウントを登録すれば、無料のクラウドクレジットを使って生成AIを含むオラクルのAIサービスを実際に試すことも可能です。無料で始める
まだ新しい技術であるにもかかわらず、生成AIをソフトウェア開発に応用する可能性はまさに無限です。おそらく、あなたの開発チームも、生成AIを単なるツールではなく、頼れるアシスタント、さらには欠かせないチームメンバーとみなす日が来るでしょう。
優れたAIのユース・ケースには、カスタマー・サービスに革命をもたらすチャットボットや、ヘルスケア・エクスペリエンスを変革するアルゴリズムが含まれます。これらに共通するのはソフトウェア開発です。
生成AIをコーディングに使用するにはどうすればよいですか?
GenAIは、ソフトウェア開発プロセスの多くの部分で使用できます。コーディングの場合、GenAIは、プロジェクトに使用される特定のプログラミング言語に基づいてトレーニングする必要があります。そのうえで、実行したい内容を具体的な命令(プロンプト)として入力すれば、生成AIはコンパイルや実行が可能な完成済みのソースコードを生成し、それをソースコード管理システムや Github などのオンラインリポジトリに組み込むことができます。
AIを使用してソフトウェアを構築できますか?
GenAIを使用して、様々な方法でソフトウェアを構築できます。たとえば、コードの自動生成を支援することはできますが、現在の技術レベルでは、比較的単純な処理を行うコードの生成にとどまるケースが多いのが実情です。生成AIの真の価値は、少なくとも現在では、プロジェクトの計画、アーキテクチャの設計、テスト・ケースの生成、コード・レビューの実行、ドキュメントの作成などのタスクを開発チームを支援することです。
ソフトウェア開発におけるAIの課題とは?
生成AIはまだ新しい技術であり、特に開発チームの中で活用していくには、いくつかの課題があります。おそらく最大の課題は、現状に満足しており、手法、ツールチェーン、プロセスなどの変更に抵抗のある懐疑的な開発者たちにこの技術を受け入れてもらうことです。また、GenAIをキャリアに対する潜在的な脅威と見なす人もいます。
それ以外にも、各組織はGenAIソフトウェアに対する信頼を構築する必要があります。コードは堅実で安全かつ高性能ですか。テスト・ケースは正確で、完全なコード・カバレッジを提供しますか。ドキュメントは要件を満たしていますか。生成AIを活用したソフトウェア開発の初期段階では実験的な試行錯誤が続くことになるでしょう。ただし、正しく運用できれば、生成AIは開発チームの生産性を大きく高め、より高品質なソフトウェアを、より早く、より低コストで本番環境に投入することができ、結果として組織のミッション達成に大きく貢献します。
最後に、AI によって生成されたコードの所有権および保護可能性に関しては、法律は依然として発展途上です。AIを使用してコードの一部を生成したソフトウェアに著作権を登録できますか?商用の生成AIを利用する場合、利用規約により、生成された成果物の一部をモデル提供元にライセンスバックする義務が課されている可能性もあります。生成AIを本格的に開発に取り入れる前に、こうした法的・契約的な事項を事前に調査しておくことを強くおすすめします。
