UML図を"スマート"に作ってみる。plantumlとvimとchromeブラウザで、らくちん効率化!!

# こんな人向け :ear:
- UMLを使った図/今回はフロー図をテキスト管理したい
- テキスト更新を即座にフロー図を自動反映させて、<font color='red'>**手間なく / 楽して**</font>、テキストベースでフロー図を作成したい
    - UMLで何ができる??... 
    - 参考資料: [PlantUML Cheat Sheet](https://qiita.com/ogomr/items/0b5c4de7f38fd1482a48)
    - 参考資料: [PlantUML 言語リファレンスガイド](http://plantuml.com/ja/guide)

# 最終的なアウトプットイメージ :eyes:
- 左にUML図画像、右に作成したいUML図のテキスト記述
- 右に記述しているテキストを保存する度に、左のUML図画像が書き換わる
    - 以下はフロー図の例 :point_down:
    - Swimlane2というアクターのプロセスを２つ追加している。
![flow_uml.gif](https://qiita-image-store.s3.amazonaws.com/0/367758/c08a70ec-8567-1c6f-cf5a-8fc46e86d5fa.gif)

# 構成要素 :gear:
- フロー図の表示はChromeブラウザ上で表示
- フロー図の作成と表示にはChrome拡張機能の[PlantUML Viewer](https://chrome.google.com/webstore/detail/plantuml-viewer/legbfeljfbjgfifnkmpoajgpgejojooj)
- テキスト編集はvim

# 環境準備 :wrench:
- Macの前提で進めさせていただきます。

- まず必要アプリケーションが２つ。
    - 参考資料: [PlantUML導入手順 (Mac)](https://qiita.com/yukihigasi/items/18d8e3254eb14475ae43)
    - 参考資料: [PlantUMLをMac OS Xで使う](https://qiita.com/kohashi/items/1d2c6e859eeac72ed926)

```bash

# 以下2つのアプリケーションをインストール
brew install graphviz
brew install plantuml
```
- 次に、Chromeの拡張機能[PlantUML Viewer](https://chrome.google.com/webstore/detail/plantuml-viewer/legbfeljfbjgfifnkmpoajgpgejojooj)を入れておく。
- 最後に、vimを入れておく。

# 手順と挙動詳細 :eye::point_up:
- フロー図を記述したテキストファイルを作成しておく
    - コンソールで開いておくとよい
    - 今回、`sequence.uml`というファイル名で作成した

```plaintext
  1 @startuml
  2
  3 actor Entrant
  4
  5 Entrant -> Ticket : Attend Event Request
  6
  7 activate Ticket
  8 Ticket -> Member : Create Member Request
  9
 10 activate Member
 11 Member -> Member : Create Member
 12 Ticket <-- Member : Create Member Response
 13 deactivate Member
 14
 15 Ticket -> Ticket : Create Ticket
 16 Entrant <-- Ticket : Attend Event Response
 17 deactivate Ticket
 18
 19 @enduml

```

- ブラウザをCORS制約を解除した状態で立ち上げる
    - ちなみに私はシークレットモードで立ち上げている
    - 他にブラウザが立ち上がっている場合はChromeを終了させる
    - その後、`open /Applications/Google\ Chrome.app/ --args --disable-web-security --user-data-dir --incognito`でChromeをCORS制約解除＋シークレットモードで立ち上げる
    - 参考資料: [【解説付き】chromeでXMLHttpRequestをローカルのファイルで行う方法](https://qiita.com/growsic/items/a919a7e2a665557d9cf4)

*警告出ます！*
<img width="1439" alt="スクリーンショット 2019-03-21 0.23.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/367758/997b0d61-e683-2b9d-c9d6-813d01e5fbab.png">


- 立ち上げたブラウザ上で該当ファイルを読み込ませる
    - 読み込ませたいファイルを指定
    - 私の場合は、`file:///Users/◯◯◯/Desktop/sequence.uml`

- 拡張機能[PlantUML Viewer](https://chrome.google.com/webstore/detail/plantuml-viewer/legbfeljfbjgfifnkmpoajgpgejojooj)を有効にしておく
    - ブラウザの右上部に表示されている拡張機能アイコンをクリック
<img width="687" alt="pushExtensionButton.png" src="https://qiita-image-store.s3.amazonaws.com/0/367758/8917bb09-78e4-6830-d815-5654db3cc42e.png">

- ブラウザで表示していた、フロー図を記述したソースが画像に変換される
<img width="1320" alt="スクリーンショット 2019-03-21 0.42.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/367758/0032a231-91e6-00b6-169a-dccfb62a7e99.png">

- vimで該当テキストファイルを変更して保存してみると、ブラウザ表示の画像が自動更新される

# 所感 :thinking:
- 業務内にて業務フロー図を作成する必要があった。当初エクセルで作成しようかとおもっていたが、Macとエクセル相性悪いな〜、たまに遅くなるし原因がいまいちわからん。そもそもUMLってソースコード管理できるよな...っておもって探してときにplantUMLに出会った。
- plantUML自体はとてもいいツールだとおもった一方でUMLテキストを画像に変換するのに手動処理が必要で、「手間」「面倒」だとおもっていた。なので、もっと楽したい→自動反映してほしい、と思うようになり今回の方法を考えてみた。
- イメージどおりで、作図が楽だし、早いし、共有もしやすいなって印象。

#### 残り残課題は
1. セキュリティの部分(CORS解除、拡張機能を使ったときに情報が漏れないかなど)は気になった。
2. UMLのテキスト管理は慣れれば楽だが、学習コストが高いため、共同編集をする場合はエクセルのほうがいいかもしれないとおもった。

---
お読みいただきありがとうございます。
疑問、不明点、誤りあれば、お気兼ねなくコメントいただければ嬉しいです！！