wikimacro2.png
前回のつづき。

クリッカブルマップを吐き出すところまでいけたので公開。
Wiki Graphviz macro プラグイン
例によって無保証です。

主なfeature

  • wikiマクロ、{{graphviz}}と{{graphviz_me}}を追加
  • wikiページをdot形式で記述し、これらのマクロから呼び出すことでグラフ画像をレンダリング
  • ノードにURL属性を指定するとクリッカブルマップに

{{graphviz}} マクロ

{{graphviz(Foo)}}
{{graphviz(option=value,Foo)}}
{{graphviz(layout=neato,target=_blank,with_source,Foo)}}
  
  • 指定したwikiページをdotテキストとみなしてグラフ画像をレンダリング。IMGタグを差し込む
  • オプションは以下のとおり
    • format={png|jpg}
      • 画像形式。
      • 現在のところpngとjpegだけ
    • layout={dot|neato|fdp|twopi|circo}
      • レイアウトエンジン指定。
      • デフォルトはdot
    • target={_blank|any}
      • クリッカブルマップを生成する際のTARGET属性に指定する値
      • 別ウィンドウで開くなら_blank
    • with_source
      • 画像の直後に読みこんだdotの内容をPREで出力

{{graphviz_me}} マクロ

// {{graphviz_me}}
// {{graphviz_me(option=value)}}
// {{graphviz_me(layout=neato,target=_blank,with_source)}}
  
  • 別のwikiページを指定する代わりにこのマクロを含むwikiページをレンダリング対象とする。これ以外は{{graphviz}}マクロと同じ。
  • 必然的に、dotフォーマット上のコメントアウトが必要。コメントアウトしないとレンダラがエラー終了する

dotの書式や指定できる値については、Graphvizチュートリアルがまとまっていて便利。


必要なもの
  • Redmine 0.8.0 RC1 or later.
  • Graphvizとrubyバインディング。本家でrpmを配布している。  http://www.graphviz.org
        graphviz-2.20.3-1.el5
        graphviz-gd-2.20.3-1.el5
        graphviz-ruby-2.20.3-1.el5
  • memcached (optional)


インストール
  • redmine公式サイトの説明にもあるように、プラグインのアーカイブを展開してvendor/plugins/に配置してredmineを再起動するだけ(僕のところはmongrel+mod_proxy_balancerなので)
オプション
  • レンダリングした画像をキャッシュしておくことができます。キャッシュを用いる場合は、memcachedとcache_storeを設定します。
  • cache_storeの設定例
         e.g.) config/environments/production.rb
         config.action_controller.perform_caching = true
         config.action_controller.cache_store = :mem_cache_store, "localhost"
  • redmineを再起動
  • プラグインの設定ページ(管理→プラグイン→Wiki graphviz macro plugin)で、キャッシュ秒数を1以上に設定

僕の環境は以下のとおり。

CentOS 5.2
  ruby-1.8.5-5.el5_2.6
    mongrel-1.1.5
    mongrel_cluster-1.0.5
    redmine-0.8.0_RC1
  memcached-1.2.6-1.el5.rf
  MySQL-server-5.0.51a-tritonn.1.0.10
  graphviz-2.20.3-1.el5
  graphviz-gd-2.20.3-1.el5
  graphviz-ruby-2.20.3-1.el5

既知の問題
  • wikiのプレビューで編集中の内容をレンダリングできない
    (wikiマクロに編集中の内容を受け取るI/Fがない。。。)
とりあえず上記の環境では動くみたい。