ブログ 約7分で読めます

AI生成コードから生きたCode Cityへ

Share this article
AI生成コードから生きたCode Cityへ

AIは驚くべき速さでコードを生成できます。しかし落とし穴があります:コードが増えることが、必ずしも理解の深化を意味しないのです。

AIが生成した大規模なコードベースが成長し始めると—クラス、依存関係、モジュール、関係性、継承—ファイルを1つずつ読んでいくのはすぐに困難になります。ここで可視化が力を発揮します。

コードベースのための生きた3D都市

CppDepend Smart Code Cityを使えば、大規模なC++コードベースを、すべての視覚要素に意味がある3D都市に変換できます:

CppDepend Smart Code City:大規模C++コードベースが地区・建物・優先度マーカー付きの3D都市として描画
Smart Code City:コードベース全体を探索可能な3Dランドスケープとして表示。
  • 建物:個々のC++コード要素(メソッドまたはクラス)を表します。
  • 建物の寸法:高さと占有面積が主要なコードメトリクス(コード行数、循環的複雑度)を反映します。
  • カラーヒートマップ:色の濃度は保守性、技術的負債、ルール違反の深刻度に直接対応します。
  • ドーム:高い結合度と複雑な構造的依存関係を強調します。
  • 地区の境界:黄色/オレンジの輪郭がモジュール、名前空間、ディレクトリの評価を示します。
  • 炎マーカー:最優先項目と、即座のリファクタリングが必要な重大な技術的負債を特定します。
  • 星マーカー:システム全体で頻繁に使用される、または中心的なコード要素を識別します。

「このコードをどこから読み始めるべきか?」と尋ねる代わりに、こう尋ねることができます:「このコードベースは実際にどのように見えるのか?」

そしてこれはAI生成コードで特に興味深いものになります。AIはかつてないほど簡単に大量のコードを生み出せるようにしました。しかしコード量が増えるにつれて、アーキテクチャ、保守性、結合度、複雑性の把握が難しくなります。視覚的なマップは開発者にもう1つの理解層を与えます—従来のコードレビューと静的解析を補完するものです。

AIで生成。メトリクスで分析。可視化で理解。巨大な生成コードベースをテキストの壁から、探索し、ナビゲートし、考察できるものへと変えましょう。

コードベースにクエリを実行し、3Dで確認(CQLinq統合)

Smart Code Cityは、CppDependのCQLinq(Code Query LINQ)エンジンを3Dビジュアルランドスケープに直接結びつけます:

Smart Code Cityの3Dランドスケープで明るい青色にハイライトされたCQLinqクエリ結果
CQLinqクエリが一致する63の要素を都市内で即座に点灯。
  • ライブ3D都市ハイライト:CQLinqクエリを実行すると、一致するコード要素が都市ランドスケープ全体で明るい青色に即座に点灯します(例:63の都市要素がハイライト)。
  • リアルタイム空間フィルタリング:高い複雑性、テスト不足、循環依存、最近のAIによる変更をクエリすると、一致する建物がそれぞれの地区でリアルタイムに光ります。
  • 統合クエリエディタ&結果ツリー:右パネルでクエリを記述し、名前空間・クラス・メソッドでグループ化された構造化結果を、3D選択と同期させながら探索できます。

CQLinqがSmart Code Cityに直接統合されているため、C#ライクなクエリを書いてC++コードベースを検査し、結果を3D都市景観上で即座にハイライト表示できます。

存在するものだけでなく、変化したものを見る

この可視化の最も有用な部分の1つは、コードの進化を都市内で直接見られることです。何千行ものC++を手動で比較する代わりに、コード差分ビューが何が変わったかの視覚的な全体像を即座に提供します:

Smart Code Cityのコード差分ビュー:新規コードは金色の建物、変更コードは紫色
都市内のコード差分:金=新規コード、紫=変更コード。

🟨 金 = 新規コード   🟪 紫 = 変更コード

これにより、次のような質問への回答がはるかに容易になります:

  • 最新のAI生成は何を追加したか?
  • どの既存コンポーネントが変更されたか?
  • 変更はどこに集中しているか?
  • AIは小さな領域に触れただけか、それともアーキテクチャの大部分を作り替えたか?
  • コードベースのどの部分が詳細なレビューに値するか?

結果として、「何が変わったか?」から「どこを調査すべきか?」へと進むのがはるかに速くなります。AIは変更を生成できます。CppDependはその影響を見せてくれます。

コード差分を超えて:3Dでメトリクス変化を可視化

コード変更は、どの行が追加・変更されたかだけの話ではありません。より重要な問いは:その変更がコードベースの品質と複雑性にどう影響したか?です。

高度なメトリクス差分可視化により、変更前後のコードベースを比較し、その影響を3D Smart Code City上で直接確認できます:

Smart Code Cityでの変更前後のコードベースを比較するメトリクス差分可視化
メトリクス差分:変更が品質と複雑性に与えた影響を地区ごとに表示。

数字の表を眺める代わりに、メトリクスがアーキテクチャ全体でどう変化したかを視覚的に探索できます:

  • 3D建物がメトリクスの変化を可視化します。
  • 色が注意が必要な領域を強調します。
  • マーカーが潜在的なホットスポットを示します。
  • 建物の寸法が複雑性と構造の変化を露呈します。
  • アーキテクチャ全体が変更のコンテキストを提供します。

これはAI生成C++コードで特に興味深いものです。AIモデルは差分では小さく見える変更を導入するかもしれませんが、その変更が複雑性を増大させ、保守性を低下させ、高度に接続されたコンポーネントに影響する可能性があります。3Dメトリクス差分なら、こうしたアーキテクチャ上の影響をすばやく発見できます。

行レベルの差分 → メトリクスレベルの差分 → アーキテクチャへの影響。これがコード進化を可視化する真の利点です。何が変わったかだけでなく、その変更がコードベースに何をしたかを見てください。

あらゆる要素を検査:ツールチップ、推奨事項&3Dコールグラフ

Smart Code Cityは、マクロなアーキテクチャビューと、コードベース内のあらゆる要素への即座のディープダイブ・メトリクス検査を組み合わせています。

Smart Code Cityのオンホバーツールチップ:名前空間、ソースファイル、LOC、保守性、結合度、負債、イシューを表示
建物にホバー:完全なコンテキストと主要メトリクスを一目で。

オンホバーツールチップ&サイドメトリクスパネル

  • ロケーションコンテキスト:完全な名前空間階層、クラス名、ソースファイル(例:xmlparse.cpp)、正確な行番号。
  • 一目でわかる主要メトリクス:コード行数、保守性指数、循環的複雑度、出結合/入結合、技術的負債の推定時間、負債評価、総イシュー数、コメント数。
  • クイックインタラクティブショートカット:Ctrl+クリック(アクション)、Shift+クリック(依存関係)、Alt+クリック(3Dコールグラフ)、ダブルクリック(推奨事項)、右クリック(高度なアクション)。
  • サイドメトリクスパネル:建物をクリックすると、コード実装・コード設計・負債&イシューの分野別に分類された詳細な内訳が右パネルに固定表示されます。
Smart Code Cityでダブルクリックにより表示される優先度付きリファクタリング助言の推奨事項パネル
ダブルクリック:実用的で優先度付けされたリファクタリング助言を3Dマップ上に直接表示。

ダブルクリック:実用的な推奨事項

任意の建物をダブルクリックすると、複雑な静的解析の数値を明確で優先度付けされた助言に変換する推奨事項パネルが即座に表示されます:

  • 高い循環的複雑度:分岐の多いロジックを強調し、条件構造の簡素化を推奨します。
  • 高い出結合:過剰な外向き依存関係を特定し、インターフェースや依存性注入(DI)の導入を助言します。
  • イシューアラート:高深刻度のイシュー(例:41件の高深刻度イシュー)を特定し、即座の計画が必要な重大な技術的負債を警告します。
  • テストカバレッジ警告:監視されていないコード(例:低カバレッジ 0%)を警告し、単体テストの追加を促します。
Smart Code CityのAlt+クリック3Dコールグラフ:呼び出し元と呼び出し先を結ぶ方向性アーク
Alt+クリック:3Dコールグラフのアークが地区をまたいで実行パスを追跡。

Alt+クリック:インタラクティブ3Dコールグラフ

  • 即座のコールグラフトレース:Altキーを押しながら任意の建物をクリックすると、選択した要素とすべての呼び出し元・呼び出し先を都市景観上で直接結ぶ3D方向性アークが描画されます。
  • 空間的関係マッピング:緑の方向矢印がメソッド間の実行パスをリアルタイムに視覚的に追跡し、1つの関数が近隣の地区や遠隔のモジュールとどう相互作用するかを明らかにします。
  • コンテキストメソッドラベル:対象の呼び出し先に直接ラベルが付き、3Dビューを離れることなくコールチェーンを直感的にたどれます。

プロのように探索:City Zones、The Code News&コマンドライン

Smart Code CityのCity Zonesフィルタリング:クリティカル、新規、変更、イシュー多数の領域を分離
City Zones:ノイズを除外し、重要なものに集中。

City Zones&スコープ分離

強力なCity Zonesフィルタリングシステムにより、チームはノイズを除外し、コードベースの特定のサブスコープのみに集中できます:

  • Critical:重大なアーキテクチャまたは安全性ルール違反を引き起こす要素のみを表示。
  • With New Issues:最近のコミットで導入されたリグレッションと新規違反を分離。
  • With High Issues / With Issues:アクティブな技術的負債を持つメソッドに集中。
  • New Code:新たに追加されたコンポーネントをレンダリングし、コードレビュー時に最新コードの品質を検証。
  • Under Construction:リファクタリングや拡張が進行中の、活発に変更されている領域を強調。
  • カスタムサイズしきい値(例:LOC > 10):小さなヘルパー関数を隠し、重要なメソッドのみに集中。
  • カスタムゾーン作成(+ NEW ZONE…):チームのワークフローやスプリント目標に合わせた空間ビューを定義。
The Code News:Smart Code Cityのビルド健全性を新聞スタイルでまとめたエグゼクティブサマリー
The Code News:ビルドの健全性を一面記事スタイルで。

The Code News:編集スタイルの品質レポート

Smart Code Cityは、味気ない静的解析データを、新聞スタイルの魅力的なエグゼクティブサマリーに変換します:

  • 一面の見出し:ビルドの現在の健全性状態を即座に報じます—品質しきい値が破られた場合の「SYSTEM INTEGRITY CRISIS: CRITICAL GATES BREACHED」のような見出しで。
  • The Register(インシデントログ):品質ゲートレポート(例:FAILED 5/8)、重大イシュー、高深刻度違反、技術的負債の合計日数をまとめたビルド健全性の速報。
  • 一目でわかる品質データ:見通し付きの負債評価(例:Class C / Stable Outlook)、正味コード行数、システム人口(プロジェクト、型、メソッド)、単体テストカバレッジ。
Smart Code Cityのシティコマンドライン:goto、summary、zone、markerコマンド
シティコマンドライン(λ):キーボード駆動の探索。

シティコマンドライン(λ)

ターミナルスタイルのコマンドインターフェース(λ Execute command…)により、キーボード駆動のナビゲーションとリアルタイムの可視化操作が可能です:

  • goto [name]:特定の建物、メソッド、クラスにカメラを即座にセンタリング&ズーム。
  • summary:現在の選択またはビューの高レベルなアーキテクチャ概要を生成。
  • zone [critical | new | changed | issues | high issues]:メニューを開かずに空間フィルタを動的に適用。
  • marker [name] [on|off]:視覚オーバーレイを制御(clouds、issues、priority、modified、all、none)。
  • clear / exit:ハイライトをリセット、またはターミナルオーバーレイを閉じる。

結論:1枚の絵は千行のコードに勝る

C++アーキテクチャが拡大し、AI拡張ワークフローがかつてない速さでコードを生成する中、従来のテキストベースのレポートや無限のコンパイラログでは、ソフトウェア品質の管理を維持できなくなっています。Smart Code Cityは、複雑な静的コード解析を直感的な3D空間ランドスケープに変換し、アーキテクチャの健全性、技術的負債、構造的リスクを即座に認識可能にします。

都市景観の1回の視覚的検査が、何時間もの手動コード監査に取って代わります:

  • 即座のリスク検出:巨大な建物、クラスタ密度、警告マーカーが、技術的負債、過剰な複雑性、アーキテクチャのドリフトを一目で明らかにします。
  • インタラクティブなアーキテクチャ制御:カスタムCQLinqクエリや3Dコールグラフからキーボード駆動のターミナルコマンドまで、開発者は実行パスを検査し、高リスクゾーンを容易に分離できます。
  • 実用的なガイダンス:組み込みツールチップ、ダブルクリックのリファクタリング推奨、エグゼクティブサマリーが、生データを明確で優先度付けされたエンジニアリングタスクに変換します。

CppDependは、空間認識をC++静解析にもたらすことで、1つの3D可視化が本当に千行のコードに勝ることを証明します—迅速な機能開発が、長期的な保守性、安全性、システム完全性を犠牲にすることがないようにします。

この記事をシェアする