Markdeep: アスキーアートで図を描けるMarkdown拡張

Tags: webdev

MarkdeepとはMarkdown拡張の一つで、その最大の特徴は“diagram”のサポート。

百聞は一見にしかず。アスキーアートで描かれた図を含んだMarkdownが……、

……こんな感じのSVG画像を交えてレンダリングされる。

うーん、どうなんでしょ。一目見て、「もしかしたら便利かも?」と「いやーこれはないわー」の感想が両方同時に出てきた。Hacker Newsでのコメントをざっと眺めてみても、評価が分かれているという感じ。

「テキストから図を生成する」というアプローチは昔からいろいろあって、例えばdot言語で書かれたテキストからグラフ1の画像を生成するGraphvizあたりが代表格だろうか。他にも、昨今のMarkdown等の軽量マークアップ言語の隆盛を受けてか、Markdown等に組み込んで図を出力できるようなライブラリもいろいろあるようだ。ちょっと調べた感じでも、いくつかよさそうなものが見つかった。

この手のソリューションは、だいたいどれも以下の様な性質を持っていて、一般的な「マウスでお絵かき」的アプローチに対するアドバンテージとなっている。

  • 使い慣れたテキストエディタで効率的に図表作成ができる。
  • 肝となる情報だけテキストに書けば、細かい見た目のあれこれはプログラム側がよろしくやってくれる。
  • テキストなので、プログラムでの自動生成も簡単。
  • テキストなので変更箇所の差分が取りやすく、バージョン管理システムとの相性がいい。

一方、このMarkdeepの場合は元データがアスキーアートそのものなので、図を描くのも編集するのも大変そうだし2、変更箇所の差分も分かりづらいだろうし、上記に挙げたテキストで書く(描く?)利点がほとんどないように見える。否定的な反応が多くなるのもうなづける。

しかしながら、このMarkdeep、自分としてはちょっとだけ惹かれるものがある。それは、Markdeepの「図表の元データはアスキーアート」という仕様が、個人的にMarkdownで一番好きな点である「元データが生テキストとしても見やすい」という性質とマッチしているからだと思われる。

前述のライブラリにせよGraphvizにせよ、図表の元データとなるテキストデータは、それぞれのツールが個々に定義したローカル記法で書くことになる。だいたいどのツールでも単純かつ直感的な表記で書けるようになってはいるものの、知らない人が前提知識なしに単独で元データだけを見て、何が書かれているか(何が描かれるか)を理解するのはなかなか難しい。その点、Markdeepの図表の元データの「読みやすさ」は群を抜いている。3

とは言ったものの、このMarkdeepを有効に活用できそうなユースケースがあるかというと、あまり思いつかない。「何らかの理由でプレーンテキストでドキュメントを書かざるをえない制限下において、図を入れざるをえないケース」において、Markdeepのdiagram形式に沿ったアスキーアートで描いておけば、資産として活用の幅が広がる(かも?)、といった感じか。うーん、やっぱり微妙かなあ……。


  1. ここで言う「グラフ」は棒グラフとか円グラフとかのグラフ(チャート)ではなく、「有向グラフ」とか「無向グラフ」とかのグラフ。
  2. エディタによっては、アスキーアートを描くための機能とかプラグインとかもあったりするらしいですが。他にもasciiflowなんてサービスもある。
  3. その分、「書きやすさ」は大きく犠牲になっているわけですが……。