【生成AIによる業務変革LOG #4】
GitHub Copilotでソースコードの解説資料を自動生成:Javadoc風ドキュメントを作る

【技業LOG】技術者が紹介するNTTPCのテクノロジー

2025.01.20
AI・ディープラーニング
その他
村上 満美

ソフトウェアエンジニア
村上 満美

取得資格:AWS SAA

技業LOG

NTTPCの生成AI業務変革LOG
- 活用事例/技術調査レポート -

本記事では、NTTPCが取り組む生成AIの活用事例や技術調査レポートをご紹介します。生成AIの導入により、私たちの業務やサービスの質が飛躍的に向上し、業務効率化や新たな価値創造を実現しています。
本記事を通じて、当社の生成AI活用の具体的な取り組み内容や技術的な調査結果を詳しくお伝えし、業務変革に対する積極的な姿勢を示すことで、お客さまの信頼と関心を得て、共に成長できるパートナーであることを目指しています。

1. はじめに

はじめまして、NTTPCコミュニケーションズの村上です。普段はソフトウェアエンジニアとしてモバイルサービス向けのシステム開発に携わっています。
私が所属しているチームには既存のアプリケーションが多く存在していることもあり、システム開発の場面において、不慣れなソースコードを効率的に理解することがしばしば課題となっていると感じていました。
そこで本記事では、この課題を解決するために行った、GitHub Copilotを使ったソースコードの解説資料作成に関する取り組みについて紹介します。

2. 若手エンジニアが直面する壁

皆さんはソースコードファイルを開いた時「このコード、なんて書いてあるのだろう?」と困ったことはありませんか?エンジニアとして業務を行っていると、よく知らない技術や未経験の環境に放り込まれることは少なくないと思います。

私は以前、それまで開発に関わってこなかったアプリの改修を担当することになった際、なじみのない言語で書かれていたこともあって、コードの内容を理解するのにかなり時間がかかってしまいました。まだ自分のスキルが十分でないこともあり、ソースコードを読み解くのが大変だったのです。

そんな時、「Javadocのようなソースコードの説明書があれば、もっと簡単にコードを理解できるのではないか?」と考えました。1つひとつ関数や処理の内容を調べるのは時間がかかるし、誰かが作ったコードを読み解くのは大変ですよね。そこで、GitHub Copilotを使ったコードの解説資料作成に取り組んでみました。

3. GitHub Copilotとは?

まずはGitHub Copilotがどんなものか簡単に説明しておきます。

GitHub Copilotとは、GitHub社が提供している、AIを活用してエンジニアの作業をサポートするためのツールです。コードの生成や補完ができるのが特徴で、例えば、具体的なコメントや指示を入力するだけで、その処理に適したコードを提案してくれたりします。特にプログラミング経験が浅い場合でも、Copilotがコードの作成を手助けしてくれるため効率よく開発を進めることが可能です。図1にCopilotによるコード生成の結果を示します。

GitHub Copilotによるコード生成の結果

図1. GitHub Copilotによるコード生成の結果

さらに、オプション機能としてCopilot Chatと呼ばれる機能も存在します。Copilot ChatではChatGPTのようにチャット形式でコードに関する質問を投げかけることができます。コードの解釈やエラーの原因、実装方法などを自然な会話形式で質問することができ、開発のサポートに役立ちます。例えば、エラーが発生した時、その原因や修正方法についてのアドバイスをチャット形式で受け取ることができるため、問題解決のスピードアップにつながります。図2にCopilot Chatの回答例を示します。こちらは図1で生成させたコードに対して解説を依頼した結果になります。

GitHub Copilot Chatによるコード解説

図2. GitHub Copilot Chatによるコード解説

今回はこちらのCopilot Chatの機能を使って資料作成に取り組みました。

4. 資料作成に向けたプロンプト作り

それではここから実際にどんな流れで資料作成に取り組んできたのか紹介していきます。
最終的な目標は、ソースコードをJavadocの様に解説する資料をCopilot Chatに生成させることです。この目標に向けて、資料作成に適したプロンプトを完成させるため、次のステップでプロンプトの完成を目指しました。

プロンプト完成ステップ

ステップ1:出力内容の指定

まず初めに、出力してほしい内容も特に指定せず、説明してくださいというだけのシンプルなプロンプトでコードの解説を依頼してみました。図3,4にプロンプトと出力結果を示します。この段階でもかなりしっかりとした解説を提供してくれています。すごいですね。ただこれだけだと、質問をする毎に回答内容や形式が変化してしまい、少し不安定な印象を受けました。全く同じプロンプトを使っているにもかかわらず出力される内容が変化してしまっていることが見て分かるかと思います。

適当なプロンプトでの出力例A

図3. 適当なプロンプトでの出力例A

適当なプロンプトでの出力例B

図4. 適当なプロンプトでの出力例B

ステップ2:出力形式の指定

次に、出力形式を指定しながらコードの解説を依頼しました。今回は最終的に資料としてまとめるためにマークダウン形式での出力を指定しています。図5,6にプロンプトと出力結果を示します。先ほどのプロンプトに、出力形式に関するリクエストを書き加えることで、求めていた形での回答を得ることができました。ただし、こちらも毎回期待通りの結果を得ることができていた訳ではなく、意図した出力形式にならないこともありました。

意図した形式で回答が出力された例

図5. 意図した形式で回答が出力された例

意図した形式で回答が出力されなかった例

図6. 意図した形式で回答が出力されなかった例

ステップ3:深津式プロンプトの導入

ステップ1,2でお見せしたように、細かい指示のないシンプルなプロンプトでも回答を得ることはできますが、資料としてまとめるためにはある程度回答内容や出力形式を統一したいところです。そこでCopilot Chatからの回答を安定させるため、深津式プロンプトとして広く知られている作成手法に則ってプロンプトの書き方を修正してみることにしました。深津式プロンプトの詳細については、こちらのnote公式YouTubeから参照できます。この手法は、具体的な指示や制約条件を設定することでAIから効果的な出力を得るために多くのエンジニアに活用されています。
制約条件の中にはCopilotに解説してほしい内容と出力の形式について、具体例を提示しながら設定しました。図7にプロンプトを示します。

深津式に則ったプロンプト

図7. 深津式に則ったプロンプト

こちらのプロンプトを使ってCopilot Chatにコード解説を依頼した結果、期待通りの出力を安定して得ることができるようになりました。図8に出力結果を示します。画像左側がCopilot Chatによる出力、右側が出力内容をマークダウンファイルとして保存しプレビュー表示したものです。プロンプトの制約条件に書かれた、出力内容と形式についての条件が満たされていることが分かるかと思います。

出力結果

図8. 出力結果

ステップ1~2の中で、紹介した以外にもいくつかプロンプトを自分で作って試行錯誤してみたのですが、やはりいい出力を得るためには効果的なプロンプト作成が非常に重要だという事を実感しました。また、優れたフレームワークを取り入れることで、さらに質の高い結果を得られることを強く感じました。偉大な先人達が作り上げた素晴らしい手法は積極的に取り入れていきたいものですね。

ステップ4:プロンプトの調整

一旦プロンプトが出来上がった後、ソースコードの解説資料作成を進めていきました。しかしその過程でいくつかの課題が見えてきました。具体的には、コードによって解説してほしいポイントや内容、出力してほしい形式が異なるという事です。例えば、メソッドが定義されているコードに対する解説と、APIのルートを定義しているコードに対する解説とでは求められる情報が違います。また、文章で説明される方がいい場合もあれば表形式でまとめる方が見やすい場合もあります。さらに、テストコードの場合は、各テストのサマリーを一覧で確認できる形になっている方が自分にとってはより便利だと感じました。これらの点を改善するためにプロンプトの見直しに取り組むことにしました。

今回は、ディレクトリ構成毎に出力内容を分けて指定することにしました。例えば、テストコードが書かれているファイルが入ったテストフォルダー、APIのルート定義が書かれているファイルが入ったルートフォルダー、というように、フォルダー名から判断してそれらに適した形の出力を指定する、というやり方です。図9に完成したプロンプトを示します。調整前のものと比べると、フォルダーの種類によって出力内容をそれぞれ変更するよう、より詳細な指示を出す形に修正されています。

完成したプロンプト

図9. 完成したプロンプト

プロンプトの改善に関してはCopilot Chatに相談しながら進めていきました。以前はプログラミングに関する質問以外は受け付けない仕様でしたが、2024年9月の時点ではこのような質問にも柔軟に回答してくれるようになっていました。

5. 出来上がったコードの解説資料

完成したプロンプトを使いコードの解説資料について作成した結果を図10~12に示します。画面左側は元のソースコード、右側はCopilot Chatの出力をマークダウンファイルに保存しプレビュー表示させたものです。ソースコードについては行数の関係から一部抜粋して表示しています。すべて同じプロンプトを使用してCopilot Chatに資料作成を依頼していますが、出力結果の中身を確認すると指示通りファイルによって出力内容を変えることができていると分かります。

コントローラファイルのソースコード解説資料

図10. コントローラファイルのソースコード解説資料

ルートファイルのソースコード解説資料

図11. ルートファイルのソースコード解説資料

テストファイルのソースコード解説資料

図12. テストファイルのソースコード解説資料

6. Tips:活用したい便利機能

これまで、GitHub Copilotを使った資料作成の取り組みについて紹介してきました。ここでは実用的な観点から知っておくと便利な機能をひとつ紹介します。

カスタムインストラクション(custom instruction)

Copilot Chatにはカスタムインストラクションと呼ばれる機能があります。この機能を活用することで、Copilot Chatに対して事前に与えておきたい情報や指示を設定しておくことができます。例えば、特定の言語やフレームワークにフォーカスした回答が欲しいという内容を設定しておくと、以降の回答は全て設定内容を反映したものになるため不要な情報を減らし効率的に回答を得ることが可能になります。また、今回のように完成したプロンプトが長く、毎回同じものをチャット欄に入力するのが面倒な場合にもすごく便利でした。

設定の仕方は簡単で、リポジトリのルートに.github/copilot-instructions.mdというファイルを作成し、その中に反映させたい内容を記載するだけです。カスタムインストラクションの有効化等含むその他設定方法の詳細については公式HPを参照してください。
2024年12月の時点ではVS CodeとVisual Studioでのみ対応しているようです。

7. さいごに

いかがでしたでしょうか?今回のGitHub Copilotを活用した資料作成のプロセスを通じて学ぶことが沢山ありました。特に、生成AIを活用する際にはプロンプト作成が非常に重要であり、同時に難しいという事を実感できました。しかし、良いプロンプトを作ることができれば非常に便利なツールであると言えます。

ただし、出力結果はあまり過信しすぎず、これからもうまく生成AIと付き合っていきたいと思います。

※GitHub Copilot Chatを使用する際には、利用規約を参照ください。
※本記事では、業務で実際に使用しているコードを例に紹介しました。ただし、機密情報の保護やセキュリティ上の理由から、変数名や数値などの一部内容は修正しています。
※GitHubは、GitHub Inc. の商標または登録商標です。

技業LOG

NTTPCのサービスについても、ぜひご覧ください

おすすめ記事

    お気軽にご相談ください