Tracのwikiに図面を入れる(PlantUML編)
Tracのwikiに図面を入れるの続き。GraphvizやMscgenも良いけど、やっぱりUMLの図面が欲しいと思うことは多いはずだ。そこで今回はUMLの図面を入れてみる。テキストで記述したスクリプトからUMLを描くためのツールとして、PlantUMLというJavaのソフトがある。
このツールをtracから呼び出すプラグインを作ってくれた人がいた(ページの履歴を見る限り、つい最近のようだ)ので、早速テストしてみた。動作環境は前回と同じ。
PlantUML
$ sudo port install graphviz
export GRAPHVIZ_DOT=/opt/local/bin/dot
$ svn co http://trac-hacks.org/svn/tracplantumlplugin/
- そのままインストールする。
$ sudo /opt/local/bin/python2.6 setup.py install
- プロジェクトのconf/trac.iniに下記を追記する。
[components] ... plantuml.* = enabled [plantuml] plantuml_jar = /path/to/plantuml.jar
- wikiに下記のような記述を書いて更新すると、シーケンス図が表示される。
{{{ #!PlantUML @startuml Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response Alice -> Bob: Another authentication Request Alice <-- Bob: another authentication Response @enduml }}}
- 表示例
- ステートチャート図
{{{ #!PlantUML @startuml [*] --> State1 State1 --> [*] State1 : this is a string State1 : this is another string State1 -> State2 State2 --> [*] @enduml }}}
- 表示例
{{{ #!PlantUML @startuml User -> (Start) User --> (Use the application) : A small label :Main Admin: ---> (Use the application) : This is\nyet another\nlabel @enduml }}}
- 表示例
- クラス図
{{{ #!PlantUML @startuml abstract class AbstractList abstract AbstractCollection interface List interface Collection List <|-- AbstractList Collection <|-- AbstractCollection Collection <|- List AbstractCollection <|- AbstractList AbstractList <|-- ArrayList ArrayList : Object[] elementData ArrayList : size() enum TimeUnit TimeUnit : DAYS TimeUnit : HOURS TimeUnit : MINUTES @enduml }}}
- 表示例
MacOS X環境で動作させると、plantuml.jarが起動する毎にアプリケーションがアクティブになってしまうとか*1、Javaのソフトなので起動がやや緩慢である*2とか問題は有るけれど、UMLを適切に描いてくれることは便利だ。wiki愛好家としては、手軽に画像を入れられる方法が広まるのは嬉しい。プラグインを作ってくれた方に感謝したい。
2010/4/20追記
- tracdでは問題ないが、Apacheで動作させると下記のpermissionエラーが発生する場合(MacOS X)、plantuml.jarをヘッドレスモードで動作させる。(Windows環境では発生しない)
Error running plantuml: Tue Apr 20 19:11:30 foo.local java[21435] <Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged. Exception in thread "main" java.lang.InternalError: Can't connect to window server - not enough permissions.
- plantuml.jar起動時にdotが見つからないというエラーが発生する場合、環境変数に指定されているdotのパスを拾えないのが原因なのでJVM起動時に明示する。(plantuml.jarのデフォルトでは/usr/bin/dotなので、MacPortsでインストールしたパス/opt/local/bin/dotを指定)
以上の変更を加えたplantuml/macro.pyはこんな感じ。このプラグインをインストールすれば良い。
cmd = "java -Djava.awt.headless=true -DGRAPHVIZ_DOT=/opt/local/bin/dot -jar \"%s\" -pipe" % (self.plantuml_jar)
2010/9/15追記
- 上記のヘッドレスモードの問題は既に修正されている。
関連