🧜♀️
Mermaid のテーマ・スタイルの変更方法
本記事では、Zenn で使えるダイアグラム表示ツール mermaid.js
のテーマ・スタイルの変更方法について紹介します。
フォント、色などの変更
theme を使う
すでに用意されているテーマを使う方法です。
base
```mermaid
%%{init:{'theme':'base'}}%%
graph LR
q(QEMU) --> qemu-boot-shim --> physboot --> zircon
```
default
```mermaid
%%{init:{'theme':'default'}}%%
graph LR
q(QEMU) --> qemu-boot-shim --> physboot --> zircon
```
forest
```mermaid
%%{init:{'theme':'forest'}}%%
graph LR
q(QEMU) --> qemu-boot-shim --> physboot --> zircon
```
dark
```mermaid
%%{init:{'theme':'dark'}}%%
graph LR
q(QEMU) --> qemu-boot-shim --> physboot --> zircon
```
neutral
```mermaid
%%{init:{'theme':'natural'}}%%
graph LR
q(QEMU) --> qemu-boot-shim --> physboot --> zircon
```
themeVariables を使う
テーマ変数を使う方法です。
```mermaid
%%{init:{'theme':'base','themeVariables':{'primaryColor':'#6A7FAB','primaryTextColor':'#FAFBF9','primaryBorderColor':'#6A7FAB','lineColor':'#6A7FABCC','textColor':'#6A7FABCC','fontSize':'20px'}}}%%
graph LR
q(QEMU) --> qemu-boot-shim --> physboot --> zircon
```
```mermaid
%%{init:{'theme':'base','themeVariables':{'primaryColor':'#6A7FAB','primaryTextColor':'#FAFBF9','primaryBorderColor':'#6A7FAB','secondaryColor':'#6A7FAB','lineColor':'#6A7FABCC','noteTextColor':'#FAFBF9','noteBkgColor':'#6A7FABBB','textColor':'#6A7FABCC','fontSize':'20px'},'themeCSS':"text.actor {font-size:24px !important;}"}}%%
sequenceDiagram
participant bss as boot-shim.S
participant bsc as boot-shim.c
participant zbi as zbi.c
participant dt as devicetree.c
Note over bss: QEMU から起動
activate bss
bss ->> bsc: boot_shim()
activate bsc
bsc ->> dt: dt_walk()
bsc ->> zbi: zbi_check()
bsc ->> zbi: zbi_create_entry_with_payload()
deactivate bsc
deactivate bss
Note over bss: physboot へジャンプ
```
大体、これで対応できる感じです。
どの変数が、どの要素に対応するかは、試行錯誤が必要でした。
themeCSS を使う
CSS を使う方法です。
```mermaid
%%{init:{'theme':'base','themeCSS':" .node rect {fill: #6A7FAB;} .label text {fill: #FAFBF9 !important;} .output {font-size:30px;}"}}%%
graph LR
q(QEMU) --> qemu-boot-shim --> physboot --> zircon
```
最後の手段、何でもできる感じです。
ただし、環境によって見え方が異なる可能性を考慮する必要があります。
Chrome のデベロッパーツールで対象のクラス名などを調べる必要があります。
場合によっては !important
が必要でした。
SVG で使用できる属性 を指定可能だと思います。
style を使う
ノードごとにテーマを適用できます。サブグラフにも適用可能です 。
```mermaid
graph TB
subgraph mygraph[サブグラフ]
mynode[ノード]
end
style mygraph fill:#ffa23e
style mynode fill:#7BCCAC
```
SVG で使用できる属性 を指定可能だと思います。
linkStyle を使う
リンクにテーマを適用できます。リンクの指定は 0.. と番号で行います。
```mermaid
graph LR
qemu(QEMU) --> zircon[ZIRCON]
zircon --> fuchsia[FUCHSIA]
linkStyle 0 stroke:#7BCCAC,stroke-width:4px
linkStyle 1 stroke:#ffa23e,stroke-dasharray:4
```
QEMU - ZIRCON 間のリンクを 0 で指定しています。
矢印部分の色を変えたい場合、themeVariables
の textColor
を使います。
SVG で使用できる属性 を指定可能だと思います。
classDef を使う
複数ノードに同一のテーマを適用可能です。ノード名:::クラス名
と適用します。
```mermaid
graph LR
classDef class1 fill:#7BCCAC,fill-opacity:0.5
classDef class2 fill:#ffa23e
qemu(QEMU):::class1 --> zircon[ZIRCON]:::class2
zircon --> fuchsia[FUCHSIA]:::class1
```
SVG で使用できる属性 を指定可能だと思います。
マージン、パディングなど
図のサイズ、要素間の間隔などを指定する方法です。
フローチャート
```mermaid
%%{init:{'theme':'default','flowchart':{'rankSpacing':100}}}%%
flowchart LR
q(QEMU) --> qemu-boot-shim --> physboot --> zircon
```
要素間の間隔を 100 にした例です。
'flowchart':{...}
と、グラフ種別ごとに分けて記述する必要があります。
おまけ
単純なデータ構造
```mermaid
%%{init:{'theme':'base','themeVariables':{'primaryColor':'#6A7FAB','primaryTextColor':'#FAFBF9', 'primaryBorderColor':'#6A7FAB','lineColor':'#fff','textColor':'#6A7FABCC','fontSize':'20px'}, 'flowchart':{'rankSpacing':1}}}%%
graph LR
classDef default stroke:#fff
c[Container Header] --- b[Boot Item] --- b2[...] --- b3[Boot Item]
```
スライド風デザイン
```mermaid
%%{init:{'theme':'base','themeCSS':" .cluster .label {font-size:32px;font-weight:bold;} .output {font-size:24px;}",'flowchart':{'nodeSpacing':80}}}%%
graph LR
subgraph border[ ]
subgraph title[まとめ]
n1["・mermaid.js は修正→確認のサイクルが短い<br> <br>・管理が楽"]:::node
end
end
style title fill:#6A7FAB,color:#FAFBF9,stroke:#6A7FAB,height:32px
classDef node color:#6A7FAB,fill-opacity:0,stroke-width:0,width:500px
```
Discussion