Javaのクラス図やコールグラフを自動生成する ~Doxygen~

Java
この記事は約8分で読めます。
広告

この記事の目標

クラス図を自動生成できるツールDoxygenをご紹介します。過去に紹介したUMLDocletとの違いは、Doxygenはコールグラフを追加で出力することができることです。

「コールグラフ」とは、各メソッドが何のメソッドを呼び出したり、何のメソッドに呼び出されたりしているかを表したグラフです。
Javaのクラス図を自動生成する ~UMLDoclet~
この記事の目標 ライブラリのプログラムを読んでみたい。そこでUMLのクラス図を自動生成して、プログラムの構造を視覚的に理解してみる。 UMLとは「統一モデリング言語(Uniformed Modeling Language)」を指す。簡単...

 

手順

環境構築を簡単にするため、Docker上でDoxygenを実行します。具体的な手順は省略しますが、Dockerを使わずにDoxygenを利用することも可能です。

以下、Dockerのインストールは完了している前提で進めます。

本記事で使用したDoxygenのバージョンは1.8.13、Dockerのバージョンは2.10.17です。

 

作業用フォルダの作成

好きな場所に1つフォルダを作成してください。Docker上でDoxygenを実行するうえで、入出力フォルダとして使用します。

本記事では下記の場所にフォルダをつくります。以下、「作業用フォルダ」と呼びます。

C:\Users\[ユーザ名]\Desktop\doxygen

 

DoxygenのDockerイメージを作成する

Doxyfileをコピーする

下記GitHubリポジトリからDockerfileをダウンロードし、作業用フォルダ直下に配置します。

GitHub - aperfectcypher/docker-doxygen: doxygen +graphviz with svn and git.
doxygen +graphviz with svn and git. Contribute to aperfectcypher/docker-doxygen development by creating an account on GitHub.

配置先: C:\Users\[ユーザ名]\Desktop\doxygen\Dockerfile

GitHubリポジトリからファイルをダウンロードする方法は、大きく下記の2通りあります。

  • Gitをインストールして、git cloneコマンドを使う
  • Code > Download ZIP をクリックしてzipファイルでダウンロード

 

Dockerイメージをビルドする

コマンドプロンプトを開き、下記コマンドを実行します。

作業用フォルダに移動した後、カレントディレクトリにあるDockerfileを使って「docker-doxygen」という名前のDockerイメージを作成するコマンドです。

cd C:\Users\[ユーザ名]\Desktop\doxygen
docker build -t docker-doxygen .
docker build — Docker-docs-ja 20.10 ドキュメント

 

Doxyfileの作成

Doxygenの設定ファイルであるDoxyfileを作成します。

Doxyfileの新規作成

下記コマンドを実行します。作業用フォルダ直下にデフォルトのDoxyfileが出力されます。

docker run --rm -v C:\Users\[ユーザ名]\Desktop\doxygen:/tmp/Doxygen ^
docker-doxygen doxygen -g /tmp/Doxygen/Doxyfile

出力先: C:\Users\[ユーザ名]\Desktop\doxygen\Doxyfile

 

「docker run ~ docker-doxygen」は先ほど作成したDockerイメージを起動するコマンド、

それに続く「doxygen -g /tmp/Doxygen/Doxyfile」はDoxyfileを作成するコマンドです。

Docker run リファレンス — Docker-docs-ja 20.10 ドキュメント
Doxygen
Doxygen は、C++、C、Java、Objective-C、Python、IDL (Corba、Microsoft 風) 向けのドキュメンテーションシステムです。 PHP、C#、Dにもある程度対応しています。

 

Doxyfileの編集

Apache Commons CSVのクラス図やコールグラフを生成してみたいと思います。デフォルトのDoxyfileから下記の設定を変更します。

  • Doxyfileのエンコード ※修正不要な場合もあります
DOXYFILE_ENCODING = SJIS  # 元々はUTF-8
  • プロジェクト名
PROJECT_NAME           = "Apache Commons CSV"  # 元々は空
  • 出力先フォルダ
OUTPUT_DIRECTORY = /tmp/Doxygen/result/  # 元々は空
  • 出力言語
OUTPUT_LANGUAGE        = Japanese  # 元々はEnglish
  • 全ファイルからクラス図やコールグラフを生成する
EXTRACT_ALL            = YES  # 元々はNO
  • 全メソッドからクラス図やコールグラフを生成する
EXTRACT_PRIVATE        = YES  # 元々はNO
EXTRACT_PACKAGE        = YES  # 元々はNO
EXTRACT_STATIC         = YES  # 元々はNO
  • クラス図やコールグラフを生成するソースコードのフォルダ
INPUT                  = /tmp/Doxygen/commons-csv/src/main/  # 元々は空
  • 入力ファイルのエンコード ※修正不要な場合もあります
INPUT_ENCODING         = SJIS  # 元々はUTF-8
  • ソースコードのフォルダのサブフォルダからも読み込む
RECURSIVE              = YES  # 元々はNO
  • LaTeXのファイルを出力するか
GENERATE_LATEX         = NO  # 元々はYES
  • dotを使用可能にする ※クラス図やコールグラフの描画に必要
HAVE_DOT               = YES  # 元々はNO
  • UMLの見た目にする
UML_LOOK               = YES  # 元々はNO
  • コールグラフを出力する
CALL_GRAPH             = YES  # 元々はNO
CALLER_GRAPH           = YES  # 元々はNO
  • dotのパス
DOT_PATH               = /usr/bin/dot  # 元々は空
  • コールグラフの呼び出し階層数
MAX_DOT_GRAPH_DEPTH    = 2  # 元々は0(無制限)

 

Doxygenの実行

クラス図やコールグラフを生成するソースコードを配置

下記GitHubリポジトリからApache Commons CSVのコードをダウンロードし、作業用フォルダの直下に配置します。

GitHub - apache/commons-csv: Mirror of Apache Commons CSV
Mirror of Apache Commons CSV. Contribute to apache/commons-csv development by creating an account on GitHub.

配置先: C:\Users\[ユーザ名]\Desktop\doxygen\commons-csv

 

Doxygenの実行

下記のコマンドを実行します。

docker run --rm -v C:\Users\[ユーザ名]\Desktop\doxygen:/tmp/Doxygen ^
docker-doxygen doxygen /tmp/Doxygen/Doxyfile

出力先: C:\Users\[ユーザ名]\Desktop\doxygen\result ※Doxyfileで指定

 

「docker run ~ docker-doxygen」は先ほど作成したDockerイメージを起動するコマンド、

それに続く「doxygen /tmp/Doxygen/Doxyfile」はdoxygenでクラス図やコールグラフを生成するコマンドです。

 

実行結果

下記ファイルをブラウザで開くと、トップページが開きます。

C:\Users\[ユーザ名]\Desktop\doxygen\result\html\index.html

リンクを辿ってCSVFormatクラスのページを開くと、下記のようなクラス図が表示されます。

Doxygenでは、UMLDocletで生成していたパッケージ単位のクラス図は生成できないようです。

拡大画像

 

CSVFormat#printRecordメソッドを見ると、コールグラフが表示されます。DoxyfileのMAX_DOT_GRAPH_DEPTHを2に設定したので、呼び出し階層2回分のグラフになっています。

拡大画像

 

まとめ

Doxygenを使ってクラス図やコールグラフを出力する方法を紹介しました。

パッケージ単位のクラス図が欲しい場合はUMLDoclet、コールグラフが欲しい場合はDoxygenといった使い分けができそうです。

 

 

 

 

コメント

タイトルとURLをコピーしました