JavaのAPIのUML(Unified Modeling Language)diagramを自動生成したい

f:id:ts0818:20220409163741j:plain

nazology.net

英国西イングランド大学(UWE)で行われた研究によれば、4種類のキノコで観測された電気信号を分析したところ、人間の言語に似た「単語」と「文」が確認できた、とのこと。

キノコは「菌糸ネットワークを流れる電気信号」で会話をしている - ナゾロジー

菌類には神経細胞が存在しませんが、細胞同士が脳のニューロンのようなネットワーク構造を形成し、ネットワーク内部では活発な電気信号の送受信が行われています

キノコは「菌糸ネットワークを流れる電気信号」で会話をしている - ナゾロジー

⇧ amazing...

UML(Unified Modeling Language)とは?

Wikipediaさんに聞いてみよう。

The Unified Modeling Language (UML) is a general-purpose, developmental, modeling language in the field of software engineering that is intended to provide a standard way to visualize the design of a system.

https://en.wikipedia.org/wiki/Unified_Modeling_Language

⇧ とあって、ソフトウェア分野におけるモデリングのための言語ということなんですが、何のこっちゃな情弱な私です。

modeling language」が何なのかと言うと、

modeling language is any artificial language that can be used to express information or knowledge or systems in a structure that is defined by a consistent set of rules. The rules are used for interpretation of the meaning of components in the structure.

https://en.wikipedia.org/wiki/Modeling_language

⇧「人工言語artificial language)」とかいうパワーワードが出てきたんですが、決められたルールで定義した構造で、「情報、知識、システム」を説明するために利用されるものであると、まぁ、分からん。

で、話を「UML(Unified Modeling Language)」に戻すと、

In 1997, UML was adopted as a standard by the Object Management Group (OMG), and has been managed by this organization ever since. In 2005, UML was also published by the International Organization for Standardization (ISO) as an approved ISO standard.

https://en.wikipedia.org/wiki/Modeling_language

⇧ 2005年に、ISO標準として公開されており、

In software engineering, most practitioners do not use UML, but instead produce informal hand drawn diagrams; these diagrams, however, often include elements from UML.

https://en.wikipedia.org/wiki/Modeling_language

⇧ 知らず知らずの内にUML diagramsを実践してるって、「お釈迦様の手の上の悟空」状態ってことかね、全く実践できてる気がしないんだが...

で「UML(Unified Modeling Language)」 のdiagramは、大きく分けて、2つのdiagramのグループに分類されるらしく、

以下のような種類があるらしい、多いですな。

で、Javaだと「Class Diagram」とかが、参考書とかで紹介されてることが多いかと。

In software engineering, a class diagram in the Unified Modeling Language (UML) is a type of static structure diagram that describes the structure of a system by showing the system's classes, their attributes, operations (or methods), and the relationships among objects.

https://en.wikipedia.org/wiki/Class_diagram

⇧ みたいな図がを時々目にすることがあるかと。

矢印とかのルールは、

⇧ 上図のような説明になってますと。

 

JavaAPIUML(Unified Modeling Language)diagramを自動生成したい

IntelliJ IDEA」とかだと、「UML(Unified Modeling Language)」も作れるって話を聞いたことはあって、

www.jetbrains.com

⇧ 確かに作れるとは言ってますと。

ただ、「Eclipse」を利用してる身からすると、「Eclipse」でも「UML(Unified Modeling Language)」作りたいってなりますと。

Eclipseのmarketplaceで、「UML」とかで検索すると、

marketplace.eclipse.org

かなりの数がヒットするので、ヒットした上位の情報をネット上でググってみると、

あたりが候補になりそうなんかな?

www.purin-it.com

medium-company.com

nozaki.me

ちなみに、「AmaterasUML」の作成者は「BitBucket」も作ってらっしゃたりしてる方で、

takezoe.hatenablog.com

⇧ 上記のブログの方ですね、所謂、強強エンジニアと呼ばれる部類の方ですね。

なんか、「UMLet」ってのが、単独で使えたり、「Eclipse」以外にも「VS codeVisual Studio Code)」とかにも対応して、且つ、活発にreleaseされてて開発が継続されてそうなこともあり、「UMLet」を試してみることにします。

github.com

結論から申し上げますと、既に作成してるファイルからclass diagramを自動生成ってのは無理だったので、後述で別のプラグインを利用しています。

EclipseでUMLetを使ってみたけど、自動生成は無理でした...

EclipseでUMLet使ってみることにします。

Eclipseのバージョンは、「2022-03(4.23.0)」を使います。(バージョンは、Eclipseを起動後、「ヘルプ(H)」>「Eclipse IDEについて(M)...」で確認できます。)

f:id:ts0818:20220409102549p:plain

「ヘルプ(H)」>「Eclipse マーケットプレース(M)...」を選択。

f:id:ts0818:20220409100233p:plain

「検索(l):」で「UMLet」と入力し、Enterキーを押下し、ヒットしたら「インストール」ボタンを押下。

f:id:ts0818:20220409100330p:plain

「使用条件の条項に同意します(A)」のラジオボタンにチェックし「完了(F)」ボタンを押下。

f:id:ts0818:20220409100418p:plain

「出所不明の署名されてないコンテンツを信頼しますか?」のチェックボックスを入力し、「選択項目を信頼(T)」ボタンを押下。

f:id:ts0818:20220409100605p:plain

「今すぐ再起動(R)」とあるので、Eclipseを再起動しても問題なければ、「今すぐ再起動(R)」ボタンを押下。

f:id:ts0818:20220409100638p:plain

で、適当にJavaに関わるプロジェクトを作成しておきます。今回は、「Spring スタータープロジェクト」で、「Spring Boot(ビルドツールは、Gradleを選択)」なプロジェクトを作成してます。

f:id:ts0818:20220409103508p:plain

「ファイル(F)」>「新規(N)」>「その他(O)...」を選択し、

f:id:ts0818:20220409103714p:plain

「その他」>「Umlet diagram」して「次へ(N)>」を選択。というか、「AmaterasUML」がデフォルトで表示されてるけど、別途jarをインストールしないと「AmaterasUML」は利用できないらしい...紛らわしい...

f:id:ts0818:20220409103832p:plain

「参照...」ボタンを押下。

f:id:ts0818:20220409104124p:plain

作成しておいたプロジェクトを選択し、「OK」ボタン押下。

f:id:ts0818:20220409104213p:plain

「Diagram name(D):」は、自由に変えてOKかと。「完了(F)」ボタン押下。

f:id:ts0818:20220409104309p:plain

で、自分で一から作成することはできるみたいなのですが、肝心の既にあるファイルからclass diagramを生成ってのができませんでした...

EclipseUML Lab Modeling IDEを試してみる、ただ無料じゃなかったのでアンインストールしました

次に試したのが「UML Lab Modeling IDE」というプラグイン

「UMLet」と同じ様に、「ヘルプ(H)」>「Eclipse マーケットプレース(M)...」で検索し、「インストール」ボタン押下を進め、

f:id:ts0818:20220409111008p:plain

「確認」

f:id:ts0818:20220409111124p:plain

f:id:ts0818:20220409111226p:plain

f:id:ts0818:20220409111546p:plain

f:id:ts0818:20220409111805p:plain

で、自動生成はできるはできるのだけど、自分で、ある程度、対象を選択してあげないといけない。java.langパッケージのErrorやException系のクラスだと以下のように生成されました。

f:id:ts0818:20220409121640p:plain

で、残念ながら、

marketplace.eclipse.org

Visit our website for more information, pricing and to download a FREE 30-Day Trial of UML Lab. Annual licenses are available from EUR 20 including support and updates; Academic Licenses are free.

https://marketplace.eclipse.org/content/uml-lab-modeling-ide

⇧ 学術研究に携わる人以外は、無料利用の制限がありますと。

www.yatta.de

⇧ 学生さんとかは特例で期間の制限なく無料で利用できる模様。

UML Lab Modeling IDE」は無料で利用できる期間が限られてるので、アンインストールすることにしました。

f:id:ts0818:20220409120846p:plain

f:id:ts0818:20220409121140p:plain

f:id:ts0818:20220409121225p:plain

Eclipse マーケットプレース上ではアンインストールされたことになりましたが、

f:id:ts0818:20220409124731p:plain

ローカルに残るjarの数々...

f:id:ts0818:20220409124938p:plain

Eclipseのclean起動とか、PCの再起動とか、どれが効果があったのか分からないですが、最終的にはjarが削除されたようです。

EclipseでAmaterasUMLを試してみるも、プラグインの不具合が解消されてないっぽい...

「ヘルプ(H)」>「新規ソフトウェアのインストール...」を選択。

f:id:ts0818:20220409123217p:plain

「作業対象(W):」で自分の利用してるEclipseのバージョンのURLを選択して、表示される項目の中から「モデリング」>「GEF(MVC)SDK」にチェックを入れ、「次へ(N)>」ボタンを押下。

f:id:ts0818:20220409123135p:plain

「完了(F)」ボタンを押下。

f:id:ts0818:20220409123426p:plain

「今すぐ再起動(R)」ボタン押下。

f:id:ts0818:20220409123745p:plain

「クラス図」で「次へ(N)>」を押下し、

f:id:ts0818:20220409124058p:plain

完了ボタン押しても何の反応もないんだが...

f:id:ts0818:20220409124129p:plain

どうやら、

github.com

⇧ issueとして上がってました。

そして悲報は続く...

teratail.com

github.com

⇧ そもそも、原因が解明しきれて無さそう...

そして、Eclipseのバージョンを「Version: 2020-06 (4.16.0)」にすると、完了ボタンを押すことはできるようになるけど、teratailにあるように、Javaのclassファイルがdiagramとして描画されないという...

EclipsePapyrus Software Designerを試してみる

あと、気になったのが、UML diagram描画系のプラグインが軒並み、更新が滞りがちというね...そもそもEclipse Foundationが関与してるプラグインに至っては、2016年で更新が止まっているという...

というわけで、「Papyrus Software Designer」ってプラグインを試してみました。

Eclipseのマーケットプレースで「Papyrus Software Designer」を検索してインストールします。インストール済みに表示されればインストールできてます。

f:id:ts0818:20220409153340p:plain

f:id:ts0818:20220409153524p:plain

f:id:ts0818:20220409153604p:plain

f:id:ts0818:20220409153634p:plain

f:id:ts0818:20220409153725p:plain

「Class Diagram」にチェックで、「完了(F)」ボタンを押下。

f:id:ts0818:20220409153806p:plain

f:id:ts0818:20220409153855p:plain

「パッケージ・エクスプローラー」からdrag & dropで、「xxx.di」に配置します。

f:id:ts0818:20220409154448p:plain

f:id:ts0818:20220409154150p:plain

f:id:ts0818:20220409154642p:plain

f:id:ts0818:20220409154744p:plain

画像として保存してみます。

f:id:ts0818:20220409154844p:plain

f:id:ts0818:20220409154921p:plain

そうすると、各classファイルの継承の繋がりとかを俯瞰で確認できます。

f:id:ts0818:20220409155002p:plain

ただ、どのクラスとどのクラスが依存してるかを知りたいって目的で使いたいというケースが多いと思うのですが、対象を絞るには、どのクラスとどのクラスが依存してるかを事前に知っていないといけないというパラドックスが生まれ微妙な感じではありますと...

ちなみに、jar毎drag & dropしてみたところ、

f:id:ts0818:20220409160429p:plain

画像の幅が10000ピクセル超えています。

f:id:ts0818:20220409160810p:plain

というhatenaブログの制約により画像がブログの記事にアップロードできない...

画像ファイルを開いてみましたが、

f:id:ts0818:20220409161144p:plain

拡大しても、豆粒サイズでしか見れないので、ほぼ意味ないです...

拡張子がpng以外だったら、もっと拡大できるのかな?

というわけで、いまのところ、Eclipseだと「Papyrus Software Designer」が選択肢の1つになるのかな、という気がします。

Javaで非同期処理のAPIの依存関係とかを把握したいと思って、class diagramで確認したいと思って調査しましたが、だいぶ残念な結果になりました...

毎度モヤモヤ感が半端ない...

今回はこのへんで。