Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails以外の開発一般

@mermaid-js/mermaid-cli でMermaidファイルをPDFにレンダリングする

Note

記事中のMermaidによるER図は架空のものです。

TL;DR

npx -p @mermaid-js/mermaid-cli mmdc -e pdf -i example.mermaid

発端

最近 Mermaid による図版がよく使われるようになったなあと思います。
テキストベースのためGitで扱いやすい、LLM AIもMermaidが得意そうですし、また個人的には「箱を置いて線を繋いで……これはもうちょっと右……ああっ文字だけずれた」のようなレイアウトの手組みを行わなくて良いなど大変ありがたいのですが、逆に言えば何らかの方法でレンダリングしないと実際の図版として見ることは出来ません。

普段からコードを書いているような開発者については、例えば手元のVS Codeで以下のようなプラグイン:

のプレビュー機能を用いる、など各自いろいろやりようがあると思いますが、開発者以外の人に図版を見せたい、となった時に「ではまずVS Codeをインストールしてもらって……」というわけにもいかないので、何か別の形式でレンダリングされた図を書き出したい事があります。

プレビューの保存機能を使ってみる

前述のVS Codeプラグイン、たとえばMermaid ChartにはSVGまたはPNGで保存する機能があったので

プレビュー表示の「Image as ……」 メニュー

試してみたのですが、

  • SVG:
    • ChromeやSafariなどブラウザで開いて表示できるが、拡大/縮小出来ないなど不便
  • PNG:
    • 拡大に限界があったり、高解像度に書き出す(ズームしてから書き出すと出来る)とファイルサイズも動作も重い

といまひとつ、またさらにこれは私のVS Codeがデフォルトの黒いテーマ設定だからではありますが、黒いテーマ設定に合わせたプレビュー結果がそのまま反映されたようで黒ベースの図版が出来上がり、これはあまり「一般的」ではないかな……もし白ベースにしたかったらVS Codeのテーマ変えないといけないのか?……手間だな……という結果になりました
(※実は設定出来るのかもしれませんが詳細未調査です)

PNGで保存してみたもの、黒い

SVGで保存してみたもの、SVGの背景は透明でブラウザの白地が出ており図の中身は黒い

Webサービスは?

ではVS Codeを使わない方法は?となるとMermaid公式のPlayGroundや、他にもMermaidをレンダリングするWebサービスはありそうですが、業務上の資料をむやみに外部Webサービスに貼り付けるわけにもいきません。導入には十分な調査、検討が必要です。

@mermaid-js/mermaid-cli

……ということでいろいろ調べている際に @mermaid-js/mermaid-cli を通りがかり「おーCLIあるのかー」と眺めてみたら

generates an SVG/PNG/PDF file

おおっPDF出せる!?

mermaid-js/mermaid-cli - GitHub

generates an SVG/PNG/PDF file

そして試したところ大変良かった、というお話でした。

  • PDFを表示する環境は一般に充実している
  • ベクターなので拡大も強い
  • VS Codeと独立して白ベースで出力できた
  • インストール方法はいろいろありますが、 npx でも使えて手軽だった

PDF出力してmacOSのプレビューで開き、拡大してみる

※実際に出力したPDFファイルも貼っておきます

おわり

以上、@mermaid-js/mermaid-cli の紹介でした。おすすめです 👍



関連記事

該当する記事がありません。

CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。