はじめに
近年急速に発達しているAIにおいて、ソフトウェア開発においてもAIによる一次コーディングが当たり前になりつつあります。開発者はAIのコードをレビュー、修正することがおもな役割になり、プログラムの構造を把握する力がさらに必要なスキルになっていると感じます。
Understandによる構造の可視化と比較して、AIがどのくらい表現可能であるかを調べてみました。
対象
- Understand:7.0 build 1220
- AI: GPT-4o (GitHub Copilot)
- 解析対象プロジェクト:zlib (https://github.com/madler/zlib)
- 対象関数:inflate
- 対象グラフ:Calls(コールグラフ)
比較
対象のinflate関数において、Understand上での表示と、AIにプロンプトを投げたときの結果を比較しました。inflate関数はコード行数が601行、複雑度が282と非常に複雑な関数です。
Understandのグラフ
CallsグラフはUnderstand上ではこのように表現されました。

呼び出しに関してはそこまで複雑ではありませんでした。
AIの出力するグラフ
AIでコールグラフを出すためにプロンプトを考えてみました。テキストでの出力に対応していますので、Understandでも対応している軽量マークアップ言語のGraphviz形式(.dot)で出力するようにしました。何度か試し、できる限り実際のグラフに近い出力になるようにプロンプトを調整しました。
inflate関数の呼び出し図をGraphviz形式で表現してください。
・呼び出し図とはinflateが関数内で使用している関数を図示したものです。
・呼び出す関数を確認し、別の関数を使用している場合、その関数も図示してください。
・inflate関数を一番左に配置し、呼び出す関数を右へ図示してください。
・関数のノードは長方形で表現してください。
・出力するファイルはinflate.dotとしてください。
AIには該当関数が定義されているファイル(inflate.c)を添付した状態で、上記のプロンプトを投げています。
AIの回答

inflate関数が記載されている行数(590 – 1265)は読み込まれているようです。また、呼び出している関数を検索している様子が分かります。AIが考える手順に問題点はなさそうです。
AIが生成したグラフ

同じプロンプトで2回目の出力(新しいセッションで問い合わせ)

AIが生成したグラフの特徴は以下の通りでした。
- AI側ではLOAD関数などのマクロ関数が表示されている。
Understandではマクロ関数は関数として呼び出しには表示されませんが、AIでは関数として扱ってくれるようです。 - 呼び出し関数に過不足
呼び出している関数の内容が毎回異なりました。マクロ関数に関しても、本来15種類の関数が呼ばれていますが、一部または全く表示されないこともありました。
マクロ関数について
inflate関数は、以下のマクロ関数を直接使用しています。
※Understandではインタラクティブレポートの「API Info Table」を確認することで、どのマクロ関数を使用しているかを簡単に確認できます。inflate関数は15種類のマクロ関数を使用していることが分かります。

まとめ
今回の検証では、Understandのグラフに寄せるようにプロンプトを作成してみましたが、AIのほうは直接呼び出している関数の一覧取得がうまくいかず、グラフ表示が毎回異なる結果となりました。今回の調査から、正しく関数一覧を取得するためのプロンプト作成が課題であることが分かりました。
プロンプトをさらに調整することで、より精度の高いグラフを表示することは可能と思います。
しかしながら、プロジェクトの構造を正確に把握するためのAI活用においては、現時点ではAIに高精度な構造可視化が期待できる段階には至っていないと考えられます。
一方で、高精度で再現性のある解析データを持つUnderstandは有用なツールと言えます。
また、UnderstandをMCPサーバーとして使用することでその精度を補うことが期待できます。ご興味のある方はこちらの記事も参考にしてください。
