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