S-JIS[2013-12-22/2015-12-29] 変更履歴

DMDL EditorX

ひしだま作の、Asakusa FrameworkDMDLを書く為のエディター(Eclipseプラグイン)です。


概要

DMDL EditorXは、Asakusa FrameworkのDMDLを書く為のエディターです。
Xtextを用いて作っているEclipseプラグインです。

Eclipse4.3(KEPLER)で作っていますが、Eclipse3.7でも動くと思います。
AsakusaFWの対応バージョンは0.4以降です。(エラーチェック・コンパイル関連以外はそれより古いバージョンでも動作するかもしれませんが)

主な機能は以下のようなものがあります。


インストール方法

DMDL EditorXはEclipseプラグインなので、更新サイトからインストールできます。
また、Xtextを利用しているので、Xtextをインストールする必要があります。

  1. Xtextをインストールする。
  2. DMDL EditorXをインストールする。
  3. Eclipseを再起動する。
  4. 適当なdmdlファイルを開く。

※インストール方法の詳細は、AsakusaFW本家のJinrikishaのDMDL Editorプラグインの紹介ページの方が詳しいです(笑)

※DMDL EditorXは、Eclipseプラグイン内のXtextネイチャーにワークスペースのプロジェクトを自動登録します。登録しないとXtextの機能の一部が使えない為です。この暗黙の登録は、dmdlファイルを開いたとき等に行われます。
(最初は自動登録していませんでしたが、登録するかどうかを聞くダイアログが開くので、その方が面倒だと思って自動登録するようにしました)


Xtextネイチャーの指定

デフォルトでは、Shafu(Jinrikisha)を使ってEclipseプロジェクト情報の再構成を行う(あるいは「graldew eclipse」を実行する)と、Xtextネイチャーの情報が消えます。[2015-12-29]
この状態だと、Xtextに依存している一部の機能(例えばデータモデルクラスからdmdlファイルへのジャンプ)が使えません。
適当なdmdlファイルを開く(既に開いている場合は一旦閉じてから開き直す)とXtextネイチャーが登録され、機能が使えるようになります。
(パッケージエクスプローラー上でプロジェクトのアイコンに「X」が付いているとXtextネイチャーが登録されている状態です。登録されていないと「J」(通常のJavaプロジェクト)になっています)

Eclipseプロジェクトの再構成を行う度に毎回このような状態になるのは面倒なので、Asakusaプロジェクトのbuild.gradleに以下の設定を加えておくことをお勧めします。

eclipse {
    project {
        natures 'org.eclipse.xtext.ui.shared.xtextNature'
    }
}

この設定を加えておくと、Eclipseプロジェクト情報の再構成を行ってもXtextネイチャーの登録が解除されなくなります。


バージョンの指定方法

今のところ、AsakusaFWのバージョンが変わってもDMDLの文法の変更はありません。
が、AsakusaFWのバージョンが違うとライブラリーの配置方法が異なる為、DMDLのエラーチェック・コンパイルの際のライブラリーの指定方法が変わります。

基本的にはDMDL EditorXの中で自動的にAsakusaFWのバージョン確認とライブラリーの準備を行っていますが、明示的に指定することも出来ます。

  1. パッケージエクスプローラー上でプロジェクトを右クリックしてコンテキストメニューを開き、「プロパティー(R)」を選択してプロパティーダイアログを開く。
  2. 左側のツリーから「DMDL EditorX」→「Asakusa Framework wrapper」を選択する。
  3. 右側の領域でAsakusaFWのバージョンを選択し、「適用(A)」ボタンを押す。
  4. 左側のツリーから「DMDL EditorX」→「Asakusa Framework wrapper」→「DmdlParser」を選択する。
  5. 各設定を入力して「適用(A)」ボタンを押す。
    項目 説明
    build.properties path build.propertiesファイルのパス。プロジェクトディレクトリーからの相対パスで指定します。
    (build.propertiesと言いつつ、Gradle版ではbuild.gradleを指定したりします)
    jar files (classpath) DMDLのエラーチェック・コンパイル時に使用するライブラリー(jarファイル)を指定します。
    AsakusaFW0.4でsandboxにある機能を使う場合はここでjarファイルを追加する必要があります。
    AsakusaFW0.5ではプロジェクトのビルドパスにjarファイルが含まれているので、ここで指定する必要はありません。

DmdlParserページで「デフォルトの復元(D)」ボタンを押すと、バージョンに応じた内容が復元されます。
(事前にAsakusa Framework wrapperページでバージョンを選択して「適用(A)」ボタンを押しておく必要があります)


操作方法

入力補完

キーワードを入力する箇所(レコードモデルのデータ型とか)でCtrl+Space(Windowsの場合)を押すと、キーワードの入力補完が出来ます。

※今のところ、属性(@から始まるやつ)の入力補完は出来ません。


ソースの整形

Ctrl+Shift+Fでソースを整形することが出来ます。

また、プロジェクトのプロパティーページまたはEclipseの設定ページの「DMDL EditorX」で、dmdlファイル保存時にソースを自動整形するかどうかを指定できます。[2014-04-24]


ハイパーリンク

ハイパーリンク機能で、定義元にジャンプしたり使用箇所を検索したり改名したりすることが出来ます。

例えば以下のような結合モデルで

joined joined_sales_info = sales_detail -> {

    item_code -> item_code;

    amount -> amount;

    selling_price -> selling_price;

} % item_code
+ 〜

結合元データモデル名(sales_detail)をCtrlキーを押しながらマウスでクリックすると、sales_detailを定義している行にジャンプします。
同様に、「->」の左側のプロパティー名でも定義元にジャンプできます。
同じく、「%」の右側のプロパティー名でも、結合モデル内の定義箇所にジャンプできます。


また、逆に、sales_detailを定義している方で

sales_detail = {

    "売上日時"
    sales_date_time : DATETIME;

    "店舗コード"
    store_code : TEXT;
〜
};

データモデル名やプロパティー名で右クリックしてコンテキストメニューを開いて「Find References(Ctrl+Shift+G)」を選択すると、
そのデータモデルやプロパティーを使用している箇所を検索できます。(Searchビューが開く)

同様に、コンテキストメニューで「Rename Element(Alt+Shift+R)」を選択すると、
そのデータモデル名やプロパティー名を変更できます。参照している箇所も連動して変更されます。


階層表示

データモデルの合成元と合成先を表示することが出来ます。[2014-02-23]

データモデル名で右クリックしてコンテキストメニューを開いて「Open DataModel Hierarchy」を選択すると、そのデータモデルの合成元や合成に使われているデータモデルをツリーで表示するビューが開きます。
また、この機能はF4キーにも割り当てられています。[2014-02-25]

ビューの上半分はデータモデルのツリーです。
「Show the Super Model Hierarchy」ボタンを押すと、合成元のデータモデルのツリーが表示されます。
「Show the Sub Model Hierarchy」ボタンを押すと、合成に使われているデータモデルのツリーが表示されます。

ビューの下半分はデータモデルのプロパティー一覧です。
ツリーで選択したデータモデルのプロパティーが表示されます。
「Show All Properties」ボタンをオフにすると、該当データモデルで直接定義されているプロパティーのみを表示します。
オンになっていると、参照(合成)元のデータモデルから継承したプロパティーも含めて全プロパティーを表示します。


DMDLのエラーチェックおよびコンパイル

Xtextの機能により、(入力途中でも(少し遅延はしますが))文法エラーにはエラーマークが付きます。

その他に、AsakusaFWのDMDLパーサーを実行してエラーチェックを行うことが出来ます。
ツールバーの一番左のボタンを押すとエラーチェックを行い、エラーがあったらエラー箇所にエラーマークを付けます。

左から2番目のボタンを押すと、AsakusaFWのDMDLコンパイラーを実行してコンパイルを行います。
エラーがあった場合は一番左のボタンを押したときと同じくエラーマークが付きます。

※DMDLパーサー(コンパイラー)を起動する為に、jarファイルを指定する必要があります。クラスが見つからない系の例外が発生した場合は、jarファイルの指定を確認して下さい。


Xtextの機能によるエラーでは、エラー原因を解消すると自動的にエラーマークは消えますが、
DMDLパーサー(DMDLコンパイラー)で出たエラーについては、再度エラーチェック(コンパイル)を行わないと消えません。


Javaソースからのジャンプ

Operator DSL(Operatorクラス)上でモデルクラスを使っている箇所から、定義元のDMDLファイルにジャンプすることが出来ます。

例えば以下のようなメソッドにおいて、

	@MasterSelection
	public ItemInfo selectAvailableItem(List<ItemInfo> candidates, SalesDetail sales) {
		DateTime dateTime = sales.getSalesDateTime();
		dateBuffer.setElapsedDays(DateUtil.getDayFromDate(dateTime.getYear(), dateTime.getMonth(), dateTime.getDay()));
		for (ItemInfo item : candidates) {
			if (item.getBeginDate().compareTo(dateBuffer) <= 0 && dateBuffer.compareTo(item.getEndDate()) <= 0) {
				return item;
			}
		}
		return null;
	}

モデルクラスモデルクラスのセッター/ゲッターメソッドをCtrlキーを押しながらマウスでホバーし、「Open DMDL」を選択すると 定義元のDMDLファイルにジャンプします。

この機能はShift+F3キーにも割り当てられています。[2014-01-17]


@Keyで指定しているプロパティー名からも、同様にDMDLファイルにジャンプすることが出来ます。[2014-02-22]

例えば以下のようなメソッドにおいて、

	@MasterCheck
	public abstract boolean checkStore(
		@Key(group = "store_code") StoreInfo info,
		@Key(group = "store_code") SalesDetail sales);

@Keyのgroupで指定しているプロパティー名部分の文字列をCtrlキーを押しながらマウスでクリックすると、定義元のDMDLファイルにジャンプします。
また、プロパティー名部分の文字列にマウスをホバーさせると、プロパティー名やデータ型のツールチップが表示されます。

(→ツールチップ(テキストホバー)の実装方法


また、DMDLとは関係の無い機能なのですが^^;、
Flow DSL(ジョブフローやフロー演算子クラス)上のOperatorのメソッドから、Operatorクラスにジャンプすることが出来ます。(AsakusaFW0.5以降)
(Flow DSLで使っている演算子は(Operatorから生成された)OperatorFactoryクラスなので、通常ではFlow DSLから直接Operatorクラスにジャンプすることは出来ない)

例えば以下のようなFlow DSLにおいて、

	@Override
	public void describe() {
		CategorySummaryOperatorFactory operators = new CategorySummaryOperatorFactory();
		CoreOperatorFactory core = new CoreOperatorFactory();

		CheckStore checkStore = operators.checkStore(this.storeInfo, this.salesDetail);
		JoinItemInfo joinItemInfo = operators.joinItemInfo(this.itemInfo, checkStore.found);
		〜
	}

OperatorFactoryのcheckStoreやjoinItemInfoメソッドをCtrlキーを押しながらマウスでホバーし、「Open Operator」を選択すると 定義元のOperatorクラスにジャンプします。


同様に、マスター結合等の演算子でマスター選択を指定している箇所(selection = "メソッド名")から、該当メソッド(@MasterSelectionが定義されているメソッド)にジャンプすることが出来ます。[2014-02-22]

例えば以下のようなOperator DSLにおいて、

	@MasterJoin(selection = "selectAvailableItem")
	public abstract JoinedSalesInfo joinItemInfo(ItemInfo info, SalesDetail sales);

@MasterJoinのselectionで指定しているメソッド名部分の文字列をCtrlキーを押しながらマウスでクリックすると、定義元のメソッドにジャンプします。


自作ソフトへ戻る / 技術メモへ行く
メールの送信先:ひしだま