graphdownを書き直した。改めて説明すると、graphdownはMarkdownでグラフを記述するための拡張記法を提供するライブラリで、以前のバージョンではGraphvizを使ってグラフを描画していたため、あの冗長なDOT言語を使わざるを得なかった。
新しいgraphdownは以下のようなMarkdownの記法を拡張する。
sample.md
[A] -> [B]
[A] <-> [C]
[B] -> [D], [E], [F]
このMarkdownは以下のようなSVGに変換される。
[A] -> [B]
という記法でノードをエッジで接続する。さらに、[A] <-> [B]
と書くとノードを双方向に接続する。[A] -> [B], [C], [D] -> [E]
と書いて複数のノードとの接続を簡潔に書くこともできる。
以前のバージョンではグラフはGraphvizが生成したPNGだったが、新しいバージョンはSVGとしてグラフを出力するため、CSSやJSでグラフを扱うことができる。
用途
Markdownのドキュメントにサーバー構成図とか画面遷移図を書きたいときに便利だと思う。例をいくつか載せる。
servers_arrangement.md
[Load balancer] -> [Web server 1], [Web server 2], [Web server 3] -> [DB server], [Cache server]
path_to_graphdown.md
[/] -> [/naoty] -> [/naoty/graphdown]
[/] -> [/search] -> [/naoty/graphdown]
[/] -> [/notifications] -> [/naoty/graphdown]
書き直した理由
複雑なグラフを表現しつつ、Markdownとして読み下せる記法を実現するために書き直した。以前のバージョンではMarkdownにDOT言語のスニペットを書くしかなかったが、これではドキュメントを読むためにDOT言語を知る必要がある。DOT言語はそんな知られてないし、冗長な表現をいちいち覚えていられないので、Graphvizを捨てて一から作った。
課題
ちょっと複雑なグラフになると描画が汚くなる。エッジがノードの上に重なったり、エッジが無駄に交差してとても見にくい。最大の課題はこのパーサーをGitHubとかで使えないことだと思う。これについては何か対策がないか考え中。