Xtext And Grails20091218
-
Upload
akira-tanaka -
Category
Technology
-
view
1.596 -
download
1
description
Transcript of Xtext And Grails20091218
モデリングと Grailsのあやしい関係
はじめに
• 今回ご紹介する考え方・方式やツールは必ずしも Groovy/Grails専用のものではありません
– Groovy/Grails の世界にも適用可能で、後半でGrailsとの対応付けを試みました
–余り期待せず「こんな世界もある」ということで、気楽に聞いてください
自己紹介
ブログ
仕事
モデル駆動ソフトウェア開発(MDSD)
• 主題はModel Driven Software Developmentです。
–モデルをソフトウェア開発につなげるという考え方や開発手法
–欧州(独・仏・英ほか)で研究開発が活発
• まずは雰囲気を理解して貰うための例題から入ります。
ソーシャルネット(Twitter/LinkedIn)
フォロー
フォロー
コネクト
コネクトCathyさん
山田さん
鳩山さん
誰かさん
ソーシャルネットモデルエディタ
当エディタはEclipse GMF で作成
ソーシャルネットメタモデル
Eclipse GMF へのインプットデータ
モデル
• モデル(Model) 名詞 (出典:Wiktionary)
– “A simplified representation (usually mathematical) used to explain the workings of a real world system or event.”
– “The structural design of a complex system.”
• 単純化する(Simplify) 動詞 (同上)
– To make simpler, either by reducing in complexity, reducing to component parts, or making easier to understand.
• モデリングとは関心事以外の詳細を切り捨て単純化した結果(モデル)を作る作業– 詳細をドロップしているため、プログラム・ソースコードの世界とちと違います
モデリング言語
• 汎用(標準)モデリング言語– Unified Modeling Language (UML)– 特徴
• グラフィカル言語(テキストより全体像を把握しやすい)– 実際は要素数がある程度まで
• カバレッジが広い(広すぎる)
• 特定用途向モデリング言語– Domain Specific Language (DSL)– 特徴
• 特定用途に最適化(カバレッジが狭い)• グラフィカル言語もテキストベース言語もある• 標準になるもあるが誰でも作成可能
DSL の分類
• Internal DSL と External DSL– Internal: 母体となるプログラミング言語を持つ
– External: プログラミング言語独立
• Graphical DSL と Textual DSL– Graphical: ダイアグラムベース (BPMNなど)
– Textual: テキストベース (GroovyやRubyのDSLなど)
• DSLについての一般的な説明・議論についてはWikipediaとmartinfowler.comへどうぞ
モデル駆動ソフトウェア開発(MDSD)
• Model Driven Software Design/Development/Engineering (MDD, MDA, MDE, MBD, … ) ---言い方多数有
• モデルとソースコードをつなげる仕組み(試み)• モデルは「UMLモデル」だけでない
– DSLに基づくモデル– UML Profile(UML拡張)を適用した拡張UMLモデル など
• モデルの作成– DSL/UMLモデルエディタ– モデル作成→{モデル変換}* もある
• モデルのテキストへの変換(コード生成)– モデル→ソースコード変換
Meta Object Facility (MOF)
4階層メタモデルアーキテクチャ
メタメタモデル
メタモデル
モデル
インスタンス
UML, BPDM/BPMN, BMM, CWM, …
UML モデル, BPMNモデル, …
M0
M1
M2
M3
標準仕様の世界
ユーザが作成したモデル(データ)
4階層メタモデルアーキテクチャ
メタメタモデル
メタモデル
モデル
インスタンス
Eclipse Modeling Framework (EMF), …
M0
M1
M2
M3
UML tools, BPMN tools, …
標準実装の世界
4階層メタモデルアーキテクチャ
メタメタモデル
メタモデル
モデル
インスタンスM0
M1
M2
M3
プログラミング言語を用いて書かれたプログラム(例:Grails Apps)
EBNF
Java, Groovy, Grails, Scala, …言語仕様
プログラミング言語
言語設計用言語
悪乗り
ということで
• 「モデリング」と「プログラミング」は実は近そう
• どちらも抽象化により下位の詳細を隠蔽– プログラミング言語は機械語を隠蔽– モデリング言語はプログラミング言語を隠蔽
• プログラミング言語には対応するコンパイラやインタープリタがある
• モデリング言語にはどうして対応する何かが無いの?– モデル駆動開発(MDSD)
実例に基づいて
• ソーシャルネットワークと Grailsで考えます
Grails メタモデル
• Grails言語仕様
–プログラミング言語は通常 EBNF 等で規定
• 残念ですが、私はまだ Grailsの EBNFによる Grails言語(Framework?)規定をWeb 上で見つけていません
– あれば助かったのですが・・・
– ご存じの方おられれば是非教えてください
• とりあえず、どこかに存在するものと勝手に想定しておきます
期待する Grails との対応付け
• モデルに基づき(可能な範囲で)– Grails の Domain Classを導きたい– Grailsの Controller を導きたい– Grailsの Viewを導きたい
• そのためには– モデリングツールの準備要
• Grails 対応 Profile を組み込んだ UMLツールまたは Grails 対応DSLツール
– コード生成支援ツールの準備要• コード編集支援ツール• コード生成ツール
UML利用の場合
• 純粋UMLではGrailsのセマンティクスを表現できません
• Grails のメタモデルとそれに基づく UML Profile が必要です– Grails特有の概念をUMLモデルとして記述するための規定(標準はありません)
– UMLツールにこの拡張(Profile定義)を組み込む– 例
• Grails ドメインクラス→ UMLクラス• Grails Web Flow → UML状態遷移図やアクティビティ図• Grails View → UMLクラス
ツールについて
• 最初に eclipse/GMF の例を見て頂きましたが、
ここからはドイツのオープンソースプロジェクトが推進している、相互に関連を持つ2種類のツールについて紹介します
– eclipse/Xtext(旧openArchitectureWare)
– Fornax-Platform の Grails Cartridge
• 話の都合により後者から説明します
Fornax-Platform: Grails Cartridgeご存じだった方おられますか?
Fornax-Platform: Grails Cartridge
• この Cartridgeは Grails用の拡張を加えた UML図に基づいて以下の(それなりの)コード生成を行います– Domain Class
– Controller
– View
• 作成者によると 2007年に大学でマスター論文中に行ったプロジェクトの一部だそうです
• UMLツールはオープンソースの Topcased– かなり多機能ですが少し癖があります
UML Profile for Grails定義例
Domain Class定義例
Controller定義例
Demo
DSL利用の場合
• Graphical DSL– eclipse GMF/EMFなどのツール利用
– Grails対応では UMLの Class図(構造)+状態遷移図(振る舞い)に近いものとなるでしょう
• Textual DSL– eclipse Xtext, JetBrains MPS, Microsoft Oslo などのツール利用
– Grails対応では Code Completion機能を備えたIDE的なものも可能です
• Goovy/Grails から離れ一般的な説明から入ります
Graphical DSL 例
• eclipse Graphical Modeling Framework (GMF)
Graphical DSL 例
• 他の Graphical DSL ツール
– MetaEdit+ (MetaCase)
– Generic Modeling Environment (Vanderbilt Univ.)
– Visual Studio DSL Toolkit (Microsoft)
Graphical DSL 例
Textual DSL 例ご存じだった方おられますか?
Textual DSL 例
• 他の Textual DSL ツール
– Oslo M Language [と呼ばれていた技術 ] (Microsoft)
– Meta Programming System (JetBrains)
Textual DSL 例DSL 言語定義
このEMFモデルと同義DSL 言語定義
Textual DSL 利用例
この生成されたエディタにはIDE的サポート機能がおまけで付いてきます
DSL ベースモデル定義
DSL モデル変換
• UMLであれ Graphical DSLであれ Textual DSLであ
れ、最終的には何らかのメカニズムでモデルをソースコードへ変換
• ここでは Xtextと同じファミリーにある機能(XtextのDistributionに含まれる)を利用
DSL モデル変換例変換手順定義 &変換結果
当テンプレートを使いモデル
変換
DSL モデル変換例変換手順定義 &変換結果
当テンプレートを使いモデル
変換
Demo
体験から得た Xtext適用のこつ
• Xtextで定義するDSL要素はメタモデルレベルのものを選ぶと効果的– クラス(Entity)や状態遷移図はサンプルをそのままかベースにすれば良い
– UMLほかのメタモデル仕様も素材になる
• 生成されるエディタ– 無理にソースエディタを目指さない(雑音が混入するため)– 本質的な情報だけ記述できればよしとする
• 残りはコード変換テンプレートで頑張る(LoopingやNesting などの構造も活用)
日本Xtextユーザ会http://groups.google.co.jp/group/xtext-users-japan
最後に
• モデリングとプログラミングの境界領域に関する話でした– 夜の部で感想など聞かせて頂ければと思います
• JGGUG Groovy Lovers のみなさんの Enjoy Groovy Programming という気持ちに棹さす積りはありません
• むしろ、こういった技術・ツールと組み合わせるともっと面白いことが出来るかもしれない、ということです
• ご清聴どうもありがとうございました