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

mayo.cコールグラフ

C言語プロジェクトの解析やドキュメント化は、プロジェクトの規模が大きくなるにつれて複雑になります。特に関数間の呼び出し関係を把握することは、コードの理解や保守において重要です。本記事では、オープンソースのドキュメント生成ツールであるDoxygenと、グラフ描画ツールであるGraphvizを組み合わせて、C言語プロジェクトの呼び出しグラフを自動生成する方法を耐量子計算機暗号(PQC)に基づく署名方式を用いて紹介します。

DoxygenとGraphvizの概要

  • Doxygen: C、C++、Javaなど多くのプログラミング言語に対応したドキュメント生成ツールです。ソースコード中のコメントからAPIドキュメントを生成できます。

  • Graphviz: グラフ構造を描画するためのツールで、Doxygenと連携して呼び出しグラフやクラス図を生成できます。

環境設定

  1. Doxygenのインストール:

    • macOS: brew install doxygen

    • Ubuntu: sudo apt-get install doxygen

  2. Graphvizのインストール:

    • macOS: brew install graphviz

    • Ubuntu: sudo apt-get install graphviz

  3. 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_GRAPHCALLER_GRAPH: 関数の呼び出し関係図を生成します。

  • HAVE_DOTDOT_PATH: Graphvizのdotコマンドを使用するための設定です。

ドキュメントの生成と確認

設定が完了したら、以下のコマンドでドキュメントを生成します:

doxygen Doxyfile

生成されたドキュメントは、通常htmlディレクトリ内に出力されます。index.htmlをブラウザで開くことで、関数の呼び出しグラフやソースコードの構造を視覚的に確認できます。以下は、srcディレクトリの依存関係グラフになります。

srcのディレクトリの依存関係グラフ

注意点とベストプラクティス

  • 関数や構造体に適切なDoxygen形式のコメントを追加することで、ドキュメントの品質が向上します。

  • 静的関数もドキュメント化したい場合は、EXTRACT_STATIC = YESを設定してください。

  • 大規模なプロジェクトでは、生成されるグラフが複雑になることがあります。MAX_DOT_GRAPH_DEPTHDOT_GRAPH_MAX_NODESの設定を調整することで、グラフの複雑さを制御できます。

まとめ

DoxygenとGraphvizを活用することで、C言語プロジェクトの関数間の呼び出し関係を視覚的に把握しやすくなります。これにより、コードの理解や保守が効率的に行えるようになります。特にMAYO-Cのような暗号ライブラリの解析において、その効果は顕著です

サーバ&テクノロジ

Posted by 納戸 工房