dddjava / jig Goto Github PK
View Code? Open in Web Editor NEWHome Page: https://dddjava.github.io/jig/
License: Apache License 2.0
Home Page: https://dddjava.github.io/jig/
License: Apache License 2.0
gradleタスクで出力できるようにする
クラスパスやディレクトリが問題にならなくなるはず。
選ぶか作るか
メモリさえ許容すれば巨大な画像は作れるが、開いたところで見れたものじゃない。
出力するのに時間がかかって固まってるように見えるのも問題。
制限するかどうか。
ローカルで使うのはコマンドアプリがいい
現状はヘッダだけでる。
該当ディレクトリが見つからない時点でエラーにしてよさそう。
どっかからソースを拾ってきて図が1つ表示できるもの
デザインとかログインとかは何もかも別対応
改行をどう扱うかは出力都合なので PlantUmlModelNameFormatter とかその辺で対応。
OnMemory....
に頑張らせてるけど、何か考える。
今のところ、クラスを読んでリフレクションでMethodから出力している。
この形だと依存するクラスを全て読まないと落ちてしまい、以下のような問題がある。
target.class
がjar-hellのような感じになる。https://javaparser.org
http://spoon.gforge.inria.fr
http://asm.ow2.org/
情報の信頼性を考えればバイトコードで行きたいところだけれど、用途を考えればソースコードを読む方があってるかもしれない。
model 以下のパッケージで、表示されるものと表示されないものがある。
表示されないのは、どういう条件の時か?
それっぽいものが出るところまでがスコープ
何で表現するかから思いついてない
パッケージ図にクラス図が混ざって表示される。どこかの状態管理が変。
使用箇所やテーブル名が該当。
複数使用していたらその分だけ出る。
一覧出力時に省く。
statemachine.groovy は同じプロジェクトのどこかしらに置いて実行する形になってる
それっぽいものが出るところまでがスコープ
現状、同じクラスに定義されているすべてのフィールドを出力している。
これを使用しているフィールドだけにする。
ソースかバイトかどちらを相手にするかも未定。
enumのフィールド宣言は、区分ごとに何が違うかの手がかりになる。
型名と変数名がほしい。
MyBatisを使用してMapperインタフェースからSQLを取得しているところは、動作しない条件がいくつか存在する。回避できないものを明示する。
以下はメモ。
それっぽいものが出るところまでがスコープ
enumを列挙する
javadoc?
java.nio.file.FileSystemNotFoundException
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:169)
at jdk.zipfs/jdk.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:155)
at java.base/java.nio.file.Paths.get(Paths.java:143)
at jig.infrastructure.mybatis.MyBatisSqlResolver.resolve(MyBatisSqlResolver.java:72)
TSVで出してるのはExcelに貼るしか用途がない。
Excelで出せていい。
MyBatis専用機能。
@Repository
の場合に、CRUDと使用しているっぽいテーブルを出力する。
まずはストレートなものだけ出してみる。
MyBatisのXMLが構造化されているものなどをどうするかは後で考える。
あたりをどう出すか。とりあえず型だけ出す?
javaparserかdocletか
する。
DbCのやり方。assert文はちょっとね。
javadocに書くライブラリが昔あったが、今どうなってるかを確認する。
そのクラスにあるコメントを拾う
classリストのクラス名の完全修飾名が冗長
*.service
*.domain.[model|basic]
までの修飾は、非表示にしたい。
service, domain.model も非表示
その他のアイデア
完全修飾名は、オプションで表示する(デフォルトは、表示しない)
完全修飾名と最少修飾名を2つのカラムに出力し、使う側がカラムの非表示などの対応をする
treeに倣って -L
とか --lebel
で指定かな。
シート分けて出すくらいはできそう。
enumで定義された列挙子の一覧を表示したい
現在、SQLから対象テーブルの抜き出しは正規表現で行なっている。
見づらいし、他の方法を考える。
ある程度のSQLは対応できるが、以下の事象があって厳しい。
/
が入っているとTokenMgrErrorになる。#{...}
が入っているとTokenMgrErrorになる。SELECT EXISTS(SELECT * FROM HOGE)
がJSQLParserExceptionになる。TokenMgrErrorになるものは事前に使用できる文字に置換すれば対応できるが、EXISTSは回避方法が思い浮かばない。
[{"fqn":"hoge.fuga.foo", "group":"hoge.fuga"}, {"fqn":"hoge.fuga.bar", "group":"hoge.fuga"}]
みたいな感じで。
model 以下のパッケージは、依存関係がない場合も、孤立したパッケージとして、存在だけは、パッケージ図に表示したい
手動で確認しているが、そこそこ大きなプロジェクトを対象に自動実行させたい。
オブジェクト指向入門 11.13.2 文書化のために表明を使う クラスのショート形式 参照。
依存がないパッケージは表示されない
全部独立したパッケージだと何も出せなくて落ちる → f094b8f で落ちなくなった(空っぽの画像が出る)
依存がなくてもパッケージがあれば出したいところ
結局ASMでクラス全部よんでも十分いけそうだし、以下の問題もあるので、jdepsやめて技術スタックを減らす。
テキストとして読んでる。
https://github.com/irof/Jig/blob/master/businessflow.groovy
なんとかできないかな・・・
それっぽいものが出るところまでがスコープ
テストのアノテーションかドキュメントとテスト間の依存でいけそう
--add-modules java.xml.bind
が要る。以下は #37 で片付く。
compile files("${System.getProperty('java.home')}/../lib/tools.jar")
は意味がない。jdk.jdeps.jmod
になり、指定自体が不要。tools.jar
がアーカイブに入らず、このjarをjava8で java -jar
するとjdepsのクラスロードに失敗する。java -cp package-diagram-cli.jar:{...}/tools.jar org.springframework.boot.loader.JarLauncher
の形でならば実行可。( tools.jar
がアーカイブに含まれるの自体が問題)#14 のあと。
取れさえすればFQNと一緒に JapaneseNameRepository に突っ込むだけでいける。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.