PlantUML アクティビティ図で note 以外の注釈

処理の導線に短い説明を付けるのに note で書きたくない場合、
if 文や、repeat 文は、以下のように、( ) 内に簡単なワードで表現することが多い

 if (条件) then (Yes)
 else (No)

repeat

repeat while (条件) is (戻る)

while

while (条件1) is (Yes)
	:処理B;
endwhile (No)

処理の間でこのような表現をしたい時は、->コメント; を処理の間に追加する。

@startuml

|__顧客__|
    :注文する;

|#AntiqueWhite|__販売部門__|
    :在庫を確認する;
     ->1分;
    :出荷を確認する;
     ->3分;
|__出荷部門__|
    :出荷する;
    fork

VScode PlantUML の画像エクスポートファイル名

VScode PlantUML の画像エクスポートファイル名は、PlantUML ファイル名でなく
@startuml 行で付けた文字列+”."+画像拡張子 になる。
VScodeでは、
PNG形式出力は
aaa.pu ⇒ aaa.png にはならない。

@startuml aaa

と書いて aaa.png になる。

しかも、最新の VScode では、@startuml 行に何もかかないと警告が出てる。

PlantUML で業務フロー図(2)

アクティビティ図で書く業務フローは、repeate 、while を書く時にレーンを書く時に気をつけないと
崩れてしまう。
片側のレーンだけに寄せた描画の例
repeat

@startuml

|A|
start
:処理A;
|B|
repeat:処理B;
	:処理C;
backward :処理D;
repeat while(条件1) is (エラー)
:処理D;
|A|
:処理E;
end

@enduml

backward しか書かない repeat

@startuml

|A|
:処理A;
|B|
repeat:処理B;
	backward :処理C;
repeat while(条件1) is (No)
:処理D;
end

@enduml

while

@startuml

|A|
start
:処理A;
|B|
:処理B;
while (条件1) is (Yes)
	:処理C;
endwhile (No)
|B|
:処理D;
|A|
:処理E;
end

@enduml

if 文

@startuml

|A|
start
:処理A;
|B|
:処理B;
if (条件1) then (No)
	|A|
	:処理C;
	|B|
 else (Yes)
	:処理D;
endif
:処理E;
stop

@enduml

if 文を差し込んだ repeat で、レーン跨る処理を描画

@startuml

|A|
:処理A;
:処理B;
|B|
repeat:処理C;
	if (条件1) then (No)
		|A|
		:処理D;
	else;
		|B|
		:処理E;
	end if
repeat while(条件2)
:処理F;
end

@enduml

AWSアイコンで書くC4モデルのPlantUML

C4モデル
・コンテキスト(context)
・コンテナ(containers)
コンポーネント(components)
・コード(code)
これらソフトウェアアーキテクチャを記述する方法としてのUMLを書く、
plantUML で書くためのツール
github.com

使用方法は、
https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v20.0/dist/
から、AWSCommon.puml をインクルードして
dist の下にある各アイコンにouml をインクルードする。
!define で、dist までのURLをAWSPumlとして@startuml に続けてインクルード文を書いて利用する。
以下のように、@startuml に続けて書く。

@startuml Hello World

!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/master/dist
!includeurl AWSPuml/AWSCommon.puml
!includeurl AWSPuml/EndUserComputing/all.puml
!includeurl AWSPuml/Storage/SimpleStorageServiceS3.puml

actor "Person" as personAlias
WorkDocs(desktopAlias, "Label", "Technology", "Optional Description")
SimpleStorageServiceS3(storageAlias, "Label", "Technology", "Optional Description")

personAlias --> desktopAlias
desktopAlias --> storageAlias

@enduml

アクティビティ図では、古い記法でしか対応していない、
新記法では、以下のように書くしかないみたいだ。

:WorkDocs(desktopAlias, "Label", "Technology", "Optional Description");
:SimpleStorageService(storageAlias, "Label", "Technology", "Optional Description");

使用できるアイコンは、
https://github.com/awslabs/aws-icons-for-plantuml/blob/master/AWSSymbols.md
ここで確認する。

AWS が公式で公開しているアイコンは、
https://aws.amazon.com/jp/architecture/icons/
ここから入手する

シンプルなアイコン描画にしたい場合、ここの説明にあるように、
https://github.com/awslabs/aws-icons-for-plantuml?tab=readme-ov-file#simplified-view
AWSCommon.puml と各アイコンの宣言の前に、

!include AWSPuml/AWSSimplified.puml

を差し込めばよい。

PlantUML で業務フロー図(1)

PlantUML アクティビティ図で業務フローを書く。

@startuml
title 業務フロー

|__顧客__|
    :注文;
|#mintcream|__営業__|
    :在庫を確認;
    :出荷を要求;
|__配送__|
    :出荷;
    note right:(注)ノート\n(1)AAA\n(2)BBB
    fork
    :出荷通知;
|#papayawhip|__経理__|
    :請求書送付;
|__顧客__|
    forkagain
    :商品を受け取る;
|__顧客__|
    end fork
    :支払;
|#papayawhip|__経理__|
    :入金;
    
@enduml

swim lane の表記 ”|__顧客__|” のように、"_"2個で囲むと下線を付けることができる。
注釈 note は、任意の場所に

    note right:(注)ノート\n(1)AAA\n(2)BBB

を書けば良い

VScode PlantUMLで作成するUML画像の出力先を設定する。

VScode の拡張で PlantUMLを使用して生成するPlantUML のUML画像出力先は
デフォルトだと開いているプロジェクトフォルダの下に、out というフォルダを作って
その下、あるいは out の下にmarkdown を書いたフォルダと同じフォルダツリーを作成して
その下に画像を出力してしまう。
out の下ではなく、markdown を書いた同じフォルダ上に作成する場合は、VScode の設定画面を
開いて、PlantUML の設定を行う。

(1) VScode の設定画面を開く
  Ctrl + "," キー押下で開く

(2) 検索キーとして "plantuml" を打ち込む

(3) plantuml.exportOutDir ⇒ これが出力先の設定なので、これを変更する。
  カーソルを当てると「編集」と表示されるのでこれをクリック

(4) 「設定を置換」と表示されるのでこれをクリック

(5) 右側ウィンドウが開き、plantuml.exportOutDir が編集可能として出るので
 これを "out" ⇒ "" に変更する。

これだけではサブフォルダが画像生成で自動生成されてしまうので、
plantuml.exportSubFolder を true ⇒ false に設定する必要がある。

(6) plantuml.exportSubFolder にカーソルを当てると「編集」と表示される

(7) クリックして、 false を選択

(8) 右ウィンドウのユーザウィンドウが以下のようになれば、設定は完了、
  同じフォルダ内にUML図を生成することができる。

PostgreSQL テーブル列の定義とコメント一覧を抽出

先日、PostgreSQL テーブルのコメント一覧を抽出 - Oboe吹きプログラマの黙示録 を書いたので、
今度は、テーブルの列の定義とコメント一覧を抽出
任意のスキーマ、テーブルを指定して次のSQLで求める。

スキーマ名='public'
テーブル名='t_items'

SELECT 
    a.relname       AS table_name, 
    c.description  AS table_comment,
    b.column_name,
    d.description AS column_comment,
    b.data_type,
    b.udt_name,
    b.character_octet_length,
    b.numeric_precision || ',' ||b.numeric_scale AS numeric_length,
    b.is_nullable,
    b.column_default 
FROM pg_stat_user_tables a
LEFT JOIN information_schema.COLUMNS b ON a.schemaname = b.table_schema 
                 AND a.relname = b.table_name
LEFT JOIN pg_description c ON a.relid = c.objoid AND c.objsubid = 0
LEFT JOIN pg_description d ON a.relid = d.objoid AND b.ordinal_position = d.objsubid
WHERE a.schemaname  = 'public'
AND a.relname = 't_items'
ORDER BY b.ordinal_position ASC

data_type と udt_name は、以下の結果になることに注意しよう。

data_type udt_name
bigint int8
integer int4
smallint int2
character varying varchar