DoxygenとGraphvizでC言語プロジェクトの呼び出しグラフを可視化


C言語プロジェクトの解析やドキュメント化は、プロジェクトの規模が大きくなるにつれて複雑になります。特に関数間の呼び出し関係を把握することは、コードの理解や保守において重要です。本記事では、オープンソースのドキュメント生成ツールであるDoxygenと、グラフ描画ツールであるGraphvizを組み合わせて、C言語プロジェクトの呼び出しグラフを自動生成する方法を耐量子計算機暗号(PQC)に基づく署名方式を用いて紹介します。
DoxygenとGraphvizの概要
-
Doxygen: C、C++、Javaなど多くのプログラミング言語に対応したドキュメント生成ツールです。ソースコード中のコメントからAPIドキュメントを生成できます。
-
Graphviz: グラフ構造を描画するためのツールで、Doxygenと連携して呼び出しグラフやクラス図を生成できます。
環境設定
-
Doxygenのインストール:
-
macOS:
brew install doxygen
-
Ubuntu:
sudo apt-get install doxygen
-
-
Graphvizのインストール:
-
macOS:
brew install graphviz
-
Ubuntu:
sudo apt-get install graphviz
-
- MAYOをクローン:
- git clone https://github.com/PQCMayo/MAYO-C.git
Doxygen設定ファイル(Doxyfile)の編集
以下のコマンドを実行して、ベースとなる設定ファイルを作成します:
doxygen -g
Doxygenの設定ファイルであるDoxyfile
を編集し、以下の項目を設定します:
PROJECT_NAME = "MAYO-C" OUTPUT_LANGUAGE = Japanese-en EXTRACT_ALL = YES INPUT = src RECURSIVE = YES SOURCE_BROWSER = YES CALL_GRAPH = YES CALLER_GRAPH = YES HAVE_DOT = YES DOT_PATH = /usr/bin/dot
-
EXTRACT_ALL
: すべての関数や変数をドキュメント化対象にします。 -
INPUT
: ソースコードのあるディレクトリを指定します。 -
RECURSIVE
: サブディレクトリも含めて解析します。 -
CALL_GRAPH
とCALLER_GRAPH
: 関数の呼び出し関係図を生成します。 -
HAVE_DOT
とDOT_PATH
: Graphvizのdotコマンドを使用するための設定です。
ドキュメントの生成と確認
設定が完了したら、以下のコマンドでドキュメントを生成します:
doxygen Doxyfile
生成されたドキュメントは、通常html
ディレクトリ内に出力されます。index.html
をブラウザで開くことで、関数の呼び出しグラフやソースコードの構造を視覚的に確認できます。以下は、srcディレクトリの依存関係グラフになります。
注意点とベストプラクティス
-
関数や構造体に適切なDoxygen形式のコメントを追加することで、ドキュメントの品質が向上します。
-
静的関数もドキュメント化したい場合は、
EXTRACT_STATIC = YES
を設定してください。 -
大規模なプロジェクトでは、生成されるグラフが複雑になることがあります。
MAX_DOT_GRAPH_DEPTH
やDOT_GRAPH_MAX_NODES
の設定を調整することで、グラフの複雑さを制御できます。
まとめ
DoxygenとGraphvizを活用することで、C言語プロジェクトの関数間の呼び出し関係を視覚的に把握しやすくなります。これにより、コードの理解や保守が効率的に行えるようになります。特にMAYO-Cのような暗号ライブラリの解析において、その効果は顕著です