PlantUML とは
PlantUML は、UML、またはUML以外の図をテキストで記述するためのオープンソースのツールです。
下記のような図を書くことができます。
記述がテキストであることから、GitHubなどのリポジトリーで管理するのに適しています。
これはドキュメントの保守性から言ってとても重要です。
また、既存のファイルからテキストでコピー&ペーストがし易いことから、同じような設計書を書く場合に効率が高そうです。
この記事の目標
基本設計書では特にクラス図とシーケンス図での記述が重要と考えています。
またER図も書けるようなので、後日これにチャレンジしてみます。
- UMLクラス図を書く
- UMLシーケンス図を書く
環境
- MacOS Mojave(10.14.6)
- VSCode 1.36.1
- PlantUML
- graphviz
インストール
Homebrew インストール
まずは、Homebrewが必要です。ターミナルで下のようにコマンドを実行してHomebrewをインストールしてください。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
使い方はこちらにも記載しています。
VSCode インストール
Homebrewまたは上記のサイトから取得したインストーラ
を使ってVSCodeをインストールします。
Homebrewでは以下のようなコマンドを実行します。
$ brew cask install visual-studio-code
または、https://code.visualstudio.com/download からインストーラをダウンロードして実行します。
VSCodeには拡張機能をインストールする機能があり、UML、ER図を書くことができるPlantUMLもその内の一つです。
VSCodeには多くの拡張機能がありますので、下記記事などを参考にして便利な拡張機能を入れると良いと思います。リストにはもちろんPlantUMLも含まれています。
VSCodeのオススメ拡張機能 24 選 (とTipsをいくつか)
VSCodeの拡張機能 おすすめ(8/14更新)
Java をインストールする
PlantUMLの実行にはJavaが必要になります。しかしながらOracle Javaライセンスは、2019年4月16日以降のリリースに対して変更されましたので注意が必要です。
OpenJDK
個人利用の場合はOracleJDKでも大丈夫ですが、商用利用の場合は、
https://jdk.java.net
こちらのOpenJDKを利用します。
OracleJDK
https://www.oracle.com/technetwork/java/javase/downloads/index.html
https://www.java.com/ja/download/
こちらのOracleJDKは、個人利用の場合はOKですが、商用利用ではJava SEサブスクリプションが必要です。
OpenJDKのインストールの詳細は、こちらを参照すると良いと思います。
オラクルのFAQを見ると、下記のようにOracle Java SE
は permits personal use, development, testing, prototyping, demonstrating and some other uses at no cost
とあります。
- Oracle OpenJDK releases under the open source GNU General Public License v2, with the Classpath Exception (GPLv2+CPE) (since Java 9), and
- Oracle Java SE product releases, which includes the Oracle JDK for Java 8 and later, and Oracle JRE with Java Web Start in Java 8, under the OTN License Agreement for Java SE. This license permits personal use, development, testing, prototyping, demonstrating and some other uses at no cost.
2020/12/20時点では、最新版はJDK15です。
こちらはOracleJDKと区別するために、OpenJDKと呼ばれていますが、キャプチャー画面左下を見るとわかるように、やはりOracleが主導して提供されている無償のJDKになります。
ただし、上記サイトからダウンロードするとインストーラがなくて面倒なので、brewを使ってインストールします(結局brew・・・)参考記事はこちらです。
$ brew cask install java
または、(M1 Macではこちらじゃないとエラーになるようでした)
$ brew install openjdk
openjdkの場合は、インストール後に表示されるように下記も実行します。
$ sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
上記の2系統のインストールともPATHを通す必要があるので、.zshrcなどに下記を追記します。
15はJDK15の場合なので、適宜読み替えてください。
export JAVA_HOME=`/usr/libexec/java_home -v 15`
バージョンなどを確かめてみます。
$ java -version
openjdk version "15.0.1" 2020-10-20
OpenJDK Runtime Environment (build 15.0.1+9)
OpenJDK 64-Bit Server VM (build 15.0.1+9, mixed mode, sharing)
graphviz をインストールする
PlantUMLは、シーケンス図とアクティビティ図以外は DOTを使うらしいので図を描画させるためには、Graphvizが必要になるそうです。 → 参考ページ
brew install graphviz
PlantUML をインストールする
VSCodeで、⌘+Pを押し、出てくるテキストフィールド内で ext install plantuml
と入力します。
一番上がPlantUMLです。
書き方
ファイル名は、filename.puml
とします。filename.pu
でも大丈夫です。
下記のように <|--
を使うと継承関係が記述できます。
@startuml
哺乳類 <|-- ねこ
哺乳類 <|-- ひと
哺乳類 : 年齢
哺乳類 : 体重
哺乳類 : 食べる()
哺乳類 : 歩く()
哺乳類 : 眠る()
ねこ : 鳴く()
ねこ : じゃれる()
ひと : 住所
ひと : 電話番号
ひと : 働く()
@enduml
option+D
でプレビューできます。
上のファイルは、下記のようなUMLを生成するメニューで作成しています。
その他にもコンポジション、集約の関係も記述できます。
詳しくはこちら
http://plantuml.com/ja/class-diagram
@startuml
人 o-- "0..*" 車 : 集約
車 "1" *-- "1" ハンドル : コンポジション
車 "1" *-- "1" エンジン : コンポジット
@enduml
次に少し複雑なシーケンス図を描いてみます。
@startuml
actor User
box "View" #EEEEBB
participant AppDelegate
participant TopView
end box
box "ViewModel" #BBBBEE
participant LonginViewModel
end box
box "Model" #DDBBDD
participant LoginUseCase
participant LoginRepository
end box
participant EndPoint
activate EndPoint #FFBBBB
User -> AppDelegate : 起動
activate AppDelegate #FFBBBB
AppDelegate -> TopView : アクティベート
activate TopView #FFBBBB
note over TopView
画面遷移管理
end note
TopView -> LonginViewModel : ログイン可否確認
activate LonginViewModel #FFBBBB
LonginViewModel -> LoginUseCase : Token有無問い合わせ
activate LoginUseCase #FFBBBB
note over LoginUseCase
Tokenの管理
end note
LoginUseCase -> LoginUseCase : Token取得
note left
Tokenはメモリー上に保存とする
end note
alt Token有
LonginViewModel <<-- LoginUseCase : Token有
LonginViewModel -> LoginRepository : Tokenのリフレッシュ要求
activate LoginRepository #FFBBBB
LoginRepository -> EndPoint : Tokenのリフレッシュ要求
else Token無
note over TopView, EndPoint
サインアップ処理
end note
LonginViewModel <<-- LoginUseCase : Token無
TopView <<-- LonginViewModel : サインアップ要求
TopView -> TopView : 初回起動画面表示
TopView <<-- LonginViewModel : サインアップ完了
end
@enduml
なかなか本格的に記述できることがわかります。
Markdownファイル中に挿入する
設計書を書くと言う観点から考えると、当然マークダウンで書きたいと思うのは当然です。
VSCodeでは、マークダウンファイルにPlantUMLのファイルを埋め込んだものもプレビューできます。
# 設計書です
## はじめに
これはテスト文書です。
@import "test.puml"
このように表示されます。
Markdown Preview Enhanced をインストールする
このようなマークダウンファイルをプレビューするには、Markdown Preview Enhanced
という拡張機能をインストールします。例によって、⌘+P
を押下し、ext install Markdown Preview Enhanced
とします。