Scalaプロジェクト向けの、アーキテクチャ図やドキュメントを生成するsbtプラグインです。
以下のスクリーンショットは サンプルプロジェクトに対してZugenを実行した結果です。
ドメインオブジェクトが含まれるとして指定したパッケージ以下の、オブジェクトたちの一覧表です。 ドメインオブジェクトがドメインの用語と対応関係にあるか、などを確認する際に便利です。
- パッケージやclass/trait名、scaladoc、ファイルパスの一覧
- GitHubのソースへのジャンプ
ドメインオブジェクト同士の関連を示す図です。
- class/trait名とscaladocの表示
- 継承関係の図示
- classやtraitのプロパティの表示
- ドメイン以外のパッケージに依存するドメインオブジェクトの参照を赤くハイライト
- GitHubのソースへのジャンプ
特定のパッケージ(controller用パッケージなど)を起点に、メソッドの呼び出し関係を示す図です。
- プロジェクト内部のクラス同士の呼び出しを可視化
- 外部ライブラリの呼び出しを(薄いグレーで)可視化
- GitHubのソースへのジャンプ
addSbtPlugin("io.github.todokr" % "sbt-zugen" % "2021.12.0")
domainPackages=example.domain # Package name which represent domain
domainObjectExcludePatterns=".+Repository" # Regex patterns to exclude classes from domain relation diagram
methodInvocationRootPackage=example.controllers # The root package of method invocation diagram
key | description | available values | default | example |
---|---|---|---|---|
documentsToGenerate | 出力するドキュメントタイプです。 空の場合、全種類のドキュメントが生成されます。 |
domain-object-table domain-relation-diagram method-invocation-diagram |
empty | documentsToGenerate=domain-object-table,domain-relation-diagram,method-invocation-diagram |
domainPackages | ドメインオブジェクトが含まれるパッケージを指定します。 | comma separated string | empty | domainPackages=app1.domain,app2.domain |
domainObjectExcludePatterns | Domain relation diagram に表示させないクラスを、正規表現で指定できます。 | comma separated string | empty | domainObjectExcludePatterns=".+Repository" |
methodInvocationRootPackage | Method invocation diagram における呼び出しの起点となるパッケージです。 | string | empty | methodInvocationRootPackage=controller |
documentPath | Zugenのドキュメントを出力するディレクトリです。 | string | target/zugen-docs | documentPath=docs |
githubBaseUrl | GitHubのソースへのジャンプを行うためのベースとなる、リポジトリURLです | string | empty | githubBaseUrl=https://github.com/todokr/zugen/blob/trunk/src/sbt-test/sbt-zugen/application/ |
Zugen はソースコードの情報を SemanticDB から収集しています。 SemanticDB のファイルを生成する手段は2つあります。
1.13より、sbt は SemanticDB の生成をサポートしています。
ThisBuild / semanticdbEnabled := true
ThisBuild / semanticdbVersion := "4.4.27"
scalacOptions ++= Seq("-Yrangepos", "-P:semanticdb:text:on")
addCompilerPlugin("org.scalameta" %% "semanticdb-scalac" % "4.4.33" cross CrossVersion.full)
scalacOptions ++= Seq("-Yrangepos", "-P:semanticdb:text:on")
$ sbt zugen
実行すると、documentPath
で設定したディレクトリ (デフォルトは target/zugen-docs
) に、Zugenのドキュメントが生成されます。
質問などは気軽に Twitterでご連絡ください。
Zugen はJavaプロジェクトのドキュメント生成ツールである JIG の哲学にインスパイアされています。