embed-astah.png
なんとなくアイデアを書いてからもう4カ月。書いたっきり手つかずで放置してたけど、突然やる気になってみた。

astah*で図を書いて redmineの wikiに埋め込むプラグインを考える その1

ソースはgithubに。例によって無保証です。
tckz's redmine_wiki_astah at master - GitHub

前のエントリに書いたように、astaファイルから図をエクスポートするのは非常に時間がかかる。だから、wikiマクロでは、エクスポート対象astaファイルをDBに記録するだけにした。そして別途cronなどを使ってエクスポート処理を動かす、という流れ。

主なfeature

  • wikiマクロ、{{astah_diagram}}を追加。
  • astaファイルは、public配下に置いたものまたは、リポジトリに入れたものを指定できる。
{{astah_diagram}}マクロ

    {{astah_diagram(public:foo.asta, namespace/diagram)}}
{{astah_diagram(source:/repo/path/foo.asta, namespace/diagram)}}
{{astah_diagram(option=value...,public:foo.asta, namespace/diagram)}}

  • astaファイル:
    • public:path/to/.asta
      • RAILS_ROOT/public/配下に置いた.astaを指定する。
      • RAILS_ROOT/public/sample.astaなら、指定する値はpublic:sample.asta
    • source:repo/path/to/.asta
      • リポジトリに格納したastaを指定する。プロジェクトにリポジトリがないと意味がない。
      • wikiのsourceリンク展開と同じように記述。
      • リポジトリの直下にあるsample.astaなら、source:sample.asta
  • 図のpath:
    • Asta*で図をエクスポートした際のpathに準ずる。
    • 図や名前空間に「/」が含まれると、エクスポートの際に「_」に変換される。ので、マクロに指定する値も「_」に変換した値とする。他にもあるかもしれないが不明。
オプション:
  • align=value
    • 埋め込まれた図のIMG要素に追加するalign属性
    • 例:right, left
  • width=value
    • 埋め込まれた図のIMG要素に追加するwidth属性
    • 例:100px, 100%
  • height=value
    • 埋め込まれた図のIMG要素に追加するheight属性
    • 例:100px, 100%
  • target={_blank|any}
    • 埋め込まれた図のIMG要素に追加するtarget属性
    • 別ウィンドウで開くなら_blank

インストール

事前に、astah(のGUI)を実行可能な状態に。↓のエントリで書いたように、図のエクスポートにはGUIが動くように、DISPLAYとライセンスを適切に設定する必要がある。
astah*で図を書いて redmineの wikiに埋め込むプラグインを考える その1

1. プラグインをRAILS_ROOT/vendor/plugins/配下に置く。

    #{RAILS_ROOT}/vendor/
      plugins/
        redmine_wiki_astah/
2. redmine_wiki_astah/run-astah.shを環境に合わせて編集する。
    ASTAH_HOME : Astah*を展開したディレクトリを設定。astah-pro.jarがあるディレクトリ。
    DISPLAY    : 当該環境のディスプレイをポイントする。自分ところでは前のエントリのとおり、vncserverを使っている。
3. プラグインが使うテーブルを準備。
  rake db:migrate:plugins RAILS_ENV=production
4. Redmineを再起動
5. 管理者でredmineにログインする。
6. プラグインの設定画面で'secret key'に適当な文字列を設定する。
7. 図のエクスポートを定期的に行うようセットアップする。

図をエクスポートする

wikiに埋め込まれたastaをエクスポートして実際の図イメージを作成する。
Astah.export_diagrams()を定期的に実行する必要がある。

こんな感じで。
#{RAILS_ROOT}/script/runner Astah.export_diagrams -e production

エクスポートしたイメージをredmineを実行しているユーザから参照できるよう、実行ユーザに注意。


おわり


astaにたくさん図が含まれるとエクスポートに何分もかかってしまう。
図のID(astaファイル中の内部的なID。APIで取得できる)があらかじめわかっていれば、特定の図だけをエクスポートすることで短縮もできるが・・・・。
先のエントリに書いたように、大き目の図が多いせいでwikiに埋め込むと小さい。widthを付けることで収まりはよくなるが、リンクをクリックして図だけを表示しないと読み取るのは難しいかも。

環境:
  CentOS 5.5 i386
    ruby-1.8.7-p299(from source)
      redmine-1.0.0
      sqlite3-ruby (1.3.1)
    sqlite-3.7.0-1
    astah* pro 6.2