Eclipse M2M変換について

2013年2月22日の夜にEclipse Modeling勉強会を実施し、そこでEclipseのモデル変換の幾つかを説明する機会がありました。題材はATLがよく例題としてプレゼンで使うFamilies to Personsです。私は主にQVTを担当しましたが、事前にATLの動作も確認しましたので、ちょっと感想を書かせて貰います。

動作の検証を行ったのは、Juno版ModelingパッケージにATLとQVToを入れたもの、Indigo版Modelingパッケージにmedini QVTを入れたもの、そしてJuno版のXtextディストリビューションです。他に、エディタしか動作しませんが、EclipseのQVTrとQVTcも入れてみました。

ATLで良く知られている例題(何々家の家族というモデルを、男性と女性の二種類からなる個人モデルに変換)ですのでこれを基準にします。

  • ATL自体のケースについては、メインのルール記述は分かり易いのですが、最初の頃はhelper機能の切り出し方が良く分かりませんでした。研究分野ではかなり使われていますし、最近は管理を地元?ベンダに移管した模様です。
  • QVToは確かに手続き言語的ですが、記述内容はATLとほとんど同じレベルで、特にOCL記述はATLのものがほぼそのまま利用できました。安定して動作するようですし、ATLとの間では比較的容易に相互に移行できそうです。
  • medini QVTはQVT Relationsなので、パターンマッチングの記述箇所に特徴的なところがあります。それでもクエリについてはQVTo同様にATLのOCL記述が(多少違いがありますが)結構近いものになりました。実績もありますので、このスタイルの記述がお好きな方は使えると思います。
  • Xtextといっても変換にはXtendを使います(勉強会当日はまだ完成していませんでしたが、三日後に動くようになりました)。Xtendは軽くJavaをラップしたものなので、変換を実現するクラスもどこかJavaコードの雰囲気が漂っています。このコードだけで動作すれば良いのですが、Xtextの仕組みにのせるため結構面倒なことになってしまいました。結果的に、Xtendでモデル変換も記述できますが(利用者にとっては)専用言語を実装したATL/QVTo/QVTrの方が楽だろう、というのが私の感想です。ただ、見栄え的にXtendの実行結果は面白いので、画像を入れておきます(左側のXtextエディタでFamilyモデルを作成しワークフローを実行すると右側のxmi形式のデータが生成されます)。

Xtend M2M

いずれの場合についてもモデル変換ロジック構築の考え方を説明したものがなく、現状はサンプルから学べという状況です。ユーザガイドやチュートリアルに、こういう考え方で書けば良いというガイドがあれば良いかと思った次第です。

最後に勉強会のサイトは こちら にあり、当日の資料類もそこに置いてあります。

Eclipse M2M変換について

BPMとSOAの比較について

先日ある学会でちょっとした発表をしてきました。次はSlideShareに掲載した発表スライドです(一部手を入れています)。

  1. Experiment on BPM and SOA transformations
中身ですが、分散型の企業ITシステムの構築で現在主流のBPMベースとSOAベースの二つについて、Buy-Sell-Shipモデルを例として別々にアーキテクチャモデルを作成し、モデル変換をツールとして用い、どの程度変換可能かを調べる事でBPMとSOAの違いを少しでもあぶり出そうというものです。モデル作成とモデル変換ではXtext/Xpandを使っています(versionは1.0です)。
BPMとSOAの比較について

M2M変換について

最近までテキスト型DSLを使いM2T変換でM2M変換を行っていましたが、やはりきちんとM2Mしないといけないと思い試行中です。

M2M変換のベースとなる仕様はOMGのMeta Object Facility (MOF) 2.0 Query/View/Transformationです。 そして実装のうち簡単に入手できるのは

  1. eclipse Model To Model (M2M) にある
  2. M2M/Operational QVT Language (QVTO)

です。 QVTOの実装では他にも知られたものがあります。 ただ、研究領域で最も広く使われているのは、同じ場所に並んでいる

  1. ATL Transformation Language

の方だろうと思います。 そこでQVTOを少し試してみたのですが、一つ面白い(いえ、むしろ面白くない)ことを発見しました。 入力側メタモデル、出力側メタモデル、そして入力モデルを指定して変換を行い出力モデルを作成します。 メタモデルは通常のecoreで良いのですが、どうも入力モデル(XMI)の形式について余り自由度を認めていません。 M2Tで使えたXMIでも形式不正と言われてしまいました。 試した結果ecoreモデルをもとにdynamic instancesとして作成したXMIであれば大丈夫でした。

M2Mは面白い技術なのですが、今のところ苦労の割に得られるものが少ないような気がします。 どこかに良い適用領域が見つかればビジネスにもなるのかもしれませんが、まだ思いつきません。

M2M変換について