これまでのソフトウェア開発におけるコーディング(プログラミング)作業では、コンピューターを望み通りに動かすためのコーディング・スキルが必要不可欠でした。しかし近年の技術革新により専門的な知識が必要とされたコーディング作業をAIが代わりに行うことができるようになりました。ソフトウェアのアイディアを日本語でAIに与えるだけでコードが出来上がる未来が現実のものになりつつあります。膨大なプログラミング・コードを学習したAIを利用すると、従来の手動コーディングに比べて高速、効率的に作業を行うことができます。
本稿では、コード生成にAIを利用するためのポイント、業務システムのコーディング作業にAIを組み込むためにIBMが開発したソリューションについてご紹介します。
コード生成のためのAIとメリット
コード生成を行うAI(以降は単にAIと記述します)は大量のデータを使ってトレーニングされています。人間が成長の過程で大量の言葉を浴びることで言語を習得するように、AIは日本語や英語のような自然言語だけでなく、JavaやPythonなどのプログラミング言語を使ってトレーニングされています。AIをコーディング作業に導入することで次の3点の効果が期待できます。
1. 開発コストの削減
これまで手動で行っていたコーディング作業が自動化されることでコストを削減することができます。
2. ソフトウェアを市場投入するまでの時間の短縮
コーディング時間が削減されるため、開発スピードを向上できます。短期間で成果を出すことが求められるプロジェクトでは特に効果的です。
3. 開発者の学習支援
開発者にとって新しいプログラミング言語、フレームワークを学習してコーディングを行うことは時間がかかる作業ですが、AIが生成するコードを利用することで新技術習得のハードルを下げることができます。
AIは非常に大きな可能性を持つ技術ですが、AIをうまく使いこなすにはAIに対してどのような指示を行うかが重要です。AIへの指示はプロンプトと呼ばれており、どのようなプロンプトを使うのかがAIが生成するコンテンツの品質を大きく左右します。AIはトレーニング時に与えられた大量のデータと、生成時に指示されるプロンプトのみを用いてコンテンツを生成するため、AIに何をしてほしいのかを伝える必要があります。
AIをコード生成に使うためのポイント
AIに望み通りのコンテンツを生成させるために必要な技術はプロンプト・エンジニアリングと呼ばれており、一般的には具体的で明確なプロンプトを与えることが望ましいことが知られています。
では、コード生成を行うために特に注意するべき点はあるのでしょうか。IBMでは業務システムについて長年蓄積された知見をもとにして、AIを用いてよりよいコードを生成するためにどのようなプロンプトを書けばよいのかについて調査を行いました。ここでは調査の結果、判明した3つのポイントについて紹介します。
1点目はプロンプトに「参考情報」を含めることです。ここではJavaのあるメソッドのコードを自動生成させたいとしましょう。まず必要になるのはそのメソッドで行うべき処理を日本語で記述した仕様です。コード生成を行う場合は日本語仕様だけでは不十分で、以下のような内容の参考情報を合わせて与えることで生成されたコードの品質を向上することができます。
• DBアクセスを使う場合 : テーブル定義
• 他のメソッドを呼び出す場合 : 呼び出し先メソッドの名称、引数、戻り値
2点目はプロンプトを正確に記述することです。例えば画面から入力された文字列を使ってDBアクセスを行うコードでは、画面上の項目名、テーブルのカラム名を正しく記述する必要があります。
3点目は反復生成とプロンプトの管理です。プロンプトを書いて生成しても一度で望み通りのコードを得られないことも多くあります。AIが生成するコードを見ながらプロンプトを調整する必要があります。将来のコード改修に備えてコード生成をした時のプロンプトを保存しておくことで、保守作業を円滑に行うことができます。
上記のポイントに基づいてAIがもたらすメリットを最大化するためには、プロンプトを効率的に記述、管理するための仕組みが求められることがわかります。
新ソリューション紹介 : 設計情報管理
AIコード生成をより高いレベルへ引き上げるために、ここでは一度AIから離れてこれまでの大規模な業務システムのコーディングでは何が求められてきたのかを振り返ってみましょう。業務システム開発においては以下のような点が重視されてきました。
• 開発標準を定め、ルールの範囲内で開発を行うことで、セキュリティ、性能などの非機能面の問題が発生することを防ぐ
• 大量のデータ項目を正しく扱うために用語辞書や検証ツールを使い、正確性を高める
• 定型的なコーディング作業はできる限り自動化して、作業効率と品質を高める
• 設計とコーディングの整合性を確保して保守性を確保する
AIと上記のような設計情報、コードを管理するための能力を組み合わせることができれば、AIが一層強力なツールになると言えるでしょう。
IBMでは、設計情報管理を担う「統合リポジトリー」、設計情報からコードを生成する「コード生成ツール」を従来から開発しており、様々な業種のお客様プロジェクトで成果を上げてきました。
そこで今回、IBMではAI+統合リポジトリー+コード生成ツールを組み合わせた新ソリューションを開発しました。
図1. AI+統合リポジトリー+コード生成ツールを組み合わせた新ソリューション
新ソリューションは以下のような点でAIコード生成を効率化します。
1.プロンプトの作成支援
プロンプトに日本語仕様と参考情報を記述することでAIの生成結果が向上することは前述した通りです。日本語仕様部分には画面項目、テーブルのカラム名などを正確に記述する必要があります。統合リポジトリーが持つ入力補完機能を活用することで表記揺れがない正確な名称を使ってプロンプトを記述することができます。また参考情報部分に含めるテーブル定義を統合リポジトリーに格納しておけばカラム名(和名、英名)だけでなく、型、桁の情報も合わせて管理することができます。従来からあるコード生成ツールの技術を使うと、参考情報の部分を自動生成することができます。プロンプトからコードを生成する部分を自動化するだけでなく、プロンプト自体の生成も一部自動化できるので開発生産性を向上することができます。
2.プロンプトの管理
コード生成に利用したプロンプトは統合リポジトリーに格納することができるので、設計変更時にプロンプトを少し変えて再生成することが容易になります。また設計情報の変更点、依存関係を管理することができるので設計変更時の影響分析を行うことが可能になります。
新ソリューション紹介 : コード生成
AIはプロンプトさえ与えれば柔軟にコードを生成することができ、その自由度の高さがこれまでにない利点となっています。
しかし業務システムで求められるコードは、セキュリティや性能などの非機能要件を満たすために、各プロジェクトで定めた開発標準に従う必要があります。
AIに開発標準を遵守させるためには複雑なプロンプトを記述するか、AIの言語モデル自体をチューニングする必要があり、どちらも多くのコストがかかります。
開発標準を逸脱しない範囲内でプロジェクト固有の業務仕様を実現するために、新ソリューションでは従来のルール・ベースのコード生成方式で生成する部分と、AIで生成する方式を組み合わせるというアプローチを採用しました。
新ソリューションは、図1のように、画面定義、インターフェース定義、データベース定義などの定型的な設計情報をインプットとしてコード生成する箇所は、ルール・ベースのコード生成方式を利用しています。この方法では事前にコード生成の雛形を調整することができ、開発標準を遵守することが容易になります。具体的にはJakarta EEのアーキテクチャーと一般的なベスト・プラクティスに従い、生成された後のコードの保守容易性を考慮した実装としています。生成されたコードにはカスタマイズ・ポイントを複数設けています。これは特定のメソッドの中身を自由に上書きすることでプロジェクト固有のビジネス・ロジックを差し込むための仕組みで、このビジネス・ロジック部分はAIを用いてコード生成を行います。
どちらの方式のコード生成も統合リポジトリーに保管された設計情報を参照しているため、設計上の整合性を確保した状態でコード生成を行うことができます。このように2つのコード生成方式を適材適所で使い分けることで、生産性と品質の向上を図っています。
実プロジェクトへの適用検証
ここまでで説明してきた新ソリューションの有効性を確認するために、実際の業務システムの設計情報を用いてコード生成を行いました。結果としてアプリケーション全体のコードの95%のコード生成率を実現することができました。さらにAIを使った生成コードの品質面の確認も行いました。AIが生成するコードはプロンプトに依存するため、複数種類の「参考情報」を用いて生成結果を比較した結果、最も良いプロンプトでは改善前に比べて生成コードのコンパイル・エラーを51箇所から3箇所に、ロジック的な不備を5箇所から1箇所に抑えることができました。
おわりに
現在、業務システム開発におけるコーディング作業の生産性を高めるためにAIを活用しコード生成を行うことが注目されています。AIをうまく利用するためにはコード生成という特徴に合わせてプロンプトを変更する知見が必要になります。本稿ではコード生成をするためのよいプロンプトを作るためのポイントを紹介しました。プロンプトを開発者がゼロから記述するのではなく、設計情報とプロンプトの管理を行うことができるツールを利用して効率的にプロンプトを記述することが効果的であることを示しました。さらにAIですべてのコードを生成するのではなく、AIとルール・ベースのコード生成方式を組み合わせることで、実際のプロジェクトにおいて成果を上げることができるという検証結果を紹介しました。AIを活用した変革を進めるうえでは、AIの特性を理解して上手に活用することが重要です。
*「IT変革のためのAI」テーマの他の記事はこちら↓
IT変革のためのAI : ソリューションでAI活用推進
IT変革のためのAI :自律型IT運用を実現する AI for ITOps
IBM、IBM ロゴは、米国やその他の国におけるInternational Business Machines Corporationの商標または登録商標です。他の製品名およびサービス名等は、それぞれIBMまたは各社の商標である場合があります。現時点でのIBMの商標リストについては、https://www.ibm.com/legal/copyright-trademarkをご覧ください。
ProVision一覧はこちらから
#Highlights
#Highlights-home