生成AIがソフトウェア開発の改善を支援できる7つの方法

Alan Zeichick |シニア・ライター| 2024年10月8日

生成AIは、シェイクスピア風のソネットを書いたかと思えば、すぐに切り替えて、生のデータと分析に基づいた実用的なビジネスプランを作成することもできます。適切な入力と学習データが与えられれば、製品コンセプト、印象的な広告用ジングル、ロゴ、価格戦略付きのマーケティングプランまでも創出可能です。そう考えると、ソフトウェア開発ライフサイクル全体を通じて生成AIが開発チームを支援したり、Java、C++、JavaScript、SQL、その他企業が採用するあらゆる言語でコードを生成したりするのも、決して突飛な話ではありません。

生成AIにとって、コーディングは、英語、スペイン語、ラテン語で韻やリズムを踏んだ詩を書くことと本質的には変わりません。そして、生成AIをソフトウェア開発プロセスに活用することは、大きなチャンスでもあります。PwCのアナリストによれば、生成AIによるコード生成ツールを導入することで、開発チームの生産性が現時点でも20~50%向上する可能性があると言います。仕組みを見てみましょう。

生成AIとは

生成AI(生成AI)は、急速に進化するテクノロジであり、トレーニングデータに基づいて新たなコンテンツを生成するのに役立ちます。生成AIモデルは、ソフトウェアで構成された人工ニューラルネットワークを使って学習・生成を行います。ニューラルネットワークには、数十億から数兆にも及ぶパラメータ(数値)が含まれており、それらは膨大なデータを処理することで「訓練」されます。幸いなことに、効率的なモデルは、比較的多様で十分な数の安全かつ機能的なコードサンプルでトレーニングすれば、優れたプログラマーのように振る舞えるようになります。

生成AIがコードを学習するプロセスでは、大規模言語モデル(LLM)として訓練されながら、次にどのコマンドが来るべきかを予測し、その結果を検証していきます。予測が適切であればパラメータはある方向に調整され、不適切であれば別の方向に調整されます。こうした試行錯誤を重ねることで、生成AIは訓練データに基づいて正確な出力を生成する能力を磨いていきます。その精度が一定以上に達したと判断されれば、今度は入力されたプロンプトに基づいて新しいコードを自動生成する役割を担います。うまくいけばそのまま活用できますし、うまくいかない場合はAI開発者が原因を探ることになります。

幸いにも、コードに焦点を当てた独自のLLMを作る必要はありません。これは、大手ツール・プロバイダによってすでに用意されています。

主なポイント

  • 生成AIは、構文やルールが厳格なプログラミング言語の習得に非常に適しています。
  • 生成AIのトレーニングは高価でリソースを必要としますが、一度導入されれば、システムの使用リソースははるかに少なくなります。
  • 生成AIベースの開発ツールは、個々のソフトウェア開発者のアシスタントとして、または完全なチームメンバーとして機能します。

ソフトウェア開発における生成AIの説明

現時点では、複雑なプログラムの仕様を自然言語で説明するだけで、生成AIがすぐに完成済みのアプリケーションを出力してくれる――というレベルにはまだ到達していません。 しかし、生成AIはすでに、エンタープライズ開発チームの作業を強化し、コード品質と個人の生産性を向上させるために使用されています。生成AIは、1つまたは複数の役割を果たすチームのメンバーとして考えることができます。

  • チームは、問題を記述し、開発者が従うべきプロジェクト・プラン作成支援するために、汎用の生成AIを使用する場合があります。
  • 人間が書いたコードの品質を評価するために使用することができるテストケースを生成するために、人間が生成AIを指示する場合があります。
  • 生成AIシステムは、ボイラープレート・コードまたはコード・スニペットを生成し、人間の開発者がそれをカスタマイズ、完了したり、他のコード・モジュールに組み込むことができます。
  • 生成AIは、ソフトウェア構成管理システムにチェックインする前に、品質保証、バグのコードまたはセキュリティの欠陥を確認するのに役立ちます。たとえば、コーポレート・コーディング標準やOWASP Top 10のセキュリティ脆弱性のリストなどの外部基準に対してコード・ベースをレビューし、問題を強調することができます。
  • 生成AIシステムは、人間の開発者がカスタマイズしたり、完成させたり、他のコード・モジュールに組み込むことができる定型コードやコード・スニペットの生成を支援することができます。
  • 生成AIは、既存のコードをレビューし、パフォーマンスの改善やその他のリファクタリングのアイデアを提案します。また、レガシーの「spaghetti」コードを見て、それがどのように機能するかを説明することもできます。
  • 導入されたコードが正しく動作しない場合、適切なプロンプトを入力することで、生成AIが原因の特定や修正案の提示を行うことができます。
  • 導入されたコードが適切に動作していない場合、適切なプロンプトは生成AIが欠陥の根本原因を見つけ、改善策を提案できるよう支援します。

生成AIがソフトウェア開発にとって重要な理由

生成AIは、ソフトウェア開発ライフサイクルのあらゆる段階で開発チームの生産性を向上させることができるため、ソフトウェア開発にとって重要です。これは、現代の企業はソフトウェアで動いているため、非常に重要なことです。もちろん、文書作成ソフトや表計算ソフト、会計・人事システムのような多くの業務アプリケーションは、市販のパッケージ製品として利用されています。しかし、競争力は、バックオフィス業務、Webサイト、データベース、モバイル・アプリケーションなどのカスタム・ソフトウェアを記述することで生まれます。

ただし、ここに大きな課題があります。高品質なコードを書くには、時間と専門知識が必要であり、社内の開発者であれ外部委託先であれ、それは変わりません。新しいアプリケーションが必要になったとき、すでにプロジェクトのバックログが山積みになっているというケースも少なくありません。さらに、開発者の採用と育成には時間がかかり、その間にもチャンスは過ぎていきます。生成AIを活用することで新しいアイデアをより早く形にし、本番環境へ投入することが可能になります。その結果、収益を伸ばす、コストを削減する、従業員や顧客の満足度を高めるといった形で、企業が掲げるミッションの達成に貢献できます。

ソフトウェア開発における生成AIの潜在的なメリット

生成AIは、企業のソフトウェア開発チームにとって価値あるサポートツールとなり得ます。そして他の開発支援ツールと同様に、その導入による効果は、組織の中で定義・測定・評価することが可能です。たとえば、GitHubやソース・コード管理システムなどの最新テクノロジを使用するすべての開発プラットフォームは、1日当たりのコード行数やコード品質など、開発者およびチームのパフォーマンスに関するメトリックを定期的に収集しています。

生成AIを、プロジェクト計画からアーキテクチャ設計、コード解析、テスト・QAに至るまで、開発ライフサイクル全体に活用するチームでは、作業スピードの大幅な向上が見られることも少なくありません。以下に、生成AIがもたらす具体的な利点を紹介します。

  • 改善された生産性 コードやテストケースをAIが自動生成し、人間がその結果をレビューする流れによって、人間だけで作業するよりも短時間で作業を完了できるようになります。
  • エラーの削減 生成AIシステムは、変数名の誤りやポインタの初期化忘れといったミスを減らすことで、欠陥が少ないコードを生成するのに役立ちます。これは、経験豊富な開発者でも退屈してしまう反復的な日常的なタスクに特に役立ちます。
  • コード品質の向上。生成AIはコードのレビューを支援し、論理的エラー、セキュリティ上の欠陥、またはコードがビジネス・ユースケースの要件を反映していない可能性のある箇所を特定します。
  • 迅速なプロトタイピング 生成AIは、本番では使用不可能な、関係者に示すための概念実証としてのモックアップコードの作成を支援することができます。
  • 非開発者による簡易開発の可能性。生成AIを使えば、非エンジニアでも自然言語で「やりたいこと」を入力するだけで、簡単なプログラムを作成できる未来が見えてきます。

生成AIはソフトウェア開発にどのように役立つか

生成AIは、個々の開発者やチームの生産性を向上させ、より質の高いソフトウェアを迅速に作成できるようにすることで、企業アプリケーションの開発を支援します。特に便利な分野は、ソフトウェアアーキテクチャの定義、製品計画の構築、コードの生成などです。

生成AIはまた、反復的な作業を支援し、多くのプログラムに汎用的で、人間の開発者がカスタマイズして完成させたり、他の場所で使用することができる、いわゆる定型コードを生成することに優れています。また、生成AIは、セキュリティ脆弱性や、コードの機能がユーザー要件や企業基準から逸脱している可能性がある場合など、ソフトウェアのソース・コードに欠陥や潜在的な問題がないか確認できるよう支援することもできます。

生成AIがソフトウェア開発の改善を支援できる7つの方法

生成AIベースの開発ツールは、個々の企業ソフトウェア開発者のアシスタントとして、または完全なチームメンバーとして機能することができる多くの分野があります。ここでは、ソフトウェアの設計から配備に至るまで、このテクノロジーが現在役立つ、より一般的な場面をいくつかご紹介します。

1. バグ検出およびデバッグ。生成AIシステムは、コードのエラーを効率的に特定し、修正したり、修正を提案することができます。もちろん、欠陥の修正を専門とする業界も存在します。オープンソースや商用ツールを使用すると、セキュリティや機能上の欠陥をソースコードからスキャンすることができます。これには、システムに高負荷がかかった場合にのみ発生する微妙なエラー、メモリリーク、マルチスレッド実行の問題、保護されたメモリへのアクセス試行など、さまざまな問題が含まれます。

ただし、生成AIはそれらのツールと連携する形で、さらに価値を加えることができます。たとえば、生成AIはプロンプトに基づいて「このコードは、開発者や関係者が意図した通りに動作するかどうか」を分析することができます。コードが正しくコンパイルされ、エラーなく実行されたとしても、本当に期待通りの処理を行っているかは別の話です。第二に、生成AIは従来のツールからの不具合レポートを要約し、テスト・チームや開発者が微妙なエラーを理解し、誤ったコードのパターンを見極め、修正を提案できるよう支援します。

2. コード生成。生成AIは、プロンプトまたは仕様に基づいてコードの記述を自動化できます。前述のように、生成Iがすぐに複雑な業務アプリケーションを生成することはまずありません。しかし、複雑なアルゴリズムを実装したり、難しいプロシージャを呼び出したり、外部リソースにアクセスしたりするコード・スニペットと同様に、開発者が完成できる定型コードを作成できるよう支援することができます。

たとえば、多くの開発者はSQLを使ってデータベース情報を読み書きしたり更新する方法を知っています。しかし、例えば複雑なデータベーステーブルを扱い、非常に大きなデータセットにまたがって効率的に実行できるSQLストアドプロシージャを書くには技術が必要です。。生成AIツールは、プログラマがデータベースアクセスの要件を表現し、アプリケーションにコピーして貼り付けることができるSQLコールまたはプロシージャの提案を提供するためにプロンプトを使用することができます。

3. コードレビュー。生成AIはコードの品質、セキュリティ、ベストプラクティスの遵守を確認できるよう支援します。コード・レビューは、ソフトウェア開発プロセスにおいて不可欠なものであり、複雑なコードを、スクリーンや大型モニターに映し出された複雑なコードを見ながら、適切な機能を検証し、改善点を提案します。開発者は、コードレビューをストレスに感じる場合があります。特に、欠点ばかりを見つける上級ソフトウェアエンジニアが同席している場合はなおさらです。コードレビューも非常に時間がかかり、多くの人は単に早く終わらせたいだけなので、その結果、不十分なレビューになってしまう可能性があります。

生成AIは、開発者に予備的なコードレビューを案内して、明らかなエラーを発見する手伝いをすることができます。これにより、ジュニア開発者の学習が促進され、対面でのレビューセッションの効率が向上します。生成AIはまた、グループ・コード・レビュー・チームの参加メンバーとして、特別な注意が必要な部分を強調し、改善するための最適な方法について独自のガイダンスを提供することもできます。

4. ドキュメント。AIは、コードベースのドキュメントを自動的に生成または改善できます。どんなに優秀な開発者でも、数か月前に自分で書いたコードを見て「これ、なんでこうしたんだっけ」と思うことは少なくありません。そのため、プロジェクトのアーキテクチャ全体から、各モジュールやマイクロサービスの目的に至るまで、あらゆるレベルでのドキュメントが非常に重要です。ドキュメントは、ライブラリやAPI、アルゴリズムなど、開発者が選択を行う際に複数の選択肢があった場合に、その決定の理由を明らかにする役割を果たします。選択した理由は何だったのでしょうか。生成AIは、開発作業中にその選択理由を開発者に尋ね、それをもとにわかりやすいドキュメントとして展開することができます。

加えて、生成AIがコード自身を生成するために使われるとき(上記No.2を参照)、コード・スニペットやマイクロサービスが何をするのか、そしてどのようにそれを適切に使うのかを説明する完全なドキュメントを書くことができます。

5. 学習とトレーニング。生成AIは、開発者のスキルを向上させるための簡単な例と説明を提供できるよう支援します。ソフトウェア開発者、特に優秀なエンジニアほど、日々学び続けているものです。AIやマイクロサービスのような新しい技術、新しいツールや言語仕様、設計パターン、セキュリティ脆弱性、企業標準、ベストプラクティス、さらにはコンプライアンス要件の変化など、学ぶべきことは常に存在します。

数多くのコースやクラス、社内トレーニングやメンタリングがありますが、継続的な支援は貴重です。生成AIは、開発者が廃止予定の機能や古いAPIを使用しようとしている場合など、開発者が困難に直面している兆候を検知し、即時かつパーソナライズされたトレーニングを提供します。また、開発者が新しいタスクやめったに使わないタスクの実行方法を知らなかったり、覚えていなかったりする場合に、プロンプトを通じて即座にガイダンスを提供することもできます。つまり、状況に応じて最適化された「インテリジェントなヘルプ画面」のような役割を果たします。

6. リファクタリング。生成AIは、既存のコードを最適化・再構成してパフォーマンスを向上させる作業においても役立ちます。リファクタリングは、ソフトウェア開発ライフサイクルの重要な部分です。コードの一部を取り、その機能を変更することなく、コードをより適切に実行できるようにします。つまり、スピードとスケーラビリティの向上、メモリ消費量の削減、アルゴリズムの更新、新しいマイクロプロセッサのショートカットの活用、新しい言語命令の使用などを意味する場合があります。開発者は通常、実行時のメトリクスをもとに、動作が遅い、リソースを多く消費している、エンドツーエンドの遅延を引き起こしているといった問題のある箇所を特定し、それらをリファクタリングの対象とします。

リファクタリングは、生成AI コード生成に最適な場面です。開発者は問題のあるコードをシステムに入力し、「より高速に動作するバージョンを作成できますか」と質問できます。これはシンプルな使い方の例ですが、コードの機能とその仕組みを確認することで、生成AIの予測機能により、より優れたアプローチを見つけることができるようになります。さらに、古いコードとリファクタリングされたコードを比較し、ベンチマークすることができるため、リファクタリング・プロセスのメリットを簡単に判断でき、本当に根本的な機能が変わっていないことを検証することもできます。

7. テスト。生成AIは、テスト・ケースの作成、テスト・プロセスの自動化、エッジ・ケースのシミュレーションを支援します。ソフトウェア開発にはさまざまなテスト手法があり、テスト駆動開発(TDD)は、たとえば、コードを1行でも書く前にテストケースを作成し、書いたものが適切に動作することを保証するよう要求します。また、スプリントの最後にテストを行う手法や、専門のQAチームが別途テストを担当する手法などもあります。どの手法においても、ステークホルダーの関与の度合いは重要であり、継続的に関わるケースもあれば、リリース候補のみ確認するケースもあります。

生成AIは、こうした多様なテスト環境において、複数の役割を果たすことができます。バグ検出について触れましたが、生成AIは多くの開発者が面倒だと感じているテスト自動化ツールとして使用できるスクリプトの作成を支援することもできます。このような生成AIで強化されたツールは、エッジケース、つまり、発生する可能性は低いものの、コード・モジュール、ストアドプロシージャ、またはマイクロサービスによって適切に処理される必要がある状況のテストも支援できます。さらに、生成AIは、人間が書いたテスト・ケースを含むテスト・ケースを確認して、テストが適切かどうかを判断し、エラー条件やコードをハッキングしようとする試みなど、考えられるすべての状況を網羅しているかどうかを判断することができます。

ソフトウェア開発における生成AIの未来

「予測するのは難しい。特にそれが未来に関することならば」──これは米国の名野球選手ヨギ・ベラの言葉です。生成AIは、まだ新しい分野です。最初の例として登場したのは2020年代初頭で、たとえばテキスト生成に特化したChatGPTや、画像を生成するDALL·Eといった製品がその代表例です。一般消費者や企業の経営層が生成AIに本格的に関心を持ち始めたのは、2022年頃、つまりほんの2年前のことです。

生成AIをどう捉えるにしても、現在はまだ技術の初期段階にあるといえます。今後、ソフトウェア開発を含むさまざまな分野において、さらに多くのビジネス活用の可能性が見つかっていくことでしょう。

とはいえ、ここで少し未来を予測してみましょう。今後数年間で期待できることのひとつは、

現在すでに生成AIができること──コード生成、品質保証、ドキュメント作成、テストケース生成などの支援──を、より高精度かつ効果的に行えるようになることです。生成AIは、より会話型になり、開発者だけでなく非開発者ともより効果的に連携できるようになり、要件定義のプロセスを案内し、その要件をプロジェクト計画、ドキュメント、テストケース、コードへと変換する支援を行えるようになる可能性があります。

さらに先を見据えるなら、もしかすると将来、一部のソフトウェアは記述の必要がなくなるかもしれません。ビジネスユーザーが生成AIに「やりたいこと」を伝えるだけで、それを実現するアドホックなアプリケーションが即座に作成される──そんな時代が訪れる可能性もあります。ソフトウェア開発における生成AIの未来がどのようなものであれ、それを受け入れる企業にとって、それはおそらく非常に大きな価値を持つでしょう。

オラクルによる開発における生成AIのパワーの活用

オラクルの生成AIは、現在、FusionやNetSuiteといった業務アプリケーションや、Oracle Database 23aiに組み込まれており、優れた機能を発揮しています。

探索すべき興味深い分野の1つは、複雑なタスクで開発者を支援できる新機能APEX AIアシスタントを使用して、ローコード・アプリケーション開発のために生成AIとOracle APEXを使用する方法です。また、より広い範囲で、Oracle Cloud Infrastructure(OCI)アカウントを登録すれば、無料のクラウドクレジットを使って生成AIを含むオラクルのAIサービスを実際に試すことも可能です。無料で始める

まだ新しい技術であるにもかかわらず、生成AIをソフトウェア開発に応用する可能性はまさに無限です。おそらく、あなたの開発チームも、生成AIを単なるツールではなく、頼れるアシスタント、さらには欠かせないチームメンバーとみなす日が来るでしょう。

今日のAIサービスを利用すれば、開発者はAIの専門家でなくても、カスタム・モデルのトレーニング、既製のMLツールの導入、AI機能によるアプリケーションやソリューションの強化を行うことができます。オラクルのeBookでは、11の実際のAIプロジェクトを用いて、次のユースケースを迅速に開始する方法を紹介しています。

ソフトウェア開発における生成AIに関するFAQ

コーディングに生成AIを活用する方法を教えてください。

生成AIは、ソフトウェア開発プロセスの多くの部分で使用することができます。コーディングの場合、生成AIはプロジェクトで使用される特定のプログラミング言語に関するトレーニングを受ける必要があります。そのうえで、実行したい内容を具体的な命令(プロンプト)として入力すれば、生成AIはコンパイルや実行が可能な完成済みのソースコードを生成し、それをソースコード管理システムや Github などのオンラインリポジトリに組み込むことができます。

AIを使ってソフトウェアを構築することは可能ですか。

生成AIを使ってさまざまな方法でソフトウェアを構築することができます。たとえば、コードの自動生成を支援することはできますが、現在の技術レベルでは、比較的単純な処理を行うコードの生成にとどまるケースが多いのが実情です。生成AIの本当の価値は、少なくとも現時点では、プロジェクトの計画、アーキテクチャの設計、テストケースの生成、コードレビューの実行、ドキュメントの作成などのタスクで開発チームを支援することにあります。

ソフトウェア開発においてAIがもたらす課題についてお聞かせください。

生成AIはまだ新しい技術であり、特に開発チームの中で活用していくには、いくつかの課題があります。おそらく最大の課題は、現状に満足しており、手法、ツールチェーン、プロセスなどの変更に抵抗のある懐疑的な開発者たちにこの技術を受け入れてもらうことです。生成AIを自分のキャリアに対する潜在的な脅威とみなす人もいる可能性があります。

それ以上に、各組織は生成AIソフトウェアに対する信頼を築く必要があります。コードは強固で、安全で、高パフォーマンスなのでしょうか。テストケースは正確で、完全なコード・カバレッジを提供していますか。ドキュメントは要件を満たしていますか。生成AIを活用したソフトウェア開発の初期段階では実験的な試行錯誤が続くことになるでしょう。ただし、正しく運用できれば、生成AIは開発チームの生産性を大きく高め、より高品質なソフトウェアを、より早く、より低コストで本番環境に投入することができ、結果として組織のミッション達成に大きく貢献します。

最後に、AIによって生成されたコードの所有権および保護可能性に関しては、法律は依然として発展途上です。AIがコードの一部を生成するために使われたソフトウェアの著作権を登録することはできますか商用の生成AIを利用する場合、利用規約により、生成された成果物の一部をモデル提供元にライセンスバックする義務が課されている可能性もあります。生成AIを本格的に開発に取り入れる前に、こうした法的・契約的な事項を事前に調査しておくことを強くおすすめします。