はじめに
この記事を読まれているエンジニアの皆様は日々多くの本やネットの記事をお読みになり、自己研鑽に励んでいることと思います。
テキストに限らず学習した内容を何らかの形でまとめることは記憶に定着させたり、理解を整理したり、思い出しやすくしたりとたくさんの意味があると自分は考えています。恐らく同じ様な考えを持つ方は少なくないかと思います。
そこで今回はMermaid.jsを使いマインドマップ形式で保存することで、見やすく手軽に管理する方法を紹介したいと思います。
準備
今回はMermaid.jsを使用するので予めインストールしておいて下さい。以前Mermaid.jsをインストールする方法や、ガントチャートを作成する方法をこちらで紹介しているので必要に応じて参考にして下さい。
マインドマップとは
マインドマップとは下図の様なものです。思考を整理する時などに便利です。
これは「SQLアンチパターン」という本にある、「ジェイウォーク」についてまとめたものです。
この画像は元々テキストで書いているだけです。先程インストールしてもらったMermaid.jsを使うことでマークダウン記法のように書くだけで簡単にマインドマップを作成することが出来ます。
ちなみに「SQLアンチパターン」はとても良い本なので読んでいない方は絶対に読むべきお勧めな本です。
マインドマップを書いてみる
実は解説する程のことはほとんどなく、最初のノードをroot()
で囲むだけで、あとは階層毎にインデントを深くしていけば自然とマインドマップが作られます。
mindmap
root((ジェイウォーク))
概要
セルにカンマ区切りで2値以上入れること
例
中間テーブルを作らずに多対多の関連を作る際、外部キーにカンマ区切りのidを保存
デメリット
等価性を扱えず検索が難しい
インデックスの恩恵も得辛い
集約クエリなどはセルに2値ある想定になっていない
削除・更新も難しい
ソートが大変
バリデーションの設定が難しい
区切り文字を文字列として使い辛い
要素の長さが変動して扱いにくい
許されるケース
各セル内のエントリへの参照が発生しない場合
パフォーマンス向上のために非正規化を選択する場合
関連の結合処理でパフォーマンスが落ちることもある
※結合にインデックスの貼られているキーを用いれば幾分マシになる
解決策
交差テーブル
メリット
等価性が使える
更新・削除の際は中間テーブルへの更新だけで済む
外部キー制約によりバリデーションの設定も容易
※外部キー制約には暗黙の内にインデックスが貼られることが多い
交差テーブルにカラムを追加することで表現力・拡張性が増す
画像の生成
CLI
$ mmdc -i sql_anti_patterns.mmd -o test.png
$ mmdc -i 【インプットファイル名】 -o 【アウトプットファイル名】
オンライン
ローカルのCLIで実行したくない人は下記のリンクからオンラインで生成する方法もあります。先程のコードを貼り付けるだけで生成してくれます。
終わりに
マインドマップとしての見やすさで言えばmiroなどで作る方が断然優れているのですが、テキストの方がGitHubなどで管理しやすいので自分はMermaid.jsを使って一元管理しています。
というよりもしていこうと思っています。