WebSurfer's Home

Filter by APML

GitHub Copilot Agent Mode

by WebSurfer 1. February 2026 13:24

先の記事「Visual Studio 2026 AI 駆動開発 - チャット」では、Visual Studio 2026 + GitHub Copilot で Ask Mode を使ってチャットを行う例を書きました。この記事では Agent Mode を試してみた時の話を書きます。

Agent Mode に設定

自分の環境の Visual Studio 2026 + GitHub Copilot Free ではデフォルトで Ask Mode になっていましたが、上の画像のようにしてチャットウィンドウで Agent Mode に設定できます。

Microsoft のドキュメント「GitHub Copilot エージェント モードを始めよう」などの説明を読むと、Ask Mode と Agent Mode は役割もできることも全く別物だそうで、概略以下の違いがあるようです。

  • Ask Mode: 一問一答の形式で質問に答えるシンプルなモード。安全で軽量
  • Agent Mode: プロンプトの目標に達するまで実行と調整の手順を続けるモード。強力だが影響範囲が大きい

バイブコーディングには、Google Cloud の記事「What is vibe coding?」によると、主に "Pure" vibe coding と Responsible AI-assisted development という 2 つの方法があるとのことです。Visual Studio 2026 + GitHub Copilot は Responsible AI-assisted development ですが、Agent Mode を利用すると、少し "Pure" vibe coding に近づくという感じがします。

具体的にどういうことができるのか、自分の手を動かして使ってみれば理解が深まると思って、自分の環境の Visual Studio 2026 v18.2.1 + GitHubCopilot Free で Agent Mode を使ってみました。その内容を以下に書きます。

Visual Studio のテンプレートを使って ASP.NET Core MVC アプリのプロジェクトを作成し、それに SQL Server の既存のデータベースのテーブルの CRUD を行うための Model、View、Controller を Agent Mode を使って追加してみます。

今回は LocalDB のデータベース TestDatabase に、下の画像の Movie テーブルを作って、それをベースに使うことにしました。

Movie テーブル

Visual Studio 2026 でスキャフォールディング機能を使って(GitHub Copilot を使わないで)行う場合は、(1) Package Manager Console を開いて Scaffold-DbContext コマンドを使ってコンテキストクラスとエンティティクラス (Model に該当) を作成し、(2) それらのクラスをベースにスキャフォールディング機能を使って Controller と View を生成します。その具体例は、先の記事「スキャフォールディング機能 (CORE)」を見てください。

上の (1), (2) に述べた方法でアプリを作成すると、実行結果は以下の画像のようになります。

実行結果

GitHub Copilot の Agent Mode を使ってアプリを作成した場合はどのような結果になるか、上の (1), (2) に述べた方法で作成した場合とどのように異なるのかが興味のあるところです。

(1) プロジェクトの作成

Visual Stidio 2026 のテンプレートを使って .NET 10 の ASP.NET Core MVC のプロジェクトを新規作成します。設定は下の画像の通りです。

ASP.NET Core MVC プロジェクトを新規作成

(2) プロンプト作成

あまり詳しく書かないで簡単な内容にしてみました。以下のプロンプトを作って、それをチャットウィンドウから GitHub Copilot に送信してみます:

SQL Server の既存の Movie テーブルの CRUD を行うための Model, View, Contoller を追加してください

Movie テーブルのスキーマ情報は絶対必要なのですが、試しに最初のプロンプトにはわざと含めずに GitHub Copilot に指示を出しました。(後述しますが、それが失敗だったようです)

(3) GitHub Copilot の回答

上のプロンプトでは Movie テーブルのスキーマ情報がないので、エンティティクラス (Model に該当) が作成できません。なので、まず、GitHub Copilot は作業を始める前にそれを聞いてくるかと思ったのですが、即 CRUD に必要なすべてのコードを作成してきました。

既存の Movie テーブルのスキーマと、GitHub Copilot が想像して作ったエンティティクラスが異なると、修正が多岐にわたって大変な手間になるので、GitHub Copilot は事前にスキーマを聞いてから作業を始めるべきだと思うのですが。生成 AI はプロンプトに質問を返すようなことはせず、とにかく回答を返すことを優先するということなのでしょうか?

上のプロンプトを受けて GitHub Copilot が行ったことまとめると、NuGet パッケージ Microsoft.EntityFrameworkCore.SqlServer の追加、コンテキストクラス、エンティティクラス、View、Controller のコードの作成、コンテキストクラスの DI 設定、_Layout.cshtml にナビゲーションリンクの追加です。

今回は偶然(?)既存の Movie テーブルのスキーマと GitHub Copilot が作ったエンティティクラスと整合していたので、そのまま Model として使えました。(Microsoft のチュートリアル「データ モデル クラスの追加」のコードが GitHub にあって、GitHub Copilot はそこから情報を取ってきたように思われます)

コードの生成・修正に加えて、下の画像のように GitHub Copilot が行なった追加・修正の説明、ビルド結果、次にユーザー側が行うことをチャットウィンドウに表示してくれます。

チャットウィンドウの表示

チャットウィンドウに "ソリューションはビルドに成功しました" とありましたので、GitHub Copilot の追加・修正をすべて受け入れてビルドしてみました。確かにビルドには成功します。

(4) ユーザーが行う作業

ユーザー側が行うこととしてチャットウィンドウに以下の 2 件が挙げられていました:

  • appsettings.json に接続文字列を追加
  • 既存の SQL Server の Movie テーブルのスキーマが Movie.cs と整合することを確認(カラム名、型が合致するように必要なら Movie クラスを調整)

前者はその通り既存のデータベースへの接続文字列を設定しました。後者は偶然整合していたので調整不要でしたが、違っていたらどうするのでしょうか? 「必要なら Movie クラスを調整」とありますが、それだけではダメで、View と Controller のコードも変更する必要があります。ユーザーが Movie クラスを変更してから、GihHub Copilot に他のコードの修正を行うようプロンプトで指示するのだと思いますが。

(5) NuGet パッケージのアップデート

GitHub Copilot が追加した NuGet パッケージ Microsoft.EntityFrameworkCore.SqlServer のバージョンが 8.0 と古く、脆弱性があるとのことなので最新版 10.0.2 にアップデートしました。

(6) SqlException の解決

リビルドして実行してみると、MoviesController.cs の _context.Movies.ToListAsync() で SqlException: Invalid object name 'Movies' というエラーが出ます。チャットウィンドウで解決策を聞いてみました。

解決策

GitHub Copilot の回答は "SQL Server が指定されたデータベース内に Movies という名前のテーブルを見つけられないためです" が原因ということです。確かに既存のテーブルの名前は Movies ではなく Movie です。

Movie.cs の Movie クラスに属性 [Table("Movie")] を付与することで解決できるのですが、最初にスキーマ情報を与えていれば、GitHub Copilot がエンティティクラスを作成する際 [Table("Movie")] を付与するでしょうから、このようなトラブルは起こらなかったと思います。(ちなみに、Scaffold-DbContext コマンドを使ってエンティティクラス(Movie クラス)を作成した場合は、自動的に Movie クラスに属性 [Table("Movie")] が付与されます)

上記の修正後アプリを実行すると以下の画像のように、スキャフォールディング機能を使って Controller と View を生成した場合とほぼ同じ結果となります。CRUD 操作も問題なく可能でした。

実行結果

(7) Movie クラスの調整

最初の回答に "必要なら、次の作業を行います(指示ください)⇒ Movie クラスを実際のテーブルスキーマに合わせて調整" とあったので、GitHub Copilot にプロンプトでスキーマ情報を渡して、それをやってもらいました。GitHub Copilot の修正提案は以下の通りです。

Movie クラスの修正提案

内容 OK なのでキープしました。やはり最初から Movie テーブルのスキーマという絶対必要な情報は渡しておくべきでした。

GitHub Coplit が生成した Create, Edit のビューに、クライアント側で入力バリデーションを行うためのコードが無かったのですが、最初に Movie テーブルのスキーマ情報を渡していれば、そこも面倒を見てくれたのではなかろうかと思います。(未確認・未検証です)

(8) Html ヘルパーを使わない理由

最後にもう一つ、スキャフォールディング機能を使って生成した View には Html ヘルパーが使われてますが、GitHub Coplit が作成した View には Html ヘルパーは使われてない理由を聞いてみました。回答は以下の通りです。

  • Visual Studio のスキャフォールディングはモデルのメタデータ([Display]、型、データ注釈など)や表示テンプレート/ローカライズを尊重するため、Html.DisplayNameFor / Html.DisplayFor や EditorFor / ValidationMessageFor といった HTML ヘルパー(およびタグヘルパー)を使って自動生成します。これにより列見出しや表示形式、カスタムテンプレート、クライアント検証との連携が自動で行われます。
  • 私が作成した簡易コードでは、最小限の可読な表示を優先して直接プロパティを出力(例:@item.Title や @item.ReleaseDate.ToShortDateString())しました。これは動作が分かりやすく、依存するメタデータに依存しない一方で、スキャフォールディングが提供するメタデータ連携や自動フォーマット、ローカライズ、表示テンプレートの利点を利用していません。

これはちょっと問題かも。Movie クラスのプロパティに Display, Required, DisplayFormat 属性を追加して、それらが結果に反映されるよう GitHub Copilot に修正依頼を出せば面倒を見てくれるかもしれませんが (未検証・未確認)。

(9) 今回学んだこと

今回学んだことで一番重要なのは、生成 AI はプロンプトの情報が不備でも、とにかく回答を返すことを優先するようなので、Agent Mode でコードを生成させる場合は、必須情報は最初から与えておかないと、GitHub Copilot が勝手に想像して意図しない結果となる恐れがあるということだと思いました。

そのことを GitHub Copilot にチャットで質問してみました。下の画像がその時のプロンプトと回答です。その回答に書いてありますが "多くの生成系エージェントは「まず作業を進めて役に立つ出力を返す」ことを優先します。曖昧な点があっても、一般的な(最小限で動作する)仮定を置いてコードを生成することで、すぐに動かせる形を提供することが多いです"ということだそうです。

今回学んだこと

このあたりは使用する AI モデルによって異なるかもしれません。ちなみに、この記事で使った AI モデルは GitHub Copilot Free 版で現時点でデフォルトになっていた GTP-5 mini です。

Tags: ,

DevelopmentTools

GitHub Copilot の使用回数制限

by WebSurfer 23. January 2026 12:35

先の記事「Visual Studio 2026 AI 駆動開発」で書きましたように、Free (無償版) の GitHub Copilot を Visual Studio 2026 の Chat Window と IDE 全体で使えるようにしました。

GitHub Copilot には使用回数に制限がありますがそれについて調べたこと、および、それに関連するプレミアムリクエスト、プレミアムモデルについて調べたことを書きます。

注: この記事を書いた時点で GitHub のドキュメントなどを調べて得た情報です。プレミアムリクエストの導入が 2025 年 6 月とのことで、それ以前はどうなっていたかは不明です。また、生成 AI の世界は日進月歩で進化しているようですので、ここに書いたことも明日は違うかもしれません。ご注意ください。

まず、Free (無償版) の使用回数制限ですが、この記事を書いた時点では、チャットは 50 回/月、コード補完は 2,000 回/月に制限されています。

ちなみに、どのぐらい使用したかは、 Visual Studio 2026 では下の画像のようにの左上に表示されている GitHub Copilot のメニューを開いて、

Copilot Usage

赤枠で示した [Copilot Usage] をクリックすると、下の画像のように使用状況が表示されます (画像は Free 版の場合です)。

Copilot Usage

有償版でもプレミアムリクエストには制限があります。例えば Pro は 300 回/月、Pro+ は 1,500 回/月となっています。詳しくは GitHub のドキュメント「Plans for GitHub Copilot」の Comparing Copilot plans のセクションを見てください。

では、プレミアムリクエストとは何かですが、GitHub のドキュメント「GitHub Copilot プレミアム リクエスト」や「GitHub Copilot における要求」に詳しい説明があります。

いろいろなケースがあるようですが、自分に特に関係するのは上に挙げた前者のドキュメントの「Premium 要求とは」のセクションに書いてある "プレミアムモデルを使った Copilot チャットの使用" のようですので、それについて調べたことを書きます。

まず、どの AI モデルが GitHub Copilot のどのプランで利用できるかですが、それについては GitHub のドキュメント「Plans for GitHub Copilot」の Models のセクションを見てください。

Visual Studio 2026 では、下の画像のようにチャットウィンドウで赤丸印のアイコンをクリックすると、使用できる AI モデルが表示されます (画像は Free 版の場合です)。

使用できる AI モデル

そして、どの AI モデルがプレミアムモデルになるかですが、それについては GitHub のドキュメント「GitHub Copilot における要求」の Model multipliers のセクションを見てください。そのリストの中で Multiplier がゼロではない AI モデルが GitHub Copilot のチャットにおけるプレミアムモデルになります。(上の画像では Variable が Multiplier に該当します。Free 版なので全部 1 になっています)

有償版のチャットは無制限という記事を目にしますが、それは使用する AI モデルの Multiplier がゼロの場合 (AI モデルが Included Models の場合) に限ります。上に紹介した GitHub のドキュメントに "GPT-5 mini, GPT-4.1 and GPT-4o are the included models, and do not consume any premium requests if you are on a paid plan." と書いてある通りです。

一方、使用する AI モデルの Multiplier がゼロではない場合、1 回のチャットで Multiplier の数を掛けた回数のプレミアムリクエストが行われたことになります。GitHub のドキュメントに "Using Claude Opus 4.5 in Copilot Chat: With a 3× multiplier, one interaction counts as 3 premium requests." と書いてある通りです。

Copilot Free (無償版) の場合は、利用できるすべての AI モデルの Multiplier が 1 になっていますので、1 回のチャットで 1 回のプレミアムリクエストとなります。

数ある AI モデルの内どのモデルを使えばいいのかは、@IT の記事「GitHub CopilotのAIモデル、どれを選べばよいのか?」や GitHub の公式ドキュメント「AI model comparison」が参考になると思います。

上に挙げた記事には各 AI モデルのメリット・デメリットなどいろいろ書いてありますが、後者の記事を読んだ限りでは、Visual Studio 2026 + Copilot Free (無償版) でチャットを行う場合は現時点でのデフォルト GPT-5 mini でよさそうです。

特定の AI モデルを選択しないで、上の画像に選択肢がある Auto に設定する方法もあります。詳しくは Microsoft のドキュメント「Introducing Copilot auto model selection (preview)」を見てください。

有償版の場合は Auto に設定すると、10% の割引があるとか、プレミアムリクエストの上限を超えた場合は自動的に Multiplier がゼロの AI モデルを使うというメリットがあるようです。Free 版の場合はデフォルトの GPT-5 mini 固定で良いと思います。

Tags: , , ,

DevelopmentTools

Visual Studio 2026 AI 駆動開発 - コード補完

by WebSurfer 15. January 2026 17:54

Visual Studio 2026 の AI 駆動開発は、統合された GitHub Copilot にペアプログラマーとしての役割を担ってもらい、ユーザーは GitHub Copilot が提供する「チャット」と「コード補完」を利用して開発を加速するという形になるそうです。

「チャット」については、先の記事「Visual Studio 2026 AI 駆動開発 - チャット」に調べたことを書きました。

この記事では、その続きとして、「コード補完」について調べたことを書きます。対象となるサンプルは .NET Framework 4.8.1 の C# のコンソールアプリです。コードは先の記事の最後に載せましたので見てください。

「コード補完」は、Microsoft のドキュメント「GitHub Copilot の入力候補を始めてみましょう」によると "コードを入力すると、AI はコンテキストを分析し、関連する提案をリアルタイムで提供します。 また、コードで実行する内容を説明するコメントを自然言語で記述することで、提案を受け取ることもできます" ということだそうです。

そして、Microsoft のドキュメントによると、「コード補完」には「入力候補 (Completions)」と「次の編集候補 (Next edit suggestions)」という 2 種類の方法が提供されているそうです。こ��記事では、前者の「入力候補 (Completions)」における「コードを入力」と「コメントを自然言語で記述」のそれぞれについて書きます。(注:「次の編集候補」はデフォルトで無効になっています)


(1) コードを入力

まず、ユーザーがコードを入力している際に AI からリアルタイムで提案を受ける例を書きます。

先の記事「Visual Studio 2026 AI 駆動開発 - チャット」でチャットにより AI から Program.cs のコードの説明を受けた際、説明に加えて Potential issues and suggestions としていろいろ指摘を受けてます (詳しくは先の記事を見てください)。

それらの指摘の内、以下の指摘のみを受け入れ、ユーザーが自力でコードを書いて修正するとします。

CSV robustness:

  • Validate fields.Length >= 2 before indexing to avoid IndexOutOfRangeException.
  • Skip or detect a header row if present.

前者の、"Validate fields.Length >= 2 before indexing to avoid IndexOutOfRangeException." に対しては、以下のようにコードの適切な場所に if とタイプすると AI が自動的に修正案を提案してくれます。

if とタイプした結果

if の後のグレー表示の部分が AI の提案です。確認して OK なら Tab キーを押してコードを確定します。提案を拒否する場合は Esc キーを押します。

後者の "Skip or detect a header row if present." に対しては、以下のように tfp とタイプすると AI が自動的に修正案(グレーの文字の部分)を提案してくれます。

tfp とタイプした結果

提案を確認して OK なら Tab キーを押してコードを確定します。提案を拒否する場合は Esc キーを押します。


(2) コメントを自然言語で記述

次に、コメントを自然言語で記述することで AI からそのコメントに相当するコードの提案を受ける例を書きます。

上と同様に Potential issues and suggestions 中の 2 件の指摘を修正することとします。

まず、"Validate fields.Length >= 2 before indexing to avoid IndexOutOfRangeException." への対応ですが、コードを直接をタイプする代わりに、以下のように // をタイプすると AI からコメント文が提案がされます。グレーの文字の文が AI の提案です。

AI によるコメント文提案

しかし、上記の AI 提案は、ユーザーが欲しい修正コードの提案を受けるためのコメントにはなっていません。(AI はそこまで賢くユーザーの意図を汲んではくれないようです)

ここで必要な処理は「fields.Length が 2 以上であることを確認」して必要な処理を行うコードを追加することです。なので AI のコメント提案は受けないで(Esc キーを押して AI の提案を消して)ユーザーが自分でコメントを書きます。以下のように、コメントを書いてから改行するとコメントの下に AI からグレーの文字でコードが提案されます。

コメント文からコード生成

提案を確認して OK なら Tab キーを押してコードを確定します。提案を拒否する場合は Esc キーを押します。

次の "Skip or detect a header row if present." への対応ですが、こちらはユーザーが何をしたいのかを AI が予想できるようで、// をタイプするだけで適切なコメント文を AI が作ってくれます。

コメント文からコード生成

Tab キーを押してコメントを確定させた後、改行すると AI からコメント文に対応するコードがグレーの文字で提案されます。

コメント文からコード生成

提案を確認して OK なら Tab キーを押してコードを確定します。提案を拒否する場合は Esc キーを押します。

以上、チャットでの Potential issues and suggestions での指摘の一部を「コード補完」を利用してユーザーが自力でコードを書いて修正する例を書きました。

Potential issues and suggestions とは関係なくコメントからコードを AI に生成させることもできます。

例えば何らかのメソッドを追加したい場合、追加する場所に // Method とタイプします。すると以下のようにグレーの文字で AI がユーザーのやりたいことをコードの前後から想像して提案してきます。

// Method とタイプした結果

AI の提案したコメントで良ければ Tab キーを押してコメントを確定させた後、改行すると AI がそのコメントに相当するコードを提案してくれます。下の画像のグレーの文字の部分がそれです。

AI が提案したコード

AI の提案したコメントが期待するものと違う場合は、Esc キーを押して AI の提案を削除し、Method の後のコメント文をユーザーが作成します。例えば CSV ファイルから DataTable を取得したい場合は以下の緑文字のようにタイプします。グレーの文字は AI の提案です。

コメントの修正

上のコメントで良ければ Tab キーを押してコメントを確定した後、改行すると AI がコメントに相当するコードを提案してくれます。下の画像のグレーの文字のコードがそれです。

AI が提案したコード

AI が提案したコードで OK であれば Tab キーを押してコードを確定させます。

AI が提案したコードを確定


以上、自分が調べた「コード補完」の操作方法についた書きました。他にも、Microsoft のドキュメント「GitHub Copilot の入力候補を始めてみましょう」によると「ドキュメント コメントの生成」他いろいろ機能があるようです。

また、デフォルトでは有効になっていませんが、設定で Next Edit Suggestions (NES) 機能を有効にして使うことができるそうです。そのあたりは勉強不足で分かっていませんので、別途調べてみたいと思っています。

Tags: , ,

DevelopmentTools

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。ブログ2はそれ以外の日々の出来事などのトピックスになっています。

Calendar

<<  March 2026  >>
MoTuWeThFrSaSu
2324252627281
2345678
9101112131415
16171819202122
23242526272829
303112345

View posts in large calendar