5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Databricksにてmemaid.jsを利用する方法

Last updated at Posted at 2021-07-09

更新情報

2023年5月14日: mermaid.min.js のダウンロード元のリンクがきれていいたため、URLを更新
2023年5月14日: Git graph の記述方法が変更となっていたため、変更

概要

Databricksにて、mermaid.jsのダイアグラムを作成が可能であったため検証結果を共有します。Databricksノートブック内に、mermaid.jsのダイアグラムを残すことで、コードと一緒に設計書を残すことができるため便利です。

image.png

displayHTML関数、もしくは、%md-sandboxにより表示可能であり、設計書として残す際には%md-sandboxを利用した方がよさそうです。displayHTML関数で残す場合には、ノートブックが実行されるたびに再生成する処理されるためです。

mermaid.jsとは

mermaid.jsとは、javascriptベースで開発されており、コードからダイアグラムを作成するツールです。

image.png
引用元:About Mermaid (mermaid-js.github.io)

コードからきれいなダイヤグラムを作成できることもあり、設計書として使われることがあるようです。

image.png
引用元:Online FlowChart & Diagrams Editor - Mermaid Live Editor (mermaid-js.github.io)

基本的な検証

displayHTML関数で表示する方法

displayHTML("""
<html>
    <head>
        <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
        <script>mermaid.initialize({startOnLoad:true});</script>
    </head>
    <body>
        <div class="mermaid">
            graph TD;
              A-->B;
              A-->C;
              B-->D;
              C-->D;
        </div>
    </body>
</html>
""")

image.png

%md-sandboxで表示する方法

%md-sandbox
<html>
    <head>
        <link rel="stylesheet" href="https://unpkg.com/mermaid/dist/mermaid.min.css">
        <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
        <script>mermaid.initialize({startOnLoad:true});</script>
    </head>
    <body>
        <div class="mermaid">
            graph TD;
              A-->B;
              A-->C;
              B-->D;
              C-->D;
        </div>
    </body>
</html>

image.png

memeidのダイアグラム別検証

下記の関数を作成して検証しました。

def mermeaid_display(code):
    mermeid_html =f"""
                    <html>
                        <head>
                            <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
                            <script>mermaid.initialize({{startOnLoad:true}});</script>
                        </head>
                        <body>
                            <div class="mermaid">
                                {code}
                            </div>
                        </body>
                    </html>
                    """
    displayHTML(mermeid_html)
    
code = """
graph TD;
    A-->B;
    A-->C;
    B-->D;
    C-->D;
"""
 
mermeaid_display(code)

image.png

Flowcharts

mermaid_code = """
graph TD;
    A-->B;
    A-->C;
    B-->D;
    C-->D;
"""
 
mermeaid_display(mermaid_code)

image.png

Sequence diagrams

mermaid_code = """
sequenceDiagram
    participant Alice
    participant Bob
    Alice->>John: Hello John, how are you?
    loop Healthcheck
        John->>John: Fight against hypochondria
    end
    Note right of John: Rational thoughts <br/>prevail!
    John-->>Alice: Great!
    John->>Bob: How about you?
    Bob-->>John: Jolly good!
"""

mermeaid_display(mermaid_code)

image.png

Class diagrams

mermaid_code = """
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
"""

mermeaid_display(mermaid_code)

image.png

Entity Relationship Diagrams

mermaid_code = """
erDiagram
    CUSTOMER ||--o{ ORDER : places
    CUSTOMER {
        string name
        string custNumber
        string sector
    }
    ORDER ||--|{ LINE-ITEM : contains
    ORDER {
        int orderNumber
        string deliveryAddress
    }
    LINE-ITEM {
        string productCode
        int quantity
        float pricePerUnit
    }
"""

mermeaid_display(mermaid_code)

image.png

User Journey Diagram

mermaid_code = """
journey
    title My working day
    section Go to work
      Make tea: 5: Me
      Go upstairs: 3: Me
      Do work: 1: Me, Cat
    section Go home
      Go downstairs: 5: Me
      Sit down: 5: Me
"""

mermeaid_display(mermaid_code)

image.png

Gantt diagrams

mermaid_code = """
gantt
dateFormat  YYYY-MM-DD
title Adding GANTT diagram to mermaid
excludes weekdays 2014-01-10

section A section
Completed task            :done,    des1, 2014-01-06,2014-01-08
Active task               :active,  des2, 2014-01-09, 3d
Future task               :         des3, after des2, 5d
Future task2               :         des4, after des3, 5d
"""

mermeaid_display(mermaid_code)

image.png

Pie chart diagrams

mermaid_code = """
pie
    title Key elements in Product X
    "Calcium" : 42.96
    "Potassium" : 50.05
    "Magnesium" : 10.01
    "Iron" :  5
"""

mermeaid_display(mermaid_code)

image.png

Requirement Diagram

mermaid_code = """
requirementDiagram

requirement test_req {
id: 1
text: the test text.
risk: high
verifymethod: test
}

element test_entity {
type: simulation
}

test_entity - satisfies -> test_req
"""

mermeaid_display(mermaid_code)

image.png

Git graph

mermaid_code = """
---
title: Example Git diagram
---
gitGraph
   commit
   commit
   branch develop
   checkout develop
   commit
   commit
   checkout main
   merge develop
   commit
   commit
"""

mermeaid_display(mermaid_code)

image.png

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?