MkDocsでMermaidダイアグラムを美しく表示する完全設定ガイド¶
この記事のポイント¶
フローチャート
複雑な処理フローを視覚的に表現
シーケンス図
システム間の相互作用を時系列で表示
ガントチャート
プロジェクトスケジュールを管理
その他の図表
クラス図、状態図、ER図など多様な表現
📖 はじめに¶
MkDocsでMermaidダイアグラムが表示されない問題に悩んでいませんか?
標準のMkDocsでは、````mermaid ブロックを書いてもコードブロックとして表示されるだけで、実際のダイアグラムは描画されません。本記事では、MkDocs Material テーマでMermaidダイアグラムを美しく表示するための完全な設定方法を解説します。
🔧 設定手順¶
Step 1: mkdocs.yml の設定¶
まず、mkdocs.yml ファイルを以下のように設定します:
# Markdown拡張設定
markdown_extensions:
- pymdownx.superfences:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format
# その他の拡張機能...
# JavaScript ライブラリの読み込み
extra_javascript:
- https://unpkg.com/mermaid@10.9.0/dist/mermaid.min.js
- javascripts/mermaid-init.js
Step 2: Mermaid初期化スクリプトの作成¶
docs/javascripts/mermaid-init.js ファイルを作成します:
// Mermaid initialization for MkDocs
document.addEventListener('DOMContentLoaded', function() {
// Check if mermaid is loaded
if (typeof mermaid !== 'undefined') {
// Initialize mermaid with configuration
mermaid.initialize({
startOnLoad: true,
theme: 'default',
flowchart: {
useMaxWidth: true,
htmlLabels: true,
},
gitGraph: {
theme: 'base',
themeVariables: {
primaryColor: '#009688',
primaryTextColor: '#ffffff',
primaryBorderColor: '#00695c',
lineColor: '#757575',
secondaryColor: '#e0f2f1',
tertiaryColor: '#ffffff',
}
},
sequence: {
diagramMarginX: 50,
diagramMarginY: 10,
actorMargin: 50,
width: 150,
height: 65,
boxMargin: 10,
boxTextMargin: 5,
noteMargin: 10,
messageMargin: 35,
wrap: false,
mirrorActors: true,
bottomMarginAdj: 1,
useMaxWidth: true,
}
});
// Support for dark mode
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type === 'attributes' && mutation.attributeName === 'data-md-color-scheme') {
const scheme = document.body.getAttribute('data-md-color-scheme');
const theme = scheme === 'slate' ? 'dark' : 'default';
// Re-initialize mermaid with new theme
mermaid.initialize({
startOnLoad: true,
theme: theme,
flowchart: {
useMaxWidth: true,
htmlLabels: true,
}
});
// Re-render all mermaid diagrams
const mermaidElements = document.querySelectorAll('.mermaid');
mermaidElements.forEach(function(element) {
element.removeAttribute('data-processed');
});
mermaid.init();
}
});
});
observer.observe(document.body, {
attributes: true,
attributeFilter: ['data-md-color-scheme']
});
}
});
Step 3: カスタムCSSの追加¶
docs/stylesheets/extra.css に以下のスタイルを追加:
/* Mermaid ダイアグラムのスタイル */
.mermaid {
text-align: center;
margin: 1.5rem 0;
border-radius: 8px;
background: var(--md-code-bg-color);
padding: 1rem;
overflow-x: auto;
}
/* ダークモード対応 */
[data-md-color-scheme="slate"] .mermaid {
background: var(--md-default-bg-color);
border: 1px solid var(--md-default-fg-color--lightest);
}
/* Mermaidダイアグラムの要素スタイル調整 */
.mermaid svg {
max-width: 100%;
height: auto;
}
.mermaid .node rect,
.mermaid .node circle,
.mermaid .node ellipse,
.mermaid .node polygon {
fill: var(--md-primary-fg-color--light);
stroke: var(--md-primary-fg-color);
stroke-width: 2px;
}
.mermaid .node .label {
color: var(--md-primary-bg-color);
font-weight: 500;
}
.mermaid .edgeLabel {
background-color: var(--md-default-bg-color);
border-radius: 4px;
padding: 2px 4px;
font-size: 0.85rem;
}
/* フローチャートのスタイル */
.mermaid .flowchart-link {
stroke: var(--md-primary-fg-color);
stroke-width: 2px;
}
/* シーケンス図のスタイル */
.mermaid .actor {
fill: var(--md-primary-fg-color--light);
stroke: var(--md-primary-fg-color);
}
.mermaid .messageLine0,
.mermaid .messageLine1 {
stroke: var(--md-primary-fg-color);
stroke-width: 2px;
}
/* ガントチャートのスタイル */
.mermaid .task {
fill: var(--md-primary-fg-color--light);
stroke: var(--md-primary-fg-color);
}
/* レスポンシブ対応 */
@media (max-width: 768px) {
.mermaid {
margin: 1rem -1rem;
border-radius: 0;
padding: 1rem;
}
}
🎨 使用例とサンプル¶
フローチャート¶
flowchart TD
A[MkDocsサイト作成] --> B{Mermaid設定完了?}
B -->|Yes| C[ダイアグラム表示成功]
B -->|No| D[設定を確認]
D --> E[mkdocs.yml修正]
E --> F[JavaScript追加]
F --> G[CSS追加]
G --> B
C --> H[🎉 完成!]シーケンス図¶
sequenceDiagram
participant U as ユーザー
participant M as MkDocs
participant J as Mermaid.js
participant B as ブラウザ
U->>M: ページを要求
M->>B: HTMLを生成
B->>J: Mermaidブロックを検出
J->>J: ダイアグラムを描画
J->>B: SVGを挿入
B->>U: 完成したページを表示ガントチャート¶
gantt
title MkDocs Mermaid 設定プロジェクト
dateFormat YYYY-MM-DD
section 設定フェーズ
mkdocs.yml設定 :done, config, 2025-07-25, 1d
JavaScript作成 :done, js, after config, 1d
CSS追加 :done, css, after js, 1d
section テストフェーズ
動作確認 :active, test, after css, 1d
ドキュメント作成 :doc, after test, 1dクラス図¶
classDiagram
class MkDocsConfiguration {
+markdown_extensions: List
+extra_javascript: List
+extra_css: List
+theme: MaterialTheme
+setupMermaid()
}
class MermaidRenderer {
+initialize()
+renderDiagram()
+handleDarkMode()
}
class MaterialTheme {
+primary_color: String
+accent_color: String
+scheme: String
}
MkDocsConfiguration --> MermaidRenderer
MkDocsConfiguration --> MaterialTheme💡 設定のポイント¶
1. pymdownx.superfences の重要性¶
pymdownx.superfences はコードブロックを拡張するPython-Markdownの拡張機能です。custom_fences を設定することで、Mermaidブロックを特別扱いできます。
2. ダークモード自動切り替え¶
Material for MkDocsのダークモード切り替えに連動して、Mermaidのテーマも自動的に変更されます。
3. レスポンシブデザイン¶
モバイル端末でも美しく表示されるよう、CSSでレスポンシブ対応を実装しています。
🚀 高度な設定¶
カスタムテーマの作成¶
// カスタムテーマの例
mermaid.initialize({
theme: 'base',
themeVariables: {
primaryColor: '#your-primary-color',
primaryTextColor: '#your-text-color',
primaryBorderColor: '#your-border-color',
lineColor: '#your-line-color',
// その他のカスタマイズ...
}
});
特定の図表タイプの設定¶
// フローチャート専用の設定
flowchart: {
diagramPadding: 8,
htmlLabels: true,
curve: 'basis',
useMaxWidth: true,
}
⚠️ トラブルシューティング¶
よくある問題と解決策¶
- ダイアグラムが表示されない
- JavaScriptの読み込み順序を確認
ブラウザの開発者ツールでエラーをチェック
ダークモードで正しく表示されない
- MutationObserver の設定を確認
CSS変数が正しく定義されているかチェック
モバイルで表示が崩れる
- レスポンシブCSSの適用を確認
useMaxWidth: trueの設定を確認
📊 パフォーマンス最適化¶
CDN の選択¶
<!-- 推奨:安定版を指定 -->
<script src="https://unpkg.com/mermaid@10.9.0/dist/mermaid.min.js"></script>
<!-- 避ける:最新版(予期しない変更のリスク) -->
<script src="https://unpkg.com/mermaid/dist/mermaid.min.js"></script>
遅延読み込み¶
大量のダイアグラムがある場合は、Intersection Observer を使った遅延読み込みを検討してください。
🔗 まとめ¶
MkDocsでMermaidダイアグラムを表示するためには:
- pymdownx.superfences でカスタムフェンスを設定
- Mermaid CDN とカスタム初期化スクリプトを追加
- Material テーマに合わせたCSS を適用
- ダークモード対応 で統一感のあるデザインを実現
この設定により、技術文書の表現力が大幅に向上し、読者にとってより理解しやすいドキュメントが作成できます。