コンポーネント図

コンポーネント図:コンポーネント図は、システム・コンポーネントの構成と関係を視覚化するために UML(統一モデリング言 語)で使用される構造図の一種です。これらの図は、複雑なシステムを管理可能なコンポーネントに分解し、それらの相互依存性を示し、効 率的なシステム設計とアーキテクチャを保証するのに役立ちます。

PlantUML の利点
  • 単純さ:PlantUML では、シンプルで直感的なテキストベースの記述を使用してコン ポーネント図を作成することができ、複雑な描画ツールの必要性を排除し ます。
  • 統合:PlantUML は、様々なツールやプラットフォームとシームレスに統合され、 開発者やアーキテクトにとって多目的な選択肢となります。
  • CollaborationPlantUML フォーラムは、ユーザが自分のダイアグラムについて議論し、 共有し、支援を求めるためのプラットフォームを提供し、コラボレーショ ン・コミュニティを育成します。

コンポーネント

コンポーネントは括弧でくくります。

また、 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 ofnote right ofnote top ofnote 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

UML2 表記の使用

デフォルトでは、UML2表記が使用されます(v1.2020.13-14以降)

🎉 Copied!

@startuml

interface "Data Access" as DA

DA - [First Component]
[First Component] ..> HTTP : use

@enduml

UML1 表記の使用

コマンド skinparam componentStyle uml1 は、UML1 表記に切り替えるために使用されます。

🎉 Copied!

@startuml
skinparam componentStyle uml1

interface "Data Access" as DA

DA - [First Component]
[First Component] ..> HTTP : use

@enduml

四角形表記の使用(UML表記をしない)

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

特有のskinparam

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

次のような指定が可能です:
  • $tag13のコンポーネントを非表示にする:

🎉 Copied!

@startuml
component C1 $tag13
component C2
component C3 $tag13
C1 -- C2

hide $tag13
@enduml

  • $tag13のコンポーネントを削除する:

🎉 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]

Display JSON Data on Component diagram

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.

Port [port, portIn, portOut]

You can add port with port, portinand 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


Privacy Policy      Advertise