はじめに
エンジニアをやっていると、たまにこういうシチュエーションに放り込まれます。
「この古いプロジェクト、ライブラリのバージョンアップしといて。あ、仕様書はないからコード読んでね。デグレ怖いから試験項目書も作ってね」
……無理ゲーでは?
中身を全く知らないコードを解読し、画面構成を把握し、そこから試験項目を書き出す。手作業でやれば数日は溶けます。
そこで今回は、 ChatGPT(軍師) に戦略を練らせ、 GitHub Copilot(実務兵) にコードを解析させるという「AI二段構え」で、この無理ゲーを攻略した手法を共有します。
今回のミッション
-
対象: 仕様を全く把握していないGitHub上のプロジェクト。
-
目的: バージョンアップに伴うデグレ確認のための「結合〜システム試験レベル」の項目作成。
-
ゴール: 画面ごとの機能・仕様一覧を、Excelにそのまま貼れる形式で出力する。
戦略:AIの役割分担
今回は以下のような役割分担で進めました。
-
ChatGPT:
・役割: プロンプトエンジニアリング。
・「どうCopilotに聞けば、精度の高い回答が得られるか」の命令文を作成してもらう。 -
GitHub Copilot Chat:
・役割: コード解析とドキュメント出力。
・リポジトリ全体のコードをスキャンし、実際の仕様を抽出する。
実践:ChatGPTに「命令文」を作らせる
まず、ChatGPTに状況を正直に話し、Copilotへのプロンプトを生成してもらいました。
投げたプロンプト(要約)
「仕様がわからないプロジェクトで、Copilotを使って試験項目を作りたい。Excelに貼りやすい形式で機能一覧を出すための、最適な質問文を教えて」
ChatGPTからの回答
ChatGPTからは、 「いきなり詳細を聞かず、3段階で情報を引き出すべし」 というプロフェッショナルな回答が返ってきました。これが非常に機能しました。
実行:Copilot Chatへの3ステップ投入
ChatGPTが作成してくれた以下のプロンプトを、GitHub上のCopilot Chatに順次投入していきます。
Step 1: 前提条件の共有
まずはCopilotに「これから何をするか」のコンテキストを理解させます。
このリポジトリのコードを元に、結合試験〜システム試験レベルの試験項目を作成したいです。
私はこのプロジェクトの仕様を把握していないため、まずは「画面ごとの機能/仕様一覧」を整理したいです。
以降の質問では、「画面の一覧」「画面ごとの機能一覧」「Excel用の表形式」を順番に教えてください。
Step 2: 画面の一覧化
次に、全体像を把握するために画面をリストアップさせます。
このリポジトリの中から、ユーザーが利用する「画面」を一覧化してください。
screen_id、画面名、画面の概要、主なコンポーネント、関連ファイルパスを含めてMarkdown形式で出力してください。
Step 3: 機能詳細をTSV形式で出力
最後に、Excelへの転記を考慮した形式で詳細を出させます。
先ほど出してくれた画面一覧のうち、すべての画面について「画面ごとの機能/仕様一覧」を作ってください。
Excelに貼り付ける前提なので、タブ区切り(TSV)で出力してください。
列は以下の順番でお願いします。
screen_id / 画面名 / 機能ID / 機能名 / 仕様概要 / 主要な入出力項目 / 関連ソースコード
結果:どうなったか
Copilotが生成したTSVテキストをコピーし、Excelに貼り付けた結果……
「ほぼそのまま使える」レベルの機能一覧が出来上がりました。
良かった点
-
全ファイルを対象にルーティングファイルやコンポーネントを横断して解析してくれるため、手動でコードを追うより圧倒的に早い。
-
TSV形式の指定: Markdownの表だとExcelに貼った時に崩れがちですが、TSV(タブ区切り)指定にすることで、セルへの流し込みがほぼそのままできました。
気づき
AIにいきなり「試験項目作って」と頼んでも、解像度の低い回答しか返ってきません。
今回のように、 「ChatGPTにプロンプトの設計(外枠)をさせ、Copilotに中身を埋めさせる」 という使い分けをすることで、エンジニアの「仕様把握」という重いタスクが、単なる「AIの出力レビュー」に変わりました。
まとめ
-
ChatGPTは「戦略家(何を聞くべきか)」として使う。
-
GitHub Copilotは「探索者(コードのどこにあるか)」として使う。
-
TSV出力を指定することで、ドキュメント作成の事務作業の負担を軽減する。
未知のプロジェクトに放り込まれて絶望している方の参考になれば幸いです。
最後に
今回の手法は、既存コードのドキュメント化だけでなく、リファクタリング前の仕様整理にも応用できそうだなと感じました。
皆さんはCopilotとChatGPT、AI✖️AIをどう組み合わせて使っていますか?ぜひコメントで教えてください!