先の記事「Visual Studio 2026 AI 駆動開発」に書きましたように、自分の環境の Visual Studio 2026 で GitHub Copilot Free (無償版) を利用できるように設定しました。それをどのように使うかということを少しだけですが調べたので、以下に調べたことを書きます。

Visual Studio 2026 の AI 駆動開発を簡単に書くと、ユーザーが主体となって開発を行うのは従来通りだが、統合された GitHub Copilot にペアプログラマーとしての役割を担ってもらい、力を合わせて開発を加速するということになります。
GitHub Copilot に丸投げして全部任せるという訳ではありません。Microsoft のドキュメント「Visual Studio の Copilot Free」の「01 ベスト プラクティス」の動画でも以下のように言ってます。
-
DON'T LET THE COPILOT FLY THE PLANE
-
DON'T LET COPILOT WRITE ALL YOUR CODE
-
CHECK THE CODE COPILOT PRODUCES
上記を基本として、どのようにしたら効果的に GitHub Copilot に支援させられるかということをユーザーが考えながら、「指示」⇒「応答」⇒「検証」⇒「改良」のループを回して開発を行い、成果物を完成させるということになるようです。
GitHub Copilot による支援には「チャット」と「コード補完」があります。それらについて自分が使ってみた例を以下に書きます。ドキュメントを読んで詳しく使い方を調べたわけではありませんので、最適な使い方ではないかもしれませんが、詳しい使い方は知らなくてもこの程度のことは容易にできるということで。
ベースとしたのは .NET Framework 4.8.1 の C# のコンソールアプリで、この記事の最後に載せたコードがアプリのプロジェクトの Program.cs です。このままで期待通り動きますが、少々問題を含んでいます。スペルミスとかもあります。後述しますが、GitHub Copilot からそれらの問題の指摘を受けることもできます。
まずこの記事では「チャット」について書きます。「コード補完」も書くと長くなりすぎるので別の記事に書くことにしました。
「チャット」には「チャットウィンドウ」を使う方法と「インラインチャット」という方法がありますので、以下にそれぞれについて分けて書きます。
チャットウィンドウ
この記事の一番上の画像がチャットウィンドウです。Ask mode と Agent mode のいずれかを選べますが、デフォルトが Ask mode なのでとりあえずそのままにしておきます (おすすめは Agent mode のようですが)。
チャットウィンドウ上で、GitHub Copilot に、この記事の下の方に載せた Program.cs のコードの説明をさせます。
チャットウィンドウに表示されているメニューの [Explain how the code in #class works] をクリックし、ドロップダウンから Program.cs を選んだ後、赤丸印の Send ボタンをクリックします。 (上の画像のメニューは VS2026 v18.1 のものです。v18.2 で変更されています)
以下のプロンプトが GitHub Copilot に送信されます。

GitHub Copilot からプロンプトに対する応答として Summary, Step‑by‑step walkthrough, Potential issues and suggestions, Compatibility, If you want, I can: (改善提案) が返ってきます。

自分が書いたコードではなく、どこからか入手したサンプルコードを使う場合など、何をしてるのか不明なコードの場合は、Step‑by‑step walkthrough の説明が役に立つと思います。Step‑by‑step walkthrough の説明は不要な場合でも Potential issues and suggestions の指摘は有用だと思います。
上にも書きましたがこの記事のサンプルの Program.cs のコードは少々問題を含んでいます。スペルミスもあります。それらに対して Potential issues and suggestions で以下の指摘を受けてます。
-
Typos: variable and file names have typos (Counrty.csv, counrtyList, filteredContryList). Rename to Country.csv, countryList, filteredCountryList for clarity.
-
Path handling: use Path.Combine(csvDir, csvFileName) instead of string concatenation and check File.Exists.
-
CSV robustness:
-
Validate fields.Length >= 2 before indexing to avoid IndexOutOfRangeException.
-
Skip or detect a header row if present.
-
String comparison: StartsWith(filter) is culture‑sensitive and case‑sensitive by default. For a case‑insensitive match use c.Name.StartsWith(filter, StringComparison.OrdinalIgnoreCase).
-
Memory/performance: currently the whole file is loaded into memory as List<Country>. For very large CSVs consider streaming and processing with LINQ on the fly (avoid .ToArray() if not needed).
-
Types: if Id is numeric, parse it to an int or a typed property instead of storing as string.
-
Encoding: explicit Encoding.UTF8 is good but ensure the file actually uses UTF‑8.
-
Exception handling: consider try/catch around file IO to give user-friendly errors.
If you want, I can: では以下を GitHub Copilot でやりましょうか? という提案を受けています。それを GitHub Copilot にやらせるなら、それを指示するプロンプトを書いて Send するということになります。
-
produce a small improved version demonstrating the suggested fixes (path handling, field validation, case‑insensitive filter), or
-
show how to skip a header row and handle malformed lines. Which would you prefer?
応答の下の方に以下の画像の赤枠に示したプロンプトのサンプルが表示されていますので、それを利用することもできます。

上の画像の赤枠部分をクリックすると、下の画像の通りそれがそのままプロンプトとして書き込まれます。その後 Send ボタン(赤丸印)をクリックすれば GitHub Copilot から応答が返ってきます。

応答は以下のように修正後のコードとその説明が、チャットウィンドウにある既存の応答(この例では Program.cs のコードの説明)の下に追加された形で表示されます。エディタ上のコードには自動的には反映されませんので、別途手動で修正することになります。

GitHub Copilot の修正案をエディタ上のコードに反映するには、上の画像の修正案のコードが表示されているウィンドウの左上にある [Apply] ボタンをクリックします。そうすると下の画像のようにエディタ上のコードに修正案を適用するための行の追加・削除が表示されます。

上の画像に「Tab to accept (1/4) Alt+Del to discrad F8 go to next」と表示されているように、修正案を受け入れる場合は Tab キーを、拒否する場合は Alt+Del キーを押します。(1/4) と表示されているのは、この例では 4 つのブロックに分けて修正案が表示されており、このブロックが 1 つ目という意味です。
以上は Ask mode で行った結果ですが、Agent mode では応答の表示やエディタ上のコードへの反映のされ方が異なります。それは別途書きます。
インラインチャット
例えば下に載せたサンプルコードの中の Linq to Objects のコードを最適化するとします。マウスを使って該当部分を選択し、右クリックで出てくるメニューで [Chat] を選択します。

(上の画像の [Chat] の下に [Copilot Actions] という項目があってその中に [Optimize Selection] というメニューがありますが、それは Chat ではなさそうです。結果も異なります。違いは未調査で分かりません)
表示されるウィンドウに / を入力するとドロップダウンにメニューが表示されるので optimize を選択します。それにより以下の通りプロンプトが生成されるので、Send ボタンをクリックして GitHub Copilot に送信します。(Send ボタンは画像では隠れて見えませんが右の方にあります)

GitHub Copilot からの応答は以下の通り修正後のコードとその説明になります。エディタ上のコードには反映されませんので、必要に応じて手動で修正することになるようです (自分が知らないだけで自動的に反映する方法があるかもしれません)。

上の画像の [View in chat window] をクリックすると、結果はすべてチャットウィンドウに移動されて表示されます。なので、エディタ上のコードに GitHub Copilot 修正提案を反映する場合は、そうしてからの方が良さそうです。
以上「チャット」について書きました。GitHub Copilot には「コード補完」という機能もありますがそれも書くと長くなりすぎるので別の記事に書きます。
Program.cs のコード
using Microsoft.VisualBasic.FileIO;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
var csvDir = @"C:\Users\...省略...\ConsoleApp1\";
var csvFileName = "Counrty.csv";
var counrtyList = new List<Country>();
using (var tfp = new TextFieldParser(csvDir + csvFileName,
Encoding.UTF8))
{
tfp.TextFieldType = FieldType.Delimited;
tfp.Delimiters = new string[] { "," };
tfp.HasFieldsEnclosedInQuotes = true;
tfp.TrimWhiteSpace = true;
while (!tfp.EndOfData)
{
string[] fields = tfp.ReadFields();
var country = new Country()
{
Id = fields[0],
Name = fields[1]
};
counrtyList.Add(country);
}
}
var filter = "Ca";
var count = 20;
var filteredContryList = counrtyList
.Where(c => c.Name.StartsWith(filter))
.Select(c => c.Name)
.Take(count)
.ToArray();
foreach (var country in filteredContryList)
{
Console.WriteLine(country);
}
}
}
public class Country
{
public string Id { get; set; }
public string Name { get; set; }
}
}