モデル駆動開発m2t(Model to Text)
プラグイン

ライセンス : MITライセンス

GroovyのSimpleTemplateEngineを利用して、クラス図、ステートマシン図モデルのソースコードを生成するプラグインです。対応言語は、Java、C++、C#などご自身で設定いただくため制限がありません。
※C++(GR-SAKURA)のサンプルテンプレートが同梱されています。

概要




インストール

  1. 上記Downloadボタンからastahm2t-x.x..jar ファイルをダウンロードします。
  2. .jarファイルを、astah*図上にドラッグ&ドロップします。
  3. プラグイン概要のダイアログが表示されるので[はい]を選択します。
  4. 次に表示されるメッセージに従ってastah*を再起動します。
    astahプラグイン
    ※[プラグイン]メニューは、バージョン7.2以降のみに存在します。 7.1以前をご利用の方はこちら。
  5. メインメニュー[ツール]配下に[m2t]が追加されていることを確認してください。
    astahm2t プラグイン
  6. プラグインインストール後は、下記フォルダが自動生成され、そのフォルダ内にサンプルファイル等が保存されます。
    Windows C:/Users/{username}/.astah/plugins/m2t/
    Mac UserHome/.astah/plugins/m2t/
    astahm2tプラグイン



利用方法

  1. まず、コード生成の設定を行いましょう。 [ツール] - [m2t] - [Settings]を選択して設定画面を表示します。
    設定を行わず、プリインストールされたサンプルファイルで出力を試したい場合は、 こちらから。
    astahm2tプラグイン
    1. 設定名 ソースコードの生成方法を設定します。
    [Add]を押して、設定名を入力します。設定を削除する場合は[Remove]を押します。
    2. Template Dir テンプレートファイルの保存場所を指定します。(テンプレートファイルの生成はこちら)
    複数のテンプレートを管理する場合は、templatesフォルダ下に設定ごとのフォルダを作成してテンプレートを保存してください。
    - Windows: C:/Users/{username}/.astah/plugins/m2t/templates/
    - Mac: UserHome/.astah/plugins/m2t/templates/
    3. Destination Path ソースコードの出力先ディレクトリを指定します。
    4. Template Mapping コード生成のテンプレートをマッピングします。コード生成のパターンは次の3種類です。

    Default

    ステレオタイプを持たないクラスの出力設定。拡張子とテンプレートファイルを指定して、{クラス名}.{拡張子}のファイルを生成します。

    Global

    プロジェクト共通のソースコード出力設定。ファイル名とテンプレートファイルを指定して、{ファイル名}のファイルを生成します。

    Stereotype

    コード生成対象のクラスが持つステレオタイプ毎の出力設定。ステレオタイプ、拡張子、テンプレートファイルを指定して、{クラス名}.{拡張子]のファイルを生成します。
    参考 テンプレートファイルの生成方法は、こちらをご参照ください
  2. ソースコードを生成したいファイルを開き、[ツール] - [mt2] - [Generate]をクリックします。
    astahm2tプラグイン
  3. [Code Generation is Complete.]ダイアログが表示されたら、ソースコードの生成は完了です。
    astahm2tプラグイン



サンプルを使って試す

  1. ~/.astah/plugins/m2t/フォルダ内にあるサンプルファイル「LED-Camp3Sample.asta」を開きます。
    このファイルには、クラス図とステートマシン図が1つずつ存在し、Controllerクラスにはステートマシン図が定義されています。
    astahm2tプラグイン astahm2tプラグイン
  2. [ツール] - [mt2] - [Generate]を選択します。
  3. 正常に出力完了すると[Code Generation Complete.]メッセージが現れます。デフォルトの出力先は、ユーザーディレクトリです。

例:出力したController.cppコード

#include "Controller.h"
Controller::Controller(){
	controller_state=Wait;
	create2 = iRobotCreate2::getInstance();
	timer = Timer::getInstance();
	create2->safeMode();	// initial entry action
	create2->drive(0,0);	// initial entry action
}
Controller::~Controller(){}

void Controller::transition(Event event){
	switch(controller_state){
	case Controller::Wait:
		if((create2->getSensor()->bumpsWheeldrops&1) && ChangeBumperRight==event){
			controller_state = Controller::Forward;
			create2->drive(100,0);	// entry action
			create2->setNextDistance(200);	// entry action
		}
		break;
	case Controller::Forward:
		if(ReachDistance==event){
			controller_state = Controller::Turn;
			create2->drive(100,-1);	// entry action
			create2->setNextAngle(-180);	// entry action
		}
		break;
	case Controller::Turn:
		if(ReachAngle==event){
			controller_state = Controller::Wait;
			create2->safeMode();	// entry action
			create2->drive(0,0);	// entry action
		}
		break;
	default:
		break;
	}
}