GitHub CopilotとCopilot Chatの役割と捉え方

# はじめに

AI技術の進化により、プログラミング支援ツールが開発者の生産性向上に大きな効果を発揮するようになりました。その中でも特に強力なツールとして注目されているのがGitHub Copilotです。GitHub Copilotには主に次の2つの機能から成ります。

* GitHub Copilot Completion（通常は「GitHub Copilot」とだけ呼ばれます）
* GitHub Copilot Chat

この2つはどちらもコード作成をサポートしますが、その出力に対して利用者が期待できる内容は異なります。本記事では、これらのツールの特性と、どのように使うべきかを論じ、出力に対する適切な期待を形成するための理解を深めていきます。



# GitHub Copilot (Completion) とは？

GitHub Copilot（以降、「Copilot」と略記）は、主にコード補完や自動生成を目的としたツールです。Visual Studio Code（以降、「VSCode」と略記）や他のIDEに統合され、開発者が書いているコードの文脈を理解し、適切な補完を提供します。このプロセスは非常にスムーズで、多くの場合、開発者の意図を予測した提案を行うことができます。

## Copilotを「ドライバー」として捉える

Copilotの役割は、ペアプログラミングのメタファーで捉えると分かりやすいです[^1]。Copilotはペアプログラミングにおける「ドライバー」として機能します。ドライバーは実際に車（ここではコードベース）を操作し、目的地（コードの完成）に向かいますが、全体のコンテキストを常に完全に把握しているわけではありません。そのため、ナビゲーターの役割を担う開発者（利用者）が、進むべき道を指示し、誤った方向に進まないよう導く必要があります。

具体的には、Copilotは文法的には正しいが、意図とは異なるコードを提案することがあります。開発者はそれを受け入れるか、修正するかを判断しながら進めていくことになります。言い換えれば、Copilotが行動主体（ドライバー）であり、開発者がその行動を導くナビゲーターの役割を果たします[^2]。

[^1]: "The GitHub Copilot extension is an AI pair programmer tool that helps you write code faster and smarter." のように、GitHub Copilot公式の紹介でも「AI（による）ペアプログラミング」に例えられています。

[^2]: "Copilot is not designed to: Replace your expertise and skills. Remember that you are in charge" ※ここで「Copilot」は「Copilot Completion」と「Copilot Chat」の双方を含むことに注意。（引用元は別記）



# Copilot Chatとは？

一方で、Copilot Chatは、よりインタラクティブなコミュニケーションを可能にするツールです。開発者は質問を投げかけたり、コードに関するアドバイスを求めたりできます。このチャット形式のやりとりは、単なるコード補完に留まらず、設計段階でのアイデア整理や、インターネットのWeb検索で得られるような一般的な知識を踏まえたヒントの提供など、開発の意思決定をサポートする役割を果たします。

## Copilot Chatを「同僚」として捉える

Copilot Chatの役割は「同僚」として捉えるのが適切です。Chatは利用者と対話し、アドバイスを提供しますが、すべてを一方的に教える「先生」ではありません[^3]。

実際の開発現場では、同僚と協力して問題解決に取り組むことがよくあります。同僚は優れた知識を提供してくれることもありますが、すべての問いに完璧な答えを持っているわけではありません。Copilot Chatも同様に、ある程度の知識を持ち、適切な助言やコードスニペットを提供しますが、最終的な判断は利用者自身に委ねられます。

[^3]: "While Copilot code completions and Copilot Chat share some functionality, the two tools are best used in different circumstances. (中略) Copilot Chat is best suited for: Answering questions about code in natural language" ※つまり、Copilot (Completion)とCopilot Chatは似た特徴（[^2]を含む）を持ちながらも、異なる状況で最適に使えるツールです。Copilot Chatは「自然言語で答える」場面に適しています。（引用元は別記）

## 「先生」としての役割はまだ遠い

現時点では、Copilot Chatを「先生」として完全に信頼するのは難しいでしょう。「先生」は利用者よりも上位の知識やスキルを持ち、確実な指導を行う存在ですが、Copilot Chatはまだそのレベルに達していません。提供される情報は部分的に正確であったり、特定の状況では不完全なこともあります。そのため、提案を盲信せず、自分自身でその正確さを確認する姿勢が求められます[^4]。

[^4]: "Understand suggested code before you implement it. (中略) Review Copilot's suggestions carefully. Consider not just the functionality and security of the suggested code, but also the readability and maintainability of the code moving forward." ※つまり、「提案」の内容をよく理解し、利用者が最終的に判断を下すべきです。（引用元は別記）



# まとめ：CopilotとCopilot Chatの位置づけ

GitHub CopilotとCopilot Chatはいずれも開発者の生産性を向上させるための強力なツールですが、それぞれの役割や立ち位置には違いがあります。

- **GitHub Copilot (Completion)** は、コード生成を担当する「ドライバー」として機能し、利用者がそれを導く役割「ナビゲーター」を担います。
- **Copilot Chat** は、利用者に対して助言を提供する「同僚」として機能し、知識やスキルにおいては利用者と同程度、もしくは少し上の立場です。決して「先生」にはなりません。

いずれのツールも利用者に対して「支援」する立場であり、最終的な判断や責任は常に利用者にあることを忘れてはなりませんが、これらのツールを適切に使い分けることで、開発効率を大幅に高めることが可能でしょう。



# 付録

## Copilotの提案の背景に関する注意点

Copilotの提案は、「まだプロジェクトの背景を知らない新しいメンバー」からの助言のようなものです。**VSCodeで開いているファイルやプロンプトに渡された情報**のみを基に提案されるため、プロジェクト固有の暗黙の了解や前提は反映されません。こうした状況は、共有された知識や背景を持たないドライバーや同僚と協力している場面を想像すると理解しやすいでしょう。

## 注釈で引用した文章
引用先サイトの情報は更新されることが多いため、参考として引用時点(2024-09-21)の内容を以下に転記します。

### GitHub Copilot overview

From https://code.visualstudio.com/docs/copilot/overview
> GitHub Copilot in VS Code
> The GitHub Copilot extension is an AI pair programmer tool that helps you write code faster and smarter. You can use the Copilot extension in Visual Studio Code to generate code, learn from the code it generates, and even configure your editor.
>

### Best practices for using GitHub Copilot

From https://docs.github.com/en/copilot/using-github-copilot/best-practices-for-using-github-copilot
> Copilot is not designed to:
> 
> * Respond to prompts unrelated to coding and technology
> * Replace your expertise and skills. Remember that you are in charge, and Copilot is a powerful tool at your service.
> 

> # Choose the right Copilot tool for the job
> While Copilot code completions and Copilot Chat share some functionality, the two tools are best used in different circumstances.
> 
> ## Code completions work best for:
> 
> * Completing code snippets, variable names, and functions as you write them
> * Generating repetitive code
> * Generating code from inline comments in natural language
> * Generating tests for test-driven development
> 
> ## Alternatively, Copilot Chat is best suited for:
> 
> * Answering questions about code in natural language
> * Generating large sections of code, then iterating on that code to meet your needs
> * Accomplishing specific tasks with keywords and skills. Copilot Chat has built-in keywords and skills designed to provide important context for prompts and accomplish common tasks quickly. Different types of keywords and skills are available in different Copilot Chat platforms. See "Asking GitHub Copilot questions in your IDE."
> * Completing a task as a specific persona. For example, you can tell Copilot Chat that it is a Senior C++ Developer who cares greatly about code quality, readability, and efficiency, then ask it to review your code.
> 

> # Check Copilot's work
> While Copilot is very powerful, it is still a tool capable of making mistakes, and you should always validate the code it suggests. Use the following tips to ensure you are accepting accurate, secure suggestions:
> 
> * **Understand suggested code before you implement it.** To ensure you fully understand Copilot's suggestion, you can ask Copilot Chat to explain the code.
> * **Review Copilot's suggestions carefully.** Consider not just the functionality and security of the suggested code, but also the readability and maintainability of the code moving forward.
> * Use automated tests and tooling to check Copilot's work. With the help of tools like linting, code scanning, and IP scanning, you can automate an additional layer of security and accuracy checks.
> 

### Best practices for GitHub Copilot in VS Code

From https://code.visualstudio.com/docs/copilot/prompt-crafting
> # Provide context to Copilot
> Copilot works best when it has sufficient context to know what you're doing and what you want help with. Just as you would provide a colleague with the context when asking for help with a specific programming task, you can do the same with Copilot.
> 
> ## OPEN FILES
> For code completions, Copilot looks at the current and open files in your editor to analyze the context and create appropriate suggestions. Having related files open in VS Code while using Copilot helps set this context and lets the Copilot see a bigger picture of your project.
> 
> ## TOP LEVEL COMMENT
> Just as you would give a brief, high-level introduction to a coworker, a top level comment in the file you're working in can help Copilot understand the overall context of the pieces you are creating.
> 

### Understanding the Contextual Scope of GitHub Copilot - GitHub Community Discussion

From https://github.com/orgs/community/discussions/69280
> GitHub Copilot analyzes the context in the file you are editing, as well as related files, and offers suggestions from within your text editor.
>