Microsoft C++ 用に VS Code を構成する
このチュートリアルでは、Windows で Microsoft Visual C++ コンパイラとデバッガを使用するように Visual Studio Code を構成します。
VS Code を構成した後、VS Code で単純な Hello World プログラムをコンパイルしてデバッグします。このチュートリアルでは、Microsoft C++ ツールセットや C++ 言語の詳細については説明しません。これらの主題については、Web 上に多くの優れたリソースがあります。
何か問題が発生した場合は、VS Code ドキュメントリポジトリでこのチュートリアルの問題を気軽に報告してください。
前提条件
このチュートリアルを正常に完了するには、次のことを行う必要があります。
-
Visual Studio Code をインストールします。
-
VS Code 用の C/C++ 拡張機能をインストールします。C/C++ 拡張機能は、拡張機能ビュー (⇧⌘X (Windows、Linux Ctrl+Shift+X)) で「c++」と検索してインストールできます。

-
Microsoft Visual C++ (MSVC) コンパイラツールセットをインストールします。
Visual Studio の最近のバージョンをお持ちの場合は、Windows のスタートメニューから Visual Studio インストーラを開き、C++ ワークロードがチェックされていることを確認してください。インストールされていない場合は、ボックスをチェックしてインストーラの変更ボタンを選択してください。
Visual Studio IDE を完全にインストールしなくても、C++ によるデスクトップ開発ワークロードをインストールできます。Visual Studio のダウンロードページから、すべてのダウンロードセクションのVisual Studio 用ツールが表示されるまでスクロールダウンし、Visual Studio 2022 用ビルドツールのダウンロードを選択してください。

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

注: 有効な Visual Studio ライセンス (Community、Pro、または Enterprise のいずれか) をお持ちであれば、Visual Studio ビルドツールから C++ ツールセットを Visual Studio Code と一緒に使用して、あらゆる C++ コードを開発、ビルド、テストできます。
Microsoft Visual C++ のインストールを確認する
コマンドラインまたは VS Code から MSVC を使用するには、Visual Studio 用開発者コマンドプロンプトから実行する必要があります。PowerShell、Bash、または Windows コマンドプロンプトのような通常のシェルでは、必要なパス環境変数が設定されていません。
Visual Studio 用開発者コマンドプロンプトを開くには、Windows のスタートメニューで「developer」と入力し始めると、候補のリストに表示されるはずです。正確な名前は、インストールされている Visual Studio または Visual Studio ビルドツールのバージョンによって異なります。プロンプトを開くには、項目を選択します。

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

開発者コマンドプロンプトがビルドツールの場所を開始ディレクトリとして使用している場合 (そこにプロジェクトを配置したくないでしょう)、新しいプロジェクトを作成し始める前にユーザーフォルダー (C:\users\{あなたのユーザー名}\) に移動してください。
注: 何らかの理由で開発者コマンドプロンプトから VS Code を実行できない場合は、開発者コマンドプロンプト外で VS Code を実行するで VS Code で C++ プロジェクトをビルドするための回避策を見つけることができます。
Hello World を作成する
開発者コマンドプロンプトから、「projects」という空のフォルダーを作成し、そこにすべての VS Code プロジェクトを保存します。次に、「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にします。

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)) に、追加したファイルが表示されることに注目してください。

メインのファイルメニューで自動保存をチェックして、ファイルの変更を自動的に保存する自動保存を有効にすることもできます。
一番左のアクティビティバーでは、検索、ソース管理、実行などのさまざまなビューを開くことができます。実行ビューについては、このチュートリアルの後半で説明します。その他のビューの詳細については、VS Code のユーザーインターフェースのドキュメントを参照してください。
注: C++ファイルを保存または開くと、C/C++拡張機能からInsiders版の利用可能性に関する通知が表示される場合があります。これにより、新しい機能や修正をテストできます。この通知は
X(通知をクリア) を選択して無視できます。
IntelliSense を探索する
新しい helloworld.cpp ファイルで、vector または string にカーソルを合わせると、型情報が表示されます。msg 変数の宣言の後、メンバー関数を呼び出すときのように msg. と入力し始めます。すぐに、すべてのメンバー関数を表示する補完リストと、msg オブジェクトの型情報を示すウィンドウが表示されるはずです。

Tab キーを押して選択したメンバーを挿入できます。次に、開始括弧を追加すると、関数が必要とする引数に関する情報が表示されます。
helloworld.cpp を実行する
C++ 拡張機能は、マシンにインストールされている C++ コンパイラを使用してプログラムをビルドすることに注意してください。VS Code でhelloworld.cppを実行およびデバッグする前に、C++ コンパイラがインストールされていることを確認してください。
-
helloworld.cppをアクティブ ファイルとして開きます。 -
エディターの右上隅にある再生ボタンを押します。

-
システムで検出されたコンパイラのリストから、C/C++: cl.exe アクティブファイルのビルドとデバッグを選択します。

helloworld.cpp を初めて実行するときにのみコンパイラを選択するように求められます。このコンパイラは、tasks.json ファイルで「デフォルト」コンパイラとして設定されます。
-
ビルドが成功すると、プログラムの出力は統合ターミナルに表示されます。

cl.exe でビルドとデバッグを試行してエラーが発生した場合は、code . ショートカットを使用して、Visual Studio 用開発者コマンドプロンプトから VS Code を起動したことを確認してください。

プログラムを初めて実行すると、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 拡張子 (${fileBasenameNoExtension}.exe) を持つ実行可能ファイル (/Fe: スイッチ) を作成するように指示します。結果として、この例では helloworld.exe が生成されます。
label の値はタスク リストに表示されるものです。好きなように名前を付けることができます。
detail の値は、タスクリストでタスクの説明として表示されるものです。類似のタスクと区別するために、この値を変更することを強くお勧めします。
problemMatcher の値は、コンパイラの出力からエラーと警告を見つけるために使用する出力パーサーを選択します。cl.exe の場合、$msCompile 問題マッチャを使用すると最良の結果が得られます。
今後、再生ボタンはtasks.jsonから読み取り、プログラムをビルドして実行する方法を判断します。tasks.jsonに複数のビルドタスクを定義でき、デフォルトとしてマークされたタスクが再生ボタンによって使用されます。デフォルトのコンパイラを変更する必要がある場合は、タスク: デフォルトのビルドタスクを構成を実行できます。または、tasks.jsonファイルを変更し、このセグメントを置き換えてデフォルトを削除することもできます。
"group": {
"kind": "build",
"isDefault": true
},
これで
"group": "build",
tasks.json の変更
tasks.json を変更して、"${file}" の代わりに "${workspaceFolder}/*.cpp" のような引数を使用して複数の C++ ファイルをビルドできます。これにより、現在のフォルダー内のすべての .cpp ファイルがビルドされます。出力ファイル名を "${fileDirname}\\${fileBasenameNoExtension}.exe" をハードコーディングされたファイル名 (たとえば "${workspaceFolder}\\myProgram.exe") に置き換えることでも変更できます。
helloworld.cpp をデバッグする
コードをデバッグするには、
helloworld.cppに戻り、アクティブ ファイルにします。- エディターのマージンをクリックするか、現在の行で F9 を使用してブレークポイントを設定します。

- 再生ボタンの横にあるドロップダウンから、C/C++ ファイルをデバッグを選択します。

- システムで検出されたコンパイラのリストから、C/C++: cl.exe アクティブファイルのビルドとデバッグを選択します (
helloworld.cppを初めて実行またはデバッグするときにのみ、コンパイラを選択するように求められます)。
再生ボタンには、C/C++ ファイルを実行とC/C++ ファイルをデバッグの2つのモードがあります。最後に使用したモードがデフォルトになります。再生ボタンにデバッグアイコンが表示されている場合は、ドロップダウンメニュー項目を選択する代わりに、再生ボタンを選択してデバッグできます。
cl.exe でビルドとデバッグを試行してエラーが発生した場合は、code . ショートカットを使用して、Visual Studio 用開発者コマンドプロンプトから VS Code を起動したことを確認してください。

デバッガーを探索する
コードのステップ実行を開始する前に、ユーザーインターフェイスのいくつかの変更点に注目してみましょう。
-
統合ターミナルはソースコード エディターの下部に表示されます。デバッグ出力タブには、デバッガーが起動して実行中であることを示す出力が表示されます。
-
エディターは、デバッガーを開始する前にブレークポイントを設定した行を強調表示します。

-
左側の実行とデバッグビューにはデバッグ情報が表示されます。このチュートリアルで後ほど例を示します。
-
コード エディターの上部にデバッグ コントロール パネルが表示されます。左側のドットを掴んで画面上を移動させることができます。

コードをステップ実行する
これで、コードのステップ実行を開始する準備ができました。
-
デバッグ コントロール パネルのステップ オーバー アイコンをクリックするか、押します。

これにより、プログラムの実行は for ループの最初の行に進み、
msg変数が作成され初期化されるときに呼び出されるvectorおよびstringクラス内のすべての内部関数呼び出しをスキップします。左側の変数ウィンドウの変更に注目してください。
この場合、エラーは予期されたものです。なぜなら、ループの変数名はデバッガーから見えるようになりましたが、ステートメントはまだ実行されていないため、現時点では読み取るべきものがないからです。しかし、
msgの内容は、そのステートメントが完了したため、表示されます。 -
ステップ オーバーをもう一度押して、このプログラムの次のステートメントに進みます (ループを初期化するために実行されるすべての内部コードをスキップします)。これで、変数ウィンドウにはループ変数に関する情報が表示されます。
-
もう一度ステップオーバーを押して
coutステートメントを実行します。(C++ 拡張機能は、ループが終了するまでデバッグコンソールに何も出力しないことに注意してください。) -
必要であれば、ベクター内のすべての単語がコンソールに印刷されるまでステップオーバーを押し続けることができます。しかし、興味がある場合は、ステップインボタンを押してC++標準ライブラリのソースコードをステップスルーしてみてください!

自分のコードに戻るには、1つの方法はステップオーバーを押し続けることです。もう1つの方法は、コードエディターで
helloworld.cppタブに切り替え、ループ内のcoutステートメントのどこかに挿入点を置いて、F9を押して、自分のコードにブレークポイントを設定することです。左側のガターに赤い点が表示され、この行にブレークポイントが設定されていることを示します。
次に、F5を押して、標準ライブラリヘッダーの現在の行から実行を開始します。実行は
coutで中断されます。必要であれば、もう一度F9を押してブレークポイントをオフにすることもできます。
ウォッチを設定する
プログラムの実行中に変数の値を追跡したい場合があります。これは、変数にウォッチを設定することで行えます。
-
ループ内に挿入ポイントを置きます。ウォッチウィンドウでプラス記号を選択し、テキストボックスにループ変数名である
wordと入力します。これで、ループをステップ実行しながらウォッチウィンドウを表示できます。
-
ループの前に
int i = 0;というステートメントを追加して、別のウォッチを追加します。次に、ループ内に++i;というステートメントを追加します。前のステップで行ったように、iのウォッチを追加します。 -
ブレークポイントで実行が一時停止している間に任意の変数の値をすばやく表示するには、マウス ポインターをその変数に重ねます。

launch.json を使用してデバッグをカスタマイズする
再生ボタンまたはF5でデバッグする場合、C++拡張機能は動的なデバッグ構成をその場で作成します。
実行時にプログラムに渡す引数を指定するなど、デバッグ構成をカスタマイズしたい場合があります。カスタム デバッグ構成はlaunch.jsonファイルで定義できます。
launch.json を作成するには、再生ボタンのドロップダウン メニューからデバッグ構成の追加を選択します。

次に、さまざまな事前定義されたデバッグ構成のドロップダウンが表示されます。C/C++: cl.exe アクティブファイルのビルドとデバッグを選択します。

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) などの設定を変更できます。
コマンドパレット (⇧⌘P (Windows, Linux Ctrl+Shift+P)) からC/C++: 構成を編集 (UI) コマンドを実行して、C/C++構成UIを表示できます。

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

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
}
プログラムがワークスペース内または標準ライブラリパス内にないヘッダーファイルをインクルードする場合にのみ、Include path 配列設定に追加する必要があります。
コンパイラのパス
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 フォルダーにコピーし、必要に応じてソースファイル名と実行可能ファイル名を変更するだけです。
開発者コマンドプロンプト外で VS Code を実行する
特定の状況では、Visual Studio 用開発者コマンドプロンプトから VS Code を実行できない場合があります (たとえば、SSH シナリオによるリモート開発)。その場合、次の tasks.json 構成を使用して、ビルド中に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」という用語は認識されません
「The term 'cl.exe' is not recognized as the name of a cmdlet, function, script file, or operable program.」というエラーが表示される場合、これは通常、Visual Studio 用開発者コマンドプロンプト外で VS Code を実行しており、VS Code が cl.exe コンパイラへのパスを知らないことを意味します。
VS Code は Visual Studio 用開発者コマンドプロンプトから起動されるか、タスクが開発者コマンドプロンプト外で実行されるように構成されている必要があります。
開発者コマンドプロンプトのコンテキストで VS Code が実行されているかどうかは、新しいターミナル (⌃⇧` (Windows、Linux Ctrl+Shift+`)) を開いて「cl」と入力し、cl.exe が VS Code で利用可能であることを確認することでいつでもチェックできます。
fatal error C1034: assert.h: no include path set
この場合、cl.exe は PATH 環境変数を通じて VS Code で利用できますが、VS Code は引き続きVisual Studio 用開発者コマンドプロンプトから起動されるか、開発者コマンドプロンプト外で実行するように構成されている必要があります。そうしないと、cl.exe は INCLUDE などの重要な環境変数にアクセスできません。
次のステップ
- VS Code ユーザー ガイドを参照してください。
- C++ 拡張機能の概要を確認してください。
- 新しいワークスペースを作成し、
.vscodeJSON ファイルをそこにコピーし、新しいワークスペースパス、プログラム名などの必要な設定を調整して、コーディングを開始してください!