.mmd ファイルの開き方

.mmd ファイルは、Mermaid の図を書いたプレーンテキストのファイルです。画像でもバイナリでもないので、テキストエディタで開けばそのまま中身が読めます。図として見たい場合は、下の枠にファイルをドロップしてください。ブラウザ内で描画され、サーバーには何も送信されません。

ここに .mmd ファイルをドロップ

.mermaid、.md、.txt にも対応しています。ファイルはブラウザ内で読み込まれ、アップロードされることはありません。

.mmd ファイルとは

Mermaid は図を書くためのテキスト記法です。図を言葉で記述すると、レンダラがそれを描きます。Markdown が書式を言葉で記述し、レンダラがページを作るのと同じ関係です。.mmd ファイルにはそのテキストだけが入っています。装飾も、画像データも、メタデータもありません。

この形式が存在する理由はまさにそこにあります。テキストなので、図が説明している当のコードの隣に、Git リポジトリの中で一緒に置けます。変更は差し替えられたバイナリではなく、読める差分として現れます。以下は完全に有効な .mmd ファイルの例です。

deploy.mmd — これで 1 ファイル、6 行
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[開始] --> end
修正後
flowchart 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 -->|はい (常に)| B
修正後
flowchart 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 --> B
修正後
flowchart 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 ファイルは何のソフトで開きますか?
ファイルはプレーンテキストなので、どのテキストエディタでもソースは読めます。図として見るには Mermaid を描画できるものが必要で、このページ、このサイトのエディタ、あるいは mermaid-cli というコマンドラインツールが使えます。.mmd 拡張子を占有するデスクトップアプリケーションは存在しません。
.mmd と .mermaid は同じものですか?
同じです。二つの拡張子は同一の内容を持ち、相互に置き換えられます。.mmd のほうが一般的で、公式のコマンドラインツールが既定で使うのもこちらです。
GitHub で .mmd ファイルが図として表示されないのはなぜですか?
GitHub が Mermaid を描画するのは、Markdown ファイル、Issue、Discussions、プルリクエスト、Wiki の中にあるフェンス付きの ```mermaid ブロックだけだからです。単体の .mmd ファイルはソースとして表示されます。GitHub 上で見せたいなら、同じ図を .md ファイルのフェンスの中に入れてください。
何もインストールせずに .mmd ファイルを開けますか?
開けます。このページはそのためにあります。描画はブラウザ内の JavaScript として動くので、インストールするものはなく、ファイルが手元の端末から出ることもありません。
日本語のラベルが文字化けします
ファイルの文字コードが UTF-8 になっていません。このページはファイルを UTF-8 として読みます (BOM 付きは問題なく扱えます)。Shift_JIS や EUC-JP で保存されていると日本語部分が化けます。エディタで文字コードを UTF-8 に変えて保存し直してください。
ここでは動くのに社内の Wiki で動きません。なぜですか?
ほぼ必ずバージョンの違いです。このビューアは Mermaid 11.12.2 で、多くの Wiki はもっと古いものを動かしています。GitLab.com はバージョン 10 と明記しています。向こうのシステムで図の中に info とだけ書けば、動いているバージョンが表示されます。

ここで開ける図の種類

執筆 Dominik Malsch · 最終更新:

エディタを開く →