uml
astah

astah APIをjjsを使って楽に呼び出す

つまり astah を起動せずに JavaScriptで 楽々 astahAPI

astahAPI と JavaScript

UMLツールのastahにはAPIが昔から提供されており、UMLモデルからデータを読み出すことができます。(Professional版やUML版なら、書き込むことも可能。)
これによって、Javaのプログラムを作成することでちょっとしたコード生成などできます。
astah API : http://astah.change-vision.com/ja/astah-api.html

また、プラグインを使用するとJavaScriptでAPIを使用して手軽にできるようになっています。
astah script plugin : http://astah.change-vision.com/ja/feature/script-plugin.html

astah を起動せずに JavaScript から APIって使用できないの?

ある時(2年前ぐらい)、作成した複数のastahファイルからデータを抜き出したいのだけれども、いちいちastahを起動してプラグインを実行するのも面倒だなぁと思っていました。チェンジビジョンのastahサポートへ問い合わせをしたところ、とても使い勝手の良い回答をいただきました。(動作保証はないとのことでしたが、快適に動作しています)
それは、Javaに付属のjjsを使用するという方法。
jjsとは → https://docs.oracle.com/javase/jp/8/docs/technotes/tools/unix/jjs.html

環境

OS : Windows (おそらく、MacでもLinuxでも可能だと思います)
astah : Community or Professional
java JDK : jjsが付属の8.0以上

用意するファイル

astah APIを使用するJavaScript と 次の2ファイル を用意します。

openProject.js
var AstahAPI = Java.type("com.change_vision.jude.api.inf.AstahAPI");
var astah = AstahAPI.getAstahAPI().getProjectAccessor();

var projectPath = arguments[0];
astah.open(projectPath, true, false, true);
closeProject.js
astah.close();

jjsへの引数の与え方

jjs.exe -cp astah-api.jar;astah-community.jar openProject.js hoge.js closeProject.js -- fuga.asta

こんな感じでjjsの引数に与えることで、fuga.astaに対してhoge.jsを実行できます。

実行例

しかしながら、JAVA_HOMEとかjjsの場所とかastahのライブラリも必要なので、自分の場合、以下のようなbatを作成しています。
astahのライブラリは、ローカルフォルダへコピーしてます。(もっと良い方法があるのかも)

  • cmdを起動したときに1回実行するbat
initial.bat
@rem ここの環境変数を各自の環境に合わせて書き換えてください。
set JAVA_HOME="C:\Program Files (x86)\Java\jre1.8.0_131"
set ASTAH_HOME="C:\Program Files\astah-community"
@rem set ASTAH_HOME="C:\Program Files\astah-professional" ←Professional版の場合

echo Now, setting
xcopy %ASTAH_HOME%\lib .\lib /D /I
copy %ASTAH_HOME%\astah-api.jar .\ /Y
copy %ASTAH_HOME%\astah-community.jar .\ /Y
@rem copy %ASTAH_HOME%\astah-pro.jar .\ /Y  ←Professional版の場合
EXIT /B
  • たとえば、クラス一覧を出力するjs
list_Classes.js
with(new JavaImporter(com.change_vision.jude.api.inf.model)) {
  classes = astah.findElements(IClass.class);
  for(var i in classes) {

    if(classes[i] instanceof IUseCase) {
    } else {
      print(classes[i].getFullName("::"));
    }
  }
}
  • list_Classes.js を実行するbat
print_Classes.bat
@echo off
%JAVA_HOME%\bin\jjs.exe -cp astah-api.jar;astah-community.jar ^
openProject.js list_Classes.js closeProject.js -- %1

上記を用意しておいて、次のように実行すると複数のastahファイルのクラス名を簡単にテキストに出力できます。

print_Classes.bat sample1.asta > classes.txt
print_Classes.bat sample2.asta >> classes.txt
print_Classes.bat sample3.asta >> classes.txt
:
:

謝辞

問い合わせた際に回答いただいたチェンジビジョンのサポートの方、及び、快く内容を公開してもよいと承諾くださった営業の方、ありがとうございました!