PlantUML Serverをセットアップする


PlantUML Serverをセットアップする

PlantUML Serverをローカル環境で使用可能にする方法を記載します。
PlantUMLについての説明はしないので公式サイトを読むかググっていただきたい。
もちろんこのQiitaにもタグがあるので活用事例はそちらからどうぞ。

対象読者

  • PlantUML Serverが必要な人 1
  • 悪いインターネット2 に繋がってるものは業務で使えない人 1
  • 公式サイトの説明だと手順がよく分からなかった人 3 4 1

2021-09-05 追記 キャッシュ付きのPlantUMLサーバーが欲しいだけの人向けにGitHubにてDocker Composeの構築例を公開しています。 https://github.com/felis392/compose-plantuml

おことわり

この記事は嘘は書いていませんが間違っている可能性はあります。
執筆時点の2019-05-26では通用しますが、将来もずっと通用するかはわかりません。

環境

記事の例で使っているOSはWindows 10 Homeの64bit版です。5
ProServer 201Xでも大体同じはずですが、32bit版の事は知りません。

ちなみにインストールするマシン自体はインターネットに繋がってなくても大丈夫です。
(イントラ経由で転送したり、外部メディアで運んだりする手間は掛かる)

ダウンロードが必要なもの

以下のものが要ります。
ダウンロード手順までは細かく説明しないのであしからず。
もちろん「もう持ってる」なら新たに落としなおす必要はありません。

  • Graphviz
  • Java実行環境
    • PlantUMLの動作に必要。
    • JDKでもJREでも可。
    • 今回はJDK12を使う。
  • Javaアプリケーションサーバー
    • PlantUML Serverの動作に必要。
    • .warファイルをデプロイ可能なサーバー。
    • 今回はTomcat9を使う。
  • PlantUML Serverのサーバープログラム
    • Javaサーブレットとして提供されている plantuml.war のこと。
  • (オプション)JLatexMathのjarファイル
  • (オプション)Apache HTTPサーバー 7
    • http://XXXXX:80/plantumlでアクセスできるようにするのに必要。
    • サーバーキャッシュ機能を使えば一度生成した画像はキャッシュから拾えるようになる。

インストール手順

1.「Graphviz」のインストール

  1. ダウンロードしたgraphviz-2.38.msiを実行し画面の指示に従って操作を進めてインストールを行う。

デフォルトではC:\Program Files (x86)\Graphviz2.38にファイルが展開されます。
PlantUML Serverを動作させるだけならこれでOKですが、インストーラのくせにPATHを通してくれない不具合があるようなので単独で使う場合はbinフォルダにPATHを通してください。
PATHが通っていればコマンドプロンプトで以下の様に表示されます。

> dot -V
dot - graphviz version 2.38.0 (20140413.2041)

2.「Java実行環境」のインストール

  1. ダウンロードしたopenjdk-12.0.1_windows-x64_bin.zipを展開する。
  2. 中のjdk-12.0.1フォルダを適当な場所に配置する。
  3. 環境変数JAVA_HOMEの値にそのフォルダへのフルパスをセットする。
  4. 環境変数PATHの末尾に%JAVA_HOME%\binを追加する。

PATHが通っていればコマンドプロンプトで以下の様に表示されます。

> java -verion
openjdk version "12.0.1" 2019-04-16
OpenJDK Runtime Environment (build 12.0.1+12)
OpenJDK 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)

3.「Javaアプリケーションサーバー」(Tomcat)のインストール

  1. ダウンロードしたapache-tomcat-9.0.20.exeを実行し、画面の指示に従って操作を進めてインストールを行う。
    1. Install type は Minimum を選択する。
    2. 使用するポート番号は特に理由がなければデフォルトのまま(8080)にする。
    3. JREの場所を聞かれるので、「Java実行環境」をインストールしたフォルダを選択する。
    4. TomcatをインストールするフォルダはC:\Apache Tomcat 9.0など分かりやすい場所を入力する。
  2. インストールが完了したらアプリケーションサーバーを起動します。

Webブラウザから http://localhost:8080 にアクセスすると以下の様に表示されます。

4.「PlantUML Server」のインストール

4.1. (オプション)「JLataxMath」のライブラリの配備

JLatexMathを使用する場合は外部JARファイルをTomcatにロードさせる必要があります。

  1. ダウンロードしたplantuml-jlatexmath.zipを展開し、JARファイルを取り出す。
    • batik-all-1.7.jar
    • jlatexmath-minimal-1.0.3.jar
    • jlm_cyrillic.jar
    • jlm_greek.jar
  2. Tomcatをインストールしたフォルダ(catalina.homeという)の下にsharedLibというフォルダを作成する。
  3. 作成したフォルダに上記のJARファイルを配置する。
  4. {catalina.home}\confにある設定ファイルcatalina.propertiesをテキストエディタで開く。
    • 以下の様に編集してコモンローダーのスキャン対象に上記のJARファイルが含まれるようにする。
  5. Tomcatを再起動する。
catalina.properties(抜粋)
#common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/sharedLib","${catalina.home}/sharedLib/*.jar"

4.2. 「plantuml.war」の配備

  1. Tomcatをインストールしたフォルダ(catalina.homeという)の下にあるwebappsフォルダを開く。
  2. このフォルダにダウンロードしたplantuml.warを配置する。
  3. しばらく待つとTomcatのオートロード機能によってplantumlというフォルダに展開される。

Webブラウザから http://localhost:8080/plantuml にアクセスすると以下の様に表示されます。

お疲れ様でした。

…と言いたいところですが、ここまでやったならもう一仕事しましょう。

5. (オプション)「Apache HTTPサーバー」のインストール

5.1. 「Apache HTTPサーバー」のインストール

  1. ダウンロードしたhttpd-2.4.39-o111b-x64-vc15.zipを展開し、Apache24フォルダを取り出す。
  2. Apache24フォルダをCドライブ直下(C:\Apache24)など分かりやすい場所に配置する。
  3. コマンドプロンプトを起動し、以下のコマンドを実行してWindowsのサービスに登録する。
  4. 登録したサービスを開始…はまだしない
> cd c:/apache24/bin
> httpd -k install -n "Apache24"

なお、サービスを開始している場合は http://localhost にアクセスすると以下の様に表示されます。

5.2. ProxyPassとCacheの設定

  1. Apache HTTPサーバーをインストールしたフォルダのconfフォルダにある設定ファイルhttpd.confをテキストエディタで開く。
  2. 下記の様に編集する、
    1. 必要なモジュールがロードされるようにする。(コメント行になっているので行頭のハッシュを外す)
    2. 80番ポートでPlantUML Serverにアクセスできるようにする。
    3. PNGファイルとSVGファイルのサーバーキャッシュを有効にする。
  3. 登録したサービスを開始し、Apache HTTPサーバーを起動する。
httpd.conf(抜粋)
LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule expires_module modules/mod_expires.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
httpd.conf(抜粋)
<IfModule mod_proxy.c>
    ProxyRequests Off
    <Location /plantuml>
        Require all denied
    </Location>
    <LocationMatch "/plantuml/(png|svg)/">
        Require all granted
    </LocationMatch>

    # PlantUML Serverへのプロキシ定義
    # {XXX.XXX.XXX}は利用者から見えるドメイン名かIPアドレス(localhostは不可)
    ProxyPass         /plantuml   http://{XXX.XXX.XXX}:8080/plantuml
    ProxyPassReverse  /plantuml   http://{XXX.XXX.XXX}:8080/plantuml
</IfModule>
httpd.conf(抜粋)
<IfModule mod_cache.c>
  <IfModule mod_cache_disk.c>
    # {apache_cache}はキャッシュファイルを格納する任意のフォルダ
    CacheRoot C:\{apache_cache}
    CacheEnable disk /
  </IfModule>
  CacheIgnoreCacheControl On
  CacheIgnoreNoLastMod On
  CacheDefaultExpire 86400
  CacheMaxExpire 2592000
</IfModule>

<ifModule mod_expires.c>
  ExpiresActive On
  # 既定値(キャッシュ無効)
  ExpiresDefault "access plus 0 seconds"
  # 画像(pngとsvgは1か月キャッシュする)
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/svg+xml "access plus 1 month"
</ifModule>

ここまで設定できていれば http://localhost/plantuml/svg/ENCODE にアクセスして、キャッシュが有効な状態のSVG画像を取得できるようになっているはずです。

お疲れ様でした。

謝辞

キャッシュ設定については RitoLaboのこちらのエントリ を勝手に参考にさせていただきました。


  1. 私だ。(It's me.) 

  2. 社外サーバーhttpプロトコルで公開されている外部Webサイトの事である。グーグルに聞くと教えてくれる 悪いインターネット の方ではない。 

  3. 全体的に「みんな知ってるね」感のある書き方なので分からない人は多いかと思う。 

  4. Saltと訳すくらい丸出しの機械翻訳なので英語ページはもちろん日本語ページでもつらあじ。 

  5. Windows以外のOSを使ってる人なら自分の使ってるOSに依存する部分については適切に判断できるよね。 

  6. UML内で使うか?っていうと正直使わないと思う。各種のWiki-likeサイトで使うなら他のLaTexプラグインもあるし。 

  7. Tomcatをピンで使うなら別になくても困らないが、複数人でガンガン使うなら併用を推奨する。