# Windows における PlantUML の `dot.exe` 自動展開 (同梱 Graphviz) 仕様

# 1 何が起きているか

PlantUML は v1.2020.21 以降、Windows 環境で外部 Graphviz (`dot.exe`) が見つからない場合に、最小構成の Graphviz (graphviz-lite) を同梱しており、実行時に ユーザーの一時フォルダへ自動展開してから利用します。展開先の既定パスは次のとおりです。
`%LOCALAPPDATA%\Temp\_graphviz\dot.exe` 。(外部の `dot.exe` が見つからない場合に限る) (PlantUML.com) (GitHub)

# 2 導入の経緯 (タイムライン)

- 1.2020.21 以降: Windows では Graphviz を手動インストールしなくてもよい運用を公式に案内。最小版 `dot.exe` を 必要時に一時フォルダへ自動解凍して使う挙動が導入。1.2020.25 以前は生成時にメッセージが出る不具合があり、1.2020.25 以上の利用が推奨。 (PlantUML.com)
- 同梱される `graphviz-lite` の配布元 (公式 GitHub リポジトリ) でも、「PlantUML v1.2020.21+ はここからの lite 版を内蔵しており、外部 `dot.exe` が無いときだけ `%LOCALAPPDATA%\Temp\_graphviz` に展開する」と明記。 (GitHub)

# 3 探索と優先順位

PlantUML が Graphviz を探す順序・優先ルールは次のとおりです。

1. 環境変数 `GRAPHVIZ_DOT` が指す `dot.exe` があればそれを使用。 (PlantUML.com)
2. Windows の 既知パスの走査（旧来互換）：`c:\*\graphviz*\bin\dot.exe` または `c:\*\graphviz*\release\bin\dot.exe` をルート直下からスキャン（再帰しない）。 (PlantUML.com)
3. 上記で見つからない場合、同梱の graphviz-lite を `%LOCALAPPDATA%\Temp\_graphviz` に自動展開して使用。 (PlantUML.com)

> 補足：同梱 `dot.exe` は PlantUML 用に必要最小限のモジュールだけを含む「最小構成」ビルドです（`gvplugin_core.dll` と `gvplugin_dot_layout.dll` など）。 (GitHub)

# 4 動作確認と切り替え

- どの Graphviz が使われているか確認

      plantuml -version        # または: java -jar plantuml.jar -version
      plantuml -testdot

  これらは PlantUML 公式のテスト手順として案内されています。 (PlantUML.com)

- 外部 Graphviz を明示的に使う

  - 例: `GRAPHVIZ_DOT=C:\Program Files\Graphviz\bin\dot.exe` を設定 (環境変数で上書き)。 (PlantUML.com)

- 同梱 (自動展開) を使わせたい

  - `GRAPHVIZ_DOT` を未設定にし、PATH 上にも `dot.exe` が無い状態にして実行すれば、同梱版が `%LOCALAPPDATA%\Temp\_graphviz` に展開されて使用されます。 (PlantUML.com)

# 5 Linux との違い (参考)

Linux/Mac の項では、基本的に 外部 Graphviz のインストール (`apt`, `yum`, `brew` 等) を案内しており、Windows のような 同梱版の自動展開は前提にしていません。必要であれば `GRAPHVIZ_DOT` で場所を指定します。 (PlantUML.com)

## 5.1 参考リンク (公式)

- Graphviz/DOT (公式ドキュメント): Windows セクションに「1.2020.21 以降は同梱 `dot.exe` を一時フォルダへ自動解凍して使う」旨を明記。探索順や `GRAPHVIZ_DOT`、`-testdot` もここに記載。 (PlantUML.com)
- graphviz-distributions (PlantUML 公式 GitHub): 同梱する graphviz-lite の内容と、「`%LOCALAPPDATA%\Temp\_graphviz` に抽出する」仕様を README に明記。 (GitHub)