私たちの立場

AIはC++コードを書くことができます。
検証はあなたの責任です。

そして、チェックすべき項目は日々増え続けています。Visual Assistは決定論的なパーサー(推測を一切行わないツール)上で動作します。シンボルがどこにあるかを尋ねると、どのマシンでも毎回同じ答えが得られます。

大規模なC++コードベースの詳細な概略図。単一のQUERYノードから、1つの緑色のパスがSAME ANSWERというラベルの付いた単一のエンドポイントにきれいに解決される一方、複数の赤色のパスがRUN 1、RUN 2、RUN 3というラベルの付いた異なるエンドポイントに散らばります。
同じ問題を実際のコードベース全体にマッピングしたもの。緑色のパスは単一の答えに解決するが、赤色のパスは散在し、実行ごとに異なる結果となる。

AIツールは地位を確立した

これはAIを否定するものではありません。私たちは自社でAIを提供しています。VA IntelligenceはVisual Studio内でローカルモデルを実行し、呼び出されたスコープ付きAIはC++の読み取りと変更に非常に役立ちます。

これらのツールに頼る人を責めるのは難しい。白紙の状態から抜け出し、馴染みのないコードを素早く理解でき、初期段階のプロトタイピングに非常に役立つからだ。スピードは大きなメリットであり、業界はその点を考慮して価格を設定している。

問題は、スピードを確実性と勘違いしたときに始まる。

2つがどのように組み合わさるか

どちらも意図的に

モデル全体を一行で表すとこうなります。AIが下書きを作成し、パーサーが検証し、あなたが最終決定を下します。これらは2つの異なる役割であり、Visual Assistは、あなたが既に利用しているAIと連携して、検証部分を担うように設計されています。

次世代AIは 検証パーサーは
馴染みのないコードの説明定義への正確なナビゲーション
実施計画の策定完全な参照情報検索 ― すべての使用例をカウント
初回解答と定型文安全なプロジェクト全体のリファクタリング
ブロックの機能を要約すると決定論的な理解 ― 毎回同じ答え
ONE WORK SESSION → MODEL invoked when you ask drafts drafts context context PARSER always on · your code's ground truth
パーサーはセッション全体を実行します。モデルは呼び出し時にのみ表示され、その行からコンテキストを取得します。あなたはエンジニアのままであり、何も自動的に適用されません。
確実性の定義

パーサーが確実に知っていること

ビジュアルアシストは、実際のC++コード(シンボル、スコープ、型)を解析し、入力に合わせて表示を常に最新の状態に保ちます。表示される内容はすべて、現時点でのコードに関する事実であり、予測ではありません。

参考文献を探す

すべての参照箇所をカウントします。合計はサンプルではなく、総計です。

名前を変更する

あらゆる参照箇所にきちんと触れるか、触れられない場合はその旨を明記する。見落としは一切ない。

定義へ移動

マクロを多用したコードや編集途中のコードでも、定義を正確に捉えます。

具体的なもの

モデルにすべての使用箇所を検索するように依頼するとMAX_PLAYERS、もっともらしいリストが得られますが、完全に信頼できるものではなく、次に依頼したときには変更される可能性があります。Visual Assist は69 ファイルにわたって 746 箇所を返します。明日もう一度依頼しても、同じ 746 箇所です。

ビジュアルアシストによる参照検索の結果、シンボルMAX_PLAYERSについて69個のファイルで746件の参照が見つかりました。
700以上のファイルからなるゲームコードベースで、1つのシンボルに対する参照を検索:69ファイルにわたって746件の参照が見つかりました。毎回、完全なカウント結果が得られます。
ビジュアルアシストをお試しください
30日間無料トライアル · クレジットカード不要
エンジン

内部構造:並列パーサー

ここは、私たちが細かい部分まで踏み込む唯一のセクションです。パーサーは、ビジュアルアシストの中で私たちが公に語ることはめったにない部分ですが、確実性を可能にするものです。

並列+増分

VAは複数のコアにわたって独自のパーサーを実行し、入力に応じて再解析を行います。インデックスはキーストロークに合わせて常に最新の状態に保たれます。

コードインテリジェンスのために構築

コードをビルドする必要はなく、理解するだけでよいので、コンパイラがエラーを起こす部分をスキップし、断片化されたコンパイルできないコード内のシンボルを解決し続けます。

アルゴリズムであって、モデルではない

サンプリングも温度測定も不要。同じコードで同じ結果が得られるので、推測ではなく検証可能な事実です。

IntelliSenseはコンパイラのフロントエンドに依存しているため、クリーンなコードでは正確だが、コードが乱雑な場合は脆弱で動作が遅くなる。Visual Assistは何年も前に正反対の戦略をとった。だからこそ、Unreal Engineやシェーダーコードが公式にサポートされる前から、開発者はVisual Assistを使用していたのだ。AIはその戦略を変えたわけではない。むしろ、リスクを高めたと言えるだろう。

VA Intelligenceが目指すのは、まさにそのパーサーです。つまり、よりコンテキストを認識する機能を備え、パーサーがモデルにプロジェクトに関するより包括的な理解を提供するというものです。

VA情報部の見解をお読みください

もう一方の道

もっともらしいが検証されていない

モデルは最も可能性の高いコードを提供します。可能性が高いことは正しいこととは異なり、C++ではそのギャップに問題が潜んでいます。実際のチームが陥りやすい問題の例を一つ挙げましょう。

// コードベースには2つのオーバーロードが存在します。
void log( const std::string& message);
void log( bool ok);

// AIがこれを書きます。コンパイルします。出荷しますか?
log( "接続が失われました" );

// 文字列リテラルは const char* であり、
// const char* -> bool は const char* -> std::string よりも優れています。
// つまり、これは log(bool) を呼び出します。これで `true` がログに出力されました。
オーバーロード解決の落とし穴ですね。呼び出しは明らかに正しく見え、コンパイルも問題なく完了するのですが、実際には間違った関数が実行されてしまいます。「定義へ移動」機能を使うと、実際に解決されるオーバーロードにたどり着くので、クリック一つでその問題に気づくことができます。

間違った過負荷

コンパイルは正常に完了する。意図しない関数が呼び出される。

悪い人生

レビューでは問題なさそうに見えるが、実際に製造してみると不具合が発生する。

静かなキャスト

警告なしにビルドを実行。午前2時に状態を破損。

平易な言葉で

LLMは非常に優れた勘の持ち主だ。初稿に必要な要素を的確に把握し、納品間近の段階では絶対に避けるべき要素を的確に指摘してくれる。

読んでみよう:何が真実で、何が誇大広告で、C++はどこに位置づけられるのか

裏付けとなる証拠

検証作業は拡大している

AIは品質管理の仕事をなくしたわけではない。その仕事を下流工程、つまり差分を読み取る担当者に移しただけであり、その作業量は明らかに増加している。

約20%
より速く――彼らは予想していた
測定済み↓
約19%
遅くなった — 何が起こったのか

METRが2025年に実施した無作為化比較試験では、熟練した開発者が、よく知っているコードにAIを使用した場合、AIを使用しない場合と比べてタスクの完了に19%の時間がかかった。しかも、開発者自身は速くできたと思い込んでいた。その時間は、レビュー、修正、再確認に費やされた。ここから得られる教訓は、「AIは遅い」ということではなく、検証作業は現実的で、しかも増え続ける作業であるということだ。

出典:METR.org — RCT、開発者16名、タスク数246件

レビューとは、主に簡単な質問に確信を持って答えることを意味します。

  • この関数を呼び出すのは誰ですか?
  • このシンボルは今でもどこかで使われていますか?
  • この変更は具体的に何に影響を与えるのか?

それらには明確な答えがあります。生成されるコードを取り込む量が増えるほど、レビューは推測に頼らないツールに依存するようになります。

プレゼンテーション全体:もう一度聞いてください。

最大規模のプロジェクトにVisual Assistを導入し、同じ質問を2日連続でしてみてください。必ず同じ答えが返ってくるはずです。間違いありません。

ビジュアルアシストをお試しください
30日間無料トライアル · クレジットカード不要
Visual Studio Marketplaceで150万回以上インストールされています。

よくある質問

このページはAIに反対する内容ですか?

いいえ。私たちはAI機能を開発しており、ユーザーが好きなアシスタントを使い続けることを期待しています。議論の焦点はもっと狭く、生成と検証は異なる作業であり、検証には毎回同じ答えを返すツールが必要だということです。

ビジュアルアシストはコパイロットに取って代わるものですか?

いいえ、そうしようともしません。VAとCopilotはVisual Studio内で並行して動作します。Copilotはドラフトを作成し、VAのパーサーはそのドラフトをチェックするために使用されます。

ここでいう「決定論的」とは、具体的にどういう意味でしょうか?

同じコードが与えられた場合、パーサーは実行ごと、マシンごと、セッションごとに、同じ参照、定義、名前変更範囲といった同じモデルを生成します。サンプリングも、温度変化も、ばらつきもありません。

AIモデルがC++を誤って解釈した例を教えてください。

よくある例としては、複数のオーバーロードが一致する場合に間違ったオーバーロードを選択する(文字列リテラルで を優先するboolstd::stringは典型的)、その型に存在しないメンバーや API を提案する、スマートポインタの所有権を誤って処理して何かが二重に解放されたり、全く解放されなかったりする、異なるライブラリバージョンのシグネチャへの呼び出しを「更新」する、などが挙げられます。これらのいずれも、差分表示では全く問題ないように見える可能性があります。

コードがコンパイルできるなら、問題ないんじゃないですか?

いいえ。C++では、コンパイルが成功するということは構文が有効であるということであって、動作が正しいということではありません。解放済みメモリの使用、ダングリング参照、整数オーバーフロー、単純な論理エラーなどはすべてコンパイル時に問題なく発生し、実行時に表面化します。多くの場合、負荷がかかった状態でのみ発生します。コンパイルが成功するという表現は正しくありません。

AIに記号のすべての使用箇所を検索させることはできないのでしょうか?

可能ですが、リストが完全かどうかはわかりません。モデルは妥当なセットを返しますが、マクロ、テンプレート、または参照していないファイルでの使用箇所を見落とす可能性があり、次回は異なるセットを返すこともあります。パーサーは翻訳セット全体を走査し、実行ごとに同じ完全なカウントを返します。