げぇむぷろぐらみんぐ

日々の生活で得た知識、経験を書きます

エンジニア以外にも使ってほしい!PlantUMLのススメ

はじめに

最近一から設計を考えて実装をする機会が多く、実装前にチームメンバーに自分の考えを共有しなければならないことが多くありました。 その際に、PlantUMLによって自分の考えを図示してから話し合いを行うことで様々な利点があったので共有します。

まだPlantUML歴2週間程度のひよっこなので間違ってるところがあったらぜひ教えてください。

(書いてから思いましたが、UMLをオススメする記事になってしまった気がします)

UML

PlantUMLについて説明をする前に、UMLについての説明をします。

UMLとはWikipediaから引用すると、

統一モデリング言語(とういつモデリングげんご、UML、英: Unified Modeling Language)は、主にオブジェクト指向分析や設計のための、記法の統一がはかられた(Unified)モデリング言語(Modeling Language)である。

だそうです。

簡単に言うと、ソフトウェアに関する設計や処理の流れやデータ構造といったものを図示していくための記法を定めたものです。

UMLは、データ構造などの構造を表す構造図と動作や変化を表す振る舞い図の大きく二種類に分類されます。

構造図としては、クラス図、パッケージ図、オブジェクト図などがあります。 振る舞い図としては、アクティビティ図、ユースケース図、状態遷移図などがあります。

今回は、それぞれの図の具体的な使いみちは他のサイトに譲りますが、UMLがどんなものか見てもらうためにクラス図についてのみ紹介します。

クラス図

その名の通り、ソフトウェアを構成するクラスがどのような関連を持っているかを図示するものです。 あるクラスが他のクラスとどんな関係にあり、どんな変数を保持しているかが図でわかるようになります。

具体的なクラス図は以下です。

f:id:siguma_sig:20180721225035p:plain

この図を見ると、Animalが抽象クラスで、Dog、Cat、Humanはそれを実装したクラスとなり、ZooはAnimalのリストを持ってるクラスだということがわかります。

PlantUML

PlantUMLとは、上記で説明したUMLDSLを記述することですばやく作成できるものです。

先程のクラス図は以下のように記述することで生成されます。

@startuml
abstract class Animal {
    - type
    - color
    + run
}

class Dog {
    + run
    + eat
}
class Cat {
    + run
    + sleep
}

class Human {
    + run
    + talk
}

class Zoo {
    - animalList
}

Animal <|-- Dog
Animal <|-- Cat
Animal <|-- Human
Zoo *-- Animal
@enduml

このように、テキストベースでUMLを記述することができるのがPlantUMLです。(UML以外にも図示できるらしいです)

各図を作図するためにある程度記法を覚える必要がありますが、慣れてしまえばdraw.ioなどで図を書くよりも早く、そしてきれいに図示できると思います。

PlantUML(UML)の利点

PlantUML(UML)を使っていて感じた利点としては以下のようなものがありました。

図を作成することで思考の整理ができる

コードを実際に書く前に設計を図示しておくことで自分の思考が整理され、曖昧だった箇所がはっきりして実装時の手戻りが減ります。

人との考えの共有ができる

言葉で設計について相談するよりも、このようなツールで図示をしてそれをベースに相談したほうが圧倒的に精度が高いと感じました。 言葉の受け取り方は人それぞれな部分もあり、自分が思っていたことと相手の思っていたことが違い手戻りが発生してしまうようなことがあります。 しかし、図示をして相談をすればそういった不明確な要素を排除できます。

実装が楽になる

あらかじめ設計を図示しておくことで、あとはそのとおりに作っていくだけでよくなるので実装時の負担が減ります。 実装中に設計を考えながらやると行き当たりばったりな実装になりがちで、良くないコードになってしまいます。

ドキュメントとして残せる

PlantUMLはテキストベースなのでGit管理もしやすく、ドキュメントとして残す際に便利です。

PlantUMLの欠点

記法を覚えるのが大変

僕も未だに記法をしっかりと覚えられていないので、書くときに少し時間がかかってしまいます。 頑張って覚えましょう。

どの図を使っていいかわからない

UMLについてしっかりと理解しないと、クラス図で書くべきなのかオブジェクト図で書くべきなのかがわからなくなってしまったりします。 頑張って理解しましょう。

まとめ

PlantUMLはエンジニアだけが使うツールではないと思います。 例えば、プランナーさんがエンジニアに仕様を伝える際にも、ユースケース図やシーケンス図が活きてくると思います。

是非みんなでPlantUMLを覚えて、適切な議論ができるようにしていきましょう!