ソフトウェア開発がAIで変わる?自動化への取り組みと課題を解説
こんにちは。Wakka Inc.メディア編集部です。
AIはビジネスの課題を解決するための手段として、さまざまな分野での活用が期待されています。
特に生成AIは、人間の脳の働きを再現した人工ニューロンにより学習する深層学習からさらに発展したモデルで、テキストや音声、画像、動画などのコンテンツを生成する技術でさまざまな分野での活用が進められています。
このような流れからAIはソフトウェア開発への適用も進むことが予測されます。
コーディングやテストなど決まった手順がある作業は、将来的にすべてAIに置き換えられるのでは、と考えている方も多いかもしれません。
本記事では、実際のところAIによるソフトウェアの開発は可能なのか、今後業界にどのような影響が出るのかについてまとめましたので、ぜひご覧ください。
【おすすめ資料】「MVP/PoC支援サービス」お役立ち資料 生成AIのPoC事例集
大手企業の生成AIの実際の導入目的から、導入までのPoCの検証のポイントまで広く解説をしています。自社への生成AI導入検討/PoC推進の際に便利にご活用いただけます。
大手ソフトウェア開発会社の動向
NTTデータ
2030年までに7割を削減することを目標としてAIの開発工程への採用を進めています。
ソフトウェア開発の全工程において、積極的にAIを活用して生産性の向上を図る方針です。
具体的には、要件定義のためのお客様のニーズの抽出や、抽象的な要件の言語化にAIを活用しています。
また、効率的な設計情報の抽出、古いプログラム言語の新しい言語への変換(モダナイゼーション)、テスト項目の自動抽出など、さまざまな工程でAIを駆使していることが特徴です。
その結果、 特にモダナイゼーションにおいては高い生産性向上を実現しました。
他には、高品質なコード生成が可能になる、プロジェクト固有の情報が標準化されて開発者の負担が軽減するなど、品質向上や効率化の面でもAIが大きく貢献したことが明らかになっています。
参照:生成AIを使ったNTTデータ流「新時代のシステム開発」とは~グローバルで商用への適用実績拡大中!レガシー資産を高品質・高生産性でモダナイズ~|NTT Data
IBM
IBMでは、AIをアプリケーション開発工程に取り入れ、効率化を実現する製品開発を進めています。
顧客にAIの性能による開発コスト削減や生産性向上といった新たな魅力を感じてもらうことを目的としたものです。
この製品により、開発者が限られるCOBOLのような旧式プログラミング言語から、Javaなど現在も広く使用される言語への変換が可能です。
開発に活かせば、旧言語がネックになって移行できなかったデータベースシステムの移行も可能にします。
NEC
NECでは、開発工程の生産性を平均3割向上させることを目指し、生体AIの開発工程への活用を検証しています。
第一歩が、現行のソフトウェア開発ガイドラインを、AIを活用したものへアップグレードすることです。
NECはこの新ガイドラインに基づき、実装から単体テストに至るまでの工程に、AIを段階的に導入すると表明しています。
AIの導入により生じた人的リソースは、より高度なスキルを要する上流工程の業務へシフトさせる予定です。
日立
日立は、2027年までにシステム開発工程における生産性を3割向上させることを目標に掲げました。
現在では、コーディングや単体テストなど、ソフトウェア開発の効率向上へAIを活用しています。
それと同時に平行してAIによる開発の概念検証を行い、より効果が出そうなところから利用を進めているのも特徴です。
また、単体テストの効率アップ、将来的には、総合テストへの導入も視野に入れています。
顧客の課題解決や品質保証などへの活用も視野に入れながら、AIの取り組みを進めている企業の一つです。
参照:生成AIを活用し、システム開発のトランスフォーメーションを加速|Hitachi
ソフトウェア開発におけるAIの活用シーン
ソフトウェアは、要件定義、コーディング、レビュー、テストなどさまざまな開発工程を経て完成されます。
この項ではそれぞれの工程で、どのようにAI を活用できるのかについて詳しく解説します。
ソフトウェア要件定義・設計工程へのAI適用
開発の最初の段階、ソフトウェアの要件定義、設計の工程では、要件定義を行うための情報収集が肝心です。
この情報収集作業にAIを用いれば、効率よく大量の情報の収集が可能です。
さらにAIで情報を分析することで、顧客の行動パターン、趣向といったマーケティング上の因果関係を明らかにできます。
つまり、これらにより自社のビジネスモデルに合ったプラットフォームの施策、ユーザニーズに答えた要件定義が可能になるのです。
システム設計の段階では、AIによるUI機能、デザインのアイデア生成が行えます。
AIでUIのデザインを行い、その後AIとの対話で要件に合っているか、ニーズが満たされているかといった点を確認し、より細かく使い勝手の良いUIへ変換させられます。
UI作成後の機能の微調整や動作のシミュレーションもAIを活用すればスピーディーです。
ソフトウェアコーディングへのAI適用
ソフトウェアのコーディングでは、構文のサンプルや提案などの段階でAIを活用します。
AIで生成されたサンプルはソフトウェアエンジニアのインスピレーションとなることがあります。
サンプルを見て、思いもよらないアイデアが沸いたり、逆に些細なコードのミスに気づいたりするため、コーディングの補助機能としての役割も果たすのです。
ソフトウェア動作テスト工程へのAI適用による自動化
ソフトウェアの動作テストは、AIの活用が積極的に進められる工程です。
機械学習により試験工程の自動化、さらに継続学習による潜在的なエラーの発見など、自動化かつ高精度な結果を得られるような取り組みを行えます。
さらに問題が発見された場合、即時でテストチームへアラートを表示するといった通知機能を備えれば、バグの見落とし防止につながります。
ソフトウェア開発にAIを取り入れるメリット
生産性の向上
AIは生産性向上に大きく貢献するツールです。
例えば、AIは「転移学習」という技術により、あるタスクで学んだ知識を別のタスクに応用できます。
この技術を活用することで、データ分析の高速化やレビューの品質向上など、さまざまな作業の生産性向上が期待できます。AIが継続的に学習し知識を蓄積すれば、より複雑なタスクも対応が可能です。
また、繰り返し行う作業をAIで自動化することによって、人的ミスを減らす観点からも生産性を高められます。
品質管理の効率化
品質管理にAIを取り入れることで、ソースコードに基づいたテストコードの作成を簡単に行えます。
単体テストに応じたテストコードを作成することなどで、効率化を促せるためです。
過去テスト時のエラー、バグなどを機械学習させて品質保証用ツールとして使用すれば、バグに対する修正案の提案を行うといった機能拡張も実装できます。
エンジニア支援
AIツールを補助ツールとして使うことで、経験の浅いエンジニアでも開発に携われる場合があります。
例えば、AI コーディング補助ツールでは構文を提案してくれるものがあるため、このようなツールを使えばコーディングの難易度を下げることができます。
他には、レビュー機能、脆弱性診断がついたものを活用すると、構文の誤りについて一定のチェックを行えます。
経験の浅いエンジニアに対する学習のハードルを下げるという点は、ソフトウェアエンジニア育成の面からも大きなメリットがあります。
●生成AIのPoC事例集
MVP/PoC支援サービスを提供する、Wakka Inc.がピックアップした生成AIのPoC事例集です。
AIはソフトウェアエンジニアに取って代わるのか
AIのソフトウェア開発への活用について気になるのは、AIがすべての開発工程を担い、最終的にソフトウェア開発エンジニアに取って代わることができるのか、という点です。
AIはコーディングが可能ですが、間違いを起こすこともあるため注意が必要です。
例えば、関数の宣言なしに関数が使用されていたり、無関係な構文が誤ってリンクされていたりすることがあります。
ゆえに現時点では、AIによるコーディングは最終的に人間によるレビューが必要です。
AIがソフトウェア開発エンジニアに完全に取って代わる可能性はまだまだ低く、むしろエンジニアの補助ツールとして活用されているのが現実的な状況です。
コーディングで利用されるAIツール
AIによるコーディングで利用される主なツールとしてはGitHub Copilot、Azure Open AI Serviceなどがあります。
主なツールの特徴についてまとめました。
ツール名 | 特徴 |
GitHub Copilot | ・コーディングエディターへプラグインをインストールして使用します。 ・AIがコードを自動作成して提案するほか、人が書いたコードのコメント、関数を参照して条件に合うコードの提案を行います。 |
Azure Open AI Service | ・Open AI社のクラウド上で自然言語処理モデルを利用できるAIです。 ・Chat GPTなどLLM(Large Language Model)という大規模なデータにより自然言語を学習するツールの利用が可能です。 |
Snyk DeepCode AI | ・コードを診断し、脆弱性がある箇所を表示する機能を持ちます。脆弱性があるコードへの修正案の提案も行います。・複雑なタスクの処理による誤作動を抑える機能を備えます。 |
SQLAI.ai | ・さまざまなSQLデータベースに対応し、SQL構文の自動生成、修正などを行うツールです。・SQLに特化したツールです。 |
AIをソフトウェア開発に活用する際の課題と対策
ソフトウェア大手各社の動きからも見える通り、AIによるソフトウェア開発を取り入れる動きは活発化しており、今後もさらに広がると予測されます。
しかし、AIによるソフトウェア開発にはまだ懸念点があります。
例えば用いるツールの種類や学習の仕組みなどによる違いから出る精度、信頼性に関するもの、コンプライアンスに関するものなどです。
主な懸念点としては、下記の4つが挙げられます。
- 品質
- ブラックボックス化
- セキュリティの確保
- 著作権侵害
それぞれの懸念点、対策について詳しく述べます。
品質
<懸念点>
AIは学習を行いながら進化するといった仕組みで動くため、まれに間違った構文でコードを生成することがあります。
例えば、正しくないアルゴリズムによる設計を行う、コード内に誤解を招くようなコメントを記載するなどです。
コードが間違っていると、システムは正常に動作しません。
また、突然システムがフリーズする、クラッシュするなどといったエラーを引き起こす場合もあります。
<対策>
品質管理の対策として、人によるレビューとテストを実施し、問題を未然に防ぐ方法があります。
これらのレビューやテストには、プログラミングの正確性を判断できる専門知識を持つ担当者を配置することが必要です。
不正確なコードの有無をチェックし、必要に応じて追加テストを行いましょう。
また、AIは処理能力を超える複雑なタスクに直面すると、正確に対応できずに誤ったコードを生成することがあります。この現象を「ハルシネーション」と呼びます。
あらかじめハルシネーションを回避するための設計をすることも、重要な対策の一つです。
ブラックボックス化
<懸念点>
AIによる開発の問題点の一つは、構文作成のプロセスが不透明になることです。
仮に高品質なシステムが開発されても、内部のコードが複雑すぎると解読するのが困難です。
システムを解読できる人材がいなければ、将来的に問題を引き起こす可能性があります。
また、修正やアップグレードが必要になった際、レビューできる人材がいないと、作業の実行が不可能となる恐れがあります。
結果として、誰も保守できないブラックボックス化したシステムになる危険性には注意が必要です。
<対策>
AIによるソフトウェアのコーディングを行う際は、作成過程が追跡可能な仕組みを整えましょう。
具体的には、プロセスを段階的に区切り、人によるレビューを実施します。
複雑すぎる場合は簡素化し、誰が見ても理解しやすいコードにすることが重要です。
セキュリティの確保
AIによる開発を行う際に、AIの動作自体のセキュリティが明らかではない場合に機密情報を入力してしまうと、外部に流出させてしまうリスクが出てきます。
また、AIによる開発を個人のアカウントで実施してしまうと、情報が流出してしまうリスクもあります。
AIがプロジェクトのルール、社内規定に合っていないコードを生成し、それがセキュリティ上の脆弱性につながってしまうトラブルには注意すべきです。
<対策>
機密情報の流出を防ぐため、保護すべき情報については事前にAIの学習対象から除外する設定を行っておきます。
AIによる開発のガイドラインを整備し、個人アカウントの利用禁止など、情報漏洩リスクにつながる行為を明確に禁止する項目を設けることが重要です。
さらに、セキュリティ要件を慎重に検討してクラウド型AI開発サービスの利用する、インターネットに接続しないクローズド環境で運用するなど、セキュリティリスクを最小限に抑える方法を選択しましょう。
著作権侵害
AIは過去のコードなどから学習し、実際に開発を行うというメカニズムで動作します。
その関係から、学習に使用した過去のデータから生成したコードが著作権に違反している可能性があり、注意が必要です。
特に、特許登録がある著作権に抵触した場合は、訴訟、罰金の支払いといった問題に発展する可能性もあります。
人により著作権に抵触しているかどうかのチェックを網羅するのは膨大なため、現実的ではありません。
そのため、AIによる開発には常に著作権に関するリスクと向き合う必要が出てきます。
<対策>
対策としては、AIの学習として用いるデータは、著作権に抵触しないものに限定するような設定を行っておくとリスクを避けられます。
著作権に抵触しないデータかどうかについて、詳しい専門知識を持つ担当者が精査すればより安全性を高められます。
今後のAIとソフトウェア開発業界の動向に注目
AIによるソフトウェア開発は、要件定義からテストまでの効率化や人材不足の解消、品質確保といった役割が大いに期待されています。
実際にAIのソフトウェア開発エンジニアとして、MetaGPT、Devin AIなどが登場しています。
試験段階ではあるものの要件定義からデプロイまでをすべてAIが行うため、ソフトウェア開発エンジニアと変わりません。
ただ今のところは、ソフトウェア開発エンジニアがAIに置き換わるという可能性は低いと考えられます。
信頼性、生成過程のロジック、著作権侵害といった懸念が残っているため、レビューテストや専門知識を持った人による判断が必要になるためです。
しかし、生産性向上、開発負担軽減のための補助ツールとしては大変強力なものです。
また、専門的な知識を持った人的資源を上流工程に集中させるためのツールとしての役割も果たせます。
今後、システムが複雑化し、ますます高度になる可能性が見込まれます。
そのような中、人とAIが協力しながらソフトウェア開発を行い、より高度な工程へ人が集中できる環境ができていれば競争力を高められます。
高い品質や高度な技術を保つことができれば、業界でのビジネスモデルや産業構造の流れが変わった場合への備えとなるはずです。
●生成AIのPoC事例集
MVP/PoC支援サービスを提供する、Wakka Inc.がピックアップした生成AIのPoC事例集です。