DITAA使ってみました

MOONGIFTさんで紹介されていて、面白そうだったので使ってみました。ダイアグラムなどのAAをPNGフォーマットの画像に変換してくれるツールです。サイトはこちらです。http://ditaa.sourceforge.net/

使い方

とりあえず使ってみるだけの説明です。

Downloadのリンクから、下のjarファイルをダウンロードします。

The executable-only (no code) jar file can be found here: ditaa0_6b.jar (178 kb)

ditaa0_6b.jarというファイル名は扱いが面倒なのでditaa.jar辺りにリネームします。

Javaのパスを通してコマンドラインから、

java -jar ditaa.jar [オプション] 入力ファイル [出力ファイル]

こんな感じで変換できます。

例えば、アスキーアートをtest.txtファイルにコピペして、

java -jar ditaa.jar -E -o test.txt

これでtest.pngが生成されます。

とりあえず使ってみました

実行にはJava1.5を要求していますが、手元のJava1.4.1で動かしてみました。そのため問題が出ている所があるかもしれません。

状態遷移図
           b                          b
          /-\ /------------------------------------+
          | | |                                    |
          v | v                                    |
         /-----\      /-----\      /-----\      /-----\
  Start  |     |  a   |     |  b   |     |  b   |/---\|
 *------>|  0  |----->|  1  |----->|  2  |----->|| 3 ||
         |     |      |     |<-----|     |      |\---/|
         \-----/      \-----/  a   \-----/      \-----/
                       ^ | ^                       |
                       | | |                       |
                       \-/ \-----------------------+
                        a             a

                  "(a|b)*abb" DFA


それなりです。"(a|b)*"のバーチカルバーが図形に変換されているのと、アスタリスクが消えてしまっています。

クラス図
 +----------+        +----------+
 | symbol   |        | alpha    |
 +----------+0..*   1+----------+
 |          +------<>|          |
 +----------+        +----------+


アスタリスクが消えてしまうので、多重度の表現に難ありです。集約と合成については、矢じりを使って表現するしかなさそうなので、現状、合成しか表現できません。

シーケンス図
 +-----------+ +-----------+               +-----------+
 | :Invoker  | | :Client   |               | :Receiver |
 +-----+-----+ +-----+-----+               +-----+-----+
       :             :                           :
       |             |                           |
      +++            |                           |
      | |           +++ New  +-----------+       |
      | |           | +----->| :Command  |       |
      | |           | |      +-----+-----+       |
      | |           | |            :             |
      | |           | |            |             |
      | | Execute   | |           +++            |
      | +-----------+-+---------->| | Action    +++
      | |           | |           | +---------->| |
      | |           | |           | |           | |
      | |           | |           | |<-=--------+ |
      | |<-=--------+-+--=--------+ |           +++
      | |           | |           +++            :
      +++           +++            :             |
       :             :             |             |
       |             |             |             |


いい感じですが、一部ごまかしがあります。破線を使って箱の上を越える表現ができないので、箱の分割を使ってごまかしてます。

プログラム例示
 Iterator class
 +-------------------------------------------+
 |    package Iterator;                      |
 |    use strict;                            |
 |    use warnings;                          |
 |                                           |
 |    sub new                                | 
 |    {                                      |
 |        my ($class, %data) = @_;           |
 |        my $subref = sub{ each %data; };   |
 |       +-----------------------------+  +--+------+
 |       |return bless $subref, $class;|<-+ "bless" |
 |       +-----------------------------+  +--+------+
 |    }                                      |
 |                                           |
 +-------------------------------------------+


イコールが消えて後ろのコードがセンタリング、箱の中もセンタリングされてしまってます。惜しいですが、様々な場面で使える可能性を示してくれています。

アスキーアート
 /------------------------------\
 |++----+\+------+/-----\/-----\|
 ||+----\|+--\/--+|/---\||/---\||
 |||    ||/\ ||   ||   ||||   |||
 |||    ||\/ ||   |++  |||++  |||
 |||    ||++ ||   |\+--+||\+--+||
 ||+----/||| ||   |/---\||/---\||
 |++-----/++ ++   ++   ++++   ++|
 \------------------------------>

    <-------------------------
    DIagrams Through Ascii Art
    ------------------------->


使い方次第で、面白い事ができそうです。AAを作るのは面倒ですが、余分な知識も要らず扱えるのがいいですね。正式リリースが楽しみなツールです。