コミュニケーション図を
シーケンス図に変換する
スクリプトを3時間で
書いた話
チェンジビジョン りりぃ
コミュニケーション図をシーケンス図に変換するスクリプト
CommunicationDiagramToSequenceDiagramConverter.java
今回は急に降って湧いてきたアイディアでした。
SysMLにコミュニケーション図は無いし、PlantUMLにも無いよね。
じゃあコミュニケーション図はシーケンス図に変換できたほうが色々便利かな?
簡単にできそうだし作ってみるか。
私の作りたい物のヒント
● 自分がいかに仕事で楽したいか。欲しいものを作る
● ユーザーの要望から。役に立ちそうなものを作る
作りたいものを考える
どうやったら実現できるか考える
astah* API 利用ガイド の
対応モデル/プレゼンテーシ
ョン一覧を見て
どんな構成になっているか
想像します。
両図でライフラインと
メッセージが使われている
ので、その情報だけあれば
十分と判断。
http://members.change-vision.com/javadoc/astah-
api/8_3_0/api/ja/doc/model_and_presentation.html#%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9%E
5%9B%B3%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83
%B3%E5%9B%B3
作る準備
少し手が込みそうなスクリプトは
スクリプト言語だとちょっとめんどくさいのでjavaで書くことにしました。
いちから作るのもめんどくさいので
APIサンプルを複製し、ファイル名等を調整、不要な処理を削除。
今回は astah*のインストールフォルダ¥api¥sample¥simpleDgmEdit を元にしました。
開くプロジェクトファイルパスはフィールドに定義してありましたが
mainメソッドの引数でを受けるようにしてみました。
何があってもプロジェクトを閉じて終わるように
finally に prjAccessor.close(); を書きました。
シーケンス図を作る
コミュニケーション図を検索し、同じ名前空間に同名のシーケンス図を作成
操作の下の場合、名前空間はその親のクラスになるので
ちょっと違う位置に生成されましたが気にしない
(ちなみに構造ツリーのフィルタリング機能は私が実装しました)
ライフラインを作る
コミュニケーション図のライフライン
と同名のライフラインを作成
ベースクラスも取得できるので指定
色もプレゼンテーションから取れます
位置は適当な値で
インクリメントしています
メッセージを作成(順番は適当)
メッセージの情報から
メッセージを作成します
ライフラインリンクの情報が
なくてもメッセージから
必要な情報が全部取れました。
順番や実行仕様が
めちゃくちゃですが、
実装を始めてここまでで
40分くらい。
メッセージをソートする
メッセージのインデックスの
情報から順番をソート。
適当にソートしたらちょっとミスってて
後で少し直した(画像は修正後)。
まだ実行仕様が
つながっていないので
インデックス番号は不正。
実行仕様をつなげる
元のメッセージから
起動メッセージが取得できるので
それを利用して実行仕様を
繋げます。
インデックス番号が適切に。
ここまでが3時間弱。
最終調整
実行仕様がなるだけ重ならないように、
かつ、図が大きくなりすぎないように
出力位置を調整。
これが地味に一番時間かかりましたが
3時間に含めません(こら)
感想
astah*のAPIやUMLの仕様がすでに頭に入っているのが大きいかもしれないけど
少しずつ進めることで3時間でスクリプトを作ることができた。
ほぼmainメソッドにベタ書きしていて、あくまで自分用のプロトタイプ。
とりあえず動けばいいならこれで良し。
テストコードは今回書かなかったけど書いたほうが良いです。
処理毎にメソッドを抽出してあると書きやすいはず。
スクリプトプラグイン用に書き換えたらもっと使いやすいかもしれない。
おまけ(過去に書いたもの)
● Astah Script プラグイン サンプルコード(Java7用)
● Astah Script プラグイン サンプルコード(Java8用)
● astah* API サンプルコード
● m_lily | astah in 5 min
ご清聴ありがとうございました。

コミュニケーション図をシーケンス図に変換するスクリプトを3時間で書いた話