Git Product home page Git Product logo

jig's Introduction

JIG

MavenCentral CircleCI GitHubActions

banner

JIGはコードでの設計を支援するツールです。思い浮かんだ設計をコーディングすればいい感じに可視化される世界を目指しています。

主にバイトコード(classファイル)から一覧や図を出力します。バイトコードが対象なので、JVM言語であれば主要機能は動作します。

サンプル

サンプルリポジトリ を参照してください。

使い方

実行方法はコマンドラインとGradleプラグインがあります。それぞれのREADMEを参照してください。

実行には Java11以降 と Graphviz が必要です。 より詳しい情報はWikiを参照してください。 うまく動かない場合などは issue でお問い合わせください。

コンセプト

三層+ドメインモデルのアーキテクチャで実装されたコードから、以下の分析・設計情報を生成します。

  • ドメインモデルのクラスに記述された業務の概念とビジネスルール
  • アプリケーション層に記述された業務機能

想定するアーキテクチャ

三層+ドメインモデルのアーキテクチャでの使用を想定しています。

ドメインモデルのクラスに記述された業務の概念とビジネスルール

アプリケーション層に記述された業務機能

JIGドキュメント

JIGの生成する分析・設計情報をJIGドキュメントと呼んでいます。

LICENSE

Apache License 2.0

jig's People

Contributors

caramelopardalis avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar haljik avatar hc0208 avatar irof avatar masuda220 avatar mdstoy avatar miyohide avatar numamino avatar orekyuu avatar sammy7th avatar takesection avatar yoshiyoshifujii avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jig's Issues

JDK10でビルドエラー

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)

クラス名の表記:完全修飾からミニマム修飾に変える

classリストのクラス名の完全修飾名が冗長

*.service
*.domain.[model|basic]

までの修飾は、非表示にしたい。
service, domain.model も非表示

その他のアイデア

完全修飾名は、オプションで表示する(デフォルトは、表示しない)
完全修飾名と最少修飾名を2つのカラムに出力し、使う側がカラムの非表示などの対応をする

処理時間の計測とか

手動で確認しているが、そこそこ大きなプロジェクトを対象に自動実行させたい。

依存パッケージがない場合の出し方

依存がないパッケージは表示されない
全部独立したパッケージだと何も出せなくて落ちる → f094b8f で落ちなくなった(空っぽの画像が出る)

依存がなくてもパッケージがあれば出したいところ

Java9,10に対応する

  • 実行時に --add-modules java.xml.bind が要る。

以下は #37 で片付く。

  • compile files("${System.getProperty('java.home')}/../lib/tools.jar") は意味がない。
    jdepsは jdk.jdeps.jmod になり、指定自体が不要。
  • java9でビルドすると tools.jar がアーカイブに入らず、このjarをjava8で java -jar するとjdepsのクラスロードに失敗する。
    java -cp package-diagram-cli.jar:{...}/tools.jar org.springframework.boot.loader.JarLauncher の形でならば実行可。( tools.jar がアーカイブに含まれるの自体が問題)
  • jdepsの出力フォーマットが変わる。バージョンで読み方を変えるか、-dotoutputした方を読むか。

対象テーブルの抽出方法の改善

現在、SQLから対象テーブルの抜き出しは正規表現で行なっている。
見づらいし、他の方法を考える。

JSqlParser

ある程度のSQLは対応できるが、以下の事象があって厳しい。

  • カラム名にが入っているとTokenMgrErrorになる。
  • SQLに #{...} が入っているとTokenMgrErrorになる。
  • SELECT EXISTS(SELECT * FROM HOGE) がJSQLParserExceptionになる。

TokenMgrErrorになるものは事前に使用できる文字に置換すれば対応できるが、EXISTSは回避方法が思い浮かばない。

Gradleプラグインを作る

gradleタスクで出力できるようにする

クラスパスやディレクトリが問題にならなくなるはず。

大きい画像の制限

メモリさえ許容すれば巨大な画像は作れるが、開いたところで見れたものじゃない。
出力するのに時間がかかって固まってるように見えるのも問題。
制限するかどうか。

メソッドシグネチャをリフレクションではなくソースコードかバイトコードから出す

今のところ、クラスを読んでリフレクションでMethodから出力している。
この形だと依存するクラスを全て読まないと落ちてしまい、以下のような問題がある。

  • マルチモジュールプロジェクトの場合に target.class がjar-hellのような感じになる。
  • 7d29811 のような暫定対処が必要になっている。

https://javaparser.org
http://spoon.gforge.inria.fr
http://asm.ow2.org/

情報の信頼性を考えればバイトコードで行きたいところだけれど、用途を考えればソースコードを読む方があってるかもしれない。

webアプリを作る

どっかからソースを拾ってきて図が1つ表示できるもの

デザインとかログインとかは何もかも別対応

事前事後条件のコード化

DbCのやり方。assert文はちょっとね。
javadocに書くライブラリが昔あったが、今どうなってるかを確認する。

  • 事前条件←これのわかりやすさ、伝えやすさが重要
  • 事後条件 ←べつにいい
  • 不変条件 ←これもまあいい

機能要求モデルを作る

それっぽいものが出るところまでがスコープ

テストのアノテーションかドキュメントとテスト間の依存でいけそう

MyBatisを使用部の制約を明示する

MyBatisを使用してMapperインタフェースからSQLを取得しているところは、動作しない条件がいくつか存在する。回避できないものを明示する。

以下はメモ。

  • Mapperインタフェースが未知のクラスに依存している場合にNoClassDefFoundErrorになる
    • ログ出力はして、出力は続行できるようにはしてる。

主要クラス図を作る

それっぽいものが出るところまでがスコープ

  • クラスの依存
    • jdepsでいけそう
  • 主要の判別
    • 依存の量による重み付け?
    • アノテーション?
  • 主要じゃないものの扱い
    • 主要にまとめる(消しちゃうと依存が見えなくなる)

jdepsをやめる

結局ASMでクラス全部よんでも十分いけそうだし、以下の問題もあるので、jdepsやめて技術スタックを減らす。

  • 実行環境にJDKが必要になっている
  • JDK9以降で現状のまま動かないのがわかっている

RepositoryのCRUD出力

MyBatis専用機能。

@Repository の場合に、CRUDと使用しているっぽいテーブルを出力する。

まずはストレートなものだけ出してみる。
MyBatisのXMLが構造化されているものなどをどうするかは後で考える。

Excel出力する

TSVで出してるのはExcelに貼るしか用途がない。
Excelで出せていい。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.