AIは、ソフトウェア開発ライフサイクル全体にわたってコードを生成、最適化、変換することで、アプリケーション開発に革命をもたらすことができます。生成AIの導入により、一貫性のあるソフトウェア作成、開発者の創造性の最適な活用、開発者のスキルの向上が可能になります。 例:
生成AIをアプリケーション開発に適用すると、次のような大きな潜在的なメリットが得られます。
生成AIを適用して、エンタープライズ・コーディング標準をソフトウェアにレビュー、リファクタリング、適用すると、どの開発者がコードを作成したかに関係なく、例えば繰り返し発生する問題を解決するための共通のアプローチ、共通のコード構造、コードの自己文書化など、より一貫性のあるソフトウェアが実現します。これにより、保守担当者がコードのさまざまなセクションの構造や特異性を最初に理解する必要が少なくなるため、結果として得られるアプリケーションのトラブルシューティング・保守が容易になります。
他の分野と同様に、生成AIには、アプリケーション開発者を単純なコードや機械的なコードの記述や、面倒なバグの原因の特定といった価値の低い作業から解放する可能性があります。より価値の高いタスクに集中できる時間が増えることで、開発者は開発サイクルを短縮し、ソフトウェア・リリースごとの機能を増やし、より小規模で頻繁な変更を実現できます。
最後に、生成AIをアプリケーション開発に適用することで、開発者のスキルを増幅でき、若手開発者が上級レベルや専門家レベルのパフォーマンスを発揮できるようになります。上級開発者は、コードの改善に合わせて最先端のプラクティスを組み込むことで、モデル・トレーニングをリリース・サイクルに組み込むことができます。生成AIは若手スタッフに対する専門家のメンターとして機能するため、上級開発者は他のタスクに集中できるようになり、開発チーム全体のスキル・レベルが向上します。
生成AIは、いくつかの幅広いユースケースでアプリケーション開発に応用できます。Llama 2などの多くの汎用モデルは、複数の現代のプログラミング言語で記述されたアプリケーション・コードでトレーニングされており、コード生成用に調整されたモデルも利用可能です。
生成AIのメリットを享受するユースケースには次のようなものがあります。
これらの各ユースケースについて、以下で説明します。
大規模言語モデル(LLM)のネイティブ・テキスト生成機能を使用して、自然言語プロンプトから新しいコードを生成できます。例えば、開発者は「顧客テーブルから顧客の名前と姓を取得するSQLクエリーを記述してください」というプロンプトを送信すると、SQLクエリーを受け取ることができます。
コード生成にLLMを使用すると、若手開発者や非開発者のアプリケーション開発スキルを大幅に向上させることができますが、必要な出力が複雑になったり、プロンプトに必要な詳細が生成されるコードのレベルに達したりすると、すぐに収益が逓減する点に達する可能性があります。
コードの最適化とリファクタリングは、コードのパフォーマンスを向上させ、構造化を改善するプロセスであり、テキスト生成とテキスト要約という2つのLLM機能を組み合わせたものと考えることができます。一般的またはチューニングされたLLMを使用して、開発者はプロンプトを作成し、コードを最適化または再構築して、パフォーマンスを向上させたり、重複するコードを排除したりすることができます。
LLMは、モデルのコンテキストウィンドウに収まる小規模なコードの最適化とリファクタリングには適していますが、大規模なコードや完全なソフトウェアシステムで許容可能な成果を達成するには、ソフトウェアアプリケーション全体に関するメタデータを維持する大規模なソリューションが必要です。
コードの最適化と同様に、LLMを使用して、関数および変数の命名、コード構造、エンタープライズ・コーディング規則などのトピックに関するエンタープライズ・コーディング標準を適用し、強制できます。通常、コード・レビューとコミット・プロセスの一部としてリポジトリー・レベルで適用され、企業のコーディング標準に基づいて調整されたLLMは、送信されたコードを企業標準に準拠させることができます。これらの基準には、企業が規制基準に準拠するのに役立つ強化規則も含まれる場合があります。
プログラミング言語は他の言語と似ているため、LLMのネイティブ・テキスト変換機能により、あるプログラミング言語で記述されたソフトウェアを別のプログラミング言語に変換できます。例えば、C#をJavaに変換します。
コード最適化と同様に、LLMだけでもモデルのコンテキストウィンドウに収まる小さなコードを変換するのに適していますが、大量のコードやソフトウェアシステム全体を変換するには、メタデータやその他の重要なコンテキスト情報を維持する大規模なソリューションが必要です。
コード変換機能を通じて、生成AIではCOBOLコードをJavaに変換するなど、異なるプログラミング言語間のコード変換も容易に行うことができます。これは、多言語環境やシステム移行時に特に役立ち、開発者がコードを手動で書き直す時間と労力を節約できます。
コードの理解は、コードの生成と似ています。コードの説明では、自然言語プロンプトをコードに変換するのではなく、コードの一部をインプットとして受け取り、コードの機能を自然言語で説明します。例えば、「このPythonコードの機能を説明してください」のようなプロンプトに続いてPythonのセクションが続くと、行ごとに、コードの目的の全体的な要約が生成されます。
この機能は、モデルに「このコードが失敗する理由を特定する」ように指示することで、コード内のエラーを検知するためにも使用できます。これはバグハンティングとも呼ばれます。
API and Library Selectionは、エンタープライズAPIおよびソフトウェア・ライブラリー管理に対する検索拡張生成(RAG)のアプリケーションです。アプリケーションで使用するAPIを探している開発者は、API名、説明、エンドポイントなどの企業データベースにクエリーを実行して、「xyzを使用できるAPIはありますか?」などの質問に答えるRAGプロンプトを作成できます。APIとコード・ライブラリーの説明が高品質とキーワードで維持されている限り、そのようなアプリケーションを調整して、アプリケーション開発と開発者のオンボーディングを迅速化する一貫した応答を提供できるようになります。
アーキテクトは、LLMを使用したアプリケーション開発ソリューションを設計する際に、多くの重要なアーキテクチャー上の決定を下す必要があります。
モデルは補償/著作権保護を提供しますか。また、生成されたコードがライセンス条件によって制限されているかどうかをどのように特定できますか?許容ライセンスでトレーニングされたモデルであっても、元の著作権所有者にクレジットを付与するなどのライセンス条項によって制限される場合があります。
エンタープライズ・コーディング標準を強制および適用することを目的としたソリューションを作成するアーキテクトは、エンタープライズ標準を「理解」するためにLLMをチューニングするのに必要な労力を考慮する必要があります。また、同様の機能を実現するために、リンティング・ツールなどの他の方法が優れているかどうかを判断するために情報に基づいた決定を下します。
オートコンプリート・スタイルのコード・アシスタンスは、開発者の思考の流れを妨げないよう、迅速に対応する必要があります。アーキテクトは、開発者サポートが有益で侵入的でないように、開発者支援モデルの配置と接続性を検討する必要があります。
大規模言語モデルは、特に生成または改訂されたコードがより大規模なソフトウェアシステムに適合する必要がある場合、機能的に正しいコードを生成することが保証されません。この問題に対する直接的な解決策はありませんが(LLMが進化するにつれて、問題ではなくなってきています)、アーキテクトは、LLMが生成したコードは、人間の開発者が生成したコードと同じ品質保証とセキュリティー管理の対象となる必要があることを認識する必要があります。
一般的に利用可能なLLMは、通常、Python、Javascript、C#などの少数の現代のプログラミング言語でトレーニングされます。古い言語やニッチな言語をサポートする必要があるソリューション・アーキテクトは、利用可能なモデルの選択肢がほとんどない場合や、特定のニーズを満たすために汎用モデルを積極的にチューニングする必要がある場合があります。