生成AIを用いてアプリケーション開発プロセスを変革しよう(2) GitHub Copilot設計書生成概要編
進化が非常にめざましいAIを、アプリケーション開発に活用することを考えるコラムの第二弾です。
前回のコラム「生成AIを用いてアプリケーション開発プロセスを変革しよう(1) GitHub Copilot操作概要編」では、GitHub CopilotとVisual Studio Codeを組み合わせた利用方法の検証として、GitHub Copilotの操作概要や、Copilot に設計書を書いてもらった例をご紹介しました。
今回は特に、設計書を書いてもらうための追加検証として、設計書生成の基本から制約となる要素とそれらの回避方法を探っていきたいと思います。
前回のおさらい:GitHub Copilotをチャットで利用する
Visual Studio Codeは、拡張機能で多彩なサービスに対応しており、GitHub Copilotもその一つです。
Visual Studio CodeでGitHub Copilotを利用するには、拡張機能をインストールする必要があります。
- ※本コラムの内容は、2023年8月~2024年2月までの情報をもとにしています。現在進行形で急速に技術革新が進んでおり、最新の状況を把握して活用していくことが重要です。当社でも常にキャッチアップしながら現場適用を行っています。
1. 目的
AI の活用
ソフトウェア開発の生産性、品質向上のためのAI活用ノウハウを蓄積します。
今回は、GitHub Copilotを活用し、既存プログラムのコードからプログラム設計書の生成を検証します。
2. 設計書生成の基本
チャットで設計書生成を依頼する
3. 設計書生成の制約
設計書生成で制約となるCopilotの挙動
検証をする中で、設計書生成で制約となるCopilotの挙動がいくつか見えてきました。制約となる要素は以下の10点です。
- 1.ファイルを作成してくれない
- 2.ファイルを見てくれない
- 3.ファイルを一つしか見てくれない
- 4.開いているファイルの見えている範囲しか見てくれない
- 5.一つのファイルに複数のプログラムが書かれていると複数並列で記載される
- 6.同じ文言で指定しても、全体のフォーマットによってセクションの記載が変わる
- 7.ファイルが大きいと読んでくれない
- 8.一度の回答のサイズに上限がある
- 9.以前のお願いから期待の傾向を踏まえてくれない
- 10.プログラムの詳細ステップを出してもらおうとすると、なかなか解像度が高くならない
これより、これらの制約の内容を説明します。
1. ファイルを作成してくれない
チャットでは、チャット内の返答があるだけでファイルを作成してくれないため、ユーザー自身が、チャットの返答をコピー&ペーストしてファイルを作成する必要があります。
2. ファイルを見てくれない
プログラムコードは、一般的に複数のファイルで構成されますが、Copilotはファイルを見てくれず、Visual Studio Codeのエディタで開いているコードのみを見ます。
3. ファイルを一つしか見てくれない
プログラムコードは、一般的に複数のファイルで構成されますが、Copilotは一つのファイルしか見てくれません。下図のコードは、一つのクラスを複数のファイルで定義しています。
一つ目のファイルでは「Value01」というプロパティを、二つ目のファイルでは「Value02」というプロパティを定義しています。
(参考) ChatGPTの場合
複数のファイルで構成されるプログラムの解析
ファイルを複数指定することで、複数のファイルで構成されるプログラムの挙動を解析してくれます。
(参考)Copilotの場合
複数のファイルで構成されるプログラムの解析
ファイルを一つずつしか指定できないため、プログラムの断片での解析になります。
手順とするには非現実的ですが、複数のファイルを一つにつなげてしまうことで読み込んでくれます。このことから、Copilotは、複数のクラスが連携するプログラムに対する詳細解析能力を保有していることがわかります。(それだけに複数ファイルがダメなのが、とても残念です)
4. 開いているファイルの見えている範囲しか見てくれない
プログラムコードが1画面に表示しきれず、縦スクロールが必要になることが頻繁にあります。このような場合、Copilotは、画面に表示されている範囲しか見てくれません。次のコードは、縦スクロールが必要になる大きさのプログラムコードファイルに「Property01~51」を定義しています。
5. 一つのファイルに複数のプログラムが書かれていると複数並列で記載される
プログラムコードは、一般的に一つのファイルに複数のクラス等を定義できます。この際、プログラム設計書は、クラスごとに複数作られてほしいところですが、Copilotは、一つの設計書に複数のクラスを並列で記載します。
6. 同じ文言で指定しても、全体のフォーマットによってセクションの記載が変わる
全体のフォーマットは異なるが、セクション単位では同じ文言のフォーマットとなっている二つの設計書の例です。生成された設計書の文言が変わります。
7. ファイルが大きいと読んでくれない
ファイルが大きいと読んでくれません。この例では、350行のファイルは読んでくれましたが、351行のファイルは読んでくれていません。読んでくれるサイズは、実行のたびにバラつきがあり、明確な閾値のようなものがある訳ではないようです。
8. 一度の回答のサイズに上限がある
回答内容が大きくなると、回答が途中で止まります。「続けてください」とお願いすることで、続きを出力してくれることがありますが確実性はなく、続きを出力してくれないことも多いです。
9. 以前のお願いから期待の傾向を踏まえてくれない
チャットでの依頼は、一つの依頼に対して一つの回答で完結するだけではなく、人間との会話のように以前の依頼を把握したうえで、次の依頼に対応してくれます。
生成AIを使いこなす方法として、少し会話を行ったうえで本命の依頼をするテクニックがあります。この手法は、Copilotでは比較的効果を出しにくいようです。
- ※ChatGPTは、この点についてCopilotと比較して得意なようです。
10. プログラムの詳細ステップを出してもらおうとすると、なかなか解像度が高くならない
(コードを日本語に書き換えたような)詳細ステップを回答してもらうためのお願いの仕方が難しいです。
- ※ChatGPTは、この点において解像度が高く、比較的楽にコードを日本語に書き換えたような説明が得られる傾向があります。
ポイント
コードを日本語に置き換えたような解説には賛否あります。
今回は「プログラムを(対象のプログラミング言語を)読めないメンバーでも生成 AI を活用して設計書を作成できる 」を実現しメンバーアサインの自由度を上げる可能性を検討しています。
ポイント
前ページは、努力と幸運の結果得られた設計書です。
たいていの場合、概要を説明する文章が回答されます。
4. 制約の回避方法
ここまでご説明した設計書生成で制約となる要素10点について、対策を考えて行きます。
1. ファイルを作成してくれない
今回の検証では、設計書はマークダウン形式で生成しています。チャットの返答をマウスの右クリックのコンテキストメニューでコピーすることで、マークダウン形式のテキストがクリップボードにコピーされます。ユーザー自身が用意したファイルにペーストすることでファイルとして保存が可能です。
2. ファイルを見てくれない
Visual Studio Codeのエディタ部で最後に触ったタブのファイルが参照されます。対象としたいプログラムコードファイルを、Visual Studio Codeで開いてからチャットで依頼をします。
ヒント
依頼文に「@workspace」をつけることで、ワークスペース内のファイルを参考情報として参照してくれる機能があります。
この機能で改善が見込めますが、「@workspace」機能については今後の追加検証を予定しています。
3. ファイルを一つしか見てくれない
Visual Studio Codeのエディタ部で最後に触ったタブの1ファイルのみ参照されます。ファイルごとに設計書の断片を作成し、ユーザー自身が断片を結合します。
4. 開いているファイルの見えている範囲しか見てくれない
選択されている範囲のテキストが対象となります。Ctrl+Aなどで全選択をすることでファイル全体が参照されます。
5. 一つのファイルに複数のプログラムが書かれていると複数並列で記載される
選択されている範囲のテキストが解析の対象となります。一つのプログラムの範囲のみを選択し、個別の設計書を生成してもらいます。
6. 同じ文言で指定しても、全体のフォーマットによってセクションの記載が変わる
全体を見て適した回答をしてくれる生成AIの良さが裏目に出てしまいます。セクションごとに設計書の断片を生成し、ユーザー自身がそれらを結合します。
7. ファイルが大きいと読んでくれない
現時点で読んでくれるサイズを引き上げる方法はありません。プログラム内の一部をテキスト選択して設計書の断片を生成し、ユーザー自身が断片を結合します。
(今後のアップデートで上限サイズが引き上げられる可能性はありますが、それでも非常に大きなファイルに対応可能になることは期待できません)
※レガシープログラムでは、1ファイルで1万行を超えるプログラムファイルが含まれることが想定されます。
メモ
GitHub CopilotではAIとの会話セッション中の問答をサーバー側で保持せず、クライアントから履歴(過去の指示・プロンプト)を含めて毎回送信しています。未検証で確証はありませんが、会話を続けると送信データが増え、受け取ってもらえるデータ量に影響がでる、という挙動はあるかもしれません。
8. 一度の回答のサイズに上限がある
チャットでの回答のサイズを引き上げる方法はありませんが、チャットの回答に収まるようにプログラム内の一部をテキスト選択して設計書の断片を生成し、ユーザー自身が断片を結合します。
(今後のアップデートで引き上げられる可能性はあります。それでも非常に大きなファイルに対応できることは期待できません)
- ※画像は前項と同じです(方法が完全に同一のため)
9. 以前のお願いから期待の傾向を踏まえてくれない
状況を見て適した回答をしてくれる生成AIの良さが裏目に出てしまいます。お願い事をきわめて詳細に記述することになります。特に、回答の実例を記述することは非常に有効ですが、詳細を記述することでお願い文が長くなるため、一度の依頼で設計書全体を生成することは困難になります。そのため、チャットの回答に収まるように、プログラム内の一部をテキスト選択して設計書の断片を生成し、ユーザー自身が断片を結合します。
10. プログラムの詳細ステップを出してもらおうとすると、なかなか解像度が高くならない
状況を見て適した回答をしてくれる生成AIの良さが裏目に出てしまいます。お願い事をきわめて詳細に記述することになります。特に、回答の実例を記述することは非常に有効ですが、詳細を記述することでお願い文が長くなるため、一度の依頼で設計書全体を生成することは困難になります。そのため、チャットの回答に収まるように、プログラム内の一部をテキスト選択して設計書の断片を生成し、ユーザー自身が断片を結合します。
- ※説明文は前項と同じです(方法が完全に同一のため)
5. まとめ
設計書の生成
今回制約として見えてきたことは、整理すると以下の4点です。
- ・複数ファイルを扱えない
- ・大きなファイルを扱えない
- ・セクションごとに詳細な内容を得るには、個別のセクションの内容に絞って生成すると良い
- ・複数の実施で安定して同じような生成結果を得るには、狭い範囲に絞って生成すると良い
整理すると、これらの制約への対策は一つとなります。
- ・狭い範囲で生成を実施し、ユーザーが生成結果を結合して成果物とする
この手法をとることで、生成AI(GitHub Copilot)によるプログラム設計書生成が可能ということがわかりました。
6. 今後の予定
ChatGPT
今回の検証は、GitHub Copilotだけでなく、ChatGPTでも同様に行っているため、次回はChatGPT編をご紹介します。
@workspace
今回の検証中に気が付いた「@workspace」というキーワードがありますが、これは今回の検証結果で判明した制約を大きく解消してくれる可能性があります。
今後は、このキーワードの効果について検証を進める予定です。
- ※文中の商品名、会社名、団体名は、一般に各社の商標または登録商標です。