😎

【AI駆動開発】プロジェクトを理解したうえでの要件定義をGithub CopilotとVSCodeで実現する

に公開

はじめに

要件定義は、ソフトウェア開発における重要な工程です。しかし、そのプロセスは複雑で時間がかかり、多くの開発者が「ドキュメント化するのが大変」「結局要件漏れが発生してしまう」といったように頭を悩ませる課題の一つではないでしょうか。特に、プロジェクトの現状を正確に把握し、それを基に一貫性のあるフォーマットで要件をまとめる作業は、多大な労力を要しますよね。

最近は生成AIの登場で、要件定義も一定のフォーマットでそれなりの文章でドキュメント化できるようになっていると感じます。しかし、質の面ではどうでしょうか?プロンプトに背景知識を丁寧に入力しないと良い要件定義書は出力されませんよね。ただ背景知識を文字おこしして入力するというのは面倒なので何か良い方法はないものかと考えるわけです。

そこで注目したいのが、Github Copilotです。Github CopilotはVSCode上で使えて、プロジェクトのソースコードを参照する機能もあります。この部分が要件定義時に必要な背景知識として活用できないかと思いやってみた結果うまくいったため、本記事を執筆しました。

本記事では、GitHub CopilotがVSCode上のコードを直接読み取り、プロジェクトの現状を把握した上での要件定義を効率的に行うためのワークフローと、その具体的な手法について詳しく解説します。

GitHub CopilotとVSCodeによる要件定義の概要

GitHub CopilotとVSCodeを組み合わせるメリット

GitHub CopilotとVSCodeを組み合わせることで、下記のようなメリットを享受できます。

  • コンテキストの自動把握: VSCode上で開いているコードやプロジェクト全体の情報をCopilotが自動で読み取り、現状の実装に基づいた正確な情報をコンテキストに反映できます。
  • 対話による要件の具体化: Copilotとの対話を通じて、曖昧な要件を深掘りし、具体的な仕様へと落とし込んでいくことができます。
  • ドキュメント作成の自動化: 定義された要件を基に、Copilotが要件定義書や仕様書のドラフトを自動で生成します。これにより、ドキュメント作成の手間が大幅に削減されます。
  • フォーマットの統一: 事前にプロンプトでフォーマットを指定しておくことで、誰が要件定義を行っても一貫性のあるドキュメントを作成できます。

AIを活用した要件定義の位置づけ

AIを要件定義に活用することは、開発プロセスにおける「知的労働の自動化」と位置づけられます。AIはあくまでアシスタントであり、最終的な意思決定は人間が行います。しかし、情報収集、整理、文書化といった定型的な作業をAIに任せることで、開発者はより創造的な作業、例えば「どのような機能があればユーザーにより価値を提供できるか」といった課題の解決に集中できるようになります。

要件定義のタイプと使い分け

要件定義は、開発のフェーズや目的に応じて、いくつかのタイプに分類できます。ここでは代表的な3つのタイプと、それぞれの特徴について解説します。

新規機能実装のための要件定義

  • 目的: 新たな価値をユーザーに提供するための機能を開発する。
  • 特徴: ゼロから機能の目的、背景、仕様、画面構成などを定義する必要があります。
  • 必要な情報: 機能の目的、ターゲットユーザー、解決したい課題、競合との差別化要因など。

既存機能向上のための要件定義

  • 目的: 既存の機能の問題点を改善し、ユーザー体験やパフォーマンスを向上させる。
  • 特徴: 現状の機能仕様を正確に把握し、問題点と理想の状態を明確にした上で、具体的な改善策を定義します。
  • 必要な情報: 現状の機能仕様、理想的な状態とのギャップ

不具合修正のための要件定義

  • 目的: 発生しているバグの原因を特定し、修正する。
  • 特徴: バグの発生状況、再現手順、影響範囲を正確に記述し、修正方針を明確に定義することが重要です。
  • 必要な情報: バグ報告の内容、再現手順、エラーログ、関連するコードの箇所など。

これらのタイプに応じて適切なプロンプトを使い分けることが、効率的な要件定義の鍵となります。

具体的なプロンプトテンプレート

ここでは、すぐに使えるプロンプトのテンプレートを3つのタイプ別に紹介します。これらのプロンプトは、前述の .prompt ファイルに記述して使用することを想定しています。

新規機能実装用プロンプト

あなたは新規機能開発の要件定義を行う専門家です。以下の情報をもとに、新規機能開発の要件定義を行ってください。

# 要件定義の目的:
- 新規機能の目的と背景を明確にする
- 機能の内容と画面構成、画面仕様、挙動を具体化する
- 作成した要件定義書をもとに、エンジニアに開発を進めてもらう

# 要件定義手順
- ユーザーからの要件に関する情報を収集する
- 収集した情報をもとに、要件定義書の各セクションを作成する
- 不明点があればユーザーに質問し、より良い要件定義を行う

# 制約条件
- ユーザーが要件定義書を出力してくださいというまで、要件定義書を出力しないこと
- ユーザーの出力要求が行われるまでは、不明点を質問しよりよい要件定義を行うことに努める
- 現状のプロジェクトの状態を確認するために、適宜プロジェクトのリポジトリやドキュメントを参照する
- ユーザーへの質問は答えやすいようにユニークな質問IDを付与する

# 出力形式
- Markdown形式で出力すること
- コードブロックで囲むこと
- だ。である口調で出力すること
- 出力するセクションは以下の通り
	- 背景
	- 目的
	- 機能内容
	- 画面仕様
	- 画面構成
	- 挙動

既存機能向上用プロンプト

あなたは既存機能改善開発の要件定義を行う専門家です。以下の情報をもとに、既存機能改善開発の要件定義を行ってください。

# 要件定義の目的:
- 既存機能改善の目的と背景を下記の観点から具体化する
  - 現状の問題点
	- 理想の状態
- 修正の方針を具体化する
- 作成した要件定義書をもとに、エンジニアに開発を進めてもらう

# 要件定義手順
- ユーザーからの要件に関する情報を収集する
- 収集した情報をもとに、要件定義書の各セクションを作成する
- 不明点があればユーザーに質問し、より良い要件定義を行う

# 制約条件
- ユーザーが要件定義書を出力してくださいというまで、要件定義書を出力しないこと
- ユーザーの出力要求が行われるまでは、不明点を質問しよりよい要件定義を行うことに努める
- 現状のプロジェクトの状態を確認するために、適宜プロジェクトのリポジトリやドキュメントを参照する
- ユーザーへの質問は答えやすいようにユニークな質問IDを付与する

# 出力形式
- Markdown形式で出力すること
- コードブロックで囲むこと
- だ。である口調で出力すること
- 出力するセクションは以下の通り
	- 背景
	- 目的
	- 変更の内容
		- 対象ページ
		- アプローチ

不具合修正用プロンプト

あなたはバグ修正の要件定義を行う専門家です。以下の情報をもとに、バグ修正の要件定義を行ってください。

# 要件定義の目的:
- バグの内容と発生状況、およびその修正方針を具体化する
- 作成した要件定義書をもとに、エンジニアに開発を進めてもらう

# 要件定義手順
- ユーザーからの要件に関する情報を収集する
- 収集した情報をもとに、要件定義書の各セクションを作成する
- 不明点があればユーザーに質問し、より良い要件定義を行う

# 制約条件
- ユーザーが要件定義書を出力してくださいというまで、要件定義書を出力しないこと
- ユーザーの出力要求が行われるまでは、不明点を質問しよりよい要件定義を行うことに努める
- 現状のプロジェクトの状態を確認するために、適宜プロジェクトのリポジトリやドキュメントを参照する
- ユーザーへの質問は答えやすいようにユニークな質問IDを付与する

# 出力形式
- Markdown形式で出力すること
- コードブロックで囲むこと
- だ。である口調で出力すること
- 出力するセクションは以下の通り
	- バグ内容
	- バグの発生状況
	- 修正の方針

これらのプロンプトはあくまでテンプレートです。自身のプロジェクトに合わせて、セクションを追加したり、制約条件を変更したりして、改善していくことが重要です。

GitHub Copilotを活用した要件定義の手順

それでは、実際にGitHub Copilotを使って要件定義を行う手順を見ていきましょう。

1. 要件定義用プロンプトテンプレートの設定方法

まずは先ほど紹介したプロンプトのテンプレートを使うと便利かと思います。
VSCodeのGithub CopilotチャットのUI右上の三点リーダーを押すとプロンプトファイルを構成するための設定ができるので、そこから設定を行うとよいでしょう。

modeにはAgent modeを活用することで、Copilotは単なるコード補完ツールから、プロジェクト全体を理解し対話するエージェントとして機能するようになります。モデルとしては、より長文のコンテキストを理解できるClaudeなどを選択すると良いでしょう。

2. 効果的な情報の入力方法

Copilotに要件定義を依頼する際は、できるだけ具体的で十分な情報を提供することが重要です。

  • 背景と目的: なぜこの要件定義が必要なのかを明確に伝えます。
  • 関連ファイル: @workspace のようにメンションし、関連するソースコードやドキュメントをCopilotに読み込ませます。これにより、Copilotは現状の実装を正確に把握できます。
  • 箇条書き: 要求事項を箇条書きで簡潔にまとめると、AIが解釈しやすくなります。

3. AIとのインタラクティブなやり取りによる要件の具体化

一度の指示で完璧な要件定義書が出てくることは稀です。Copilotからの提案に対して、追加の質問をしたり、修正を指示したりすることで、対話的に要件を具体化していきます。

Copilotが不明点について質問してきた場合は、それに対して丁寧に回答することで、より精度の高いアウトプットが期待できます。

4. 要件定義書の出力と微調整

Copilotとの対話を通じて要件が固まったら、「要件定義書を出力してください」と指示します。出力された内容を確認し、必要に応じて手動で微調整を加えて完成です。

要件定義プロセスの効率化のためのベストプラクティス

ここまででGithub CopilotとVSCodeを活用した要件定義の方法の解説は終わりましたが、最後にAIを使った要件定義をするにあたって持っておきたい心構えをお話しします。なんとなくでAIを使って変な要件定義をしないよう、下記の心構えを持っておくのが良いと思います。

プロジェクト全体像の把握の重要性

AIに効果的に作業してもらうためには、人間がプロジェクトの全体像を正しく理解していることが不可欠です。ビジネス上の目的、技術的な制約、チームのスキルセットなどを考慮した上で、AIへの指示を出す必要があります。

AIの出力を批判的に評価する姿勢

AIは万能ではありません。時には事実と異なる情報を生成したり(ハルシネーション)、文脈を誤解したりすることもあります。AIの出力はあくまで「ドラフト」と捉え、必ず人間の目でその内容を精査し、批判的に評価する姿勢が重要です。

チーム内での要件定義プロセスの共有と標準化

本記事で紹介したようなワークフローやプロンプトをチーム内で共有し、標準化することで、チーム全体の生産性を向上させることができます。誰が担当しても一定の品質の要件定義が可能になり、属人化を防ぐことにも繋がります。

プロンプトの継続的な改善方法

プロンプトは一度作ったら終わりではありません。プロジェクトを進める中で得られた知見や、より良い言い回しなどを反映させ、継続的に改善していくことが、AIとの連携を深化させる上で不可欠です。「プロンプトを育てる」という意識を持つと良いでしょう。

まとめと今後の展望

本記事では、GitHub CopilotとVSCodeを活用して、要件定義プロセスを効率化し、品質を向上させるための具体的な手法について解説しました。

AIを開発プロセスに組み込むことで、私たちは情報収集や文書化といった煩雑な作業から解放され、より本質的で創造的な業務に集中できるようになります。ぜひ今回紹介した内容を活用して、より良い開発ライフを送ってもらえたらと思います。

最後に宣伝

Next.jsで自分のキャパシティを把握しながらTodo管理ができるアプリを開発・リリースしています!
「3日坊主になってしまう」、「Todoは作るけど結局予定がくるってタスクをこなせない。。」といった悩みを抱える方にうってつけのアプリになっています。

現在は製品化に向けてアプリを刷新中で、夏中にはリニューアル版をリリースする予定です。PoCという位置づけではありますが、機能面では充実していますのでぜひ1度使ってみてください!

紹介記事「もう、計画倒れとは言わせない。あなたの「できる」を最大化するスケジュール管理アプリ「Fillive」

Discussion