JIGのsbt-pluginを作った
本記事は、 Scala Advent Calendar 2019 の22日目です。
sbt-jigは、 こちら→ https://github.com/yoshiyoshifujii/sbt-jig
以下、制作における背景とざっくり説明。
背景
みなさんはJIG(治具)というツールをご存知でしょうか。
詳しくは、以下のリンクを読んでいただくとして…
JIGは、Javaで書かれたコードとビルドされたクラスファイルを解析して、ドメインモデルの関連を良い感じにダイアグラムやExcelで示してくれるツールです。
最近、こちらのツールを業務やワークショップなどで使わせていただき、大変重宝させていただいております。
何とか、こちらのツールをScalaでも使えないものかとツール作者の @irof さんにお聞きしたところ、「ソースコードは解析できないけど、クラスファイルは解析できるので、図は出ますよ」ということで、試しに動かしたところ、出ました。
ただし、
- ソースコードの解析ができないので、ScalaDocを読み込んで図に表示できない
- case classやコンパニオンオブジェクトがあると、prefixに
$
がついていてるモデルが出力されて冗長な図になる - Scalaだとenumをパターンで実装することが多いので列挙型が表示できない
といった折角の機能を全て使うことはできていません。
このあたりは、おいおい、カバーするようなPull Requestを上げれれたらなーと夢想しております。
使い方
bintrayなりsonatypeなりにアップしようと思ったのですが、ちょっと記事に間に合わず…
GitHubを直接指定する方法でいきます。
こちら を参考させていただきました。
resolvers += Resolver.jcenterRepo
lazy val root = project.in(file(".")).dependsOn(githubRepo)
lazy val githubRepo = RootProject(uri("git://github.com/yoshiyoshifujii/sbt-jig.git#master"))
あとは、sbtを起動して、 jigReports
を実行するだけです。
実行すると、 target/jig
ディレクトリにレポートが出力されます。
Configuration
JIGのCLIで指定できる内容をそのままConfigurationで指定できます。
jigDocumentTypeText in jig := "",
jigOutputDirectoryText in jig := "./target/jig",
jigOutputOmitPrefix in jig := ".+\\.(service|domain\\.(model|type))\\.",
jigModelPattern in jig := ".+\\.domain\\.(model|type)\\..+",
jigProjectPath in jig := "./",
jigDirectoryClasses in jig := s"target/scala-${scalaBinaryVersion.value}/classes",
jigDirectoryResources in jig := s"target/scala-${scalaBinaryVersion.value}/classes",
jigDirectorySources in jig := "src/main/scala"
まとめ
今回は、とりあえず、JIGをsbtから実行できるようにしただけですが、JIG本体のほーに、Scala用の拡張ポイントを設けさせていただくようにしたいなーと思ってます。
以上です。
Author And Source
この問題について(JIGのsbt-pluginを作った), 我々は、より多くの情報をここで見つけました https://qiita.com/yoshiyoshifujii/items/ef50c139ece59756e70a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .