ローカルマシン上で起動する
gollum は PlantUML をサポートしている。デフォルトでは http://www.plantuml.com/ を変換サーバーとして用いるが*1、 PlantUML サーバーの URL を変更することができる。
config.rb
Gollum::Filter::PlantUML.configure do |config| config.url = "http://localhost:8080/plantuml/png" end
$ gollum --host=127.0.0.1 --config=config.rb path/to/git-repo-of-wiki
PlantUML Server は GitHub で公開されており、ローカルマシン上で変換サーバーを起動できる。デフォルトでは http://localhost:8080/plantuml で起動する。
$ git clone https://github.com/plantuml/plantuml-server $ cd plantuml-server $ mvn jetty:run
PlantUML Server をローカルマシン上で起動することで、外部との通信なしに図表を表示できる。
Docker を使う場合の注意点
plantuml-server は Dockerfile を提供している。 Docker を使うとローカルマシンの環境を汚さずに済むが、 PlantUML Server の URL の扱いに注意点がある。
- plantuml-server の Docker イメージを使うと http://localhost:8080/ をルート URL として起動する。 gollum は
/plantuml
というパスをルート URL として期待するので、BASE_URL
を渡して URL のパスを調整する必要がある。 - gollum と plantuml-server はそれぞれ別のコンテナで起動するので、 gollum から
localhost
で通信できず、Sorry, unable to render PlantUML diagram at this time
エラーが発生する。 gollum から http://plantuml-server:8080/ のようにコンテナ名を指定すれば通信可能だが、 IMG タグの SRC 属性として出力される URL も http://plantuml-server:8080/ で始まるものになってしまう。ホストマシンにその URL を解釈させるためにはホストマシンの/etc/hosts
に追記が必要。
docker-compose.yml
version: "3.8" services: gollum: image: suttang/gollum container_name: gollum restart: always ports: - "4567:4567" volumes: - ${PWD}/config.rb:/etc/gollum/config.rb - ${PWD}:/root/wikidata command: - "--config=/etc/gollum/config.rb" plantuml-server: image: plantuml/plantuml-server container_name: plantuml-server build: context: https://github.com/plantuml/plantuml-server.git dockerfile: Dockerfile.jetty args: BASE_URL: plantuml ports: - "8080:8080"
config.rb
Gollum::Filter::PlantUML.configure do |config| config.url = "http://plantuml-server:8080/plantuml/png" end
/etc/hosts
127.0.0.1 plantuml-server
結論
gollum も plantuml-server もおとなしくローカルマシン上で直接起動するのが、手間が少なくて楽。常用する場合、それぞれポート番号は変更した方が良い。
Vagrant を使ってバーチャルマシン上で実行する方法もあるが、マシンリソースを食うし、セットアップの手間も若干増すので、どうしてもローカルマシンの環境を汚したくない強い動機でもなければ、あまりメリットはない。
Docker を使う方法は、ホストマシンの /etc/hosts
を書き換える必要があり、最もスマートさに欠ける。良い回避策があれば良いのだが。
余談
gollum の wiki には By default gollum-lib expects the PlantUML server to be located on http://localhost:8080/plantuml/png.
とある。しかし gollum-lib v5.0 以降はデフォルトの PlantUML Server に https://plantuml.com/ を使うように変更された。
ところが、 gollum の wiki でも Most starts
と勧められている suttang/gollum という Docker イメージは gollum v4.0.1 をインストールする。 Docker イメージの最終更新日が五年前だからだろう。
gollum プロジェクトがオフィシャルの Docker イメージを提供しようとしている形跡がある。 Ruby のバージョンも新しいので、今後はこちらを使う流れになるのかもしれない(suttang/gollum は Ruby 1.9.3 を使っている)。
参考リンク
- https://github.com/gollum/gollum
- https://github.com/gollum/gollum-lib
- https://github.com/gollum/docker
- https://github.com/plantuml/plantuml-server
- https://gitlab.com/kyanny1/gollum-plantuml-server-on-local-machine
*1:gollum-lib のバージョンによる。余談の項を参照のこと。