###### tags: `example` `mermaid` `フローチャート` `シーケンス図` `状態遷移図` `クラス図`
# mermaidテスト
> [time=Fri, Jan 24, 2020 4:15 PM] [name=KentoSawaya]
## はじめに
gitで作図ができるmermaid.jsについて調べてみました。Markdownの中にmermaidを埋め込むことで、フローチャートや状態遷移図などが作図できるようです。今後、仕様書をテキストベースで作成し、gitで差分管理する足がかりになればいいなと思いまとめました。
## 例
### フローチャート
```mermaid
graph TD
ST((Start)) --> Operation[Some operation]
Operation --> Condition{Some condition}
Condition -- yes --> Operation2[Some operation2]
Operation2 --> END((End))
Condition -- no --> END
```
```SHELL=
graph TD
ST(Start) --> Operation[Some operation]
Operation --> Condition{Some condition}
Condition -- yes --> Operation2[Some operation2]
Operation2 --> END((End))
Condition -- no --> END
```
---
### 状態遷移図
```mermaid
graph LR
ST -- 0 --> ST((Start))
ST -- 1 --> a((A))
a -- 0 --> a
a -- 1 --> b((B))
b -- 0 --> b
b -- 1 --> ST
```
```SHELL=
graph LR
ST -- 0 --> ST((Start))
ST -- 1 --> a((A))
a -- 0 --> a
a -- 1 --> b((B))
b -- 0 --> b
b -- 1 --> ST
```
---
### シーケンス図
```mermaid
sequenceDiagram
# エイリアス
participant cl as クライアント
participant sv as サーバー
participant db as データベース
# データ取得コード
cl ->>+ sv : データ取得要求
sv ->>+ db : select発行
db -->>- sv : select結果
sv -->>- cl : データ取得要求結果
alt 正常終了
Note over cl : 取得データ表示
else エラー
Note over cl : エラー表示
end
```
```SHELL=
sequenceDiagram
# エイリアス
participant cl as クライアント
participant sv as サーバー
participant db as データベース
# データ取得コード
cl ->>+ sv : データ取得要求
sv ->>+ db : select発行
db -->>- sv : select結果
sv -->>- cl : データ取得要求結果
alt 正常終了
Note over cl : 取得データ表示
else エラー
Note over cl : エラー表示
end
```
---
### ガントチャート
```mermaid
gantt
title ガントチャートテスト
dateFormat YYYY-MM-DD
section 製品A開発セクション
設計 : done, task1, 2017-12-11, 2017-12-15
実装 : active, task2, 2017-12-18, 5d
単体テスト : task3, after task2, 5d
結合テスト : task4, after task3, 5d
```
```SHELL=
gantt
title ガントチャートテスト
dateFormat YYYY-MM-DD
section 製品A開発セクション
設計 : done, task1, 2017-12-11, 2017-12-15
実装 : active, task2, 2017-12-18, 5d
単体テスト : task3, after task2, 5d
結合テスト : task4, after task3, 5d
```
---
### クラス図
```mermaid
classDiagram
Class01 <|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --> C2 : Where am i?
Class09 --* C3
Class09 --|> Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 <--> C2: Cool label
```
```SHELL=
classDiagram
Class01 <|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --> C2 : Where am i?
Class09 --* C3
Class09 --|> Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 <--> C2: Cool label
```
---
## 注意点
* git branchもmermaidで記述できるようですがHackMDではあまり上手く動きません。**git branchをmermaidで記述するとHackMDがハマってしまってその後一切使用できなくなることもあります。**(2020.01.24現在)
## 参考
[機能紹介(HackMD公式)](https://hackmd.io/s/features-jp)
[mermaidを使ってMarkdownでシーケンス図を作成](https://qiita.com/poro1985/items/b23bad93bf721a195f15)
[mermaid公式](https://mermaid-js.github.io/mermaid/#/)