WebSurfer's Home

Filter by APML

Visual Studio 2026 AI 駆動開発 - チャット

by WebSurfer 13. January 2026 18:48

先の記事「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 からそれらの問題の指摘を受けることもできます。

まずこの記事では「チャット」について書きます。「コード補完」も書くと長くなりすぎるので別の記事に書くことにしました。

「チャット」には「チャットウィンドウ」を使う方法と「インラインチャット」という方法がありますので、以下にそれぞれについて分けて書きます。


(1) チャットウィンドウ

この記事の一番上の画像がチャットウィンドウです。Ask mode と Agent mode のいずれかを選べますが、デフォルトが Ask mode なので、この記事では Ask Mode で試した結果を書きます。Agent Mode については別の記事「GitHub Copilot Agent Mode」に書きましたので、そちらを見てください。

チャットウィンドウ上で、GitHub Copilot に、この記事の下の方に載せた Program.cs のコードの説明をさせます。

チャットウィンドウに表示されているメニューの [Explain how the code in #class works] をクリックし、ドロップダウンから Program.cs を選んだ後、赤丸印の Send ボタンをクリックします。

プロンプト

上のプロンプトが GitHub Copilot に送信されます。

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

GitHub Copilot からの応答

自分が書いたコードではなく、どこからか入手したサンプルコードを使う場合など、何をしてるのか不明なコードの場合は、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 で行った結果です。Microsoft のドキュメント「GitHub Copilot エージェント モードを始めよう」などの説明を読むと、Ask Mode と Agent Mode は役割もできることも全く別物だそうで、概略以下の違いがあるようです。

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

Agent Mode を使った場合の話は別の記事「GitHub Copilot Agent Mode」に書きました。


(2) インラインチャット

例えば下に載せたサンプルコードの中の 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; }

    }
}

Tags: , , ,

DevelopmentTools

Visual Studio 2026 AI 駆動開発

by WebSurfer 9. January 2026 14:28

先の記事「Visual Studio 2026 をインストールしました」で Visual Studio 2026 の特徴の一つに「AI 駆動開発の進化」があると書きました。そのあたりについて少し勉強しましたので以下に調べたことを書いておきます。

Visual Studio 2026 と GitHub Copilot

「AI 駆動開発の進化」というのは何かですが、簡単に書くと、バイブコーディング (Vibe Coding) のサポートを強化したということのようです。

自分は、バイブコーディングというのは生成 AI に 100% 依存してコードを書いてもらうということだと思っていましたが、ググって調べてみると必ずしもそうではなく、AI を利用したツールの助けを借りて、自らの責任で行う開発・成果物の作成を加速するという方法が実務では一般的なようです。(将来 AI が飛躍的に進化したら形態が変わるかもしれませんが少なくとも今のところは)

そのあたりは Google Cloud の記事「What is vibe coding?」(日本語版もあります) に分かりやすい説明がありました。

その記事に書いてある "Pure" vibe coding が生成 AI に 100% 依存してコードを書いてもらうこと、Responsible AI-assisted development が AI を利用したツールの助けを借りて開発を加速するということのようです。記事の Responsible AI-assisted development の説明を抜粋すると以下の通りです。

"Responsible AI-assisted development: This is the practical and professional application of the concept. In this model, AI tools act as a powerful collaborator or "pair programmer." The user guides the AI but then reviews, tests, and understands the code it generates, taking full ownership of the final product."

注: Responsible なのはユーザーです (AI ではありません)。また、本文中の ownership という言葉は「主体的な責任・当事者意識」を意味します (所有権ではありません)。なので、"taking full ownership of the final product" は「最終成果物に対して、ユーザーが当事者意識を持った主体的な責任を持つ」という意味になります。

では、Visual Studio 2026 での「AI 駆動開発」というのは何かですが、上の Google Cloud の記事で言う Responsible AI-assisted development という方法で、AI ツールに GitHub Copilot を利用し、それに「ペア プログラマー」としての役割を担ってもらうという形になります。

具体的には GitHub Copilot の記事に書いてあるように "エディターを最強のアクセラレーターに変換: エディター内の GitHub Copilot が、コンセプトの説明、コードの保管、編集の提案、エージェント モードでのファイルの検証といったあらゆる作業を実行します。" ということだそうです。

Visual Studio で GitHub Copilot を使う際の説明が Visual Studio の Copilot Free に書かれています。

それに書かれているように、Visual Studio で GitHub Copilot を使えるようにするには、自分の GitHub アカウントが Visual Studio に追加されている必要があります。詳しくは Microsoft のドキュメント GitHub アカウントを Visual Studio キーチェーンに追加するを見てください。

GitHub アカウントの Visual Studio への追加で、Free (無償版) の GitHub Copilot を Visual Studio の Chat Window と IDE 全体で使えるようになります。上の画像の右側のウィンドウが Chat Window です。

なお、Visual Studio 2026 にはインストールした時点で GitHub Copilot は統合されているようで、拡張機能の追加などは必要ありませんでした。

少し使って見ましたが、使い方によっては生産性はかなり向上するように思えました。そのあたりは別の記事に書くことにします。

Tags: , ,

DevelopmentTools

AJAX Control Toolkit 20.1.0 デモ

by WebSurfer 28. December 2025 14:28

Ajax Control Toolkit の最新版かつ最終版 v20.1.0 のデモを自分の開発環境で動くようにする手順を備忘録として書いておきます。基本的には先の記事「Ajax Control Toolkit 17.1.1 デモ」の v17.1.1 の場合とほぼ同じですが、入手する .zip ファイルとか、NuGet パッケージのバージョンとか、Visual Studio 2026 を使ったところなどが異なります。

Ajax Control Toolkit 20.1.0 デモ

まず、GitHub のページ DevExpress/AjaxControlToolkit の下の方の Assets 欄の[Source code (zip)]をクリックして AjaxControlToolkit-20.1.0.zip をダウンロードします。

ダウンロードしたファイル AjaxControlToolkit-20.1.0.zip の中に AjaxControlToolkit.SampleSite というフォルダがあるので、それを丸ごと解凍して適当な場所にコピーします。

AjaxControlToolkit.SampleSite フォルダ

そのホルダには Web サイトプロジェクト形式の ASP.NET Web Forms アプリが含まれています。ただし、そのフォルダ内の bin フォルダには AjaxControlToolkit.dll など必要な .dll が含まれていないので、そのままでは動きません。NuGet から必要なパッケージをインストールする必要があります。

NuGet から必要なパッケージをインストールするには、Visual Studio 2026 を使っていれば Tools > NuGet Package Manager > NuGet Package Manager for Solution... から管理画面を開いて行うと思いますが、そのためにはソリューションとしてアプリを開いていないとダメなようです。しかし、ダウンロードした AjaxControlToolkit.SampleSite フォルダには .sln ファイルは含まれていません。

.sln ファイルを作成するには、一旦、Visual Studio 2026 の File > Open > Web Site... で AjaxControlToolkit.SampleSite フォルダを開いた後、Visual Studio 2026 を閉じると下のダイアログが表れるので、[Save] ボタンをクリックしてやります。そうすれば指定した場所に .sln ファイルを生成してくれます。(ほかにもっと簡単な方法があるかもしれませんが)

.sln ファイルを生成

その後、Visual Studio 2026 を起動し、File > Open > Project/Solution... で上の操作で生成された .sln ファイルを選んでプロジェクトを開いてやれば、 Tools > NuGet Package Manager > NuGet Package Manager for Solution... で管理画面を開くことができます。

NuGet パッケージ管理画面

自分が NuGet からインストールしたパッケージおよびそのバージョンは以下の通りです。バージョンはこの記事を書いた時点での最新版です。

  1. AjaxControlToolkit v20.1.0
  2. Antlr v3.5.0.2
  3. HtmlAgilityPack v1.12.4
  4. Microsoft.AspNet.Web.Optimization v1.1.3
  5. Microsoft.Web.Infrastructure v2.0.0
  6. Newtonsoft.Json v13.0.4
  7. WebGrease v1.6.0
  8. AjaxControlToolkit.HtmlEditor.Sanitizer v20.1.0
  9. Microsoft.AspNet.Web.Optimization.WebForms v1.1.3
  10. AjaxControlToolkit.StaticResources v20.1.0

上のリストの 1 番目の AjaxControlToolkit をインストールすると 2 ~ 7 番目の NuGet パッケージも同時にインストールされるはずです。ただし、バージョンが古いものがあったので最新版にアップデートしました。加えて 8 ~ 10 番の 3 つの NuGet パッケージも管理画面でインストールします。

上に書いた NuGet でのパッケージのインストールが完了するとアプリケーションの bin フォルダは以下のようになるはずです。

bin フォルダ

自分が上の操作を行った時、何が問題だったのか不明ですが、System.Web.Optimization.dll がインストールされず (.refresh のまま)、実行すると「型または名前空間名 'Optimization' は名前空間 'System.Web' に存在しません。アセンブリ参照が不足しています。」というエラーになりました。

その問題は、関係する以下の NuGet パッケージをアンインストールしてから再インストールすることで解決できました。

  • Microsoft.AspNet.Web.Optimization
  • Microsoft.AspNet.Web.Optimization.WebForms
  • AjaxControlToolkit.StaticResources

最後に web.config を以下のように修正します。

  1. <trust level="Medium" /> を削除
  2. siteMap / providers 要素に <remove name="MySqlSiteMapProvider" /> を追加

以上でデモは動くはずです。

(メモ: C:\WebSites2026\AjaxControlToolkit.SampleSite フォルダにある Web サイトプロジェクト。Visual Studio でそのフォルダ下の AjaxControlToolkit.SampleSite.sln を選んで開けばサンプルが動く)

Tags: ,

AJAX

About this blog

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

Calendar

<<  July 2026  >>
MoTuWeThFrSaSu
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

View posts in large calendar