.mmd ファイルの開き方
.mmd ファイルは、Mermaid の図を書いたプレーンテキストのファイルです。画像でもバイナリでもないので、テキストエディタで開けばそのまま中身が読めます。図として見たい場合は、下の枠にファイルをドロップしてください。ブラウザ内で描画され、サーバーには何も送信されません。
ここに .mmd ファイルをドロップ
.mermaid、.md、.txt にも対応しています。ファイルはブラウザ内で読み込まれ、アップロードされることはありません。
.mmd ファイルとは
Mermaid は図を書くためのテキスト記法です。図を言葉で記述すると、レンダラがそれを描きます。Markdown が書式を言葉で記述し、レンダラがページを作るのと同じ関係です。.mmd ファイルにはそのテキストだけが入っています。装飾も、画像データも、メタデータもありません。
この形式が存在する理由はまさにそこにあります。テキストなので、図が説明している当のコードの隣に、Git リポジトリの中で一緒に置けます。変更は差し替えられたバイナリではなく、読める差分として現れます。以下は完全に有効な .mmd ファイルの例です。
flowchart LR
Commit[main へプッシュ] --> Build[テスト実行]
Build -->|成功| Deploy[本番へデプロイ]
Build -->|失敗| Notify[作成者に通知]
Deploy --> Smoke[スモークテスト]
Smoke --> Done[リリース完了].mmd ファイルを開けるもの
先に結論を書くと、ダブルクリックで .mmd ファイルを開けるものはほぼありません。この拡張子はどのアプリケーションにも関連付けられていないからです。実際に必要なのは Mermaid を描画できるものです。以下は実際に確認した内容と、うまくいかない場合です。
このページ開ける
ファイルをそのまま描画する
上の枠にファイルをドロップすれば図が出ます。アップロードの手順はありません。File API を使ってブラウザ内でファイルを読み、その場で描画しています。社外に送ってはいけない図でも使えるのはそのためです。
眺めるだけでなく手を入れたい場合は、プレビューの下のリンクからエディタで開いてください。
テキストエディタ全般開ける
図ではなくソースが見える
メモ帳でも、サクラエディタでも、Vim でも構いません。.mmd は UTF-8 のテキストなので、開けばすぐにソースが読めます。図は表示されませんが、壊れているわけではありません。ファイルの中に画像が入っていないだけです。
送られてきたファイルが本当に Mermaid かを確かめるには、これが最も速い方法です。開いて、空行でない最初の行が flowchart、sequenceDiagram、classDiagram、stateDiagram-v2、erDiagram、gantt のような図の種類を表すキーワードになっているかを見てください。
GitHub開けない
Markdown 内の ```mermaid ブロックは描画するが、.mmd ファイル単体は描画しない
GitHub はフェンス付きコードブロックの中の Mermaid を描画します。公式ドキュメントに範囲が明記されていて、Issue、Discussions、プルリクエスト、Wiki、そして Markdown ファイルです。単体の .mmd ファイルはこの一覧に入っておらず、リポジトリのファイルブラウザで開いてもソースが表示されるだけです。
つまり GitHub 上で図として見せたいなら、図は .mmd ファイルではなく .md ファイルの ```mermaid ブロックの中に置く必要があります。ソースとして .mmd を保持しつつ、同じ内容を README にも埋め込むという重複は、よくあることですし理にかなっています。
GitLab開けない
```mermaid ブロックは描画するが、.mmd ファイル単体は描画せず、Mermaid のバージョンも古い
GitHub と同じ形です。Markdown、Issue、マージリクエスト、Wiki の中のフェンス付きブロックでは描画されますが、単体の .mmd ファイルが描画されるとは書かれていません。
もう一つ知っておく価値があります。実際に混乱の原因になるからです。GitLab.com は Mermaid のバージョン 10 に対応していると明記しています。このサイトは 11.12.2 で動いています。バージョン 10 より後に追加された構文はここでは描画され、向こうでは失敗します。「ビューアでは出るのに社内の GitLab では出ない」の説明はたいていこれです。自己管理型の GitLab にはもう一つ罠があって、Cross-Origin-Resource-Policy ヘッダが same-site か same-origin に設定されていると、Mermaid の図はエラーも出さずに何も表示されなくなります。
.mmd と .mermaid と .md の違い
.mmd と .mermaid は同じものです。どちらも Mermaid のソースだけが入っていて、私の知るかぎり片方を受け付けるツールはもう片方も受け付けます。.mmd のほうが短く、より一般的で、公式のコマンドラインツールも既定でこちらを使います。プロジェクトの中でどちらかに統一しておけば十分で、技術的な差はありません。
.md は種類が違います。Markdown ファイルは文書であり、その中に Mermaid の図が入っていることがある、という関係です。図はバッククォート 3 つと mermaid という語で始まるフェンスに囲まれて、より大きなテキストの中の一節として存在します。
この違いが、ファイルが描画されない原因として最も多いものです。しかも両方向に起こります。.md ファイルの中身をそのまま Mermaid のレンダラに貼ると、フェンスの行が Mermaid の構文ではないので失敗します。逆に、素の Mermaid をフェンスなしで .md ファイルに保存すると、GitHub はそれをただの段落として表示します。規則は単純です。.mmd ファイルは図のキーワードで始まらなければならず、.md ファイルは図をフェンスの中に入れなければなりません。
このビューアは .mmd、.mermaid、.md、.txt を受け付けますが、読み込んだものはすべて素の Mermaid として扱います。図の前後に文章がある Markdown ファイルをドロップする場合は、先に図以外を取り除いてください。
描画されない——実際の原因はどれか
Mermaid のエラーメッセージは正確ですが、親切ではありません。役に立つコツは、メッセージのいちばん末尾を読むことです。`got` の後ろに、解析器がつまずいたトークンの名前が出ます。これは行番号よりもはるかによく原因を指し示します。以下はすべて mermaid 11.12.2 で再現したもので、誤りの側は本当に失敗し、修正後は本当に描画されます。
表示されるもの
No diagram type detected matching given configuration for text: ```mermaid
原因
Markdown ファイルやチャットのメッセージから図をコピーしたときに、フェンスまで一緒に持ってきています。バッククォート 3 つは Markdown であって Mermaid ではないので、解析器は図の本体にたどり着けません。
対処
先頭の ```mermaid の行と、末尾の ``` の行を消します。ファイルは図のキーワードで始まる必要があります。
```mermaid
flowchart TD
A[開始] --> B[終了]
```flowchart TD
A[開始] --> B[終了]表示されるもの
Parse error、末尾が: got 'PS'
エラーの末尾: got 'PS'
原因
ノードラベルの中に半角の開き丸括弧があります。Mermaid では丸括弧は形の構文で、`A(文字)` は角丸ノードを意味します。そのため角括弧の中に裸で置かれた ( は、形の始まりとして読まれます。
対処
ラベル全体を二重引用符で囲みます。引用符の中はすべて文字として扱われます。全角の()であれば囲まなくても通ります。
flowchart TD
A[再試行 (最大 5 回)] --> B[完了]flowchart TD
A["再試行 (最大 5 回)"] --> B[完了]表示されるもの
ノード ID を書いた行で Parse error
原因
ノード ID の中に全角空白が入っています。日本語入力のまま書いているとかなりの頻度で混入し、しかも画面上では半角空白と区別が付きません。ID は矢印の手前のトークンなので、空白がそこで打ち切ってしまい、置き場のない語がもう一つ残ります。
対処
ID は空白を含まない 1 語にして、読ませたい文字は角括弧のラベルに入れます。
flowchart TD
認証 サービス --> DB[(ユーザー)]flowchart TD
auth[認証サービス] --> db[(ユーザー DB)]表示されるもの
Parse error、末尾が: got 'STR'
エラーの末尾: got 'STR'
原因
ノードラベルの途中に半角の二重引用符があります。ラベルの解析器はそれを文字列の始まりとみなし、閉じ引用符を期待した位置でラベルの閉じ括弧に出くわします。
対処
ラベル全体を二重引用符で囲んだうえで、中では単引用符か、鉤括弧を使います。HTML 実体参照の #quot; でも書けます。
flowchart TD
A[状態は "保留"] --> B[完了]flowchart TD
A["状態は '保留'"] --> B[完了]表示されるもの
Parse error、末尾が: got 'end'
エラーの末尾: got 'end'
原因
`end` をノード ID に使っています。小文字の `end` はサブグラフを閉じるため、ノードがあるべき位置でブロックの終端が現れたことになります。流れの最後のノードに `end` と名付けるのは自然なので、よく起こります。
対処
先頭を大文字にするか、ノードに別の ID を付けてその語をラベルに入れます。どちらでも動きます。
flowchart TD
A[開始] --> endflowchart TD
A[開始] --> End[終了]表示されるもの
No diagram type detected matching given configuration for text: sequencediagram
原因
図のキーワードの綴りか、大文字小文字が違います。Mermaid のキーワードは大文字小文字を区別します。sequenceDiagram は通り、sequencediagram は通りません。stateDiagram-v2 や erDiagram も同じです。
対処
大文字小文字を直します。なお `graph` は `flowchart` の旧称として今も受け付けられるので、そこは原因ではありません。
sequencediagram
利用者->>API: 注文を送信sequenceDiagram
利用者->>API: 注文を送信表示されるもの
縦棒に挟まれた辺ラベルで Parse error
原因
辺ラベルの中に半角の丸括弧があります。`|…|` のラベルにもノードラベルと同じ制約があり、括弧はそこでも構文であって文字ではありません。
対処
辺ラベルも引用符で囲みます。
flowchart TD
A -->|はい (常に)| Bflowchart TD
A -->|"はい (常に)"| B表示されるもの
ER 図で Parse error、末尾が: got 'NEWLINE'
エラーの末尾: got 'NEWLINE'
原因
関連にラベルがありません。フローチャートの辺と違って、ER の関連はコロンと動詞句が必須です。省略できないので、書かないと行が途中で終わったことになります。
対処
コロンと短い動詞句を足します。
erDiagram
顧客 ||--o{ 注文erDiagram
顧客 ||--o{ 注文 : "発注する"表示されるもの
図の最終行で Parse error が報告される
原因
開いたまま閉じていないブロックがあります。alt、opt、loop、par、subgraph はどれも対応する `end` を必要とします。Mermaid は入力を読み切った時点で失敗を報告するので、行番号は閉じ忘れたブロックではなくファイルの末尾を指します。
対処
ブロックを開いた数と `end` の数を数えます。エラー行が最終行のときは、ほぼ必ずこれが原因です。
sequenceDiagram
利用者->>API: 注文を送信
alt 在庫あり
API-->>利用者: 受付完了sequenceDiagram
利用者->>API: 注文を送信
alt 在庫あり
API-->>利用者: 受付完了
end表示されるもの
Lexical error on line 1. Unrecognized text.
原因
図のキーワードの後ろの方向指定が不正です。フローチャートが受け付けるのは TB、TD、BT、LR、RL だけで、それ以外はノードを読む前の字句解析で失敗します。だからエラーは 1 行目を指します。
対処
5 つのうちどれかを使います。TD (上から下) と LR (左から右) でほぼ足ります。
flowchart XY
A --> Bflowchart TD
A --> B表示されるもの
ここでは描画されるのに、GitLab や Confluence、古いツールでは描画されない
原因
バージョンの違いです。このビューアは Mermaid 11.12.2 で動いています。GitLab.com はバージョン 10 への対応を明記していますし、社内 Wiki は何年も遅れていることが珍しくありません。相手のバージョンより後に入った構文は、ここでは通り、向こうでは失敗します。
対処
相手のレンダラにバージョンを聞いてください。図の中に info という 1 語だけを書くと、Mermaid が自分のバージョン番号を描画します。リリースノートを読むより速いです。
infoもう一つ、日本語で書くときに固有の落とし穴があります。文字コードです。このページもエディタもファイルを UTF-8 として読みます。UTF-8 の BOM は取り除かれるので、Windows のメモ帳で「UTF-8 (BOM 付き)」で保存したファイルはそのまま開けます。しかし Shift_JIS や EUC-JP で保存されたファイルは、日本語の部分が文字化けした状態で読み込まれます。ラベルが記号の羅列になっていたり、意味の分からないエラーが出たりしたときは、エディタで文字コードを UTF-8 にして保存し直してください。
そしてエラーがまったく出ない場合の話も一つ。自己管理型の GitLab では、Cross-Origin-Resource-Policy ヘッダが same-site か same-origin に設定されていると、Mermaid の図が何も言わずに失敗します。メッセージも図も、ページ上に何も残りません。ある自己ホストの環境だけで図が出ないなら、そこを見てください。
PNG、SVG、PDF への変換
ファイルをエディタで開き、書き出しボタンを使ってください。SVG は図をベクタのまま保つので、どんな大きさでも鮮明で、ラベルは選択も検索もできます。ドキュメントに載せる場合や、後で再書き出しする可能性がある場合はこちらが正解です。PNG はビットマップで、高精細な画面でも耐えるように表示サイズの 2〜3 倍で書き出しています。SVG が受け付けられない場所、つまり実際にはほとんどのチャットツールや一部の Wiki で使ってください。
PDF のボタンはありません。あるふりをするより、ないと書いておきます。現実的な経路は、SVG で書き出して、いま書いている文書に貼るか、そのページをブラウザから PDF に印刷するかです。ベクタの SVG を PDF に置いてもベクタのままです。
繰り返し実行したいもの——ビルド手順、大量のファイル、コミット前フック——には、公式のコマンドラインレンダラ @mermaid-js/mermaid-cli が使えます。同じ .mmd ファイルを渡せば、ブラウザなしで画像を直接書き出します。
よくある質問
.mmd ファイルをオンラインで開くには?
.mmd ファイルは何のソフトで開きますか?
.mmd と .mermaid は同じものですか?
GitHub で .mmd ファイルが図として表示されないのはなぜですか?
何もインストールせずに .mmd ファイルを開けますか?
日本語のラベルが文字化けします
ここでは動くのに社内の Wiki で動きません。なぜですか?
ここで開ける図の種類
執筆 Dominik Malsch · 最終更新: