大規模なC++ソリューションで「定義へ移動」「すべての参照を検索」「セマンティック色付け」が遅い場合は、Visual Studio 2026 Insiders 18.9のプレビュー機能であるwhole codebase indexing(WCI)を有効にします。WCIは、C++コードの詳細なシンボル情報を永続的なインデックスへ蓄積し、CodeLensの参照数表示やGitHub Copilotのfind_symbolによるシンボル検索も高速化する仕組みです。
重要なのは、WCIを有効にしても、最初からソリューション全体を一括解析するわけではない点です。標準設定では、開いたファイルを中心にオンデマンドでインデックスを作成し、Visual Studioを終了しても結果を保持します。まだインデックス化されていない情報が必要になった場合は、既存のIntelliSenseエンジンへ自動的にフォールバックするため、ナビゲーション機能そのものが使えなくなるわけではありません。(Microsoft for Developers)
whole codebase indexingで何が高速化されるのか
従来のC++コード参照データベースは、主にシンボルの宣言と定義を高速に収集していました。ただし、インクルード展開や完全な名前解決を行わないため、参照検索などで詳細な解析が必要になると、その都度IntelliSenseエンジンを起動して情報を補完する必要がありました。
WCIでは、IntelliSenseエンジンによるより正確な解析結果を使い、宣言や定義だけでなく、シンボルの使用箇所もデータベースへ保存します。保存済みの情報をキャッシュとして再利用できるため、同じコードベースを繰り返し調査する大規模開発ほど効果が大きくなります。(Microsoft for Developers)
主な改善対象は次のとおりです。
| 機能 | WCIによる改善 |
|---|---|
| セマンティック色付け | ファイルを開いた際の型や関数などの分類を高速化 |
| 定義へ移動 | 詳細なシンボル情報から定義候補を検索 |
| すべての参照を検索 | 保存済みの参照情報を再利用 |
| CodeLens | 関数や型の上に参照数をインライン表示 |
Copilot find_symbol | 宣言、定義、型、参照箇所を言語認識ベースで検索 |
| エージェントによるコード調査 | ファイル名検索だけに頼らず、シンボル単位で関連コードを探索 |
WCIが高速化するのはVisual Studio内のコード理解とナビゲーションです。コンパイル時間やリンク時間を直接短縮する機能ではありません。
WCIを有効にする前の確認事項
2026年7月時点で、WCIはVisual Studio 2026 Insiders 18.9で提供されるプレビュー機能です。段階的に展開されているため、環境によってはすでに有効になっている場合があります。Microsoftは、WCIの処理を利用する環境として4コア以上のCPUを案内しています。(Microsoft for Developers)
有効化前に、次の条件を確認します。
| 確認項目 | 判断基準 |
|---|---|
| Visual Studioのバージョン | Visual Studio 2026 Insiders 18.9であること |
| C++ IntelliSense | 無効化されていないこと |
| CPU | 4コア以上 |
| メモリ | 大規模ソリューションではバックグラウンド解析分の余裕があること |
| ストレージ | ソリューション配下の.vsフォルダーを保存できること |
| Copilot | find_symbolを使う場合はCopilot Agent modeが利用可能であること |
| CodeLens | 参照数を表示する場合はCodeLens本体も有効であること |
Visual Studioの正確なバージョンは、Help→About Microsoft Visual Studioで確認できます。
Visual Studio 2026 Insiders 18.9でWCIを有効化する手順
whole codebase semantic indexを有効にする
- Visual Studio 2026 Insiders 18.9を起動します。
- C++ソリューションを開きます。
Tools→Optionsを開きます。All Settings→Languages→C/C++→IntelliSense→Browsing & navigationへ進みます。Whole codebase semantic indexセクションを開きます。Enable faster code navigation and colorization features (experimental)を有効にします。- 設定を保存します。
設定画面が見つからない場合は、Options画面の検索欄でwhole codebaseまたはsemantic indexを検索すると早く見つけられます。Microsoftの案内では、Tools→OptionsからWhole codebase semantic index for C++を直接検索する方法も示されています。(Microsoft for Developers)
有効化後にC++ファイルを開くと、バックグラウンドで詳細なシンボル解析が始まります。通常は、作業中のファイルが優先されます。
最初はオンデマンド設定のまま使う
大規模ソリューションでは、最初からParse all files in the solution ahead of timeを有効にしない方が安全です。
標準のオンデマンド方式では、開いたファイルと、その解析に必要な翻訳単位を優先して処理します。インデックスはVisual Studioのセッションをまたいで保持されるため、日常的に利用する領域から徐々に高速化されます。
一方、Parse all files in the solution ahead of timeを有効にすると、ソリューションを開いた段階で全プロジェクトファイルの事前解析を開始します。小規模なコードベースでは有効ですが、大規模なモノレポや多数の外部ヘッダーを含む環境では、CPU、メモリ、ストレージ使用量が急増する可能性があります。(Microsoft Learn)
WCIの詳細設定と推奨値
WCIには、インデックス範囲やリソース消費を調整するサブ設定があります。
| 設定 | 推奨する使い方 |
|---|---|
| WCI本体 | 大規模C++ソリューションで有効化 |
| Parse all files in the solution ahead of time | 小規模ソリューション、または事前解析時間を許容できる場合のみ有効化 |
| Include symbol references for function locals | ローカル変数まで横断的に調査する必要がある場合のみ有効化 |
| Include all symbol references from external files | SDKや外部ライブラリ内部の参照まで必要な場合のみ有効化 |
| Automatically determine the maximum number of threads | 原則として有効のまま使用 |
| Enable CodeLens for references | C++コード上に参照数を表示したい場合に有効化 |
関数内のローカルシンボルを含めるか
Include symbol references for function locals in the code browsing databaseを有効にすると、関数内のローカル変数などについても参照情報をデータベースへ保存します。
ローカル変数の追跡が重要な解析業務では役立ちますが、通常のクラス、関数、メソッドのナビゲーションだけが目的なら、最初は無効のままで問題ありません。対象が増えるほどデータベースサイズと解析負荷が増加します。
外部ファイルの全参照を含めるか
標準設定では、外部ファイルについて宣言と定義を中心に保存し、データベースサイズを抑えます。
Include all symbol references from external files in the code browsing databaseを有効にすると、外部ライブラリやSDK内の参照情報まで保存対象になります。自社コードからWindows SDKや大規模なサードパーティーライブラリを頻繁に追跡する場合には有効ですが、通常のアプリケーション開発では負荷に見合わないことがあります。(Microsoft Learn)
スレッド数は自動調整を優先する
Automatically determine the maximum number of threads to use based upon system CPU cores countは、CPUコア数などを基にWCIのスレッド数を決定します。
専用の高性能開発端末で検証する場合を除き、まずは自動調整を利用するのが安全です。手動でスレッド数を増やすと初期解析は短くなる可能性がありますが、ビルド、デバッグ、ブラウザー、仮想環境など、同時に動作する処理へ影響する場合があります。
C++ CodeLensで参照数を表示する設定
WCIを有効にしただけでは、C++のCodeLens参照表示は有効になりません。次の2つの設定が必要です。
WCI側のCodeLens設定
Tools→Options→Languages→C/C++→IntelliSense→Browsing & navigation→Whole codebase semantic indexで、Enable CodeLens for referencesを有効にします。
Visual Studio全体のCodeLens設定
続いて、Tools→Options→Text Editor→CodeLensを開き、CodeLens本体を有効にします。
両方の設定が有効になると、WCIでインデックス化された関数、型、シンボルの上部に参照数が表示されます。参照数をクリックすると、宣言、定義、使用箇所の一覧へ移動できます。WCIのインデックスがまだ作成されていないシンボルでは、CodeLensがすぐに表示されないことがあります。(Microsoft for Developers)
CodeLensが表示されない場合は、次の順序で確認します。
- WCI本体が有効か
Enable CodeLens for referencesが有効か- Visual Studio全体のCodeLensが有効か
- 対象ファイルのWCI解析が完了しているか
- 対象シンボルがC++プロジェクトに含まれているか
Copilotのfind_symbolを高速化する設定
find_symbolは、Copilot Agent modeがコードベース内のシンボルを言語認識ベースで検索するためのツールです。単純な文字列検索ではなく、シンボルの型、宣言、定義、スコープ、参照箇所などを取得できます。
WCIはfind_symbolの検索対象となる詳細なC++シンボル情報を高速に提供します。ただし、WCIを有効にしただけでCopilotのfind_symbolが有効になるわけではありません。Copilot側でもツールを利用できる状態にする必要があります。(Microsoft Learn)
find_symbolを有効にする手順
- Visual StudioでCopilot Chatを開きます。
2.チャットモードをAgentに切り替えます。 - Copilot Chatの
Toolsアイコンを開きます。 find_symbolが利用可能で、有効になっていることを確認します。- C++コードに関する質問を送信します。
有効になっていれば、Copilotは必要に応じてfind_symbolを自動的に呼び出します。
動作確認には、曖昧な質問ではなく、実在する完全修飾名を含むプロンプトが適しています。
OrderManager::Initializeの宣言、定義、すべての参照箇所を調べ、呼び出し元ごとの役割を整理してください。
ConnectionPool型を継承しているクラスを確認し、Acquireメソッドの実装差分を説明してください。
ProcessRequestの定義と主要な呼び出し元を特定し、変更時に影響を受ける処理を列挙してください。
WCIの効果を検証するときは、ファイル名や一般的な単語ではなく、クラス名、名前空間、メソッド名など、C++シンボルとして解決できる情報を指定します。
オンデマンドインデックスとフォールバックの仕組み
「whole codebase indexing」という名称から、ソリューションを開いた直後に全コードが解析されると考えがちですが、標準動作は異なります。
WCIの標準フローは次のとおりです。
- 開発者がC++ファイルを開く
- 対象ファイルと関連する翻訳単位をバックグラウンド解析する
- 詳細なシンボル情報をデータベースへ保存する
- 次回以降のナビゲーションで保存済み情報を再利用する
- 未解析の情報が必要な場合は従来のIntelliSenseエンジンを使う
- 作業範囲が広がるにつれてインデックスも拡張される
未インデックスのファイルに対する「定義へ移動」や「すべての参照を検索」が失敗するわけではありません。既存エンジンへフォールバックして結果を返します。ただし、その操作ではWCIによる速度向上を得られない可能性があります。(Microsoft for Developers)
このため、WCIを有効にした直後の1回目だけを測定して「速くならなかった」と判断するのは適切ではありません。初回にはインデックス作成時間が含まれるため、解析完了後の2回目以降も比較する必要があります。
WCIが動作しているか確認する方法
バックグラウンドタスクを確認する
WCIがインデックスを作成している間は、Visual StudioのTask Managerに次のタスク通知が表示されます。
Running deep C++ analysis for richer navigation
このタスクが動作していれば、詳細なC++解析が進行中です。大規模ソリューションでは、タスク完了前にCPUやメモリ使用率が上昇することがあります。(Microsoft for Developers)
CodeLensで確認する
WCIとCodeLensの設定を有効にし、よく参照される関数やクラスを開きます。
インデックス作成後に参照数が表示され、クリックして参照一覧を取得できれば、WCIの参照情報が利用されています。
Find All Referencesで確認する
参照箇所が多い代表的なシンボルを選び、次の条件で処理時間を比較します。
| 測定 | 内容 |
|---|---|
| 初回 | ファイルを開いた直後にFind All Referencesを実行 |
| 解析後 | WCIのバックグラウンドタスク完了後に再実行 |
| 再起動後 | Visual Studioを再起動し、同じシンボルで再実行 |
| 別領域 | まだ開いていないプロジェクトのシンボルで実行 |
再起動後も高速化が維持されていれば、永続インデックスが再利用されています。別領域だけ遅い場合は、その部分がまだオンデマンド解析されていない可能性があります。
Copilotのツール実行を確認する
Copilot Agent modeでシンボル調査を依頼し、処理ステップにfind_symbolが表示されるか確認します。
同じ質問でも、単なるテキスト検索やファイル検索が選ばれることがあります。名前空間::クラス::メソッドのように対象を具体化すると、シンボル検索が使われやすくなります。
Microsoft公式ベンチマークの見方
Microsoftは、Bullet3とLLVMを使った検証で、WCI有効時に多くのナビゲーション処理やセマンティック色付けが2倍以上高速化したと説明しています。
公式ブログに掲載された測定例は次のとおりです。
| 処理 | コードベース | WCI無効 | WCI有効 |
|---|---|---|---|
| セマンティック色付け | Bullet3 | 414ミリ秒 | 9ミリ秒 |
| セマンティック色付け | LLVM | 1,156ミリ秒 | 19ミリ秒 |
| Find All References | Bullet3 | 18秒 | 1秒 |
| Find All References | LLVM | 134秒 | 69秒 |
初期のオンデマンドインデックス作成例は、Bullet3で約22秒、LLVMで約3.5分でした。ただし、処理時間はファイル数だけでなく、翻訳単位、テンプレート、インクルード構造、同時に開くファイル、CPUやメモリによって変わります。Microsoftも、ベンチマーク結果がすべてのコードベースにそのまま当てはまるわけではないとしています。(Microsoft for Developers)
実務では、公式値との比較ではなく、自社コードで次の数値を記録する方が有効です。
- ソリューションを開いてから初期解析が落ち着くまでの時間
- WCI実行中のCPU使用率
- Visual Studio全体のメモリ使用量
.vsフォルダーの増加量- 代表的なFind All Referencesの初回と再実行時間
- CodeLensが表示されるまでの時間
- Copilotによるシンボル調査の完了時間
管理者が行うべき展開設定
WCIを組織へ導入するときは、全開発者に最大範囲のインデックス設定を一斉適用するのではなく、オンデマンド設定でパイロット展開します。
今回のMicrosoft公式案内で示されているWCIの有効化方法は、各開発者がVisual StudioのTools→Optionsから設定する方式です。WCI専用の組織ポリシーや一括配布手順は、公開された案内では示されていません。未確認のレジストリ値を配布するのではなく、まずは設定手順と推奨値を社内標準として共有するのが安全です。(Microsoft for Developers)
推奨する段階的展開
| 段階 | 設定 |
|---|---|
| パイロット | WCI本体のみ有効、全ファイル事前解析は無効 |
| 初期評価 | スレッド数自動、ローカル参照と外部参照は無効 |
| CodeLens評価 | 必要な開発者だけ参照CodeLensを有効 |
| Copilot評価 | Agent modeとfind_symbolを利用できるユーザーで検証 |
| 本展開 | CPU、メモリ、DB容量、検索速度の結果を基に対象を拡大 |
特にVDI、共有Dev Box、メモリ制限の厳しい端末では、複数ユーザーが同時に全ファイル事前解析を開始すると、ホスト側のリソースへ影響する可能性があります。
Copilotの管理ポリシーとは分けて考える
WCIはC++ IntelliSenseのローカル設定です。一方、Copilot Agent modeはGitHub Copilotの組織ポリシーにも影響されます。
Microsoft Learnでは、管理者がGitHub CopilotダッシュボードのEditor preview featuresを無効にすると、そのサブスクリプションに属するユーザーはVisual StudioのAgent modeを利用できないと説明しています。したがって、WCIが正常に動作していても、組織側でAgent modeが無効ならfind_symbolによるCopilot検索は利用できません。(Microsoft Learn)
管理対象を混同しないことが重要です。
| 管理対象 | 主な設定場所 | 影響 |
|---|---|---|
| WCI | Visual StudioのC++ IntelliSense設定 | ナビゲーションとシンボルインデックス |
| C++ CodeLens | WCI設定とText Editor設定 | エディター上の参照数表示 |
find_symbol | Copilot ChatのTools | Copilotによるシンボル検索 |
| Agent mode利用可否 | GitHub Copilot組織ポリシー | Copilotエージェント全体 |
インデックスの保存場所とディスク管理
コード参照データベースとIntelliSenseのサポートファイルは、標準ではソリューションルートの隠し.vsフォルダーへ保存されます。
ソリューションディレクトリへ書き込めない場合は、Browsing & navigationのLocation設定からカスタム保存先を指定できます。保存先が指定されておらず、標準の場所も利用できない場合は、ユーザーの一時ディレクトリが使用されます。(Microsoft Learn)
大規模ソリューションでは、次の点を確認します。
.vsフォルダーをGitへコミットしない- ディスククリーンアップで頻繁に削除しない
- ネットワークドライブよりローカルSSDを優先する
- ウイルス対策ソフトの除外設定は、組織のセキュリティ基準に従って判断する
- カスタム保存先を使う場合は、ユーザーごとに分離する
.vsフォルダーを毎回削除する運用では、永続インデックスを再利用できず、WCIの利点が小さくなります。
WCIで問題が起きたときの対処法
| 症状 | 確認・対処 |
|---|---|
| WCIの設定が見つからない | Visual Studio 2026 Insiders 18.9か確認し、Optionsでwhole codebaseを検索する |
| 有効化しても速くならない | バックグラウンド解析の完了を待ち、同じ操作を再実行する |
| CodeLensが表示されない | WCI側とText Editor側の両方でCodeLensを有効にする |
| 一部のシンボルだけ遅い | その領域が未インデックスで、既存エンジンへフォールバックしている可能性がある |
| CPU使用率が高い | 全ファイル事前解析、ローカル参照、外部参照を無効にする |
| メモリ使用量が大きい | スレッド数を自動設定に戻し、同時に開くファイルを減らす |
| 参照情報が古い | コード参照データベースの更新設定を確認し、Rescan Solutionを実行する |
| 検索結果がおかしい | 次回ソリューション読み込み時にコード参照データベースを再作成する |
| Copilotがfind_symbolを使わない | Agent mode、Toolsのfind_symbol、組織ポリシーを確認する |
コード参照情報が更新されない場合は、Enable updates to the code browsing databaseとUpdate code browsing information as you typeが有効か確認します。
必要に応じてSolution Explorerでプロジェクトを右クリックし、Rescan Solutionを実行します。それでも改善しない場合は、Browsing & navigation設定のRecreate the code browsing database the next time the solution is loadedを有効にし、次回のソリューション読み込み時にデータベースを再構築します。(Microsoft Learn)
WCIを有効にすべき開発環境
WCIの効果が出やすいのは、次のような環境です。
- 多数のプロジェクトを含むC++ソリューション
- テンプレートや継承階層が複雑なコードベース
- Find All Referencesを頻繁に使う開発チーム
- 既存コードの調査や影響範囲分析が多い保守開発
- CodeLensで参照状況を常時確認したい環境
- Copilot Agent modeに大規模コードを調査させる環境
- 同じソリューションを長期間継続して利用する開発者
一方、CPUやメモリが厳しく制限された仮想デスクトップ、ソリューションを開くたびに.vsフォルダーを削除する環境、短時間だけコードを閲覧する用途では、インデックス作成コストが利点を上回る可能性があります。
まずはVisual Studio 2026 Insiders 18.9へ更新し、WCI本体だけをオンデマンド設定で有効化します。その後、バックグラウンド解析の時間とFind All Referencesの再実行速度を測定してください。効果を確認できたら、必要な開発者にCodeLensとCopilotのfind_symbolを追加し、全ファイル事前解析や外部参照の保存は実測結果を見て判断するのが安全です。

コメント