コンポーネント図:コンポーネント図は、システム・コンポーネントの構成と関係を視覚化するために UML(統一モデリング言 語)で使用される構造図の一種です。これらの図は、複雑なシステムを管理可能なコンポーネントに分解し、それらの相互依存性を示し、効 率的なシステム設計とアーキテクチャを保証するのに役立ちます。
PlantUML の利点:
- 単純さ:PlantUML では、シンプルで直感的なテキストベースの記述を使用してコン ポーネント図を作成することができ、複雑な描画ツールの必要性を排除し ます。
- 統合:PlantUML は、様々なツールやプラットフォームとシームレスに統合され、 開発者やアーキテクトにとって多目的な選択肢となります。
- Collaboration:PlantUML フォーラムは、ユーザが自分のダイアグラムについて議論し、 共有し、支援を求めるためのプラットフォームを提供し、コラボレーショ ン・コミュニティを育成します。
コンポーネントは括弧でくくります。
また、
component
キーワードでもコンポーネントを定義できます。この場合、コンポーネント名に空白や特殊文字を含まなければ括弧を省略することができます。
コンポーネントには
as
キーワードにより別名をつけることができます。
この別名は、後でリレーションを定義するときに使えます。
🎉 Copied!
|
@startuml
[First component]
[Another component] as Comp2
component Comp3
component [Last\ncomponent] as Comp4
@enduml
|
名前に関する注意
コンポーネント名が
$
で始まる場合は、後で非表示にしたり削除したりすることができません。これは、
hide
および
remove
コマンドが
$tag
のような名称をコンポーネント名ではなくタグであると解釈するためです。そのようなコンポーネントを後から削除するには、別名を付けるか、タグを付けてください。
🎉 Copied!
|
@startuml
component [$C1]
component [$C2] $C2
component [$C2] as dollarC2
remove $C1
remove $C2
remove dollarC2
@enduml
|
インタフェースは丸括弧
()
でシンボルを囲うことで定義できます。 (何故なら見た目が丸いからです。)
もちろん
interface
キーワードを使って定義することもできます。
as
キーワードでエイリアスを定義できます。
このエイリアスは後で、関係を定義する時に使えます。
後で説明されますが、インタフェースの定義は省略可能です。
🎉 Copied!
|
@startuml
() "First Interface"
() "Another interface" as Interf2
interface Interf3
interface "Last\ninterface" as Interf4
[component]
footer //Adding "component" to force diagram to be a **component diagram**//
@enduml
|
要素間の関係は、破線 (
..
)、直線 (
--
), 矢印 (
-->
) の組合せで構成されます。
🎉 Copied!
|
@startuml
DataAccess - [First Component]
[First Component] ..> HTTP : use
@enduml
|
オブジェクトに関連のあるノートを作成するには
note left of
、
note right of
、
note top of
、
note bottom of
キーワードを使います。
🎉 Copied!
|
@startuml
[Component] as C
note top of C: A top note
note bottom of C
A bottom note can also
be on several lines
end note
note left of C
A left note can also
be on several lines
end note
note right of C: A right note
@enduml
|
または
note
キーワードを使ってノートを作成し、
..
記号(または任意の矢印記号(
-
、
--
、...))を使ってオブジェクトに紐づけることができます。
🎉 Copied!
|
@startuml
[Component] as C
note as N
A floating note can also
be on several lines
end note
C .. N
@enduml
|
別の例:
🎉 Copied!
|
@startuml
interface "Data Access" as DA
DA - [First Component]
[First Component] ..> HTTP : use
note left of HTTP : Web Service only
note right of [First Component]
A note can also
be on several lines
end note
@enduml
|
いくつかのキーワードをグループコンポーネントやインタフェースに使用することができます:
package
node
folder
frame
cloud
database
🎉 Copied!
|
@startuml
package "Some Group" {
HTTP - [First Component]
[Another Component]
}
node "Other Groups" {
FTP - [Second Component]
[First Component] --> FTP
}
cloud {
[Example 1]
}
database "MySql" {
folder "This is my folder" {
[Folder 3]
}
frame "Foo" {
[Frame 4]
}
}
[Another Component] --> [Example 1]
[Example 1] --> [Folder 3]
[Folder 3] --> [Frame 4]
@enduml
|
デフォルトではクラス間のリンクは 2 つのダッシュ
--
を持っており垂直方向に配向されています。
次のように単一のダッシュ(またはドット)を置くことによって水平方向のリンクを使用することが可能です:
🎉 Copied!
|
@startuml
[Component] --> Interface1
[Component] -> Interface2
@enduml
|
リンクを反対にすることで方向を変更することもできます。
🎉 Copied!
|
@startuml
Interface1 <-- [Component]
Interface2 <- [Component]
@enduml
|
また、
left
を加えることで矢印の向きを変更することもできます。
right
,
up
,
down
などのキーワードを矢印の間に記述します。:
🎉 Copied!
|
@startuml
[Component] -left-> left
[Component] -right-> right
[Component] -up-> up
[Component] -down-> down
@enduml
|
方向の最初の文字のみを使用して矢印を短くすることができます(例えば、
-down-
の代わりに
-d-
)、または最初の 2 文字(
-do-
)。
この機能を悪用してはならないことに注意してください:
Graphviz は微調整の必要がない良い結果を通常は与えてくれます。
left to right direction
パラメータを指定した場合は、次のようになります。:
🎉 Copied!
|
@startuml
left to right direction
[Component] -left-> left
[Component] -right-> right
[Component] -up-> up
[Component] -down-> down
@enduml
|
See also 'Change diagram orientation' on Deployment diagram page.
デフォルトでは、UML2表記が使用されます
(v1.2020.13-14以降)。
🎉 Copied!
|
@startuml
interface "Data Access" as DA
DA - [First Component]
[First Component] ..> HTTP : use
@enduml
|
コマンド
skinparam componentStyle uml1
は、UML1 表記に切り替えるために使用されます。
🎉 Copied!
|
@startuml
skinparam componentStyle uml1
interface "Data Access" as DA
DA - [First Component]
[First Component] ..> HTTP : use
@enduml
|
skinparam componentStyle rectangle
コマンドを使用すると、UML表記ではなく四角形による表記を行うことができます。
🎉 Copied!
|
@startuml
skinparam componentStyle rectangle
interface "Data Access" as DA
DA - [First Component]
[First Component] ..> HTTP : use
@enduml
|
角括弧を使用して説明を複数行で記述することができます。
🎉 Copied!
|
@startuml
component comp1 [
This component
has a long comment
on several lines
]
@enduml
|
コンポーネント定義のあとに色を指定することができます。
🎉 Copied!
|
@startuml
component [Web Server] #Yellow
@enduml
|
ステレオタイプのコンポーネント内にスプライトを使用することができます。
🎉 Copied!
|
@startuml
sprite $businessProcess [16x16/16] {
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFF0FFFFF
FFFFFFFFFF00FFFF
FF00000000000FFF
FF000000000000FF
FF00000000000FFF
FFFFFFFFFF00FFFF
FFFFFFFFFF0FFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFF
}
rectangle " End to End\nbusiness process" <<$businessProcess>> {
rectangle "inner process 1" <<$businessProcess>> as src
rectangle "inner process 2" <<$businessProcess>> as tgt
src -> tgt
}
@enduml
|
ダイアグラムの色やフォントを変更するには
skinparam コマンドを使用します。
このコマンドは以下の場面で使用できます。
ステレオタイプのコンポーネントおよびインタフェースのための特定の色とフォントを定義することができます。
🎉 Copied!
|
@startuml
skinparam interface {
backgroundColor RosyBrown
borderColor orange
}
skinparam component {
FontSize 13
BackgroundColor<<Apache>> Pink
BorderColor<<Apache>> #FF6655
FontName Courier
BorderColor black
BackgroundColor gold
ArrowFontName Impact
ArrowColor #FF6655
ArrowFontColor #777777
}
() "Data Access" as DA
Component "Web Server" as WS << Apache >>
DA - [First Component]
[First Component] ..> () HTTP : use
HTTP - WS
@enduml
|
🎉 Copied!
|
@startuml
skinparam component {
backgroundColor<<static_lib>> DarkKhaki
backgroundColor<<shared_lib>> Green
}
skinparam node {
borderColor Green
backgroundColor Yellow
backgroundColor<<shared_node>> Magenta
}
skinparam databaseBackgroundColor Aqua
[AA] <<static_lib>>
[BB] <<shared_lib>>
[CC] <<static_lib>>
node node1
node node2 <<shared node>>
database Production
@enduml
|
WARNING
This translation need to be updated. WARNING
componentStyle
- デフォルトで(もしくは
skinparam componentStyle uml2
を指定することで)、コンポーネントにはアイコンが表示されます。
🎉 Copied!
|
@startuml
skinparam BackgroundColor transparent
skinparam componentStyle uml2
component A {
component "A.1" {
}
component A.44 {
[A4.1]
}
component "A.2"
[A.3]
component A.5 [
A.5]
component A.6 [
]
}
[a]->[b]
@enduml
|
- これを非表示にして四角形だけを表示するには、
skinparam componentStyle rectangle
を指定します。
🎉 Copied!
|
@startuml
skinparam BackgroundColor transparent
skinparam componentStyle rectangle
component A {
component "A.1" {
}
component A.44 {
[A4.1]
}
component "A.2"
[A.3]
component A.5 [
A.5]
component A.6 [
]
}
[a]->[b]
@enduml
|
[Ref. 10798]
デフォルトでは、すべてのコンポーネントが表示されます:
🎉 Copied!
|
@startuml
component C1
component C2
component C3
C1 -- C2
@enduml
|
- しかし、
hide @unlinked
で、孤立したコンポーネントを非表示にできます:
🎉 Copied!
|
@startuml
component C1
component C2
component C3
C1 -- C2
hide @unlinked
@enduml
|
- もしくは、
remove @unlinked
で、孤立したコンポーネントを削除できます:
🎉 Copied!
|
@startuml
component C1
component C2
component C3
C1 -- C2
remove @unlinked
@enduml
|
[Ref. QA-11052]
$
を使って、コンポーネントにタグ付けすることができます。それから、コンポーネント個別、またはタグごとに、非表示(hide)、削除(remove)、復元(restore)を指定することができます。
デフォルトでは、すべてのコンポーネントが表示されます:
🎉 Copied!
|
@startuml
component C1 $tag13
component C2
component C3 $tag13
C1 -- C2
@enduml
|
次のような指定が可能です:
🎉 Copied!
|
@startuml
component C1 $tag13
component C2
component C3 $tag13
C1 -- C2
hide $tag13
@enduml
|
🎉 Copied!
|
@startuml
component C1 $tag13
component C2
component C3 $tag13
C1 -- C2
remove $tag13
@enduml
|
$tag13
のコンポーネントを削除するが$tag1
は表示する:
🎉 Copied!
|
@startuml
component C1 $tag13 $tag1
component C2
component C3 $tag13
C1 -- C2
remove $tag13
restore $tag1
@enduml
|
-
*
(すべてのコンポーネント)を削除するが$tag1
は表示する:
🎉 Copied!
|
@startuml
component C1 $tag13 $tag1
component C2
component C3 $tag13
C1 -- C2
remove *
restore $tag1
@enduml
|
[Ref. QA-7337 and QA-11052]
Simple example
🎉 Copied!
|
@startuml
allowmixing
component Component
() Interface
json JSON {
"fruit":"Apple",
"size":"Large",
"color": ["Red", "Green"]
}
@enduml
|
[Ref. QA-15481]
For another example, see on
JSON page.
You can add
port with
port
,
portin
and
portout
keywords.
Port
🎉 Copied!
|
@startuml
[c]
component C {
port p1
port p2
port p3
component c1
}
c --> p1
c --> p2
c --> p3
p1 --> c1
p2 --> c1
@enduml
|
PortIn
🎉 Copied!
|
@startuml
[c]
component C {
portin p1
portin p2
portin p3
component c1
}
c --> p1
c --> p2
c --> p3
p1 --> c1
p2 --> c1
@enduml
|
PortOut
🎉 Copied!
|
@startuml
component C {
portout p1
portout p2
portout p3
component c1
}
[o]
p1 --> o
p2 --> o
p3 --> o
c1 --> p1
@enduml
|
Mixing PortIn & PortOut
🎉 Copied!
|
@startuml
[i]
component C {
portin p1
portin p2
portin p3
portout po1
portout po2
portout po3
component c1
}
[o]
i --> p1
i --> p2
i --> p3
p1 --> c1
p2 --> c1
po1 --> o
po2 --> o
po3 --> o
c1 --> po1
@enduml
|