フリーランスエンジニア向けIT系求人・仕事・案件情報サイト
更新日

VSCodeでMermaidを使ったダイアグラム作成 part2

Mermaidとは

ダイアグラム作成およびチャート作図用のJavaScriptライブラリです。
https://mermaid-js.github.io/mermaid/

フローチャート、シーケンス図、ガントチャート、円グラフなどいろいろな図表を作成できます。
作図にはマークダウン記法が利用でき、作図したものはPNG/JPEGで書き出す事もできます。

zennGithubNotionなどエンジニアがよく使うサービスに対応しているのも嬉しい所です。

前回、VSCodeでMermaidを使ったダイアグラム作成でご紹介したmermaidですが、
他にも便利な使い方がありましたので軽くご紹介させていただきます!

erDiagram

ER図を表現する事もできます。
実際にER図をmermaidで管理するのは現実的ではありませんが、ちょっとした解説や説明に必要な部分だけをパッと表示させたい場合に非常に便利です。
以下はPHPのフレームワーク「Laravel」のORMを用いてItemsテーブルに紐づいているtagsテーブルのレコードの内、tag_categoriesの特定のcategory_name(今回は”データベース”)に属するものだけを抽出する方法のメモです。


PHPコード部分

// [Items.php]
public function itemsTags()
{
    return $this->belongsToMany(Tags::class, 'relation_items_tags', 'item_id', 'tag_id');
}

$tag_category_name_array = ['データベース']; 
$display_data = Items::with([
  'itemsTags'=>function ($q) use ($tag_category_name_array){
      $q->whereHas('tagTagCategories', function ($qq) use ($tag_category_name_array){
          $qq->whereIn('tag_categories.category_name', $tag_category_name_array);
      });
  }
])->get();
  // [Tags.php]
  public function tagTagCategories()
  {
      return $this->belongsToMany(TagCategories::class, 'relation_tag_tag_categories', 'tag_id', 'tag_category_id');
  }

mermaidコード部分


```mermaid 
%% e01 ||--|{ e02: "1 対 多(1以上)"
%% e01 ||--o{ e03: "1 対 多(0以上)"
%% e01 ||--o| e04: "1 対 0か1"

erDiagram
  items ||--o{ relation_items_tags : ""
  tags ||--o{ relation_items_tags:""
  tags ||--o{ relation_tag_tag_categories: ""
  tag_categories ||--o{ relation_tag_tag_categories: ""

  items {
   int id 
   varcahr name
  }

  relation_items_tags {
    int item_id
    int tag_id 
  }
  tags {
    int id 
    varchar term
  }
  relation_tag_tag_categories {
    int tag_id 
    int tag_category_id 
  } 
  tag_categories {
    int id
    varcher category_name
  }
```

gitGraph

gitのブランチ戦略を視覚的にわかりやすく表示する事もできます。
githubのREADMEなどでも利用できるので、プロジェクト毎に利用するブランチ戦略をmermaidのコードで管理しておくと便利ですね。
以下はGitHub Flowを表示したものです。

mermaidコード部分


```mermaid
%%{ 
  init: 
  { 'themeVariables': {
    'git0': '#16c933',
    'git1': '#2249f8',
    'git2': '#8622f8',
    'git3': '#f822a5' 
    }
  } 
}%%
gitGraph
    commit id: " "
        commit id: "-"
        branch "統合ブランチ"
        branch "開発ブランチB"
        branch "開発ブランチA"
        commit id: "commit-1"
        checkout main
            checkout "開発ブランチB"
            commit id: "commit-2"
            checkout "統合ブランチ"
            merge "開発ブランチB"
        checkout main
            merge "統合ブランチ"
            checkout "開発ブランチA"
            commit id: "commit-3"
            checkout "統合ブランチ"
            merge "開発ブランチA"
        checkout main
            merge "統合ブランチ"
```

まとめ

vscodeやgtihubなど普段エンジニアが利用する環境で簡単に触れるのが嬉しいですね。
また便利な用途があれば追記していきたいと思います。