Visual Studio ProfessionalでC++のコードカバレッジ(テストで実行された行・関数の可視化)を取りたいのに、Enterprise限定に見えて困るケースは珍しくありません。いまはVS 2026で状況が変わった一方、VS 2022以前でも現実的に回せる手段があります。IDE派・CLI派の両方に向けて、選び方と運用のコツをまとめます。
Visual Studio Professionalで「C++のコードカバレッジが無い」と見えてしまう理由
結論から言うと、混乱の原因は「バージョン差」と「情報の更新タイミング」です。
- Visual Studio 2022以前は、IDEからのコードカバレッジ機能がEnterprise中心だったため、Professional利用者は「ボタンがない/メニューが見つからない」状態になりがちでした。
- 一方でVisual Studio 2026では、コードカバレッジがCommunity / ProfessionalでもIDEから利用できる旨がリリースノートで明記されています。
つまり、「今のVSがどの世代か」で、最短ルートが変わります。まずはそこを切り分けるのが最重要です。
最初に押さえる基礎知識:C++カバレッジは“ビルド設定”で精度が変わる
C++(ネイティブ)のコードカバレッジは、.NETよりも「ビルド・リンク条件」の影響が大きいです。ツール選定の前に、次の条件を満たすだけで「0%になる」「変な結果になる」事故が大きく減ります。
| ポイント | なぜ重要か | 推奨 |
|---|---|---|
| PDB(シンボル) | ソース行と実行コードの対応付けに必須。PDB内には元のソースパスも入るため、パスが変わると期待どおり出ないことがある。 | 必ず生成(通常はDebug) |
| 最適化(/O2 など) | 最適化によりインライン化・分岐削除・ループ展開が起き、ソース行と実行の対応が崩れやすい。 | 基本は最適化OFF(Debug推奨) |
| /PROFILE(リンク) | ネイティブの「静的インストルメンテーション」を安定して使うために必要になるケースがある。 | 静的方式を使うなら有効化 |
| 静的/動的インストルメンテーション | 静的(バイナリを書き換える)と動的(実行時注入)で安定性・要件が変わる。静的が推奨される場面が多い。 | 静的を優先、必要時のみ動的フォールバック |
選択肢の全体像:Professionalで現実的に使えるルートは大きく3つ
「いまの環境」と「欲しいアウトプット(IDEで見たい/CIに流したい)」で最適解が変わります。
| 選択肢 | 向いている人 | 強み | 注意点 |
|---|---|---|---|
| Visual Studio 2026 のIDE機能 | IDEで完結したい/標準機能が良い | Community/ProfessionalでもIDEからコードカバレッジが利用可能になった | VS 2022以前だと同じ体験にならない(世代差) |
| Microsoft.CodeCoverage.Console(CLI) | Microsoft純正でCLI運用したい/CIに組み込みたい | C++とC#の収集、レポートのマージ/変換に対応 | 静的方式では/PROFILE要件などが出る。設定XMLの理解が必要。 |
| OpenCppCoverage(CLI) | オープンソースで手軽に始めたい/レポートをHTMLで見たい | 実行ファイルを“そのまま”実行してHTMLレポート出力。PDBベースでソース行対応。フィルタやマージも可能。 | 最終更新が古めのため、運用はCLI中心で割り切るのが安定 |
| OpenCppCoveragePlugin(VS拡張) | VS内からワンクリックで回したい | VSメニューから実行できる導線がある | 最終リリースが2020年で、VS 2013/2015/2017向けの記載が中心。VS 2022/2026では動かない可能性あり。 |
方法1:Visual Studio 2026でIDEからC++コードカバレッジを取る
Visual Studio 2026では、コードカバレッジがCommunity/Professionalでも利用できることがリリースノートで明確に案内されています。IDEでの可視化を最優先するなら、これが最短ルートです。
基本手順(IDE)
- テストがTest Explorerで実行できる状態にする(C++ならMicrosoftのC++ユニットテスト、Google Testなど)。
- メニューから Test > Analyze Code Coverage for All Tests を実行する。
- 実行後、Code Coverage Resultsで対象のモジュール/ファイル別の結果を確認し、必要に応じてコード上のハイライト表示を有効にする。
CIで使うなら「Cobertura/XML出力」を最初から意識する
IDEで見るだけなら既定の形式でも困りませんが、CIで集計したり、SonarQube/レポート可視化に渡したい場合は「Cobertura」や「XML」で出せるようにしておくと運用が楽です。Visual Studioのコードカバレッジは既定で .coverage に保存されますが、設定でXMLやCoberturaも選べます。
例:runsettingsで出力形式を指定する(WordPress貼り付け用にXMLはエスケープしています)
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage">
<Configuration>
<Format>Cobertura</Format>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
この「Format」はrunsettings側で指定できます。コマンドラインで回す場合も、vstestやdotnet testの収集パラメータで上書きできる仕様です。
C++で安定させるコツ:静的インストルメンテーションと/PROFILE
Visual Studioのコードカバレッジは、ネイティブ(C++)に対して静的/動的インストルメンテーションを使い分けます。静的方式は安定しやすい反面、プロジェクト側で /PROFILE を有効にする必要があります。runsettingsで静的方式を明示することもできます。
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage">
<Configuration>
<CodeCoverage>
<EnableStaticNativeInstrumentation>True</EnableStaticNativeInstrumentation>
<EnableDynamicNativeInstrumentation>False</EnableDynamicNativeInstrumentation>
</CodeCoverage>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
「動的を完全に無効化する」と、/PROFILEが未設定のプロジェクトでは取得できなくなる可能性があります。まずは静的を優先しつつ、状況により動的フォールバックを許可する、という順序で調整するのが安全です。
方法2:VS 2022 Professionalでも使えるMicrosoft純正CLI「Microsoft.CodeCoverage.Console」
「IDEにボタンがない」「でもMicrosoft純正でやりたい」という場合に強いのが Microsoft.CodeCoverage.Console です。Microsoft Learnのドキュメントで、C++とC#のコードカバレッジ収集、レポートのマージ/変換に対応するCLIとして説明されています。
どこにある?(VS 2022 17.3の配置)
ドキュメントでは、Visual Studio 2022 17.3環境で Common7\IDE\Extensions\Microsoft\CodeCoverage.Console 配下にある旨が案内されています。Developer Command Prompt / Developer PowerShellから利用できます。
C++の収集は「静的インストルメンテーション」が前提になりやすい
Microsoft.CodeCoverage.Consoleでは、C++に対して静的インストルメンテーションでカバレッジを取る説明があり、例として /PROFILE でリンクされたC++アプリが登場します。
代表的な3パターン(ドキュメント準拠)
パターンA:設定ファイルで対象ディレクトリを指定してcollect
instrumentコマンドを使わず、設定ファイル側でインストルメント対象を指定して収集する流れです。
<!-- coverage.config の例(XMLはエスケープ) -->
<ModulePaths>
<IncludeDirectories>
<Directory>D:\ConsoleApplication\x64\Debug</Directory>
</IncludeDirectories>
</ModulePaths>
Microsoft.CodeCoverage.Console collect --settings coverage.config .\ConsoleApplication.exe
パターンB:instrumentしてからcollect
事前にバイナリをinstrumentし、その後にcollectで収集します。
Microsoft.CodeCoverage.Console instrument ConsoleApplication.exe
Microsoft.CodeCoverage.Console collect .\ConsoleApplication.exe
パターンC:server mode(収集と実行を分離)
長時間動くプロセス(サービス相当)や、実行と収集を分けたい場合に使える手順です。セッションIDを指定してinstrumentし、collectorをserver-modeで起動し、アプリを別途起動して最後にshutdownします。
Microsoft.CodeCoverage.Console instrument --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 ConsoleApplication.exe
Microsoft.CodeCoverage.Console collect --session-id 73c34ce5-501c-4369-a4cb-04d31427d1a4 --server-mode
.\ConsoleApplication.exe
Microsoft.CodeCoverage.Console shutdown 73c34ce5-501c-4369-a4cb-04d31427d1a4
なお、instrumentしたネイティブバイナリが参照するDLL(例:static_covrun64.dll)の配置/Pathの扱いについて注意が書かれています。CIなどで「実行はできるのに収集できない」場合、まずここを疑うのが近道です。
フィルタリング(外部ライブラリを除外する)
Microsoft.CodeCoverage.Consoleのinstrumentには--settingsがあり、除外設定をXMLで渡せます。形式はrunsettings内のデータコレクター設定と同じ、と説明されています。つまり、VSのコードカバレッジ調整で使う知識がそのままCLIにも流用できます。
レポート形式(.coverage / XML / Cobertura)
Visual Studioのコードカバレッジは既定で .coverage 形式ですが、XMLやCoberturaで収集・出力することもできます。CI連携やレポートサービスに載せるなら、Coberturaが扱いやすい場面が多いです。
方法3:オープンソースで割り切るならOpenCppCoverage(CLI運用が安定)
ProfessionalユーザーがC++カバレッジを取りたいとき、現実解としてよく挙がるのが OpenCppCoverage です。Microsoft Q&Aでも、Professional利用者向けの代替としてOpenCppCoverage(およびVSプラグイン)が案内されています。
OpenCppCoverageは「PDBを使って、再コンパイル不要で実行プログラムを計測し、HTMLレポートを生成する」タイプのツールです。まずはCLIで回せる状態を作り、必要なら後からIDE連携(拡張)を検討する順番が安全です。
最速で1回回す(まずは動かしてみる)
WikiのGetting Startedでは、オプション無しでも OpenCppCoverage -- 対象プログラム でレポートが生成される流れが説明されています。
OpenCppCoverage -- .\Debug\ConsoleApplication1.exe
ただしこのままだと、実行に関与するWindows/VC++ランタイム等のファイルまで大量に出ます。そこで次の「–sources」が重要になります。
実務で必須のフィルタ:–sources(自分のコードだけに絞る)
OpenCppCoverageは既定で「PDBから辿れるソース」を広く拾うため、外部コードも混ざりやすいです。Wikiでは --sources を使ってパスにマッチするソースだけを対象にする方法が紹介されています。
OpenCppCoverage --sources C:\Dev\MyProject -- .\x64\Debug\MyTests.exe
さらに高速化する:–modules(対象モジュールを絞る)
外部DLLが多いプロジェクトでは、起動時の走査が重くなることがあります。Wikiでは、モジュール(exe/dll)側も --modules で絞ると高速化できる、と説明されています。
OpenCppCoverage --sources C:\Dev\MyProject --modules C:\Dev\MyProject -- .\x64\Debug\MyTests.exe
CIで便利:Cobertura出力
Jenkins等で扱いやすいCobertura形式は、OpenCppCoverage側の --export_type=cobertura で出力できる旨がWikiにあります。
OpenCppCoverage --sources C:\Dev\MyProject --export_type=cobertura:coverage.xml -- .\x64\Debug\MyTests.exe
テストが複数ある:カバレッジのマージ
ユニットテストexeが複数に分かれている場合、テストごとに計測し、最後に統合して全体像を見るのが現実的です。Wikiでは、--export_type=binary で中間ファイルを作り、--input_coverage で読み込んでマージする手順が紹介されています。
OpenCppCoverage --sources=C:\Dev\MyProject --export_type=binary:Test1.cov -- .\x64\Debug\Test1.exe
OpenCppCoverage --sources=C:\Dev\MyProject --export_type=binary:Test2.cov -- .\x64\Debug\Test2.exe
OpenCppCoverage --sources=C:\Dev\MyProject --input_coverage=Test1.cov --input_coverage=Test2.cov -- .\x64\Debug\Test3.exe
精度の注意点:基本はDebug推奨
OpenCppCoverageは「Debug推奨」で、Release最適化ではソースと実行コードが大きく変わるため、結果に違和感が出る可能性があることがGetting Startedで説明されています。まずはDebugで取得し、Releaseで必要なら「どの程度誤差が出るか」をプロジェクト固有に検証してから運用に載せるのが安全です。
OpenCppCoveragePlugin(VS拡張)を検討する場合の現実的な判断
「VSのメニューから実行したい」という要望に対して、OpenCppCoverageには公式のVisual Studio拡張(OpenCppCoveragePlugin)があります。
ただし運用上は次の点に注意が必要です。
- Visual Studio Marketplace上の更新が古く、最終リリースが2020年頃で止まっています。
- GitHub側の説明では、ビルドや互換対象がVisual Studio 2013/2015/2017中心の記載になっています。
そのため、VS 2022/2026の環境で「入らない」「入っても動かない」場合は、素直にCLI(OpenCppCoverage本体)で回す運用に寄せたほうが、再現性と保守性が高いです。
目的別おすすめ:どれを選ぶべきか
| あなたの状況 | おすすめ | 理由 |
|---|---|---|
| VS 2026が使える/IDEで確認したい | VS 2026の標準コードカバレッジ | Community/ProfessionalでもIDE内で可視化できる |
| VS 2022 Professionalで、CIに載せたい | Microsoft.CodeCoverage.Console | Microsoft純正でC++収集に対応、collect/instrument/サーバーモード等がある |
| 費用ゼロで、まず結果を見たい | OpenCppCoverage(CLI) | 再コンパイル不要でHTMLレポート、–sourcesで絞り込みやすい |
| VS内ワンクリックに強いこだわりがある | OpenCppCoveragePlugin(ただし要検証) | 拡張の更新が古く、現行VSでは非対応の可能性があるため“動けばラッキー”の位置付けが安全 |
つまずきやすい症状とチェックリスト
最後に、「カバレッジが取れない」「数字がおかしい」時に確認するポイントを表で整理します。
| 症状 | よくある原因 | 対処 |
|---|---|---|
| 0%になる/対象ファイルが出ない | PDBが無い、パスが変わっている、Release最適化で対応が崩れている | Debugで再ビルド、PDB出力確認、ソースパス変更後はPDB再生成 |
| 外部ライブラリ/標準ライブラリが大量に混ざる | 対象の絞り込み不足 | OpenCppCoverageなら–sources/–modules、Microsoft系ならrunsettings/settingsで除外 |
| 静的インストルメンテーションが効かない | /PROFILE未設定 | C++プロジェクトに/PROFILEを付与、runsettingsで静的有効化 |
| instrumentしたexeが実行時にDLL不足 | 実行時に必要なcovrun系DLLが見つからない | ツールの説明どおり、DLL配置またはPathに追加(collect/connectが自動調整するケースも) |
| VS拡張がインストールできない/表示されない | 拡張が古く、対応VSが合っていない | CLI運用へ切り替える(OpenCppCoverage本体/Microsoft.CodeCoverage.Console) |
参考リンク
- Visual Studio 2026 Release Notes(コードカバレッジの提供範囲の更新)
- Use code coverage to determine how much code is being tested(Visual Studioのコードカバレッジ手順)
- Microsoft.CodeCoverage.Console tool(C++対応CLI)
- Customize code coverage analysis(runsettings/静的・動的/出力形式)
- OpenCppCoverage(GitHub)
- OpenCppCoveragePlugin(GitHub)
- Microsoft Q&A:C++ Code coverage in Visual Studio Professional IDE

コメント