UML スケッチ ツール

2004年6月16日

UML 図をたくさん描きますが、CASE ツールは使いません。その理由は、リポジトリの仕組み全体ではなく、UmlAsSketchに興味があるからです。これまで、私の一般的な選択肢は Visio でした。Visio には UML テンプレートが付属していますが、組み込みのテンプレートは使いません。私はパヴェル・フルビーのテンプレートを好みます。

Visio は私にとって非常にうまく機能しており、今でも私の第一選択です。しかし、別のものに興味を持っていることを認めなければなりません。Visio は Windows でのみ動作しますが、Mac と Unix 系 OS も使用します。そのため、すべて(または実際には一般的なデータ形式)で動作するツールがあるとよいでしょう。私は他の人と共同作業をするのが好きなので、オープンソースであれば、Visio にアクセスできない場合は図を描くことができます。

Mac 上の OmniGraffle を少し触ってみましたが、その機能を十分に評価するには不十分です。ただし、アンチエイリアスされた見栄えの良い出力が生成されます。UMLet も面白いプロジェクトです。

しかしながら、私が最も望むことは、UML 図をテキストとして指定することです。奇妙に聞こえるかもしれませんが、UML 図は図であるため、なぜテキストを使用するのでしょうか。テキストにはいくつかの利点があります。図のレイアウトの多くは、図形式でのみ微調整するのが面倒で、テキスト形式の方がはるかに簡単です。図は編集のメカニズムではなく、視覚化として使用します。また、テキスト形式を使用すると、cvs と diff を使用して時間の経過による変更を追跡できます。

その結果、私はUmlGraphに興味をそそられました。この中で最も惹かれるのは、由緒ある pic プログラムを使用するシーケンス図エディターです。このページは、pic マクロでシーケンス図の素敵なテキスト表現を作成する方法を示しています。もちろん、pic マクロでできることには制限がありますが、さらにコンパクトでわかりやすいテキスト表現を想像できます。

objects 
  thread, t:thread
  tool, :Toolkit
  peer, p:Peer, unborn

trace 
  found: a1:run(3) -> 
    thread: 
      run() -> 
        tool: 
           callbackLoop() -> self
           create -> peer
           handleExpose() -> 
             peer: 
               return      
           delete -> peer

それは私の直感にすぎません。それが実際にどのように効果的かはわかりません。いずれにせよ、UmlGraph をそのまま試して、どのように機能するかを確認する予定です。pic プログラムは非常に小さいため、変更が必要な場合は簡単に調整できます。

UmlGraph のクラス図ジェネレーターは、Java ソースファイルからコードを生成できる点で優れています。ただし、単なる図記法としてはかなり扱いづらいようで、クラスの配置を制御したいと思います。顧客は注文の左にあるなど、十分なものがあります。この図を、次のようなテキストを使用して表すことができます。

layout
  row: Controller, EmbeddedAgent, URLStreamHandler, ChannelIterator
  SetTopController below: URLStreamHandler
  PowerManager below: SetTopController

interface URLStreamHander 
  operations 
    OpenConnection()
    parseURL()
    setURL()
    toExternalForm()

class SetTopController
  specializes
    Controller
    EmbeddedAgent
  implements
    URLStreamHandler
  attributes
    authorizationLevel
  operations
    startUp()
    shutDown()
    connect()
  associations
    -> PowerManager

class ChannelIterator
  dependencies
    -> SetTopController keyword:friend

これもまた私の直感に過ぎません。重要なことは、誰かがこの方向に進んでいることを嬉しく思っており、さらに多くのことを見てみたいということです。

人々が私に教えてくれた、スケッチのようなツールをいくつか紹介します。