UMLその他モデルの作図にJudeを愛用している。
・・・というかastah*か。
astah*で書いた図を、emfで(拡大縮小しても綺麗だから)ワードに張り付けるなどしているが、redmineのwikiに埋め込めるといいのにな~と思っていた。
もちろん画像で出力してからアップロードすることはできるが面倒。
せっかくリポジトリにastahのファイルを保管しているのだから、最新の図をwikiに自動反映できたら便利そう。
最近知ったのだけど、PlantUMLというのがあって、一定の記法で書いたUMLを画像にしてくれるOSSがあるそうだ。じゃあ、astah APIでモデルの情報を抜き出してPlantUML記法で吐きだしたらどうか?と一瞬考えたものの、レンダリング結果がastah上の図とはかなり変わってしまうし、APIで取得できない情報が多数あるのでそもそも再現度が低い。
やはり図の出力はastah*に任せたい。
jude時代から、コマンドラインで図出力を実行することができるので、これを呼び出したらいいだろう。
※細かいことは、インストール先のCommandRunner.htmlに書いてある。
自分ところで使っているredmineはどれもlinux上で動いているので、できればlinuxサーバで完結させたい。ということでまずは「linux上でコマンドラインで図出力」する手順を検討した。
ポイントは以下のとおり。
- コマンドライン図出力を実行するには、DISPLAY(Xサーバ)が必要。
- APIの場合はXサーバなしでも動くけど、図出力はdisplayが初期化できないと先に進まない。
- 図出力用のディスプレイという位置づけで、vncserverを使うことにした。
- astahライセンスをセットアップする必要がある
1. ディスプレイを用意
- 図出力を実行するユーザ向けにvncserverのディスプレイを作る。
- CentOSの場合、yumリポジトリにvnc-serverがあるのでこれをインストール。
- 実行ユーザで一回vncserverを起動しておく。
- 各種ファイルのひな型が作成されるのと、vncserverのパスワード設定を一度に出来るから。
% vncserver
You will require a password to access your desktops.
Password:
Verify:
New 'somehost:1 (someuser)' desktop is host:1
Creating default startup script /home/someuser/.vnc/xstartup
Starting applications specified in /home/someuser/.vnc/xstartup
Log file is /home/someuser/.vnc/somehost:1.log - 上で起動したvncserverはkillしちゃう。
で、ひな型をちょこっと編集。CentOSの場合、xstartupは以下の内容になっていた。
twmが動いていると、Xクライアントがウィンドウを作成するときに出現位置をユーザ操作で指定する流れになるので、図出力の自動化においては邪魔になってしまう。ので、twmの行を削除した。xtermも特に必要ないので削除。#!/bin/sh
# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
- システム起動時の自動起動を考慮して/etc/sysconfig/vncserverに設定
図出力を実行するユーザに合わせて編集。とりあえずディスプレイ番号は2のままにした。ジオメトリはもっと小さくてもいいはず。VNCSERVERS="2:someuser"
VNCSERVERARGS[2]="-geometry 800x600 -nohttpd -localhost"
- rootでrcスクリプトから起動
# /etc/init.d/vncserver start
- astah*のダウンロードサイトからzipを入手。「JREなし、インストーラなしのアーカイブ」と書かれているもの。
- 適当な場所にunzipする。
- 同梱されているastah-command.shは後半がちょいおかしい(pro 6.1.1)ので、ちびっと修正して、とりあえず同じディレクトリに「run.sh」という名前で保存した。実行権限を忘れない。
#!/bin/sh
ASTAH_HOME=`cd \`dirname $0\` && pwd`
INITIAL_HEAP_SIZE=64m
MAXIMUM_HEAP_SIZE=1024m
STACK_SIZE=3m
JAVA_OPTS="-Xms$INITIAL_HEAP_SIZE -Xmx$MAXIMUM_HEAP_SIZE -Xss$STACK_SIZE"
java $JAVA_OPTS -cp "$ASTAH_HOME/astah-pro.jar" com.change_vision.jude.cmdline.JudeCommandRunner $* - ライセンスを配置。
自分ところはJUDEのユーザライセンスがサポート時効前なのでJUDEのライセンスで。
$HOME/.astah/professional/JUDE_License_User_Professional.xml
- path上にjavaコマンドがあることを確認。なければ適宜pathを通す。
- 環境変数DISPLAYにvncserverを指定。
自分はtcshスキーなので以下の通りだが、他のシェルの場合は適宜% setenv DISPLAY 127.0.0.1:2
- 実行
% /path/to/astah/run.sh -image all -f /path/to/some.asta -o /path/to/dir
おわり
- で、出力されたのが冒頭のpng画像。
- Windowsで出力したときとフォントが異なるので、見た目の違いはあるけど、元の図がキープされていることに意義はありそう。
- 元の図が大きくなりがちなので、wikiに張り付けるのに向かないケースも多そう。
- 図出力にはかなり時間がかかる&出力したい図を指定できない(種類は指定出来る)ので、運用上はcronで出力しておいてどーこーみたいな仕組みも必要っぽい。
- wikiマクロ的には、.astaファイルと図のpath(名前空間+名前)を指定する感じか。
環境:
Windows 7 Ultimate x64
JRE6 x86
astah* professional 6.1.1
CentOS 5.4 x64
vnc-server-4.1.2-14.el5_3.1
JRE6 x64
astah* professional 6.1.1