Model-based Development に向けて

ビューファイブ LLC
田中 明
a.tanaka@view5.co.jp
2014年11月

自己紹介アーキテクチャやモデリングに関わる標準化活動に携わってきました オープン分散処理参照モデル（RM-ODP @ ISO/IEC JTC1/SC21, 7）
 分散オブジェクト標準化（CORBA @ OMG）
 モデリング標準（UML/UML Profile/MOF … @ OMG）



モデルベースの開発が主流になる日が来ること、モデル標準が普通に使われるようになる日が来ること、を期待して地味に活動を続けています Xtext ユーザ会/Eclipse Modeling Project 勉強会主催

 Eclipse 非会員（但しアクセス頻度高）
 OMG 会員（Influencing Member）

あらすじ
 テーマ
 モデルベース開発に必要となるモデル変換技術
 モデル変換の例

 流れ
 モデル変換の位置付け
 OMG と Eclipse Modeling Project
 モデル変換に関わる Eclipse Modeling 技術
 モデル開発の支援
 事例

モデル変換の周辺“modeling”

業務要件繰り返し（アジャイル）

開発手法

モデル作成 (UML)
モデルモデルモデル
Model to model“development”

モデル変換
PIM/PSM

Model to text
- By hand- By program

ソースコード-生成コード手書きコード実行

プラットフォームプラットフォーム


モデルベース（駆動）開発はプラットフォームに到達しないと完了しません プラットフォーム
適用領域ごとに特性が異なるものが存在○ 日々進化する moving target○ 認識が異なるとモデル駆動の議論が噛み合ない○ モデルベース（駆動）開発（私の解釈）○ モデリングとプログラミング（プラットフォーム）の間のギャップを埋める作業であり、それモデリングとモデル変換を中心に行うこと（モデル→モデル変換、モデル→コード変換）○ もしくは、モデルを解釈・実行する動作環境を用意し、モデルの解釈・実行により所期のシステムを実現すること

モデル変換技術
標準 OMG MOF QVT: Query, View and Transformation (model tomodel) OMG MOF Model to Text (model to text)
オープンソース実装（括弧内は非標準）
 Eclipse QVT (ATL) Eclipse Acceleo (Xpand/Xtend, JET, XSLT, その他各種テンプレートエンジンも)
商用製品
 UMLツール内蔵・アドオン
 単独製品等

UML に基づくモデル駆動開発


多くの人に OMG の MDA はこれと思われている方式
 厳密なUMLモデルを作成する○ 実際に使われるのは、クラス図、コンポーネント図、ステートマシン図、アクティビティ図、配備図など

 モデル駆動○ モデル表現：UML○ モデル変換：MOF QVTなど○ コード生成：MOFM2Tなどを利用○ 現実的にはCIM/PIM/PSMのどれかを作成しそこからダイレクトにコード生成する例が多く見られ、MDAのモデル（M2M）変換がそれほど活用されているようには思えない○ 構造を表現するモデルは扱い易いが、振る舞いを表現するモデルの作成とその変換は難易度が高い

Model to Code 変換 (Acceleo)

標準仕様
OMG MOFM2Text
オープンソース実装
Eclipse Acceleo少し立ち止まってみましょうモデルの繰り返し確認・検証
ドメイン

DSL
プロファイル

メタモデル

知見

ドメイン
モデル

モデル操作

ドメインモデル
開発

関心

共通ベースモデル

メタデータ

モデル変換技術の利用箇所


クラスモデルの妥当性確認
 オブジェクト図やインスタンス図はユーザフレンドリーなものでしょうか？

ユーザインタフェース確認 ユーザインタフェースについてはどのタイミングで議論できるのでしょうか？

<= モデルデータに基づく早い段階でのシミュレーション


モデルに記述した内容が実装に反映されていることの確認 せっかく作ったモデルが実装時に本当に使用されているでしょうか？

<= モデルデータに基づく開発

Eclipse Modeling ProjectEMF(Core)
Server and Storage•••••Graphical Modeling•••

CDO (Connected Data Objects) ModelRepository
EMFStore
Net4j
Teneo
Model Transaction
EMF Client Platform
EMF Forms
Extended Editing Framework
Sirius
GMF
Graphiti

Textual Modeling
•

Xtext

Modeling Tools•••••••••

User Interface•
•
•



BPMN
Ecore Tools
eTrice
MoDiscoOCL
Papyrus
SphinxUML 2.XXML Schema (XSD)

Model Transformation
•••
•
•
•

Acceleo
ATL
EpsilonJET
Model-to-model transformation (ATL, QVT)
Xpand

http://www.omg.org/news/meetings/tc/dc-12/special-events/pdf/overview.pdf

Eclipse でのモデル駆動開発
Eclipseは最初からEMF(Eclipse Modeling Framework)を含んだオープンソースプロジェクト（www.eclipse.org）
 EMFの Ecore は OMG の MOF仕様に含まれるサブセット仕様である Essential

MOF に基づく標準形式
Eclipse Modeling の世界では Ecore モデルが主流（Ecore を使い構築されたUMLツールも有） Ecore モデルの作成○ 専用ダイアグラムエディタ（Ecore Tools）、専用テキスト型エディタ（Xtext, Xcore,etc.）、専用木構造エディタ等を利用 Ecore モデルの利用○ DSL エディタ（GMF, Sirius, Xtext, EuGENia etc.）、UML エディタ（Papyrus etc.）、UI生成、EMF コード生成機能利用コンポーネンツ 等
 Ecore モデルの特徴○ Ecoreモデル図はUML クラス図のサブセット相当でもあり、簡易版クラス図として用いられることがあります。
○ クラス図との比較で出来ること出来ないことを理解しておく必要があります（例：関連クラス、多項関係、ステレオタイプなど記述出来ない）

Ecore モデリングXtext モデリング (ecore)EMF Forms (GUI シミュレーション)

EMF Forms

EMF Forms

EMF Forms

モデル駆動開発の具体例 (eclipse)


具体例に基づき検討することにします モデル：Xtextのサンプルの一つである Xbase 版 DomainModel（UML Class 図のサブセット相当）を使います モデル変換：プラットフォーム対応に直接コード変換することにします プラットフォーム：Spring Bootを使います（実体はSpringMVC）つまり Web アプリケーションを目指しますDomainmodel 定義

www.eclipse.org/Xtext
sample code よりDomainmodel の具体例

グラフィカル表現

テキスト型表現モデル駆動開発の具体例 (eclipse)
Eclipse のモデル変換ツールを利用し、次のような仕組みを実現したいとします モデルを記述すれば Spring Framework 実行環境で動作する仕





組み
ベーシックな Entity モデルを想定し、そこから CRUD システムを生成することにします
モデルからソースを生成する Eclipse のプラグインを作成します
作成したプラグインを STS (Spring Tool Suite) に導入し、Spring Boot プロジェクト（Web + JPA ） で機能させます
Maven を利用しビルドを行います
Boot アプリケーションを実行します（基本的な CRUD 動作が出来れば良しとします）

モデル駆動開発の具体例 (eclipse)
Xtext のサンプルにある Entity/Domain モデルをベースとして利用します Entity に対応する Java コードを生成します○ DomainClass（属性、関連、操作（Xtend言語））○ DomainClassRepository（CRUD 操作）○ DomainController（画面制御）○ 各種import文やアノテーションも生成します○ 生成物を Spring の Project 構造に合わせ配置する仕組みを用意します○ その他：データベース関連

通常は生成が必要なものですが、今回はプラットフォーム側に任せます Entity に対応する デフォルトGUI 定義（html 等）を生成します○ インデックス、一覧、新規、表示、編集、削除
 その他○ Eclipse/Xtext の提供する枠組みを基盤として利用します考えられるツールの用途

クラスモデル（概念モデル等）の検証、そしてユーザとの仕様検討時に利用可能
 インスタンスデータを画面イメージから直接投入し検証できる 「シミュレーション・手直し」という繰り返しにより早期の仕様確定に有効な道具の一つ
 最終形ではないにしろ、ユーザインタフェースのイメージが把握できる
 完成システムの味見使えそうなツール

エンタプライズ系のモデルベース開発で利用出来そうなモデルベース関連ツール
 DSL開発ツール（Graphical DSL/Textual DSL）
 XML文書変換ツール（XSLTなど）
 クラス図の妥当性確認○ UMLツール：インスタンス図作成機能○ クラスモデルからサンプルApp生成○ その他：オンラインUMLエディタ・コードジェネレータ（例：GenMyModel）
 振る舞いの妥当性確認○ BPMNツールのシミュレーション機能（例：BonitaBPM）○ ステートマシンの状態遷移シミュレーション機能

 GUI 設計の妥当性確認○ GUI シミュレーション/モデリング（例：EMF Forms）
 モデル共用機能（例：Eclipse CDO, EMFStore, … github.com,dropbox.com, …）

例：GenMyModel.com

モデル変換の周辺（再）“modeling”

業務要件

GUIベースの仕様
確認・検証等

繰り返し（アジャイル）

開発手法

モデル作成 (UML)
モデルモデルモデル
Model to model“development”

モデル変換
PIM/PSM

Model to text
- By hand- By program

ソースコード-生成コード手書きコードプラットフォーム
実行可能性の追求

最後に

モデルベース開発技術は少しずつ進歩しており利用出来るツールも増えてきています“Eating your own dog food” !!!
 モデルベース開発技術も含めたモデリング技術・ツールを、モデル開発活動自体にもっと活用すべきではないでしょうか？
 システム発注者（お客様）との打ち合わせにも活用できます（シミュレーション）
 触れて操作（シミュレーション）できるものなら、お客様からより多くのフィードバックが期待できるのではないでしょうか

Eclipse にはモデルベース開発で使えるオープンなツールがいろいろあります（玉石混交かもしれませんが） ご利用中の OMG モデリング仕様に対応したオープン実装や使えるものがEclipse に存在するかもしれません --- 是非ご確認ください