WebSurfer's Home

Filter by APML

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 のドキュメント「Visual Studio の GitHub Copilot Completions とは」によると "コードを入力すると、AI はコンテキストを分析し、関連する提案をリアルタイムで提供します。 また、コードで実行する内容を説明するコメントを自然言語で記述することで、提案を受け取ることもできます" ということだそうです。以下に「コードを入力」と「コメントを自然言語」のそれぞれについて分けて書きます。


(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 のドキュメント「Visual Studio の GitHub Copilot Completions とは」によると「ドキュメント コメントの生成」他いろいろ機能があるようです。

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

Tags: , ,

DevelopmentTools

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

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

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


チャットウィンドウ

この記事の一番上の画像がチャットウィンドウです。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: (改善提案) が返ってきます。

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 で行った結果ですが、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; }

    }
}

Tags: , , ,

DevelopmentTools

About this blog

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

Calendar

<<  January 2026  >>
MoTuWeThFrSaSu
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

View posts in large calendar