🧩
New! Render PlantUML diagrams directly inside GitHub with our official browser extension — No server. No tokens. No tracking. Zero permissions but clipboard. — Try it out and let us know what you think!

前処理

PlantUMLにはいくつかの前処理機能があり、それはすべてのダイアグラムに対して利用可能です。

これらの機能は、特殊文字#がエクスクラメーションマーク!に置き換えられていることを除くと、C言語のプリプロセッサに非常によく似ています。

変数定義 [=, ?=]

これは必須ではありませんが、変数名を$で始めることを強く推奨します。

データの種類は3つあります。 (JSON変数の定義と使用方法については、Preprocessing-JSONのページを参照してください)

関数の外側に作られた変数はグローバルであり、関数内を含むどこからでもアクセスすることができます。このことを明示するために、変数定義にglobalというキーワードを付けることもできます。

次の構文で、変数が未定義の場合のみ代入することができます: !$a ?= "foo"

WARNING
 This translation need to be updated. 
WARNING

真偽値

真偽値の表現方法 [0 is false]

本当の意味でのboolean型はありませんが、PlantUMLでは慣例に従い次のように定義します:

[Ref. QA-9702]

真偽値型の演算と演算子 [&&, ||, ()]

真偽値判定では、次の演算子を使用できます:

(ifの判定式の例を参照)

真偽値の組み込み関数 [%false(), %true(), %not(<exp>)]

利便性のため、次の組み込み関数が用意されています:

[組み込み関数を参照]

[Ref. PR-1873]
WARNING
 This translation need to be updated. 
WARNING

条件分岐 [!if, !else, !elseif, !endif]

Whileループ [!while, !endwhile]

!while!endwhileキーワードを使用して繰り返しを記述できます。

Whileループ(アクティビティ図での例)

[Adapted from QA-10838]

Whileループ(マインドマップでの例)

Whileループ(コンポーネント図/配置図での例)

[Ref. QA-14088]

WARNING
 This translation need to be updated. 
WARNING

プロシージャ [!procedure, !endprocedure]

例:

プロシージャ内で定義された変数はローカル変数になります。ローカル変数はプロシージャの終了時に破棄されます。

return関数 [!function, !endfunction]

return関数は文字列を出力しません。 定義した関数は次の個所で呼び出すことができます:

簡単な関数の定義は、一行で記述することができます:

プロシージャと同様に、デフォルトで変数はローカル変数になります(関数の終了時に破棄されます)。しかし、関数からグローバル変数にアクセスすることもできます。localキーワードを使用すると、同じ名前のグローバル変数が存在したとしてもローカル変数として定義することができます。

引数のデフォルト値

プロシージャとreturn関数では、引数のデフォルト値を定義することができます。

引数リストの最後尾から連続した複数個の引数に、デフォルト値を設定することができます。

クォーテーション不要プロシージャ/関数 [!unquoted]

デフォルトでは、プロシージャや関数の文字列型引数はクォーテーション記号で囲む必要があります。 unquotedキーワードを使用すると、プロシージャや関数の引数をクォーテーション記号で囲まずに記述できるようになります。

キーワード引数

Pythonと同様の、キーワード引数を使用することができます:

ファイルやURLのインクルード [!include, !include_many, !include_once]

!includeを使用すると、ダイアグラムにファイルをインクルードすることができます。URLを使用してインターネット/イントラネット上のファイルをインクルードすることもできます。インターネット上の認証が必要なリソースにアクセスすることもできます。詳細はURL認証機能を確認してください。

例えば、複数のダイアグラムに、まったく同じクラスが現れるような状況を考えてください。 クラスの定義を何度も記述するのではなく、 別のファイルに定義しておくことができます。

File List.iuml

interface List
List : int size()
List : void clear()

List.iumlは、複数のダイアグラムにインクルードすることができます。 このファイルに変更があった場合、インクルード先のすべてのダイアグラムに変更が及びます。

インクルードされるファイルに複数の@startuml/@endumlブロックを記述し、 インクルード時に!00はブロックの番号)を追加すると、特定のブロックをインクルードすることができます。!0は最初のブロックを表します。

例えば、!include foo.txt!1とすると、foo.txtに記述された2番目の@startuml/@endumlブロックがインクルードされます。

@startuml(id=MY_OWN_ID)という記法で、@startuml/@endumlブロックにIDを付与することもできます。このブロックをインクルードするには、インクルード時に!MY_OWN_IDを追加し、!include foo.txt!MY_OWN_IDのようにします。

デフォルトでは、一つのファイルは一度だけインクルードできます。一つのファイルを複数回インクルードしたい場合は、!includeの代わりに!include_manyを使用します。!include_onceディレクティブを使用すると、ファイルが複数回インクルードされた場合にエラーを発生させることができます。

部分的なインポート [!startsub, !endsub, !includesub]

!startsub NAME!endsubを使用してテキストのセクションを作成し、他のファイルで!includesubによってインクルードすることができます。例:

file1.puml:

@startuml

A -> A : stuff1
!startsub BASIC
B -> B : stuff2
!endsub
C -> C : stuff3
!startsub BASIC
D -> D : stuff4
!endsub
@enduml

file1.puml は、次の記述と同じ結果になります:

@startuml

A -> A : stuff1
B -> B : stuff2
C -> C : stuff3
D -> D : stuff4
@enduml

一方で、これを利用して次のような file2.puml を作ることができます:

file2.puml

@startuml

title this contains only B and D
!includesub file1.puml!BASIC
@enduml

このファイルは、次の記述と同じ結果になります:

@startuml

title this contains only B and D
B -> B : stuff2
D -> D : stuff4
@enduml

組み込み関数 [%]

デフォルトで定義された関数があります。関数名は%で始まります。

名称 説明 戻り値
%chr 与えられたUnicode値に対応する文字を返します。 %chr(65) A
%darken 与えられた色を暗くした色を返します。第二引数に暗くする割合を指定します。 %darken("red", 20) #CC0000
%date 現在日付を返します。オプションで日付のフォーマットを指定できます。 %date("yyyy.MM.dd' at 'HH:mm") 現在日時
%dec2hex 10進数の数値(Int)に対する16進数文字列(String)を返します。 %dec2hex(12) c
%dirpath 現在のディレクトリパスを取得します。 %dirpath() 現在のパス
%feature ある機能が、現在実行中のPlantUMLのバージョンで利用できるかどうか確認します。 %feature("theme") true
%false 常にfalseを返します。 %false() false
%file_exists ファイルがローカルファイルシステムに存在するかどうか確認します。 %file_exists("c:/foo/dummy.txt") ファイルが存在する場合true
%filename 現在のファイル名を取得します。 %filename() 現在のファイル名
%function_exists 関数が存在するかどうか確認します。 %function_exists("$some_function") 関数が定義されている場合true
%get_variable_value 変数の値を取得します。 %get_variable_value("$my_variable") 変数の値
%getenv 環境変数の値を取得します。 %getenv("OS") 環境変数OSの値
%hex2dec 16進数文字列(String)に対する10進数の数値(Int)を返します。 %hex2dec("d") or %hex2dec(d) 13
%hsl_color HSL形式の色(%hsl_color(h, s, l)%hsl_color(h, s, l, a))をRGBa形式に変換します。 %hsl_color(120, 100, 50) #00FF00
%intval StringをIntに変換します。 %intval("42") 42
%is_dark 色が暗い色かどうか判定します。 %is_dark("#000000") true
%is_light 色が明るい色かどうか判定します。 %is_light("#000000") false
%lighten 与えられた色を明るくした色を返します。第二引数に明るくする割合を指定します。 %lighten("red", 20) #CC3333
%loadJSON ローカルファイルまたはURLから、JSONデータを読み込みます。 %loadJSON("http://localhost:7778/management/health") JSONデータ
%lower 文字列を小文字に変換します。 %lower("Hello") この例の場合hello
%newline 改行文字列を返します。 %newline() 改行文字列
%not 真偽値の論理否定を返します。 %not(2+2==4) この例の場合false
%reverse_color RGBを使用して色を反転します。 %reverse_color("#FF7700") #0088FF
%reverse_hsluv_color HSLuvを使用して色を反転します。 %reverse_hsluv_color("#FF7700") #602800
%set_variable_value グローバル変数に値を設定します。 %set_variable_value("$my_variable", "some_value") 空文字列
%size 文字列またはJSON構造体のサイズを返します。 %size("foo") この例の場合3
%string 文字列に変換します。 %string(1 + 2) この例の場合3
%strlen 文字列の長さを返します。 %strlen("foo") この例の場合3
%strpos 文字列を検索し、出現位置を返します。 %strpos("abcdef", "ef") 4 (efの出現位置)
%substr 部分文字列を取り出します。2つまたは3つの引数を取ります。 %substr("abcdef", 3, 2) この例の場合"de"
%true 常にtrueを返します。 %true() true
%upper 文字列を大文字に変換します。 %upper("Hello") この例の場合HELLO
%variable_exists 変数が存在するかどうか確認します。 %variable_exists("$my_variable") 定義済みの変数が存在する場合true
%version 実行中のPlantUMLのバージョンを返します。 %version() 例:1.2020.8

| %invoke_procedure() | Dynamically invoke a procedure by its name, passing optional arguments to the called procedure. | %invoke_procedure("$go", "hello from Bob...") | Depends on the invoked procedure | | %call_user_func() | Invoke a return function by its name with given arguments. | %call_user_func("bold", "Hello") | Depends on the called function | | %splitstr | Split a string into an array based on a specified delimiter. | %splitstr("abc~def~ghi", "~") | ["abc", "def", "ghi"] |

WARNING
 This translation need to be updated. 
WARNING

ログ出力 [!log]

!logを使用すると、ダイアグラム生成時にログを出力することができます。これは、ダイアグラム自体にはまったく影響を与えません。その代わりに、コマンドラインの出力ストリームにログが出力されます。これはデバッグのために有用です。

メモリーダンプ [!dump_memory]

!dump_memoryを使用すると、ダイアグラム生成中のメモリの全内容をダンプ出力することができます。!dump_memoryの後に任意の文字列を追加することもできます。これは、ダイアグラム自体にはまったく影響を与えませんが、デバッグのために有用です。

アサーション [!assert]

ダイアグラムにアサーションを追加できます。

カスタムライブラリの作成 [!import, !include]

複数のインクルードファイルを、一つの.zipまたは.jarアーカイブにまとめることができます。 作成したzip/jarファイルは、!importディレクティブを使用してダイアグラムにインポートすることができます。

ライブラリのインポート後、そのzip/jarファイルに含まれるファイルを!includeすることができます。

例:

@startuml

!import /path/to/customLibrary.zip
' この記述で、"customLibrary.zip"が検索パスに追加されます。

!include myFolder/myFile.iuml
' myFolder/myFile.iuml は、"customLibrary.zip"の中かローカルのファイルシステムに
' 存在していることが期待されます。

...

検索パス

コマンドラインで、Javaプロパティのplantuml.include.pathを使って検索パスを指定できます。

例:

java -Dplantuml.include.path="c:/mydir" -jar plantuml.jar atest1.txt

この-Dオプションは、-jarオプションより前に記述する必要があります。 -jarオプションの後に記述した-Dオプションは、PlantUMLプリプロセッサの定数定義に使用されます。

引数の文字列結合 [##]

##を使用して、マクロ引数に文字列を結合できます。

動的呼び出し [%invoke_procedure(), %call_user_func()]

特別な%invoke_procedure()プロシージャを使用して、プロシージャを動的に呼び出すことができます。 このプロシージャは、最初の引数に実際に呼び出すプロシージャ名を取ります。それに続く残りの引数は、呼び出されるプロシージャの引数として渡されます。

例:

return関数に対しては、%call_user_func()を使用します:

データ型に依存した加算演算子の評価 [+]

$a + $bの評価は$a$bの型に依存して行われます。

JSON前処理

JSON前処理機能によって、前処理機能を拡張できます:

(詳細はJSON前処理のページを確認)

テーマのインクルード [!theme]

!themeディレクティブを使用するとダイアグラムのデフォルトテーマを変更することができます。

詳細はテーマの説明を確認してください。

古いバージョンからの移行に関する注意事項

現行のプリプロセッサは、レガシーなプリプロセッサーからアップデートしたものです。

レガシーな機能の内いくつかは、現行のプリプロセッサでもサポートされていますが、今後はそれらを使わないようにしてください(将来的に削除される可能性があります)。

Please contact us if you have any issues.

%splitstr builtin function

Similar to:

[Ref. QA-15374]

%splitstr_regex builtin function

Similar to:

[Ref. QA-18827]

%get_all_theme builtin function

You can use the %get_all_theme() builtin function to retreive a JSON array of all PlantUML theme.

[from version 1.2024.4]

%get_all_stdlib builtin function

Compact version (only standard library name)

You can use the %get_all_stdlib() builtin function to retreive a JSON array of all PlantUML stdlib names.

Detailed version (with version and source)

With whatever parameter, you can use %get_all_stdlib(detailed) to retreive a JSON object of all PlantUML stdlib.

[from version 1.2024.4]

%random builtin function

You can use the %random builtin function to retreive a random integer.

Nb param. Input Output
0 %random() returns 0 or 1
1 %random(n) returns an interger between 0 and n - 1
2 %random(min, max) returns an interger between min and max - 1

[from version 1.2024.2]

%boolval builtin function

You can use the %boolval builtin function to manage boolean value.

[Ref. PR-1873, from version 1.2024.7]

Escape function

Some character are specials, then we can escape them with some escape functions:

Escape function Output
%dollar() $
%percent() %
%backslash() \

[Ref. QA-19607]