Javaなしで安全に使えるPlantUMLビューア「pumlv」
はじめに
こんにちは、rin2yhです!
Javaに依存せずローカルで完結するPlantUMLビューア「pumlv」を作りました。特徴は次の3点です。
- Java不要: PlantUML公式のJavaScript版をブラウザで動かすため、Javaランタイムを必要としません
- 単一バイナリで完結: Releasesまたはmiseから取得した1ファイルだけで起動できます
-
外部送信ゼロ: レンダリングはすべてブラウザ側で行い、デフォルトは
127.0.0.1にバインドします

本記事ではpumlvを作った経緯と、構成・使い方を紹介します。
作るに至った経緯
PlantUMLを既存ツールでプレビューしようとすると、VSCode拡張やNeovimプラグインのようなエディタ拡張はいずれもJavaランタイムのインストールが前提でした。私は普段Javaを使う機会がないため、このためだけにJavaを入れるのは手間に感じました。
オンラインエディタも考えましたが、業態の特性上、業務で扱う情報を外部サーバに送るわけにもいきません。
そんな中、k1Lowさんのk1LoW/moというマークダウンビューアに着想を得て、PlantUMLでも同じことができそうだと考えました。さらに調査を進めると、PlantUMLにはJavaScript版[1]があり、これを軸にすればJavaも外部送信も避けられると気づきました。
pumlvはk1LoW/moと同様に、Goでサーバを書きフロントエンドをgo:embedで同梱することで、配布もインストールも単一バイナリで完結する構成にしました。
構成
pumlvの構成は以下のとおりです。
Goプロセスは次の3つの役割を持っています。
- 監視対象を
Registryで管理し、fsnotifyで監視する - HTTPサーバとしてフロントエンド資材(React +
plantuml.js)を配信する - 変更検知時に
Hub(接続中のブラウザ全てへイベントを配信する仕組み)からSSE[2]でブラウザへ通知する
PlantUMLのレンダリング自体は完全にブラウザ側で行われます。Goプロセスは.pumlの本文をHTTPで返すだけで、外部のサーバへ送る経路はありません。デフォルトのバインド先も127.0.0.1としているため、同一マシン外からはアクセスできない構成です。
使い方
macOS / Linux(いずれも amd64 / arm64)で動作確認しています。Releasesのバイナリ、またはmise(GitHub backend)で導入できます。
# miseで入れる場合
mise use -g github:rin2yh/pumlv
# ディレクトリ監視(再帰)
pumlv ./docs
# 単一ファイル
pumlv ./design/seq.puml
# 複数引数も可
pumlv ./docs ./design/seq.puml
主なフラグは次のとおりです。
| フラグ | デフォルト | 説明 |
|---|---|---|
--port |
0(自動割当) |
バインドするTCPポート |
--host |
127.0.0.1 |
バインドホスト |
--no-open |
false |
起動時にブラウザを自動で開かない |
--ext |
.puml,.plantuml,.iuml,.wsd |
監視対象の拡張子 |
シーケンス図もそのまま扱えます。

業務では2000行規模のER図をプレビューする用途でも問題なく動作することを確認しています。大きめのファイルでも実用に耐えます。
既存ツールとの比較
経緯で触れた既存ツールとpumlvの差分を整理すると、次のとおりです。
| ツール | Java | 外部送信 | エディタ依存 |
|---|---|---|---|
| PlantUML(VSCode拡張) | 必要 | なし | VSCode |
| nvim-plantuml | 必要 | なし | Neovim |
| PlantUML Web Server | 不要 | あり | なし |
| pumlv | 不要 | なし | なし |
pumlvはこの3軸(Java要否・外部送信・エディタ依存)をすべてクリアすることを目的にしています。
おわりに
同じようにJavaを入れたくない・ソースを外に出したくない制約のある方にとって、PlantUMLをプレビューする選択肢の一つになれば嬉しいです。
お忙しい中ご覧いただき、ありがとうございました!
Discussion