※このページではアフィリエイト広告を紹介しています

Javaのクラス図を自動生成する ~UMLDoclet~

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

この記事の目標

ライブラリのプログラムを読んでみたい。そこでUMLのクラス図を自動生成して、プログラムの構造を視覚的に理解してみる

UMLとは「統一モデリング言語(Uniformed Modeling Language)」を指す。簡単に言えば、オブジェクト指向言語の設計や分析に使われる図の集合である。

 

手順

ライブラリUMLDocletをダウンロード

クラス図を自動生成してくれるライブラリUMLDocletを下記URLのjarリンクからダウンロードする。初版執筆時点で使用したバージョンは2.0.12である。

Just a moment...
後の手順でJava 11を使ってクラス図を生成するのでUMLDoclet 2.xをダウンロードする。もしJava 8以前でクラス図を生成する場合はUMLDoclet 1.xを使う。

 

UMLDocletでクラス図を出力

UMLDocletの使い方の概要

UMLDocletは、Javadocコマンドと組み合わせて利用する。

Javadocとは、サン・マイクロシステムズが開発したコンピュータソフトで、JavaのソースコードからHTML形式のAPI仕様書を生成するものである。

出典: ja.wikipedia.org

クラス図の画像を描画するライブラリGraphvizを別途インストールする必要がある。インストール方法の詳細は割愛するが、筆者はGraphviz 2.38をインストールした。

 

サンプルバッチファイルを実行

下記のバッチファイルを実行してクラス図を生成する。4~6行目がライブラリUMLDocletを使う設定である。

"C:\Program Files\Amazon Corretto\jdk11.0.10_9\bin\javadoc.exe" ^
-sourcepath [ソースコード格納フォルダパス]\commons-csv\src\main\java ^
-d [Javadoc出力フォルダ] ^
-docletpath [UMLDocletのjarファイルのファイルパス] ^
-doclet nl.talsmasoftware.umldoclet.UMLDoclet ^
-umlImageDirectory [クラス図出力フォルダ] ^
-package ^
-quiet ^
-subpackages org.apache.commons.csv
9行目の-subpackagesオプションは、指定したパッケージ配下全てのJavadoc(今回の場合はクラス図)を作成する設定である。今回のApache Commons CSVはパッケージが1つしかないため特に指定する意味はないが、パッケージが多い場合に便利なので指定しておく。

実行すると下記の結果となった。JavadocのHTML生成でエラーが発生しているが、クラス図の生成が目的なので気にしない。

[バッチファイルのフォルダ] >
(中略)
javadoc: エラー - Unanticipated error generating UML: java.lang.IllegalStateException: I/O exception postprocessing CommonsCsvDocs\index.html
エラー2個
警告5個

 

実行結果

下記のファイルを開くと生成したクラス図が表示される。

[Javadoc出力フォルダ]\[クラス図出力フォルダ]\org.apache.commons.csv.package.svg

Apache Commons CSVの各クラスが、クラス間の関係を表す矢印とともに描画されている。しかしLexerクラスなどApache Commons CSV内の他のクラスから孤立しているクラスがいくつかあり、不十分である。

拡大画像


 

改造版UMLDocletでクラス図を出力

下記のプログラム修正を行い、クラス内のメンバ変数(フィールド)は常にクラス図に表示させるようにした。

void showMembers(String value) {
    Set<Visibility> visibility = parseVisibility(value);
    fieldConfig.visibilities = parseVisibility("private");
    // 元々は fieldConfig.visibilities = visibility;
    methodConfig.visibilities = visibility;
}

改造版のUMLDocletで生成したクラス図が下記である。孤立したクラスが格段に減り、クラス間の関係が分かりやすくなった。

拡大画像

 

まとめ

CSVParserクラスが依存しているLexerクラス(日本語で字句解析器クラス)が、CSVファイルの構造を理解する助けになるクラスで重要そうである。時間を見つけてこのクラスのプログラムを読んでみたい。

コメント

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