GitHub Copilotなら設計書からコード生成が可能!実務で使えるプロンプトと注意点とは?

システム開発や個人でのアプリ開発で、要件定義書や詳細設計書をもとに手作業でプログラミングを行う作業に時間や手間に悩まされた経験はありませんか。もっとスムーズに設計段階からプログラムを立ち上げることができたら嬉しいですよね。

GitHub Copilotを活用することで、設計書からのコード生成が驚くほど簡単かつ効率的に行えるようになります。本記事では、初心者の方でも迷わず実践できるように、設計書のファイル形式ごとのコツからプロンプトの記述方法、安全に運用するための注意点まで分かりやすく解説します。

この記事を最後まで読むことで、開発のスピードを飛躍的に向上させ、ドキュメントとプログラムの一貫性を保つ具体的なコツがしっかりと身につきます。ぜひ参考にしてみてください。

  • GitHub Copilotで設計書からのコード生成を行う基礎知識と仕組み
  • AIに解釈させやすいMarkdown形式やEARS記法を用いた設計書の書き方
  • Copilot Chatや指示ファイルを駆使した実践的なコード自動生成手順
  • 精度向上に不可欠なプロンプト設計とセキュリティ面での注意点
目次

GitHub Copilotで設計書からコード生成を始める基礎知識

GitHub Copilotを使って要件定義や詳細設計といった設計書からコード生成を行うプロセスは、現代のソフトウェア開発において急速に普及しています。まずは、基本となる仕組みや利点、AIが読み取りやすい設計書の特性について学んでいきましょう。

初心者でも分かるGitHub Copilotの概要

GitHub Copilotは、GitHubとOpenAIが共同開発したAIコーディング支援ツールです。普段使用しているVisual Studio Code(VS Code)などの開発環境(IDE)に拡張機能として導入することで、リアルタイムなコード補完やチャットを通じた会話形式でのプログラミングサポートを受けることができます。

Copilotの主な機能には、タイピング中に次のコード行や関数を予測表示する「インライン補完」と、対話形式で質問や指示が行える「Copilot Chat」が存在します。単に関数を1行書くといった作業補助にとどまらず、プロジェクト全体の文脈を解析して適切な処理を提示してくれるため、プログラミング初心者にとっても非常に心強いパートナーとなります。

インライン補完とCopilot Chatの主な特徴

インライン補完は、開発者がコードやコメントを入力している最中に、その文脈(コンテキスト)を瞬時に読み取り、次に書くべきコードをグレーのゴーストテキストで提案してくれる機能です。Tabキーを押すだけで提案をそのまま取り込めるため、タイピングの手間を大幅に削減できます。一方でCopilot Chatは、サイドバーや独立したウィンドウでAIと対話しながら「この関数の処理内容を説明して」「この設計書に基づいてクラスを作成して」といった抽象度の高い指示を出すのに適しています。これらを用途に合わせて組み合わせることで、開発効率は何倍にも向上します。

AI支援ツールを活用した現代の開発スタイルの変化

これまでのプログラミング作業では、文法やライブラリの仕様を公式ドキュメントや検索エンジンで調べ、それを自分の手でコードに落とし込む作業に多くの時間が費やされていました。しかしCopilotのようなAIツールの登場により、エンジニアの役割は「ゼロからコードを書く作業者」から「AIに対して適切な指示を与え、生成されたコードの妥当性を評価・修正する設計者・レビューアー」へとシフトしつつあります。これにより、定型的なコードの記述に時間を取られることがなくなり、より本質的なロジックの検討やユーザー体験の向上に集中できる環境が整いつつあります。

設計書からのコード生成が注目される理由

従来のソフトウェア開発では、人間がテキストで書かれた要件定義書や設計書を読み込み、それを頭の中でプログラムの構造へと翻訳しながら手作業でキーボードを叩いてコードを記述していました。しかし、この手作業のプロセスには時間的なコストがかかるだけでなく、設計書の解釈ミスマッチやコーディング漏れといったケアレスミスが発生しやすい課題がありました。

GitHub Copilotを活用した「仕様駆動(Spec-Driven)」のアプローチを導入すると、設計ドキュメントそのものをAIへの入力データとして直接読み込ませ、一括でプログラムの雛形やロジックを出力させることが可能になります。これにより、開発スピードが劇的に向上するだけでなく、設計書と実際のコードベースが乖離してしまう問題(仕様の形骸化)を自然に防ぐことができます。

仕様駆動(Spec-Driven)アプローチがもたらす開発速度の革新

従来のウォーターフォール型やアジャイル型開発においても、「設計書を作ったものの、実装の過程でコードだけが修正され、ドキュメントの更新が追いつかない」という問題が頻繁に発生していました。仕様駆動アプローチでは、まず設計書(仕様)を正として整備し、その設計書をAIに読み込ませてコードを生成するため、常にドキュメントと実装が1対1で対応する状態を保ちやすくなります。また、新規機能の追加や仕様変更が生じた場合でも、まず設計書を更新してから再生成を依頼することで、手作業による変更漏れやバグの混入を劇的に減らすことが可能です。

人間とAIの得意分野を活かしたアジャイルな開発サイクル

人間が得意とする領域は、ユーザーの課題を理解し、どんなシステムを作るべきかという要件を組み立てる「抽象的な思考」や「設計」のフェーズです。一方でAIが得意とする領域は、定義されたルールや構造に基づいて「具現的なコードを大量かつ高速に出力すること」です。設計書からのコード生成を導入することで、人間はアイデアの発想や設計の推敲に集中し、AIが面倒な実装作業を担うという理想的な分業体制が確立されます。これにより、プロトタイプの作成から本番実装までのサイクルが劇的に短縮されます。

活用できる主な設計書のフォーマット一覧

AIに設計書を読み込ませる際、どのようなファイル形式でドキュメントが準備されているかによって、AIの解釈精度や生成されるコードの品質が大きく変わります。実務や学習でよく使われる主な設計書フォーマットの特性を理解しておきましょう。

フォーマットAIの可読性前処理の必要性主な用途と特徴
Markdown (.md)極めて高い不要テキスト構造が明確で、Copilotが最も正確に文脈を読み取れる最適フォーマット。
OpenAPI (YAML/JSON)完全(構造化)不要Web APIのルーティングやDTO(データ転送オブジェクト)生成に最も威力を発揮。
Mermaid / PlantUML高い不要シーケンス図やクラス図をテキスト表記したもので、処理フローの再現に効果的。
Excel (.xlsx)低い必須セルの結合や装飾が多くAIが位置関係を誤解しやすいため、Markdown等への変換が必要。

上記のように、テキストベースの構文で記述されたフォーマットはAIとの親和性が極めて高く、そのままチャットツールやコンテキスト指定に活用することができます。

非構造化データと構造化データの違いによるAI認識精度の差

AIモデル(LLM)は基本的にテキストデータトークンの並び順や文脈上の関係性を解析して次の文脈を予測します。そのため、行と列の位置関係や視覚的な結合セルに依存するExcelやPDFなどのバイナリ・複合フォーマットは、内部のテキスト情報を取り出す過程で意味構造が崩れやすく、AIが誤った解釈をする原因になります。これに対して、プレーンテキストをベースにしたMarkdownやYAMLなどの構造化テキストは、構文解析が容易であり、AIが「どこが見出しで、どこが条件で、どこがデータ構造なのか」を正確に判定できるため、生成コードの精度が飛躍的に高まります。

図解コード(Mermaid / PlantUML)を組み合わせた高度な仕様定義

システム開発における処理の順番や状態遷移をテキストだけで表現すると、どうしても複雑になりがちです。そこで役立つのが、テキスト形式で図を記述できるMermaidやPlantUMLです。例えば、ユーザー登録処理におけるクライアントとサーバー、データベース間のやり取りをMermaidのシーケンス図として記述し、それをCopilotに読み込ませることで、非同期処理の待機やエラー時のフォールバック処理を含めた高度なロジックを忠実に再現したコードを生成させることができます。

Markdown形式がコード生成に最適な理由

GitHub Copilotを用いたコード自動生成において、最も推奨されるドキュメント形式がMarkdown(.md)です。Markdownが最適とされる最大の理由は、見出し階層(#や##)、箇条書きリスト、コードブロックといった構文が明確に定義されており、AIが文章の論理構造や重要度を正確に把握できる点にあります。

また、Markdownファイルはプログラムのソースコードと同じGitリポジトリ内でバージョン管理が行えるため、「Docs-as-Code(ドキュメントもコードと同様に管理する考え方)」を簡単に実践できます。詳細な書き方やGitHub環境での具体的な連携方法については、GitHub Copilotを日本語で使いこなす設定手順の解説記事でも詳しく取り上げられていますので、ぜひ参考にしてください。

Docs-as-Codeによるドキュメント管理の近代化

Docs-as-Codeとは、設計書や仕様書などのドキュメントをソースコードと全く同じ開発フロー(Gitリポジトリでの管理、Pull Requestによるレビュー、自動チェックなど)で扱う運用手法です。Markdownを採用することで、WordやExcelのファイルを別サーバーで管理する手間がなくなり、コード変更と同じコミット内で設計書の更新が行えるようになります。これにより、開発者は開発エディタから離れることなく設計書の作成・修正とコード生成を完結でき、チーム全体でのドキュメントの最新化が強力に推進されます。

見出しタグとリスト構文がAIに与える構造的ヒント

Markdownの記法は、AIに対して強力なセマンティック(意味的)ヒントを提供します。例えば、# ユーザー管理機能 の下に ## ログインAPI という見出しを配置し、その中に箇条書きでパラメータやリターン値を明記すると、AIは親要素と子要素の関係性を明確に理解します。単なるプレーンテキストでダラダラと説明を書くよりも、見出しやコードブロック(“`)で囲んだデータ構造を提示する方が、AIが提示された情報を解釈する際のエラーを大幅に抑えることが可能になります。

EARS記法で設計書の曖昧さを排除するコツ

自然言語で書かれた要件や仕様書には、どうしても「適切なタイミングで処理する」「エラー時はわかりやすく表示する」といった曖昧なニュアンスが含まれてしまいがちです。AIはこうした不鮮明な指示を受けると、独自の推測でコードを埋めてしまい、意図しないバグや動作不整合を引き起こす「ハルシネーション(誤答)」を起こしやすくなります。

この問題を防止し、厳格な要件を記述するための手法として注目されているのがEARS記法(Easy Approach to Requirements Syntax)です。要件を固定のパターンに沿って記述することで、AIへの指示を構造化できます。

【EARS記法の代表的な記述パターン】

  • イベント駆動型: When [トリガー], the system shall [動作].
    (例: ユーザーが購入ボタンを押した時、システムは決済処理を実行しなければならない。)
  • 例外処理型: If [異常・例外条件], then the system shall [動作].
    (例: 残高が不足している場合、システムはエラーメッセージを表示し処理を中断しなければならない。)
  • 状態駆動型: While [特定状態], the system shall [動作].
    (例: 通信処理中である間、システムはボタンを非活性化しなければならない。)

このように条件や動作の境界をはっきりと文章化しておくことで、Copilotはガード節の挿入や例外ハンドリングを漏れなく正確にコードへ変換できるようになります。

自然言語の曖昧性が引き起こす「ハルシネーション」の脅威

大規模言語モデル(LLM)は、指示の中に不明確な点がある場合でも、文脈から最もそれらしい答えを補完して出力しようとする性質を持ちます。これがプログラム生成においては「実装してほしいライブラリと異なる手法を採用する」「存在しない引数を呼び出す」「考慮すべき条件分岐を勝手に省略する」といったハルシネーションとして現れます。EARS記法を用いて「主語(システム)」「トリガー(いつ)」「事前条件(どんな状態で)」「動作(何をするか)」を明確にしておくことで、AIが勝手な解釈を行う余地を失わせ、堅牢なプログラムを出力させることができます。

実務で活用できるEARS記法の具体的な変換サンプル

例えば、従来の不鮮明な設計書に「ログインに失敗したら警告を出すこと」とだけ書かれていたとします。これをEARS記法に変換すると、「If 入力されたパスワードがデータベースの記録と一致しない場合, then the system shall エラーカウントを1増やし、画面上に『IDまたはパスワードが正しくありません』という警告ダイアログを表示しなければならない。」となります。このように具体化することで、AIはエラーの条件判定、数値のインクリメント、画面へのレスポンス生成という一連の処理ロジックを迷うことなくコード化できるようになります。

GitHub Copilotで設計書からコード生成を行う実践手順

ここからは、準備した設計書をもとにGitHub Copilotを使って実際にソースコードを出力させていくための具現的な操作フローと、実務で役立つノウハウについて順を追って解説します。

Copilot Chatを活用した基本的な操作手順

設計書からのコード生成を実行する際、最も中心的な役割を果たすのがCopilot Chat機能です。VS Codeのサイドバーや専用のチャット画面を開き、以下の手順で作業を進めていきます。

  1. エディタで対象の設計書ファイル(例: docs/spec.md)と、コードを出力したい新規ファイルを開く。
  2. Copilot Chatの入力欄に @workspace や #file:spec.md と入力して、設計書を明確なコンテキスト(参照情報)として指定する。
  3. 「#file:spec.md の仕様に基づいて、src/user.ts 内にユーザー登録処理の関数を実装してください」と指示を出す。
  4. Copilotが提示した修正案・コード差分(Diff)を確認し、内容に問題がなければ「Apply(適用)」ボタンを押してファイルへ反映させる。

いきなりプロジェクト全体の全コードを一括生成させようとするのではなく、モジュールや層(リポジトリ層、サービス層、APIコントローラーなど)ごとに切り分けて段階的に依頼を出すことが、途中でAIの出力が破綻しないための秘訣です。

VS Codeでの具体的な操作手順とコンテキスト指定のコツ

Copilot Chatを利用する際に最も重要となるのが、「AIにどのファイルを読ませているか」を意識することです。VS Code上で対話を行う際、チャット入力欄に `#` と入力すると、現在ワークスペース内にあるファイル群が候補として提示されます。生成したいコードの元となる設計書(`#file:design.md`)だけでなく、既存のデータ型が定義されているファイル(`#file:types.ts`)なども同時に指定することで、既存コードのインターフェースや変数名を正しく踏襲した完璧なコードが生成されます。

大規模な設計を一気にコード化させず段階的に生成する「分割ステップ法」

1つの設計書に複数のAPIや画面の仕様がまとめられている場合、チャットで「この設計書をすべてコード化して」と一度に依頼するのは避けましょう。入力・出力のトークン数制限によってコードが途中で途切れてしまったり、後半の処理で指定した条件が無視されたりするリスクが高まります。まずは「1. データベースのデータ構造(Entity/DTO)の作成」「2. リポジトリ層の処理実装」「3. ビジネスロジックを扱うサービス層の実装」「4. APIのコントローラー作成」といったように、レイヤーごとに区切って対話を重ねていくことが成功の近道です。

精度を高めるプロンプトの基本的な書き方

指示出しを行うプロンプトの質は、出力されるソースコードの完成度に直結します。「設計書通りに作って」といった大雑把な指示ではなく、AIが迷わない構成要素を揃えてプロンプト作成を行いましょう。

【効果的なプロンプトの構成要素】

1. 目的とタスク定義: 何の目的でどの機能を実装するのかを明記する。

2. 参照コンテキスト: どの設計書や型定義ファイルを参照すべきかを明示する。

3. 制約条件・技術スタック: 使用する言語バージョン、フレームワーク、 prohibited(禁止事項)を伝える。

4. 出力フォーマット: 省略なしの完全なコードと、動作確認用の受け入れ基準チェックリストを出力させる。

例えば「TypeScript 5.xのStrict Modeで記述し、any型の使用は禁止してください。ビジネスロジックはコントローラーではなくサービス層に記述すること」といった制約を明示することで、プロジェクトの規範に沿った高品質な成果物が得られます。

良いプロンプトと悪いプロンプトの対比例

具体的な違いを理解するために、実際のプロンプト例を比較してみましょう。悪いプロンプトの例としては「`docs/user.md` を読んでユーザー作成コードを作って」というような抽象的な文言が挙げられます。これでは、使用するライブラリや例外処理の方針がAI任せになってしまいます。一方で良いプロンプトの例としては、「`#file:docs/user.md` のセクション2に定義されているユーザー登録仕様を実装してください。言語はTypeScript(Node.js v20)、ORMにはPrismaを使用します。メールアドレスの重複時には409 Conflictエラーを送出する例外ハンドリングを含め、処理内にJSDoc形式のコメントを日本語で記述してください」といったように、前提条件や期待する挙動を具体的に指定します。

コンテキストウィンドウを意識した適切な情報量の渡し方

AIモデルには、一度に読み込めるテキスト量(コンテキストウィンドウ)に限度があります。無関係なソースコードや冗長なドキュメントを大量に読み込ませると、重要な設計内容が薄れてしまう「Needle In A Haystack(干し草の山の中の針)」現象が発生することがあります。そのため、プロンプトを作成する際は、そのタスクに関連する最小限かつ最も重要なファイルだけをコンテキストとしてピックアップし、過不足のない情報量で指示を出すことが精度向上につながります。

プロジェクト共通の指示ファイルを作成する方法

チーム開発や個人のプロジェクトで毎回長いプロンプトを入力するのは手間がかかりますよね。そうした場合は、リポジトリ内にプロジェクト固有のルールを定義した「指示ファイル」を配置しておく運用が非常に効果的です。

リポジトリのルート直下に .github/copilot-instructions.md というファイルを配置しておくと、Copilot Chatやインライン補完を実行する際に、AIがこの内容を自動的にプロジェクト共通のシステムプロンプトとして読み込んでくれます。開発に関する全体方針をここに集約させておくことで、表記ゆれや設計スタイルのブレを未然に防ぐことが可能です。

.github/copilot-instructions.md の設定手順とテンプレート

指示ファイルの導入手順は非常にシンプルです。プロジェクトのルートディレクトリに `.github` というフォルダを作成し、その中に `copilot-instructions.md` というテキストファイルを作成するだけです。ファイル内には以下のような項目をMarkdown形式で記述しておきます。

【指示ファイルの記述項目例】

  • コーディング規約: 変数名はcamelCase、クラス名はPascalCaseを徹底すること。
  • エラーハンドリング: try-catch文では独自定義の CustomError クラスを使用すること。
  • テスト方針: 新規関数を作成した場合は必ずJestによる単体テストコードを併記すること。
  • 言語指定: コード内のコメントおよび解説テキストはすべて日本語で出力すること。

チーム開発におけるコーディング規約の自動統一アプローチ

複数人で開発を行っている場合、開発者ごとのプロンプトの書き方の癖によって、生成されるコードのスタイルがバラバラになってしまうという問題がよく起こります。指示ファイルをGitリポジトリで共有・管理しておけば、チームメンバー全員がCopilotを利用する際に全く同じ規約や標準アーキテクチャに基づいたコードが自動生成されるようになります。これにより、コードレビューにかかる負担を大幅に軽減することが可能になります。

生成されたコードの品質を確認するポイント

GitHub Copilotが生成したコードは、あくまで「AIが提示してくれた精度の高いドラフト(下書き)」として扱い、必ず人間がチェックを行う姿勢が欠かせません。品質を担保するための3ステップ検証を実施しましょう。

まずは、設計書の受け入れ基準(EARS記法で書いた条件など)を満たすユニットテスト(単体テスト)コードを生成させ、ローカル環境でテストを実行します。次に、作成されたプログラムを設計書と突き合わせ、「未実装の条件や境界値のエラーハンドリング漏れがないか」をCopilot自身に逆検証させます。最後に、実際のコード差分を自分の目で読み込み、セキュリティ上の脆弱性やパフォーマンスの懸念がないかを確認してからGitにコミットするようにしましょう。

静的解析ツールやリンター(ESLintなど)との連携による自動検証

AIが生成したコードの品質を担保するためには、人間の目視確認だけに頼るのではなく、ビルドチェックや自動静的解析ツールを組み込むことが推奨されます。例えば、TypeScriptのコンパイルチェック(`tsc –noEmit`)や、ESLint、Prettierといったリンター・フォーマッターをCI/CDパイプラインやコミット前フック(huskyなど)に設定しておくことで、AIが生成した構文エラーや型定義の不整合、フォーマットの乱れを機械的に一瞬で検出・弾くことができます。

AIに自作コードをレビューさせる「セルフ逆検証」プロンプト

生成されたコードが設計書の要件を満たしているか不安な場合は、Copilot Chatに自分自身で書いた(あるいは生成させた)コードを評価させる「セルフ逆検証」の手法が極めて有効です。チャット上で「`#file:src/user.ts` のコードを `#file:docs/spec.md` の設計要件と照らし合わせ、未実装の機能や境界値テストで不合格になりそうな箇所を箇条書きでリストアップしてください」と指示を出します。これにより、人間が見落としていた潜在的なバグや仕様の不一致をAI自身に発見させることができます。

商用利用時のセキュリティと著作権の注意点

企業の業務や商用サービス開発で設計書をAIに入力する場合、情報漏洩や著作権に関するセキュリティリスクを正しく理解しておく必要があります。

個人向けのプラン(FreeやProなど)をデフォルト設定のまま使用している場合、送信したプロンプトやコードの一部が将来的なモデルの再学習データとして利用されてしまう可能性があります。機密性の高い業務設計書を扱う場合は、学習利用を行わないことが契約上保証されている法人向けプラン(Copilot Business や Copilot Enterprise)を利用するか、個人アカウントの設定画面からデータ学習のオプトアウト設定を必ず有効にしてください。

また、オープンソースコードとの一致による著作権侵害リスクについては、管理設定で「Suggestions matching public code(公開コードと一致する提案)」をブロック状態にしておくことで、事前にリスクを防止することができます。

企業向けプラン(Copilot Business / Enterprise)と個人プランのデータ取り扱いの違い

個人向けプランと法人向けプランの決定的な違いは、入力されたデータ(プロンプトや設計書の内容)の機密保持とモデルの再学習に関する規約にあります。Copilot BusinessやEnterpriseでは、送信された暗号化データはコード生成の処理が終わった時点で即座に破棄され、GitHubやOpenAIの学習モデルの改善目的で二次利用されることは一切ありません。企業の機密情報や独自のビジネスロジックを含む設計書を扱う場合は、会社として法人契約を結んだアカウントを使用することが企業コンプライアンス上の必須要件となります。

パブリックコードとの一致を防止するフィルタリング機能の設定

AIモデルはインターネット上の膨大なオープンソースコードを学習しているため、極めて稀にパブリックリポジトリに存在する特定のコードと完全に一致する表現を提案してしまう可能性がゼロではありません。これを防ぐために、GitHubのCopilot設定画面にある「Suggestions matching public code」の項目を「Block」に設定しておきましょう。このフィルターを有効にしておくことで、既存の公衆コードと約150文字以上のトークンシーケンスが一致した場合にCopilotが自動的に補完を中断し、知的所有権侵害の予防策として機能します。

GitHub Copilotで設計書からコード生成のまとめ

今回は、GitHub Copilotを活用して設計書からコード生成をスムーズに行うための基礎知識から具体的な活用方法、プロンプトの作成テクニックまで幅広く紹介しました。

設計書をMarkdownなどのAIが理解しやすいフォーマットで整え、EARS記法で曖昧さを無くすこと、そして指示ファイルや適切なプロンプトを活用することが成功の大きなキーポイントになります。まずは手元の小さな機能設計書から、Copilotとのスムーズなコード自動生成をぜひ体験してみてくださいね。

この記事を書いた人

エンジニア歴 12 年・Web マーケター歴 4 年・ブログライター歴9年。エンジニア兼マーケターの視点から AI ツール活用に取り組んでいます。
AI-Rise では、NotebookLM・Claude Code・Google AI Studio・Gamma などの主要 AI ツールについて、機能・料金・使い方・エラー解決といった実用情報を整理して発信。新しいツールが登場するたびに調べ、初心者がつまずきやすいポイントを噛み砕いて記事にすることを意識しています。

目次