Mermaid図のビルド時PNG出力に対応しました

このサイトでは、MDX投稿のMermaidコードブロックを静的サイト生成(SSG)のビルド中にPNGへ変換し、静的HTMLの img 要素として出力します。

アーキテクチャ

Mermaidコードブロックをビルド時にPNGへ変換し、静的HTMLへ組み込む処理の流れ

出力仕様

項目仕様
対象ブログ投稿用のMarkdown、MDXファイル
記法言語名が mermaid のコードブロック
出力先静的サイト用の画像ディレクトリ
ファイル名{投稿ファイル名から拡張子を除いた文字列}-{1から始まる図番号}.png
HTMLimg 要素に loading="lazy"decoding="async"、代替テキスト、画像寸法を付与
ブラウザ側の処理Mermaid用JavaScriptは不要

画像品質と安全性

  • PNGは2倍の描画倍率で生成します。
  • 圧縮前後の画素データが一致することを確認し、画質を変えない候補から最も小さいファイルを採用します。
  • Mermaidの安全設定を固定し、描画中の外部通信を無効にします。
  • 入力の長さ、図の数、辺の数、処理時間、画像寸法に上限を設けます。
  • 構文エラー、画像生成失敗、HTMLとの不整合がある場合はビルドを失敗させます。

利用方法

投稿に次のようなコードブロックを記述します。alt には図の内容が分かる説明を指定できます。

```mermaid alt="処理Aから処理Bへ進む流れ"
flowchart LR
    A["処理A"] --> B["処理B"]
```

サイトをビルドすると、投稿ごとのPNGと、その画像を参照する静的HTMLが生成されます。

関連資料