[Mac] PhpStormでのPlantUML環境構築

# :spy: はじめに
前までAtomでPlantUMLを利用しユースケース、シーケンス図等を作成していたのですが
PhpStormでも利用できるという情報を得たので、初心者でも分かりやすいように導入方法を記載していこうと思います:thumbsup:

## :pencil2: 前提条件
- **Homebrew**のコマンドが使える状態である
    - 確認したバージョン
        - 1.7.1
    - バージョン確認コマンド
        - `brew -v` か `brew --version`
- **JavaSE(JDK)**がインストール済みである
    - 確認したバージョン
        - Java SE 10.0.2 
        - Java SE 9.0.1
        - Java SE 8
    - バージョン確認コマンド
        - `java -version`

# :keyboard: 環境構築手順

## Graphviz
### 1. Graphviz インストール
```bash
brew install graphviz
```

## PlantUML

### 2-1. PlantUML integration インストール
1. PhpStorm内で`⌘,`を押して「Preferences」ダイアログを表示
<img width="947" alt="01_Preferences.png" src="https://qiita-image-store.s3.amazonaws.com/0/208826/4e794279-4a4f-dadd-e8a4-ed35dbe437c3.png">

2. 「Preferences」ダイアログ内の[Browse Repositories...]ボタンをクリックし、「Browse Repositories」ダイアログを表示
<img width="947" alt="02_Browse Repositories.png" src="https://qiita-image-store.s3.amazonaws.com/0/208826/baebbb3c-f3d8-dcca-271c-611bef756376.png">

3. 「Browse Repositories」ダイアログ内の検索窓に`plantuml`と入力
<img width="936" alt="04_Browse Repositories serch plantuml.png" src="https://qiita-image-store.s3.amazonaws.com/0/208826/d72bd70f-6984-6cd0-e868-c8e3f65e70c9.png">

4. 「Browse Repositories」ダイアログ内の[install]ボタンをクリック
<img width="936" alt="05 Browse Repositories serch install.png" src="https://qiita-image-store.s3.amazonaws.com/0/208826/ef53bf9d-dbc2-48e2-d69e-2712de4b982b.png">

5. [install]ボタンをクリック後[Downloading Plugins]というダイアログが表示されるのでダウンロードが完了されるまで少々待つ
<img width="523" alt="10_DownloadingPlugins.png" src="https://qiita-image-store.s3.amazonaws.com/0/208826/1fd70e2f-9c03-5c11-d876-27a7b958ce4a.png">

6. インストール完了後「Browse Repositories」ダイアログに遷移するので[Close]ボタンをクリック
<img width="936" alt="09_Browse_Repositories_install_end.png" src="https://qiita-image-store.s3.amazonaws.com/0/208826/537dc0f9-6995-73b0-ff0b-a65f2f624f2e.png">


7. 「Third-party Plugins Privacy Note」ダイアログが表示されるので[Accept]ボタンをクリック
<img width="444" alt="06_Third-party_Plugins_Privacy_Note.png" src="https://qiita-image-store.s3.amazonaws.com/0/208826/fa6db260-f10d-e8d4-dcbd-4f6ae8fa7b18.png">

8. 「IDE and Plugin updates」ダイアログが表示されるので[Restart]ボタンをクリックしPhpStormを再起動
<img width="444" alt="07_IDE and Plugin updates.png" src="https://qiita-image-store.s3.amazonaws.com/0/208826/feb452d1-e20f-bb33-3d09-19d25307f2e6.png">

9. インストール完了:tada:

# :white_check_mark: インストール確認
- インストールが完了したらUML関連の選択肢が表示されているか確認しましょう!!

<img width="486" alt="08_done.png" src="https://qiita-image-store.s3.amazonaws.com/0/208826/2634c99b-78d7-74c0-a9ca-5c42667ed13d.png">

# :page_facing_up: テンプレ種類

## Salt Wireframe(Salt Wireframe図)
**※UMLか不明**
![01_SaltWireframe.png](https://qiita-image-store.s3.amazonaws.com/0/208826/61a7fa92-e2ad-2917-2de0-df242f4b475b.png)

```
@startuml
salt
{
  Just plain text
  [This is my button]
  ()  Unchecked radio
  (X) Checked radio
  []  Unchecked box
  [X] Checked box
  "Enter text here   "
  ^This is a droplist^
}
@enduml
```

## UML Activity(アクティビティ図)
![02_UMLActivity.png](https://qiita-image-store.s3.amazonaws.com/0/208826/0e2cab94-4156-9be5-a5b6-efeb9c6269af.png)

```
@startuml
(*)  --> "check input"
If "input is verbose" then
--> [Yes] "turn on verbosity"
--> "run command"
else
--> "run command"
Endif
-->(*)
@enduml
```


## UML Class(クラス図)
![03_UMLClass.png](https://qiita-image-store.s3.amazonaws.com/0/208826/2c60c5b8-c6f9-86e7-4acb-ceef087faf1c.png)

```
@startuml

abstract class AbstractList
abstract AbstractCollection
interface List
interface Collection

List <|-- AbstractList
Collection <|-- AbstractCollection

Collection <|- List
AbstractCollection <|- AbstractList
AbstractList <|-- ArrayList

class ArrayList {
Object[] elementData
size()
}

enum TimeUnit {
DAYS
HOURS
MINUTES
}

@enduml
```

## UML Component(コンポーネント図)
![04_UMLComponent.png](https://qiita-image-store.s3.amazonaws.com/0/208826/1c6e2da7-73d8-e09b-a286-8744b1a09238.png)

```
@startuml

package "Some Group" {
HTTP - [First Component]
[Another Component]
}

package "Other Groups" {
FTP - [Second Component]

[First Component] --> FTP
}

@enduml
```

## UML Sequence(シーケンス図)
![05_UMLSequence.png](https://qiita-image-store.s3.amazonaws.com/0/208826/0fc9d4f4-0c0d-349a-b621-63f757c48005.png)

```
@startuml
Alice -> Bob: Authentication Request
Bob --> Alice: Authentication Response

Alice -> Bob: Another authentication Request
Alice <-- Bob: another authentication Response
@enduml
```


## UML State(ステートマシン図)
![06_UMLState.png](https://qiita-image-store.s3.amazonaws.com/0/208826/01ddb552-a683-dcae-ad1e-d45580bfdee3.png)

```
@startuml
scale 350 width
[*] --> NotShooting

state NotShooting {
  [*] --> Idle
  Idle --> Configuring : EvConfig
  Configuring --> Idle : EvConfig
}

state Configuring {
  [*] --> NewValueSelection
  NewValueSelection --> NewValuePreview : EvNewValue
  NewValuePreview --> NewValueSelection : EvNewValueRejected
  NewValuePreview --> NewValueSelection : EvNewValueSaved

  state NewValuePreview {
     State1 -> State2
  }

}
@enduml
```

## UML Use Case(ユースケース図)
![07_UMLUseCase.png](https://qiita-image-store.s3.amazonaws.com/0/208826/621ee69c-856d-ee02-79a6-84c180ab2b65.png)

```
@startuml
:Main Admin: as Admin
(Use the application) as (Use)

User -> (Start)
User --> (Use)

Admin ---> (Use)

note right of Admin : This is an example.

note right of (Use)
A note can also
be on several lines
end note

note "This note is connected\nto several objects." as N2
(Start) .. N2
N2 .. (Use)
@enduml
```

# :bow: 参考元
- [PHPStormでPlantUMLを書く](https://qiita.com/irucaice/items/6376a428d5e645766249)
    - 導入の際、参考に致しました。
- [UMLをソースで管理 (Mac + ATOM + PlantUML)](https://qiita.com/Ryo---ta/items/e0e5d89c90203a9f9471)
    - Graphviz インストール, JDK インストール, 記事の書き方を参考に致しました。

# :speaking_head: 余談
- 初投稿
    - 今回初めてQiitaに投稿しました！
    - 見る人を考慮し、画像・絵文字を多々使ってしまったので、人によっては見やすかったり見にくかったり...
        - 以後記事を作成する際は、初心者の方でもわかりやすい内容にしていきたい
            - *おばあちゃんに分かるように説明できなければ本当に理解したとは言えない - アルバート・アインシュタイン*
- UML画像のサイズ・画質の差がある
    - コンソール/Atom/PhpStom それぞれからpngにした時サイズが違ってたり画質に差があった
        - pngにしたときは phpstorm < Atom = PhpStom の順で良いなと思った
- JavaSE(JDK)バージョン
    - Atomの場合Java SE 8を利用しないとうまく描画してくれなかったが、PhpStorm側では特にバージョンによって表示されないということはなかった