Above & Beyond

日々のアウトプット記録

PlantUMLで色々描く

今の会社ではドキュメントを書いたりするのにDocbaseを使っています。

DocbaseMarkdownでドキュメントを描くのですが、図を描いたりするのにPlantUMLやdraw.io等の記法が使えます。 様々な可視化に便利なので、これを活用して日々図を描いています。 今回は、どんなものを描いているのか、実例を紹介します。(そのものを公開はできないので、一部改変してますが)

PlantUMLとは

今回紹介するのは PlantUML です。UML以外にも多彩な図を描くことができるツールです。 作成されたシーケンス図などを目にする機会は結構多いのではないかと思います。

尚、今回紹介する使い方は、ガチのUMLとしてではなく可視化のツールとして使っているので、それはUMLとしてどうよ、、、みたいなツッコミは受け付けていません。 あくまで、可視化する時の参考、として見てもらえればと思います。

ちなみに、はてなブログではPlauntUML記法には対応していないので以下の例は試せないですが、VS CodeMarkdown Preview Enhanced 拡張を使えば確認できます。

UMLダイヤグラム

シーケンス図

処理の流れを表すのに使っています。 ソースコードの処理の流れなんかを描くことが多いですが、こんなふうにワークフローを描いたりもします。

記事作成から公開までのワークフローEditorEditorHerokuHerokuPostgreSQLPostgreSQLAuthorizerAuthorizerAWS S3AWS S3記事作成プレスリリースメディア実績お知らせ1[新規作成] ボタンクリック2記事保存3[承認申請] ボタンクリック4承認申請通知記事承認5[修正依頼] ボタンクリック6修正依頼7[承認申請] ボタンクリック8[承認] ボタンクリック(Heroku上で公開)9Heroku上で確認記事公開10[S3に公開] ボタンクリック11サイトにデプロイして公開12サイト上で確認<!--MD5=[db1e59732e2da4e98b82c66b080bfbec]

ソースはこんな感じです。

@startuml
title 記事作成から公開までのワークフロー\n

actor Editor
control Heroku
database PostgreSQL
actor Authorizer
control "AWS S3"
autonumber

group 記事作成\n* プレスリリース\n* メディア実績\n* お知らせ
  Editor -> Heroku: [新規作成] ボタンクリック
  Heroku --> PostgreSQL: 記事保存
  Editor -> Heroku: [承認申請] ボタンクリック
  Heroku --> Authorizer: 承認申請通知
end
...

group 記事承認
  Authorizer -> Heroku: [修正依頼] ボタンクリック
  Heroku --> Editor: 修正依頼
  Editor -> Heroku: [承認申請] ボタンクリック
  Authorizer -> Heroku: [承認] ボタンクリック(Heroku上で公開)
  Editor -> Heroku: Heroku上で確認
end
...

group 記事公開
  Authorizer -> Heroku: [S3に公開] ボタンクリック
  Heroku -->  "AWS S3": サイトにデプロイして公開
  Editor -> "AWS S3": サイト上で確認
end
@enduml

コンポーネント

コンポーネント間の関係を示したい時に使っています。 この例は上記のシーケンスをどういうコンポーネントで実現しているかを説明する為に描いたものです。

記事作成から公開までDeveloperGitHubHerokuS3Cloudfrontmasterにpushbuilddeploy静的ページに変換表示確認静的website公開表示確認<!--MD5=[6d52720e477742f8cf582dea084fccfe]

ソースはこんな感じです。

@startuml
title 記事作成から公開まで\n

actor Developer
component GitHub
component Heroku #ccccff
component S3 #ffccaa
component Cloudfront #ffccaa

Developer -> GitHub: masterにpush
GitHub -> Heroku: build
Heroku -> S3: deploy\n 静的ページに変換
Developer - Heroku: 表示確認
S3 -- Cloudfront: 静的website公開
Cloudfront - Developer: 表示確認
@enduml

アクティビティ図

バッチ処理をドキュメント化する時の流れを描く時に使っています。

処理アクティビティ実績値算出処理予想値算出処理年月別サマリー算出処理<!--MD5=[6dcf966a9878e3e22e2e665494350f10]

ソースはこんな感じです。

@startuml
title 処理アクティビティ\n
start
:実績値算出処理;
:予想値算出処理;
:年月別サマリー算出処理;
end
@enduml

その他の図

ガントチャート

変わり種ですが、こんなものも描けます。

プロジェクト管理ツールなりExcelなりを使ったほうが良いじゃんというのはもっともなのですが、 そういうものを使わずにドキュメントだけでぱっと表現したいときもたまにある訳で。 進捗実績%も表現できるので、簡易的なものとしては十分使えるかなと思っています。

開発環境123456789101112131415161718192021222324252627282930311234567891011123月 20224月 20221. 事前検討 - 担当A2. 基本設計書作成 - 担当A3. 詳細設計書作成 - 担当A4. 実装 - 担当A5. テスト仕様書作成 - 担当A6. 単体テスト - 担当A7. 結合テスト - 担当A10. QA/課題管理作成 - 担当B11. 基本設計書内部レビュー - 担当B12. 詳細設計書内部レビュー - 担当B13. コードレビュー - 担当B14. テスト仕様書レビュー - 担当B123456789101112131415161718192021222324252627282930311234567891011123月 20224月 2022<!--MD5=[506574adbc85a15d77c4666507345afa]

ソースはこんな感じです。

@startuml
language ja
title 開発環境
Project starts 2022-03-01
[1. 事前検討 - 担当A] starts 2022-03-01 and ends 2022-03-02
[1. 事前検討 - 担当A] is 100% completed
[2. 基本設計書作成 - 担当A] starts 2022-03-03 and ends 2022-03-09
[2. 基本設計書作成 - 担当A] is 10% completed
[3. 詳細設計書作成 - 担当A] starts 2022-03-10 and ends 2022-03-16
[3. 詳細設計書作成 - 担当A] is 0% completed
[4. 実装 - 担当A] starts 2022-03-17 and ends 2022-03-25
[4. 実装 - 担当A] is 0% completed
[5. テスト仕様書作成 - 担当A] starts 2022-03-28 and ends 2022-03-29
[5. テスト仕様書作成 - 担当A] is 0% completed
[6. 単体テスト - 担当A] starts 2022-03-30 and ends 2022-04-05
[6. 単体テスト - 担当A] is 0% completed
[7. 結合テスト - 担当A] starts 2022-04-06 and ends 2022-04-12
[7. 結合テスト - 担当A] is 0% completed
[10. QA/課題管理作成 - 担当B] starts 2022-03-03 and ends 2022-03-07
[10. QA/課題管理作成 - 担当B] is 80% completed
[11. 基本設計書内部レビュー - 担当B] starts 2022-03-10 and ends 2022-03-11
[11. 基本設計書内部レビュー - 担当B] is 0% completed
[12. 詳細設計書内部レビュー - 担当B] starts 2022-03-17 and ends 2022-03-18
[12. 詳細設計書内部レビュー - 担当B] is 0% completed
[13. コードレビュー - 担当B] starts 2022-03-28 and ends 2022-03-29
[13. コードレビュー - 担当B] is 0% completed
[14. テスト仕様書レビュー - 担当B] starts 2022-03-30 and ends 2022-03-31
[14. テスト仕様書レビュー - 担当B] is 0% completed
@enduml

ファイル内容の可視化

PlantUMLではJSONとかYAMLの構造を可視化する機能があります。 ファイルを見ているだけだと分かりづらい設定値などの構成も簡単に可視化できるので、個人的に愛用しています。

JSON

JSONAPIの戻り値とかでよく使われますね。 以下はAzure CosmosDB(MongoDB互換ドキュメントデータベース)のあるコレクション構造を可視化した例です。

_ididcreatedAtupdatedAt__v0$date$date<!--MD5=[ecd7e35e1633f6cef5c71e28905590a1]

ソースはこんな感じです。

@startjson
{
    "_id" : "",
    "id" : "",
    "createdAt" : {
        "$date" : ""
    },
    "updatedAt" : {
        "$date" : ""
    },
    "__v" : 0
}
@endjson

YAML

YAMLKubernetesの各種設定等で使われますね。 以下はredisのConfigMapのYAMLを可視化したものです。

apiVersionv1datakindConfigMapmetadatamaster.confredis.confreplica.confcreationTimestamplabelsnamenamespaceresourceVersionselfLinkuidappchartheritagerelease<!--MD5=[216fca801aac4840cb1c2e75c4b64e29]

ソースはこんな感じです。

@startyaml
apiVersion: v1
data:
  master.conf: ""
  redis.conf: ""
  replica.conf: ""
kind: ConfigMap
metadata:
  creationTimestamp: ""
  labels:
    app: ""
    chart: ""
    heritage: ""
    release: ""
  name: ""
  namespace: ""
  resourceVersion: ""
  selfLink: ""
  uid: ""
@endyaml

まとめ

こうやって見てみると、PlantUMLって色々な図が描けて便利ですよね。 テキストで記述していくものなので、変更やバージョン管理も簡単です。 なんとなくいい感じに図を描きたいなと言う時に使ってみると、今より少しだけわかり易いドキュメントが書けるかもしれません。 自分の脳内整理や可視化に使ってみるのもいいと思います!