AI を使用して Visual Studio で C++ コンソール アプリケーションを作成する

このチュートリアルでは、GitHub Copilot を使用して Visual Studio で C++ コンソール アプリケーションをすばやく作成する方法について説明します。 Conway の Game of Life のコンソール バージョン (従来の携帯電話オートマトン) を作成します。

コンウェイの人生のゲームは数学者ジョン・コンウェイによって考案されました。 これは、生きているか死んでいるかのどちらかのセルのグリッドで構成されています。 ゲームは単純なルールに基づいて自動的に進化し、複雑で進化するパターンを生成し、複雑な動作が基本的な数学的ルールからどのように出現するかを示します。

GitHub Copilot は AI を利用したコーディング アシスタントで、コードの記述を高速化し、エラーを減らし、新しいソリューションを探索するのに役立ちます。 C++ でのコーディング時に Copilot を使用する利点は次のとおりです。

  • 入力時に C++ 関数またはクラス全体を生成します。
  • プレーン言語のコメントまたはプロンプトに基づいて、コード補完を提案します。
  • 複雑なアルゴリズム、データ構造、標準ライブラリの使用に関するヘルプを表示します。
  • コンテキスト内の例を使用して、新しい API と最新の C++ パターンについて説明します。
  • コメントまたはコードに基づいてコンテキストに対応した提案を受け取ります。
  • コード内のエラーをデバッグします。
  • 既存のコードを簡略化してリファクタリングします。

[前提条件]

  • C++ ワークロードを使用した デスクトップ開発 がインストールされた Visual Studio 2022 以降。
  • GitHub Copilot。 詳細については、「 GitHub Copilot の概要」を参照してください。

C++ ワークロードがインストールされていることを確認するには:

  1. Visual Studio インストーラーを開きます。

  2. Visual Studioインストールの横にある Modify を選択します。

  3. C++ でのデスクトップ開発がチェックされていることを確認します。

    [ワークロード] タブが選択されているVisual Studio インストーラーのスクリーンショット。C++ が選択されたデスクトップ開発.

  4. インストールされていない場合は、選択して [変更] を選択 します

Copilot のインストールの詳細については、「 GitHub Copilot のインストールと状態の管理」を参照してください。

プロジェクトを作成する

Visual Studio では 、プロジェクト を使用してアプリのコードを整理し、 ソリューション を使用してプロジェクトを整理します。 プロジェクトには、アプリのビルドに使用されるオプション、構成、ルールが含まれています。 プロジェクトのファイルと外部ファイルの関係を管理します。 アプリを作成するには、まず、新しいプロジェクトとソリューションを作成します。

  1. Visual Studio を開き、新しいプロジェクトの作成 を選択します。

  2. コンソール アプリを検索し、C++ 用のコンソール アプリ テンプレートを選択します。

    [新しいプロジェクトの作成] ダイアログのスクリーンショット。

    [新しいプロジェクトの作成] ダイアログが表示され、コンソール アプリ テンプレートが選択されています。 テンプレートには、Windows ターミナルでコードを実行するというメッセージが表示されます。 既定でHello Worldを印刷します。 タグ C++、Windows、およびコンソールがあります。

  3. [次へ] を選択します。

  4. プロジェクト名を Life に設定し、プロジェクトの場所を選択します。

  5. を選択してを作成します。

  6. プロジェクトが開いたら、ソリューション エクスプローラーで Life.cpp ファイルを見つけます。

  7. Life.cpp開き、既定の "Hello, World!" コードを削除して、クリーン なスレートから始めます。

Copilot を使用してアプリを作成する

必要な機能を記述して、Copilot にメッセージを表示します。 このセクションでは、Conway の Game of Life の実装を生成するようにCopilotを促す方法について説明します。

  1. ツールバーの Copilot アイコンを選択して、Copilot チャット ウィンドウを開きます。

    [チャットを開く] が選択されているGitHub アイコンのスクリーンショット。

  2. チャット ウィンドウで、次のプロンプトを入力します。

    Create a C++ console application that implements Conway's Game of Life. The program should:
    - Use a 40x20 grid displayed with asterisks (*) for live cells and spaces for dead cells
    - Start with a random initial pattern
    - Display each generation for 500ms before showing the next
    - Allow the user to press any key to exit the program
    - Include proper headers and use standard C++ practices
    - Clear the console between generations to provide an animation effect
    
  3. Copilot は、Conway の Game of Life の C++ コードを生成します。 生成されたコードをコピーし、空の Life.cpp ファイルに貼り付けます。

  4. F6 キーを押すか、[Build>] を選択して、プロジェクトをビルドします。

  5. F5 キーまたは +F5 キーを押してプログラムを実行します。

Copilotによって生成される正確なコードは、実行とモデルによって若干異なる場合がありますが、コア機能は一貫している必要があります。 生成されたコードがすぐにコンパイルされない場合は、コンパイル エラーを修正するように Copilot に依頼できます。 Copilot では AI を利用しているため、想定外のことや間違いが起こる可能性があります。 詳細については、 Copilot に関する FAQ を参照してください。

一般的に生成されるコード構造の例

生成されたコードには、次の主要なコンポーネントが含まれている可能性があります。

  • コンソール操作、乱数生成、およびタイミング用のヘッダー
  • ゲーム グリッドを表す 2D 配列またはベクター
  • グリッドを初期化し、Conway のルールを適用し、現在の状態を表示する関数
  • キーが押されるまで続くメイン ループ

前のプロンプトを使用して Copilot によって生成されたコードの例を次に示します。

// Code generated by GitHub Copilot
#include <iostream>
#include <chrono>
#include <thread>
#include <conio.h> // for _kbhit and _getch

using namespace std;

int step = 0;
const int rows = 20;
const int cols = 40;

void printGrid(int grid[rows][cols])
{
   cout << "Step: " << step << endl;
   for (int i = 0; i < rows; ++i)
   {
         for (int j = 0; j < cols; ++j)
         {
            cout << (grid[i][j] ? '*' : ' ');
         }
         cout << endl;
   }
}

int countNeighbors(int grid[rows][cols], int x, int y)
{
   int count = 0;
   for (int i = -1; i <= 1; ++i)
   {
         for (int j = -1; j <= 1; ++j)
         {
            if (i == 0 && j == 0)
            {
               continue;
            }

            int ni = x + i;
            int nj = y + j;
            if (ni >= 0 && ni < rows && nj >= 0 && nj < cols)
            {
               count += grid[ni][nj];
            }
         }
   }
   return count;
}

void updateGrid(int grid[rows][cols])
{
   int newGrid[rows][cols] = { 0 };
   for (int i = 0; i < rows; ++i)
   {
         for (int j = 0; j < cols; ++j)
         {
            int neighbors = countNeighbors(grid, i, j);
            if (grid[i][j] == 1)
            {
               newGrid[i][j] = (neighbors < 2 || neighbors > 3) ? 0 : 1;
            }
            else
            {
               newGrid[i][j] = (neighbors == 3) ? 1 : 0;
            }
         }
   }
   // Copy newGrid back to grid
   for (int i = 0; i < rows; ++i)
   {
         for (int j = 0; j < cols; ++j)
         {
            grid[i][j] = newGrid[i][j];
         }
   }
}

int main()
{
   int grid[rows][cols] = { 0 };

   // Initial configuration (a simple glider)
   grid[1][2] = 1;
   grid[2][3] = 1;
   grid[3][1] = 1;
   grid[3][2] = 1;
   grid[3][3] = 1;

   while (true)
   {
         if (_kbhit()) // Check if a key has been pressed
         {
            _getch(); // Consume the key
            break;   // Exit the loop
         }
         printGrid(grid);
         updateGrid(grid);
         std::this_thread::sleep_for(std::chrono::milliseconds(100));
         cout << "\033[H\033[J"; // Clear the screen
         step++;
   }

   return 0;
}

アプリケーションを実行すると、時間の経過と共にパターンが進化する Conway のゲーム オブ ライフのアニメーション表示が表示されます。 プログラムを終了するには、キーを押します。

コマンド ウィンドウで実行されている Conway Life のスクリーンショット。セルの進化するグリッドが表示されています。

前のコード例では、警告が生成されます: Return value ignored: '_getch'。 Copilot に修正を依頼できます。 コード エディターを選択し、 Alt + / (Windows) キーを押して Copilot チャットを開き、次のように入力します。

問題の修正を Copilot に依頼できる Copilot のチャット ウィンドウのスクリーンショット。

Copilot は、戻り値を適切に処理するための修正プログラムを提案します。 変更を受け入れるには、[ タブ] を選択します。

Copilot によって提案された変更のスクリーンショット、Tab キーで承諾し、Alt+Del で破棄する方法の説明。

おめでとうございます! GitHub Copilot を使用して、C++ で完全に機能する Conway の Game of Life コンソール アプリケーションを作成できました。 以下の方法を学習しました。

  • C++ コードを生成するための効果的なプロンプトを作成する
  • Copilot のチャット インターフェイスを使用して、アプリケーション全体をゼロから作成する
  • AI アシスタンスを使用してコンパイルの警告を修正する

自分のプロンプトスキルを向上させる

Copilot のより良い結果を得るには、次のプロンプト リソースを参照してください。

トラブルシューティング

コンソール アプリ テンプレートがありません

[新しいプロジェクト] ダイアログには、C++Windowsおよびコンソール のタグを持つコンソール アプリ テンプレートが表示されます。 表示されない場合は、一覧から除外されるか、インストールされていない可能性があります。 まず、テンプレートの一覧の上部にあるフィルター メニューを確認します。 C++Windowsおよびコンソールに設定します。 C++ コンソール アプリ テンプレートが表示されます。それ以外の場合、 C++ ワークロードを使用したデスクトップ開発 はインストールされません。

C++ を使用してデスクトップ開発をインストールするには、[新しいプロジェクトの作成] ダイアログからインストーラーを直接実行できます。 テンプレートの一覧の下にある [新しいプロジェクトの作成] ダイアログの下部にある [その他のツールと機能のインストール] リンクを選択します。 [ユーザー アカウント制御] ダイアログでアクセス許可が要求された場合は、[はい] を選択します。 インストーラーで、 C++ によるデスクトップ開発 ワークロードがチェックされていることを確認します。 次に、[ 変更 ] を選択して Visual Studio のインストールを更新します。

Copilot が応答しない

  • アクティブな GitHub Copilot サブスクリプションがあることを確認します。
  • Visual StudioでサインアウトしてGitHub アカウントに戻ってみてください。

生成されたコードがコンパイルされない

  • Copilot チャットにエラー メッセージを貼り付けることで、特定のコンパイル エラーを修正するように Copilot に依頼します。
  • アプリで実行する内容についてより具体的なプロンプトを絞り込んでみます。

こちらも参照ください