mermaid-to-image について
Mermaid to Imageは、テキストファイル内のMermaidコードブロックをPNGに変換し、画像参照に置き換えるスキルです。Mermaid図をそのまま表示できないプラットフォームへのコンテンツ公開に使えます。
主な機能
- 01ファイル内のMermaidコードブロックを検出
- 02図をPNG画像としてレンダリング
- 03画像の出力先ディレクトリを選択
- 04コードブロックを画像参照に置換
- 05変換したファイルと結果を報告
活用シーン
- 01Mermaid非対応プラットフォーム向けにMarkdownを準備
- 02公開用の静的な図画像を作成
- 03テキストファイル内のMermaidブロックを変換
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ zc277584121/ marketing-skills --skill mermaid-to-imageインストール後、Claude Code で/mermaid-to-imageを入力して読み込まれたか確認します。
詳細
スキル:Mermaid から画像への変換
Markdown(またはその他のテキスト)ファイル内の ```mermaid コードブロックを PNG 画像に変換し、コードブロックを画像参照に置き換えます。Mermaid を標準でレンダリングしないプラットフォーム(GitHub Pages/Jekyll、Dev.to など)で役立ちます。
使用する場面
- ファイル内の Mermaid 図を画像に変換するよう依頼された場合
- 特定の Mermaid コードブロックを PNG としてレンダリングしたい場合
- 公開ワークフローで、Mermaid コードブロックの代わりに静的画像が必要な場合
ワークフロー
ステップ 1:対象ファイルを特定する
ユーザーが指定する対象は次のとおりです:
- 単一ファイル:
convert mermaid blocks in docs/architecture.md - 複数ファイル:
convert mermaid in all files under docs/ - 特定のコードブロック:
convert the second mermaid block in README.md
対象ファイル内の ```mermaid コードブロックを検索します。処理を進める前に、見つかったブロック数とファイルを報告します。
ステップ 2:画像の出力ディレクトリを決定する
プロジェクトの構成を確認し、通常画像が保存されている場所を特定します:
# Look for common image directories
ls -d images/ img/ assets/ assets/images/ static/images/ docs/images/ 2>/dev/null
明確な画像ディレクトリがある場合(例:images/、assets/images/)、そこを使用します。適切であれば、トピック別のサブディレクトリを作成します(例:images/<topic>/)。
画像ディレクトリが見当たらない場合、または候補が複数ある場合は、ユーザーに尋ねます:
Where should I save the rendered Mermaid images?
1. images/ (create new)
2. assets/images/
3. docs/figures/
4. Custom — enter a path
ステップ 3:各図を PNG にレンダリングする
mermaid.ink API を使用して図をレンダリングします。各ブロックについて、次の Python スニペットを実行します:
import base64, urllib.request
def render_mermaid(code: str, output_path: str):
"""Render a Mermaid diagram to PNG via mermaid.ink API."""
encoded = base64.urlsafe_b64encode(code.encode()).decode()
url = f"https://mermaid.ink/img/{encoded}?bgColor=white"
req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"})
resp = urllib.request.urlopen(req, timeout=30)
with open(output_path, "wb") as f:
f.write(resp.read())
重要: User-Agent ヘッダーは必須です。指定しないと、mermaid.ink は 403 を返します。
命名規則
一般的な名前ではなく、図の内容に基づいた説明的なファイル名を使用します:
- 良い例:
architecture-overview.png、data-flow.png、heartbeat-sequence.png - 悪い例:
mermaid-1.png、diagram.png、image1.png
ステップ 4:コードブロックを画像参照に置き換える
各 ```mermaid ... ``` ブロックを、ファイルから画像への相対パスを使用した Markdown 画像参照に置き換えます:

プロジェクトで絶対 URL(例:GitHub Pages)を使用している場合は、代わりにそれを使用します:

プロジェクトの既存の画像参照に合ったリンク形式を選びます。不明な場合は、相対パスを使用します。
ステップ 5:結果を報告する
処理後、次の内容を要約します:
- 変換した図の数
- 画像の保存先
- 変更したファイル
例外的なケース
- 大きな図: 非常に複雑な図では、mermaid.ink がタイムアウトすることがあります。レンダリングに失敗した場合は、エラーを報告し、図を簡略化するか別のレンダラーを試すようユーザーに提案します。
- 1 つのファイルに複数のブロックがある場合: すべてのブロックを順番に処理し、それぞれに重複しない説明的なファイル名を付けます。
- すでにレンダリング済みのブロック: Mermaid ブロックに対応する画像がすでにある場合(コメントアウトされているか、隣接している場合)は、処理をスキップするかユーザーに尋ねます。
- Markdown 以外のファイル: 同じ方法は、Mermaid コードブロックを含む任意のテキストファイル(例:
.rst、.txt)でも使えます。