Mermaid CLI(mmdc)速攻導入:インストールからバッチ生成・自動リサイズまで
Mermaid の図を Markdown で書くのは便利ですが、画像ファイルとして保存したいときに困ったことはありませんか? 資料作成やドキュメント生成で、複数の Mermaid 図を一括で画像化したい場面は意外と多いものです。
本記事では、Mermaid CLI(mmdc)を使って、コマンドライン上で Mermaid 図を画像に変換する方法を、インストールから実践的なバッチ処理、自動リサイズまで段階的に解説します。 初めての方でも迷わず導入できるよう、エラー対処法も含めて丁寧にご紹介しますね。
背景
Mermaid とは
Mermaid は、テキストベースで図を作成できる JavaScript ライブラリです。 フローチャート、シーケンス図、クラス図など、さまざまなダイアグラムをシンプルな記法で記述できます。
GitHub や Notion など、多くのプラットフォームが Mermaid をサポートしており、開発者の間で広く使われています。
Web ブラウザでの利用から CLI への移行
従来、Mermaid 図を画像化するには、Mermaid Live Editorなどの Web ツールを使う必要がありました。 しかし、図が増えてくると、一つひとつ手作業で保存するのは非効率ですよね。
自動化や CI/CD パイプラインへの組み込みを考えると、コマンドラインツールが欠かせません。
図の意図:Mermaid 利用の変遷を時系列で示します。
mermaidflowchart LR
A["手動での図作成"] -->|"Web Editor使用"| B["個別に画像保存"]
B -->|"複数ファイル管理が煩雑"| C["CLI導入の必要性"]
C -->|"mmdc導入"| D["自動化・バッチ処理"]
D -->|"効率化"| E["継続的な図の管理"]
この図から分かるように、手動管理から CLI ツールへの移行により、作業の自動化と効率化が実現できます。
Mermaid CLI の役割
Mermaid CLI(mmdc)は、Mermaid 図をコマンドラインから画像や PDF、SVG に変換できるツールです。 Node.js ベースで動作し、Puppeteer や Playwright を使ってブラウザレンダリングを行います。
これにより、スクリプトやビルドプロセスに組み込んで、図の生成を自動化できるようになります。
課題
手動での画像生成の限界
Web Editor を使った手動での画像保存には、以下のような課題があります。
| # | 課題 | 影響 |
|---|---|---|
| 1 | 図が多いと時間がかかる | 生産性の低下 |
| 2 | 更新のたびに再保存が必要 | 運用負荷の増加 |
| 3 | バージョン管理が難しい | 整合性の欠如 |
| 4 | チーム間での共有が煩雑 | コラボレーションの阻害 |
ドキュメントに 10 個、20 個と図が増えていくと、メンテナンスが大変になってしまいます。
複数ファイルの一括処理
プロジェクトで複数の Mermaid ファイルを管理する場合、一つずつ手動で処理するのは現実的ではありません。 新しい図を追加したり、既存の図を更新したりするたびに、全ての図を再生成する必要があります。
特に、ドキュメント生成パイプラインや CI/CD での自動化を考えると、バッチ処理機能が必須です。
サイズと解像度の調整
生成される画像のサイズや解像度を細かく制御したい場合、Web Editor では限界があります。 資料の用途に応じて、高解像度の PNG、軽量な SVG、印刷用の PDF など、出力形式を使い分けたいですよね。
また、図の幅や高さを統一したり、レティナディスプレイ対応の高 DPI 画像を生成したりする必要もあります。
図の意図:手動処理と自動処理の作業量を比較します。
mermaidflowchart TB
subgraph manual["手動処理"]
M1["Mermaidファイル"] --> M2["Web Editorで開く"]
M2 --> M3["画像として保存"]
M3 --> M4["サイズ調整"]
M4 --> M5["ファイル名変更"]
M5 --> M6["適切な場所に配置"]
end
subgraph auto["CLI自動処理"]
A1["Mermaidファイル"] --> A2["スクリプト実行"]
A2 --> A3["一括変換完了"]
end
manual -.->|時間がかかる| comparison["作業効率"]
auto -.->|瞬時に完了| comparison
この図から、CLI を使った自動処理がいかに効率的かが理解できます。
解決策
Mermaid CLI(mmdc)の導入
Mermaid CLI は、これらの課題を一気に解決してくれるツールです。 コマンド一つで、Mermaid ファイルを画像に変換し、サイズ調整やバッチ処理も簡単に実現できます。
主な機能は以下の通りです。
| # | 機能 | 説明 |
|---|---|---|
| 1 | 画像形式変換 | PNG、SVG、PDF 形式に対応 |
| 2 | バッチ処理 | 複数ファイルの一括変換 |
| 3 | サイズ指定 | 幅・高さ・背景色のカスタマイズ |
| 4 | テーマ設定 | ダーク・ライトテーマの切り替え |
| 5 | 設定ファイル対応 | JSON 形式での詳細設定 |
システム要件
Mermaid CLI を使用するには、以下の環境が必要です。
- Node.js(バージョン 14 以降を推奨)
- npm または Yarn
- Chromium または Chrome(Puppeteer が自動インストール)
すでに Node.js 環境があれば、すぐに始められます。
図の意図:Mermaid CLI の処理フローを示します。
mermaidflowchart LR
input["Mermaid<br/>ファイル(.mmd)"] --> mmdc["mmdc<br/>コマンド"]
mmdc --> puppeteer["Puppeteer/<br/>Playwright"]
puppeteer --> render["ブラウザ<br/>レンダリング"]
render --> output["画像ファイル<br/>(PNG/SVG/PDF)"]
config["設定ファイル<br/>(省略可)"] -.->|"テーマ・サイズ等"| mmdc
この処理フローにより、テキストファイルから高品質な画像が生成されます。
具体例
インストール手順
npm を使用したインストール
最も簡単な方法は、npm でグローバルインストールすることです。
bashnpm install -g @mermaid-js/mermaid-cli
このコマンドで、システム全体からmmdcコマンドが使えるようになります。
インストール後、バージョンを確認して正しくインストールされたか確認しましょう。
bashmmdc --version
正常にインストールされていれば、バージョン番号(例:10.6.1)が表示されます。
Yarn を使用したインストール
Yarn を使っている場合は、以下のコマンドでインストールできます。
bashyarn global add @mermaid-js/mermaid-cli
Yarn のグローバルパスが通っていることを確認してください。
bashyarn global bin
このコマンドで表示されるパスが、環境変数PATHに含まれている必要があります。
プロジェクト単位でのインストール
特定のプロジェクトでのみ使用する場合は、ローカルインストールも可能です。
bashcd your-project
yarn add -D @mermaid-js/mermaid-cli
ローカルインストールした場合、package.jsonの scripts に登録して使います。
json{
"scripts": {
"mermaid": "mmdc"
}
}
これでyarn mermaid -i input.mmd -o output.pngのように実行できます。
インストール時のエラー対処
エラーコード:EACCES: permission denied
インストール時に権限エラーが発生する場合があります。
swiftError: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/@mermaid-js'
発生条件: グローバルインストール時に、Node.js のインストールディレクトリへの書き込み権限がない場合に発生します。
解決方法:
- sudo を使用する(非推奨)
bashsudo npm install -g @mermaid-js/mermaid-cli
- npm のグローバルディレクトリを変更する(推奨)
bashmkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
- nodebrew や nvm を使用して Node.js を再インストールする
これにより、ユーザー権限で Node.js と npm パッケージを管理できるようになります。
エラーコード:Chromium revision is not downloaded
Puppeteer のインストール時に Chromium のダウンロードに失敗することがあります。
vbnetError: Chromium revision is not downloaded. Run "npm install" or "yarn install"
発生条件: ネットワーク制限や、企業のプロキシ環境下で Chromium のダウンロードがブロックされる場合に発生します。
解決方法:
- 環境変数でプロキシを設定する
bashexport HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080
npm install -g @mermaid-js/mermaid-cli
- システムの Chromium を使用する設定にする
bashexport PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
npm install -g @mermaid-js/mermaid-cli
この場合、別途 Chromium をインストールし、パスを指定する必要があります。
基本的な使い方
単一ファイルの変換
まず、簡単な Mermaid ファイルを作成しましょう。
sample.mmdという名前でファイルを作成します。
cssflowchart LR
A["開始"] --> B["処理"]
B --> C["終了"]
このファイルを PNG 画像に変換します。
bashmmdc -i sample.mmd -o sample.png
実行すると、sample.pngが生成されます。
出力形式の指定
出力形式は、ファイル拡張子またはオプションで指定できます。
SVG 形式で出力
bashmmdc -i sample.mmd -o sample.svg
SVG 形式は、ベクター画像なので拡大しても劣化しません。
PDF 形式で出力
bashmmdc -i sample.mmd -o sample.pdf
PDF 形式は、印刷用資料や正式なドキュメントに適しています。
背景色の指定
デフォルトでは背景が透明ですが、背景色を指定することもできます。
白い背景を設定
bashmmdc -i sample.mmd -o sample.png -b white
カスタム背景色を設定
bashmmdc -i sample.mmd -o sample.png -b '#f0f0f0'
16 進数のカラーコードを使って、任意の背景色を指定できます。
バッチ処理の実装
単純なループ処理
複数の Mermaid ファイルを一括変換するには、シェルスクリプトを使います。
Bash スクリプト例
convert-all.shというファイルを作成します。
bash#!/bin/bash
# mmdファイルが格納されているディレクトリ
INPUT_DIR="./diagrams"
# 出力先ディレクトリ
OUTPUT_DIR="./images"
次に、出力ディレクトリを作成し、各ファイルを処理します。
bash# 出力ディレクトリがなければ作成
mkdir -p "$OUTPUT_DIR"
# すべての.mmdファイルを処理
for file in "$INPUT_DIR"/*.mmd; do
# ファイル名(拡張子なし)を取得
filename=$(basename "$file" .mmd)
echo "Converting: $filename"
# PNG形式で変換
mmdc -i "$file" -o "$OUTPUT_DIR/$filename.png"
done
echo "All files converted!"
スクリプトに実行権限を付与して実行します。
bashchmod +x convert-all.sh
./convert-all.sh
これで、diagramsフォルダ内のすべての.mmdファイルが、imagesフォルダに PNG 画像として保存されます。
エラーハンドリング付きスクリプト
実用的なスクリプトには、エラー処理を追加しましょう。
bash#!/bin/bash
INPUT_DIR="./diagrams"
OUTPUT_DIR="./images"
LOG_FILE="./conversion.log"
# ログファイルを初期化
echo "Conversion started at $(date)" > "$LOG_FILE"
各ファイルの変換時にエラーチェックを行います。
bash# カウンター初期化
success_count=0
error_count=0
for file in "$INPUT_DIR"/*.mmd; do
filename=$(basename "$file" .mmd)
echo "Processing: $filename" | tee -a "$LOG_FILE"
# mmdc実行
if mmdc -i "$file" -o "$OUTPUT_DIR/$filename.png" 2>> "$LOG_FILE"; then
echo "✓ Success: $filename" | tee -a "$LOG_FILE"
((success_count++))
else
echo "✗ Error: $filename" | tee -a "$LOG_FILE"
((error_count++))
fi
done
最後に、結果のサマリーを表示します。
bashecho "---" | tee -a "$LOG_FILE"
echo "Conversion completed at $(date)" | tee -a "$LOG_FILE"
echo "Success: $success_count files" | tee -a "$LOG_FILE"
echo "Errors: $error_count files" | tee -a "$LOG_FILE"
このスクリプトにより、どのファイルの変換に失敗したか一目で分かります。
package.json を使った管理
Node.js プロジェクトでは、package.jsonの scripts でバッチ処理を管理できます。
json{
"scripts": {
"diagram:build": "node scripts/convert-diagrams.js",
"diagram:watch": "nodemon --watch diagrams --exec 'yarn diagram:build'"
}
}
scripts/convert-diagrams.jsファイルを作成します。
javascriptconst { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const INPUT_DIR = './diagrams';
const OUTPUT_DIR = './images';
ディレクトリを読み込み、各ファイルを変換します。
javascript// 出力ディレクトリを作成
if (!fs.existsSync(OUTPUT_DIR)) {
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
}
// mmdファイルを取得
const files = fs
.readdirSync(INPUT_DIR)
.filter((file) => file.endsWith('.mmd'));
console.log(`Found ${files.length} diagram files`);
各ファイルに対して変換を実行します。
javascriptfiles.forEach((file, index) => {
const inputPath = path.join(INPUT_DIR, file);
const outputPath = path.join(
OUTPUT_DIR,
file.replace('.mmd', '.png')
);
try {
console.log(
`[${index + 1}/${files.length}] Converting ${file}...`
);
execSync(`mmdc -i "${inputPath}" -o "${outputPath}"`, {
stdio: 'inherit',
});
} catch (error) {
console.error(
`Failed to convert ${file}:`,
error.message
);
}
});
console.log('Conversion completed!');
これでyarn diagram:buildコマンドで一括変換できます。
自動リサイズ機能
幅と高さの指定
画像のサイズを統一したい場合、幅や高さを指定できます。
幅を指定
bashmmdc -i sample.mmd -o sample.png -w 800
幅を 800 ピクセルに固定し、高さは自動調整されます。
高さを指定
bashmmdc -i sample.mmd -o sample.png -H 600
高さを 600 ピクセルに固定します。
幅と高さを両方指定
bashmmdc -i sample.mmd -o sample.png -w 800 -H 600
ただし、アスペクト比が変わるため、図が歪む可能性があります。
スケール指定
解像度を上げたい場合は、スケールオプションを使います。
bashmmdc -i sample.mmd -o sample.png -s 2
スケール 2 を指定すると、元のサイズの 2 倍の解像度で生成されます。 レティナディスプレイ対応の高解像度画像が必要な場合に有効です。
設定ファイルでの一括管理
毎回オプションを指定するのは面倒なので、設定ファイルを使いましょう。
puppeteer-config.jsonを作成します。
json{
"args": ["--no-sandbox", "--disable-setuid-sandbox"],
"headless": true,
"timeout": 60000
}
この設定ファイルを使って変換します。
bashmmdc -i sample.mmd -o sample.png -p puppeteer-config.json
より詳細な設定も可能です。
json{
"args": ["--no-sandbox"],
"headless": true,
"timeout": 60000,
"viewport": {
"width": 1920,
"height": 1080,
"deviceScaleFactor": 2
}
}
deviceScaleFactorを 2 に設定することで、高解像度出力が可能になります。
テーマ設定
Mermaid のテーマを指定して、見た目を変更できます。
デフォルトテーマ
bashmmdc -i sample.mmd -o sample.png -t default
ダークテーマ
bashmmdc -i sample.mmd -o sample.png -t dark
フォレストテーマ
bashmmdc -i sample.mmd -o sample.png -t forest
ニュートラルテーマ
bashmmdc -i sample.mmd -o sample.png -t neutral
資料の雰囲気に合わせてテーマを選択できます。
CSS 設定ファイルの活用
さらにカスタマイズしたい場合、CSS 設定ファイルを使います。
custom-style.cssを作成します。
css.node rect {
fill: #e3f2fd;
stroke: #1976d2;
stroke-width: 2px;
}
.node text {
font-family: 'Hiragino Sans', 'Yu Gothic', sans-serif;
font-size: 14px;
}
エッジ(矢印)のスタイルも変更できます。
css.edgePath .path {
stroke: #1976d2;
stroke-width: 2px;
}
.edgeLabel {
background-color: #ffffff;
padding: 4px;
border-radius: 4px;
}
この CSS ファイルを適用して変換します。
bashmmdc -i sample.mmd -o sample.png -C custom-style.css
独自のスタイルを適用した図を生成できます。
高度なバッチスクリプト例
複数の出力形式とサイズバリエーションを一度に生成するスクリプトを作成しましょう。
bash#!/bin/bash
INPUT_FILE="$1"
BASENAME=$(basename "$INPUT_FILE" .mmd)
OUTPUT_DIR="./output"
# 出力ディレクトリ作成
mkdir -p "$OUTPUT_DIR"/{png,svg,pdf}/{small,medium,large}
各サイズと形式の組み合わせで変換します。
bashecho "Generating images for: $BASENAME"
# PNG形式(3サイズ)
mmdc -i "$INPUT_FILE" -o "$OUTPUT_DIR/png/small/$BASENAME.png" -w 400
mmdc -i "$INPUT_FILE" -o "$OUTPUT_DIR/png/medium/$BASENAME.png" -w 800
mmdc -i "$INPUT_FILE" -o "$OUTPUT_DIR/png/large/$BASENAME.png" -w 1200 -s 2
# SVG形式
mmdc -i "$INPUT_FILE" -o "$OUTPUT_DIR/svg/$BASENAME.svg"
# PDF形式
mmdc -i "$INPUT_FILE" -o "$OUTPUT_DIR/pdf/$BASENAME.pdf"
完了メッセージを表示します。
bashecho "✓ Generated all variations for $BASENAME"
ls -lh "$OUTPUT_DIR"/**/*"$BASENAME"*
このスクリプトを実行すると、一つの Mermaid ファイルから複数の形式とサイズのバリエーションが生成されます。
bash./generate-all.sh diagrams/my-flowchart.mmd
CI/CD パイプラインへの組み込みも簡単です。
GitHub Actions での自動化例
最後に、GitHub Actions での自動変換例をご紹介します。
.github/workflows/mermaid.ymlを作成します。
yamlname: Generate Mermaid Diagrams
on:
push:
paths:
- 'diagrams/**/*.mmd'
pull_request:
paths:
- 'diagrams/**/*.mmd'
ジョブの設定を行います。
yamljobs:
generate:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
Mermaid CLI をインストールして実行します。
yaml- name: Install Mermaid CLI
run: yarn global add @mermaid-js/mermaid-cli
- name: Convert diagrams
run: |
mkdir -p images
for file in diagrams/*.mmd; do
filename=$(basename "$file" .mmd)
mmdc -i "$file" -o "images/$filename.png" -b white
done
生成された画像をコミットします。
yaml- name: Commit generated images
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
git add images/
git diff --quiet && git diff --staged --quiet || \
git commit -m "Update generated diagrams"
git push
これで、Mermaid ファイルを更新するたびに、自動的に画像が生成されてリポジトリにコミットされます。
図の意図:自動化されたワークフローを示します。
mermaidsequenceDiagram
participant Dev as 開発者
participant GH as GitHub
participant Action as GitHub Actions
participant Repo as リポジトリ
Dev->>GH: .mmdファイルをpush
GH->>Action: ワークフロー起動
Action->>Action: mmdc実行
Action->>Action: 画像生成
Action->>Repo: 画像をコミット
Repo->>Dev: 更新完了通知
このフローにより、開発者は Mermaid ファイルを編集するだけで、画像生成が自動的に行われます。
まとめ
Mermaid CLI(mmdc)を導入することで、Mermaid 図の管理が劇的に効率化されます。 本記事では、インストールからバッチ処理、自動リサイズまで、実践的な使い方を段階的にご紹介しました。
重要なポイントを振り返りましょう。
| # | ポイント | 効果 |
|---|---|---|
| 1 | npm または Yarn で簡単インストール | すぐに始められる |
| 2 | コマンド一つで画像変換 | 手作業から解放される |
| 3 | シェルスクリプトでバッチ処理 | 複数ファイルを一括管理 |
| 4 | サイズ・テーマのカスタマイズ | 用途に応じた出力が可能 |
| 5 | CI/CD パイプラインへの組み込み | 完全自動化を実現 |
特に、バッチ処理と CI/CD 連携により、ドキュメント管理の負担が大幅に軽減されます。 図の更新漏れや形式の不統一といった問題も解消できるでしょう。
Mermaid CLI は、技術ドキュメントやプロジェクト資料を扱う開発者にとって、必須のツールと言えますね。 ぜひ、今日から導入して、ドキュメント作成の効率化を実感してください。
プロジェクトの規模が大きくなるほど、その恩恵は大きくなります。 最初の設定に少し時間をかけるだけで、長期的には大きな時間節約になるでしょう。
関連リンク
articleMermaid CLI(mmdc)速攻導入:インストールからバッチ生成・自動リサイズまで
articleMermaid で描ける図の種類カタログ:flowchart/class/state/journey/timeline ほか完全整理
articleMermaid を CI に組み込む運用設計:PR ごと画像生成・差分サムネでレビュ―短縮
articleMermaid で日本語が潰れる問題を解決:フォント・エンコード・SVG 設定の勘所
articleMermaid でデータ基盤のラインジを図解:ETL/DAG/品質チェックの全体像
articleMermaid 矢印・接続子チートシート:線種・方向・注釈の一覧早見
article初めての Nano Banana:Hello World から実用サンプルまで 30 分チュートリアル
articleNotebookLM チーム運用ガイド:権限設計・レビュー体制・承認フロー
articleNode.js BFF 設計の最適解:Route Handlers/GraphQL/tRPC の責務分割
articleMySQL マルチテナント設計:スキーマ分割 vs 行レベルテナンシーの判断基準
articleNext.js Metadata API 逆引き:`robots`/`alternates`/`openGraph`/`twitter` の記入例
articleMermaid CLI(mmdc)速攻導入:インストールからバッチ生成・自動リサイズまで
blogiPhone 17シリーズの発表!全モデルiPhone 16から進化したポイントを見やすく整理
blogGoogleストアから訂正案内!Pixel 10ポイント有効期限「1年」表示は誤りだった
blog【2025年8月】Googleストア「ストアポイント」は1年表記はミス?2年ルールとの整合性を検証
blogGoogleストアの注文キャンセルはなぜ起きる?Pixel 10購入前に知るべき注意点
blogPixcel 10シリーズの発表!全モデル Pixcel 9 から進化したポイントを見やすく整理
blogフロントエンドエンジニアの成長戦略:コーチングで最速スキルアップする方法
review今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
reviewついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
review愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
review週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
review新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
review科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来