VS Codeのエージェントモードを拡張するには、を試してください!

Microsoft C++ 用に VS Code を構成する

このチュートリアルでは、Windows で Microsoft Visual C++ コンパイラとデバッガーを使用するように Visual Studio Code を構成します。

VS Code を構成した後、VS Code で簡単な Hello World プログラムをコンパイルしてデバッグします。このチュートリアルでは、Microsoft C++ ツールセットや C++ 言語の詳細については説明しません。これらの主題については、Web 上に多くの優れたリソースがあります。

問題がある場合は、VS Code ドキュメント リポジトリでこのチュートリアルの issue をお気軽に提出してください。

前提条件

このチュートリアルを正常に完了するには、次のことを行う必要があります

  1. Visual Studio Code をインストールします。

  2. VS Code 用の C/C++ 拡張機能をインストールします。C/C++ 拡張機能は、拡張機能ビュー (⇧⌘X (Windows、Linux の場合 Ctrl+Shift+X)) で 'c++' を検索してインストールできます。

    C/C++ extension

  3. Microsoft Visual C++ (MSVC) コンパイラ ツールセットをインストールします。

    最近のバージョンの Visual Studio をお持ちの場合は、Windows の [スタート] メニューから Visual Studio インストーラーを開き、C++ ワークロードがチェックされていることを確認します。インストールされていない場合は、ボックスをチェックし、インストーラーの [変更] ボタンを選択します。

    完全な Visual Studio IDE をインストールしなくても、C++ によるデスクトップ開発ワークロードをインストールすることもできます。Visual Studio のダウンロードページで、[すべてのダウンロード] セクションの下にある [Tools for Visual Studio] が表示されるまで下にスクロールし、[Build Tools for Visual Studio 2022] のダウンロードを選択します。

    Build Tools for Visual Studio download

    これにより Visual Studio インストーラーが起動し、利用可能な Visual Studio Build Tools ワークロードを示すダイアログが表示されます。[C++ によるデスクトップ開発] ワークロードをチェックして、[インストール] を選択します。

    Cpp build tools workload

: 有効な Visual Studio ライセンス (Community、Pro、または Enterprise のいずれか) をお持ちであれば、Visual Studio Build Tools の C++ ツールセットを Visual Studio Code と 함께 사용하여 모든 C++ コードを開発、ビルド、テストできます。

Microsoft Visual C++ のインストールを確認する

コマンド ラインまたは VS Code から MSVC を使用するには、Developer Command Prompt for Visual Studio から実行する必要があります。PowerShell、Bash、または Windows コマンド プロンプトなどの通常のシェルには、必要なパス環境変数が設定されていません。

VS 用の開発者コマンド プロンプトを開くには、Windows の [スタート] メニューで「developer」と入力し始めると、候補のリストに表示されます。正確な名前は、インストールした Visual Studio または Visual Studio Build Tools のバージョンによって異なります。項目を選択してプロンプトを開きます。

Developer Command Prompt

「cl」と入力すると C++ コンパイラ cl.exe が正しくインストールされていることをテストできます。バージョンと基本的な使用法の説明を含む著作権メッセージが表示されるはずです。

Checking cl.exe installation

Developer Command Prompt が開始ディレクトリとして BuildTools の場所を使用している場合 (そこにプロジェクトを配置したくないでしょう)、新しいプロジェクトの作成を開始する前にユーザーフォルダー (C:\users\{your username}\) に移動します。

: 何らかの理由で Developer Command Prompt から VS Code を実行できない場合は、Developer Command Prompt の外部で VS Code を実行するで、VS Code で C++ プロジェクトをビルドするための回避策を見つけることができます。

Hello World を作成する

Developer Command Prompt から、すべての VS Code プロジェクトを保存できる "projects" という名前の空のフォルダーを作成し、次に "helloworld" という名前のサブフォルダーを作成してそこに移動し、そのフォルダー (.) で VS Code (code) を開きます。これには、次のコマンドを入力します。

mkdir projects
cd projects
mkdir helloworld
cd helloworld
code .

"code ." コマンドは、現在の作業フォルダーで VS Code を開きます。これが "ワークスペース" になります。チュートリアルを進めていくと、ワークスペース内の .vscode フォルダーに 3 つのファイルが作成されるのがわかります。

  • tasks.json (ビルド手順)
  • launch.json (デバッガー設定)
  • c_cpp_properties.json (コンパイラのパスと IntelliSense の設定)

ソース コード ファイルを追加する

ファイル エクスプローラーのタイトル バーで、新しいファイル ボタンを選択し、ファイル名をhelloworld.cppにします。

New File title bar button

Hello World のソースコードを追加する

このソースコードを貼り付けます。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};

    for (const string& word : msg)
    {
        cout << word << " ";
    }
    cout << endl;
}

次に ⌘S (Windows、Linux の場合 Ctrl+S) を押してファイルを保存します。追加したファイルが VS Code のサイド バーの ファイル エクスプローラー ビュー (⇧⌘E (Windows、Linux の場合 Ctrl+Shift+E)) に表示されることに注意してください。

File Explorer

メインのファイルメニューで自動保存をチェックして、ファイルの変更を自動的に保存する自動保存を有効にすることもできます。

左端のアクティビティ バーでは、検索ソース管理実行などのさまざまなビューを開くことができます。このチュートリアルの後半で実行ビューについて見ていきます。他のビューの詳細については、VS Code のユーザーインターフェイスのドキュメントで確認できます。

: C++ ファイルを保存または開くと、新機能や修正をテストできる Insiders バージョンの利用可能性に関する C/C++ 拡張機能からの通知が表示される場合があります。X (通知をクリア) を選択して、この通知を無視できます。

IntelliSense を探索する

新しい helloworld.cpp ファイルで、vector または string にカーソルを合わせると、型情報が表示されます。msg 変数の宣言の後、メンバー関数を呼び出すときのように msg. と入力し始めます。すぐに、すべてのメンバー関数を示す補完リストと、msg オブジェクトの型情報を示すウィンドウが表示されるはずです。

Statement completion IntelliSense

Tab キーを押して選択したメンバーを挿入できます。その後、開き括弧を追加すると、関数が必要とする引数に関する情報が表示されます。

helloworld.cpp を実行する

C++ 拡張機能は、マシンにインストールされている C++ コンパイラを使用してプログラムをビルドすることに注意してください。VS Code でhelloworld.cppを実行およびデバッグする前に、C++ コンパイラがインストールされていることを確認してください。

  1. helloworld.cpp をアクティブ ファイルとして開きます。

  2. エディターの右上隅にある再生ボタンを押します。

    Screenshot of helloworld.cpp and play button

  3. システムで検出されたコンパイラのリストから C/C++: cl.exe build and debug active file を選択します。

    C++ debug configuration dropdown

helloworld.cpp を初めて実行するときにのみコンパイラを選択するように求められます。このコンパイラは、tasks.json ファイルで「デフォルト」コンパイラとして設定されます。

  1. ビルドが成功すると、プログラムの出力は統合ターミナルに表示されます。

    screenshot of program output

cl.exe を使用してビルドおよびデバッグしようとするとエラーが発生する場合は、Developer Command Prompt for Visual Studio から VS Code を開始し、code . ショートカットを使用していることを確認してください。

Error notification when trying to use MSVC without running VS Code from the Developer Command Prompt for VS

プログラムを初めて実行すると、C++ 拡張機能はtasks.jsonを作成します。これはプロジェクトの.vscodeフォルダーにあります。tasks.jsonにはビルド構成が格納されます。

新しいtasks.jsonファイルは以下の JSON のようになるはずです。

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "shell",
      "label": "C/C++: cl.exe build active file",
      "command": "cl.exe",
      "args": [
        "/Zi",
        "/EHsc",
        "/Fe:",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "${file}"
      ],
      "problemMatcher": ["$msCompile"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "detail": "Task generated by Debugger."
    }
  ]
}

注意: tasks.json の変数については、変数リファレンスで詳細を確認できます。

command 設定は実行するプログラムを指定します。この場合は "cl.exe" です。args 配列は、cl.exe に渡されるコマンドライン引数を指定します。これらの引数は、コンパイラが期待する順序で指定する必要があります。

このタスクは、C++ コンパイラにアクティブなファイル (${file}) を受け取り、それをコンパイルし、現在のディレクトリ (${fileDirname}) に、アクティブなファイルと同じ名前で拡張子が .exe の実行可能ファイル (/Fe: スイッチ) (${fileBasenameNoExtension}.exe) を作成するように指示します。この例では helloworld.exe となります。

label の値はタスク リストに表示されるものです。好きなように名前を付けることができます。

detail の値は、タスクリストでタスクの説明として表示されます。同様のタスクと区別するために、この値を変更することを強くお勧めします。

problemMatcher の値は、コンパイラ出力のエラーと警告を見つけるために使用する出力パーサーを選択します。cl.exe の場合、$msCompile problem matcher を使用すると最良の結果が得られます。

これ以降、再生ボタンは tasks.json を読み取ってプログラムのビルドと実行方法を決定します。tasks.json には複数のビルドタスクを定義でき、デフォルトとしてマークされたタスクが再生ボタンで使用されます。デフォルトのコンパイラを変更する必要がある場合は、Tasks: Configure default build task を実行できます。または、tasks.json ファイルを変更し、このセグメントを置き換えてデフォルトを削除することもできます。

    "group": {
        "kind": "build",
        "isDefault": true
    },

これで

    "group": "build",

tasks.json の変更

"${file}" の代わりに "${workspaceFolder}/*.cpp" のような引数を使用して、複数の C++ ファイルをビルドするように tasks.json を変更できます。これにより、現在のフォルダー内のすべての .cpp ファイルがビルドされます。また、"${fileDirname}\\${fileBasenameNoExtension}.exe" をハードコードされたファイル名 (例: "${workspaceFolder}\\myProgram.exe") に置き換えることで、出力ファイル名を変更することもできます。

helloworld.cpp をデバッグする

コードをデバッグするには、

  1. helloworld.cpp に戻り、アクティブ ファイルにします。
  2. エディターのマージンをクリックするか、現在の行で F9 を使用してブレークポイントを設定します。 helloworld.cpp のブレークポイントのスクリーンショット
  3. 再生ボタンの横にあるドロップダウンから、C/C++ ファイルをデバッグを選択します。 再生ボタンのドロップダウンのスクリーンショット
  4. システムで検出されたコンパイラのリストから C/C++: cl.exe build and debug active file を選択します (helloworld.cpp を初めて実行またはデバッグするときにのみコンパイラの選択を求められます)。C++ デバッグ構成ドロップダウン

再生ボタンには Run C/C++ FileDebug C/C++ File の 2 つのモードがあります。デフォルトでは最後に使用されたモードになります。再生ボタンにデバッグ アイコンが表示されている場合は、ドロップダウン メニュー項目を選択する代わりに、再生ボタンを選択してデバッグできます。

cl.exe を使用してビルドおよびデバッグしようとするとエラーが発生する場合は、Developer Command Prompt for Visual Studio から VS Code を開始し、code . ショートカットを使用していることを確認してください。

Error notification when trying to use MSVC without running VS Code from the Developer Command Prompt for VS

デバッガーを探索する

コードのステップ実行を開始する前に、ユーザーインターフェイスのいくつかの変更点に注目してみましょう。

  • 統合ターミナルはソースコード エディターの下部に表示されます。デバッグ出力タブには、デバッガーが起動して実行中であることを示す出力が表示されます。

  • エディターは、デバッガーを開始する前にブレークポイントを設定した行を強調表示します。

    Initial breakpoint

  • 左側の実行とデバッグビューにはデバッグ情報が表示されます。このチュートリアルで後ほど例を示します。

  • コード エディターの上部にデバッグ コントロール パネルが表示されます。左側のドットを掴んで画面上を移動させることができます。

    Debugging controls

コードをステップ実行する

これで、コードのステップ実行を開始する準備ができました。

  1. デバッグ コントロール パネルのステップ オーバー アイコンをクリックするか、押します。

    Step over button

    これにより、プログラムの実行が for ループの最初の行に進み、msg 変数が作成および初期化されるときに呼び出される vector および string クラス内のすべての内部関数呼び出しがスキップされます。左側の [変数] ウィンドウの変化に注目してください。

    Debugging windows

    この場合、ループの変数名はデバッガーから見えるようになっていますが、ステートメントはまだ実行されていないため、この時点では何も読み取ることができません。しかし、msg の内容は、そのステートメントが完了しているため表示されます。

  2. ステップ オーバーをもう一度押して、このプログラムの次のステートメントに進みます (ループを初期化するために実行されるすべての内部コードをスキップします)。これで、変数ウィンドウにはループ変数に関する情報が表示されます。

  3. もう一度 [ステップ オーバー] を押して、cout ステートメントを実行します。(C++ 拡張機能は、ループが終了するまで デバッグ コンソール には何も出力しないことに注意してください。)

  4. よろしければ、ベクター内のすべての単語がコンソールに出力されるまで [ステップ オーバー] を押し続けることができます。しかし、興味があれば、[ステップ イン] ボタンを押して C++ 標準ライブラリのソース コードをステップスルーしてみてください!

    Breakpoint in gcc standard library header

    独自のコードに戻るには、[ステップ オーバー] を押し続ける方法があります。もう 1 つの方法は、コード エディターで helloworld.cpp タブに切り替え、ループ内の cout ステートメントのどこかに挿入ポイントを置き、F9 を押してコードにブレークポイントを設定することです。左側のガターに赤い点が表示され、この行にブレークポイントが設定されたことを示します。

    Breakpoint in main

    次に F5 を押して、標準ライブラリ ヘッダーの現在の行から実行を開始します。実行は cout で中断されます。必要であれば、もう一度 F9 を押してブレークポイントをオフに切り替えることができます。

ウォッチを設定する

プログラムの実行中に変数の値を追跡したい場合があります。これは、変数に ウォッチ を設定することで実行できます。

  1. ループ内に挿入ポイントを置きます。[ウォッチ] ウィンドウで、プラス記号を選択し、テキスト ボックスにループ変数名である word と入力します。次に、ループをステップスルーしながらウォッチ ウィンドウを表示します。

    Watch window

  2. ループの前にint i = 0;というステートメントを追加して、別のウォッチを追加します。次に、ループ内に++i;というステートメントを追加します。前のステップで行ったように、i のウォッチを追加します。

  3. ブレークポイントで実行が一時停止している間に任意の変数の値をすばやく表示するには、マウス ポインターをその変数に重ねます。

    Mouse hover

launch.json を使用してデバッグをカスタマイズする

再生ボタンまたは F5 でデバッグすると、C++ 拡張機能は動的なデバッグ構成をその場で作成します。

実行時にプログラムに渡す引数を指定するなど、デバッグ構成をカスタマイズしたい場合があります。カスタム デバッグ構成はlaunch.jsonファイルで定義できます。

launch.json を作成するには、再生ボタンのドロップダウン メニューからデバッグ構成の追加を選択します。

Add debug configuration play button menu

すると、さまざまな事前定義されたデバッグ構成のドロップダウンが表示されます。C/C++: cl.exe build and debug active file を選択します。

C++ debug configuration dropdown

VS Code はlaunch.jsonファイルを作成します。これは次のようになります。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "C/C++: cl.exe build and debug active file",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
      "args": [],
      "stopAtEntry": false,
      "cwd": "${workspaceFolder}",
      "environment": [],
      "externalConsole": false,
      "preLaunchTask": "C/C++: cl.exe build active file"
    }
  ]
}

上記の JSON では、program はデバッグしたいプログラムを指定します。ここでは、アクティブなファイル フォルダー (${fileDirname}) と、拡張子が .exe のアクティブなファイル名 (${fileBasenameNoExtension}.exe) に設定されています。helloworld.cpp がアクティブなファイルの場合、これは helloworld.exe になります。args プロパティは、実行時にプログラムに渡す引数の配列です。

デフォルトでは、C++ 拡張機能はソースコードにブレークポイントを追加せず、stopAtEntry の値はfalseに設定されています。

デバッグを開始したときにデバッガーがmainメソッドで停止するように、stopAtEntry の値をtrueに変更します。

これ以降、再生ボタンと F5 は、デバッグのためにプログラムを起動するときに launch.json ファイルから読み取ります。

C/C++ の構成

C/C++ 拡張機能をより細かく制御したい場合は、c_cpp_properties.json ファイルを作成できます。これにより、コンパイラへのパス、インクルード パス、C++ 標準 (デフォルトは C++17) などの設定を変更できます。

C/C++ 構成 UI は、コマンド パレット (⇧⌘P (Windows、Linux の場合 Ctrl+Shift+P)) から C/C++: Edit Configurations (UI) コマンドを実行して表示できます。

Command Palette

これにより、C/C++ 構成ページが開きます。ここで変更を加えると、VS Code はそれらを.vscodeフォルダー内のc_cpp_properties.jsonというファイルに書き込みます。

Command Palette

Visual Studio Code はこれらの設定を .vscode\c_cpp_properties.json に配置します。そのファイルを直接開くと、次のようになります。

{
  "configurations": [
    {
      "name": "Win32",
      "includePath": ["${workspaceFolder}/**"],
      "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
      "windowsSdkVersion": "10.0.18362.0",
      "compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "msvc-x64"
    }
  ],
  "version": 4
}

インクルード パス 配列設定に追加する必要があるのは、プログラムにワークスペース内または標準ライブラリ パスにないヘッダー ファイルが含まれている場合のみです。

コンパイラのパス

compilerPath 設定は、構成における重要な設定です。拡張機能はこれを使用して、C++ 標準ライブラリ ヘッダー ファイルへのパスを推測します。拡張機能がこれらのファイルの場所を知っていると、スマート補完や [定義へ移動] ナビゲーションなどの便利な機能を提供できます。

C/C++ 拡張機能は、システム上で見つかったものに基づいて、デフォルトのコンパイラの場所で compilerPath を設定しようとします。拡張機能は、いくつかの一般的なコンパイラの場所を検索します。

compilerPath の検索順序は次のとおりです。

  • まず Microsoft Visual C++ コンパイラを確認します
  • 次に Windows Subsystem for Linux (WSL) 上の g++ を探します
  • 次に Mingw-w64 用の g++ を探します。

g++ または WSL がインストールされている場合は、プロジェクトの優先コンパイラに合わせて compilerPath を変更する必要があるかもしれません。Microsoft C++ の場合、パスはインストールされている特定のバージョンに応じて、次のようになります: "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64/cl.exe"。

C++ 構成の再利用

VS Code は Microsoft C++ コンパイラを使用するように構成されました。この構成は現在のワークスペースに適用されます。構成を再利用するには、JSON ファイルを新しいプロジェクト フォルダー (ワークスペース) の .vscode フォルダーにコピーし、必要に応じてソース ファイル名や実行可能ファイル名を変更します。

Developer Command Prompt の外部で VS Code を実行する

特定の状況下では、Developer Command Prompt for Visual Studio から VS Code を実行することができません (たとえば、SSH を介したリモート開発シナリオなど)。その場合、次の tasks.json 構成を使用して、ビルド中に Developer Command Prompt for Visual Studio の初期化を自動化できます。

{
  "version": "2.0.0",
  "windows": {
    "options": {
      "shell": {
        "executable": "cmd.exe",
        "args": [
          "/C",
          // The path to VsDevCmd.bat depends on the version of Visual Studio you have installed.
          "\"C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/Tools/VsDevCmd.bat\"",
          "&&"
        ]
      }
    }
  },
  "tasks": [
    {
      "type": "shell",
      "label": "cl.exe build active file",
      "command": "cl.exe",
      "args": [
        "/Zi",
        "/EHsc",
        "/Fe:",
        "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "${file}"
      ],
      "problemMatcher": ["$msCompile"],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}

: VsDevCmd.bat へのパスは、Visual Studio のバージョンやインストール パスによって異なる場合があります。コマンド プロンプトを開き、dir "\VsDevCmd*" /s を実行することで VsDevCmd.bat へのパスを見つけることができます。

トラブルシューティング

「cl.exe」という用語は認識されません

「'cl.exe' という用語は、cmdlet、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません」というエラーが表示された場合、これは通常、Developer Command Prompt for Visual Studio の外部で VS Code を実行しており、VS Code が cl.exe コンパイラへのパスを知らないことを意味します。

VS Code は、Developer Command Prompt for Visual Studio から起動するか、Developer Command Prompt の外部で実行するようにタスクを構成する必要があります。

新しいターミナル (⌃⇧` (Windows、Linux の場合 Ctrl+Shift+`)) を開き、「cl」と入力して cl.exe が VS Code で利用可能であることを確認することで、常に Developer Command Prompt のコンテキストで VS Code を実行していることを確認できます。

fatal error C1034: assert.h: no include path set

この場合、cl.exePATH 環境変数を介して VS Code で利用可能ですが、VS Code は依然として Developer Command Prompt for Visual Studio から起動するか、Developer Command Prompt の外部で実行するように構成する必要があります。そうしないと、cl.exeINCLUDE などの重要な環境変数にアクセスできません。

次のステップ

  • VS Code ユーザー ガイドを参照してください。
  • C++ 拡張機能の概要を確認してください。
  • 新しいワークスペースを作成し、.vscode JSON ファイルをそこにコピーし、新しいワークスペースのパスやプログラム名などに合わせて必要な設定を調整すれば、コーディングを開始できます!