Mais conteúdo relacionado Semelhante a Xtext And Grails20091218 (20) Mais de Akira Tanaka (20) Xtext And Grails200912182. はじめに
• 今回ご紹介する考え方・方式やツールは必ず
しも Groovy/Grails 専用のものではありません
– Groovy/Grails の世界にも適用可能で、後半で
Grails との対応付けを試みました
– 余り期待せず「こんな世界もある」ということで、
気楽に聞いてください
8. モデル
• モデル(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.
• モデリングとは関心事以外の詳細を切り捨て単純化した
結果(モデル)を作る作業
– 詳細をドロップしているため、プログラム・ソースコードの世界と
ちと違います
9. モデリング言語
• 汎用(標準)モデリング言語
– Unified Modeling Language (UML)
– 特徴
• グラフィカル言語(テキストより全体像を把握しやすい)
– 実際は要素数がある程度まで
• カバレッジが広い(広すぎる)
• 特定用途向モデリング言語
– Domain Specific Language (DSL)
– 特徴
• 特定用途に最適化(カバレッジが狭い)
• グラフィカル言語もテキストベース言語もある
• 標準になるもあるが誰でも作成可能
10. DSL の分類
• Internal DSL と External DSL
– Internal: 母体となるプログラミング言語を持つ
– External: プログラミング言語独立
• Graphical DSL と Textual DSL
– Graphical: ダイアグラムベース (BPMNなど)
– Textual: テキストベース (GroovyやRubyのDSLなど)
• DSLについての一般的な説明・議論については
Wikipediaとmartinfowler.comへどうぞ
11. モデル駆動ソフトウェア開発(MDSD)
• Model Driven Software
Design/Development/Engineering (MDD, MDA, MDE,
MBD, … ) --- 言い方多数有
• モデルとソースコードをつなげる仕組み(試み)
• モデルは「UMLモデル」だけでない
– DSL に基づくモデル
– UML Profile(UML拡張)を適用した拡張UMLモデル など
• モデルの作成
– DSL/UMLモデルエディタ
– モデル作成→{モデル変換}* もある
• モデルのテキストへの変換(コード生成)
– モデル→ソースコード変換
12. 4階層メタモデルアーキテクチャ
M3 メタメタモデル Meta Object Facility (MOF)
標準仕様の世界
M2 メタモデル UML, BPDM/BPMN, BMM, CWM, …
M1 モデル UML モデル, BPMNモデル, …
M0 インスタンス
13. 4階層メタモデルアーキテクチャ
M3 メタメタモデル Eclipse Modeling Framework (EMF), …
標準実装の世界
M2 メタモデル UML tools, BPMN tools, …
M1 モデル ユーザが作成したモデル(データ)
M0 インスタンス
14. 悪乗り
4階層メタモデルアーキテクチャ
言語設計用言語
M3 メタメタモデル EBNF
プログラミング言語
M2 メタモデル Java, Groovy, Grails, Scala, … 言語仕様
プログラミング言語を用いて書かれた
M1 モデル
プログラム(例:Grails Apps)
M0 インスタンス
17. Grails メタモデル
• Grails 言語仕様
– プログラミング言語は通常 EBNF 等で規定
• 残念ですが、私はまだ Grails の EBNF による Grails 言
語(Framework?)規定を Web 上で見つけていません
– あれば助かったのですが・・・
– ご存じの方おられれば是非教えてください
• とりあえず、どこかに存在するものと勝手に想定してお
きます
18. 期待する Grails との対応付け
• モデルに基づき(可能な範囲で)
– Grails の Domain Class を導きたい
– Grails の Controller を導きたい
– Grails の View を導きたい
• そのためには
– モデリングツールの準備要
• Grails 対応 Profile を組み込んだ UML ツール または Grails 対応
DSL ツール
– コード生成支援ツールの準備要
• コード編集支援ツール
• コード生成ツール
19. UML利用の場合
• 純粋UMLではGrailsのセマンティクスを表現でき
ません
• Grails のメタモデルとそれに基づく UML Profile
が必要です
– Grails特有の概念をUMLモデルとして記述するための
規定(標準はありません)
– UMLツールにこの拡張(Profile定義)を組み込む
–例
• Grails ドメインクラス → UMLクラス
• Grails Web Flow → UML状態遷移図やアクティビティ図
• Grails View → UMLクラス
20. ツールについて
• 最初に eclipse/GMF の例を見て頂きましたが、
ここからはドイツのオープンソースプロジェクト
が推進している、相互に関連を持つ2種類の
ツールについて紹介します
– eclipse/Xtext(旧openArchitectureWare)
– Fornax-Platform の Grails Cartridge
• 話の都合により後者から説明します
22. Fornax-Platform: Grails Cartridge
• この Cartridge は Grails 用の拡張を加えた UML
図に基づいて以下の(それなりの)コード生成を
行います
– Domain Class
– Controller
– View
• 作成者によると 2007 年に大学でマスター論文
中に行ったプロジェクトの一部だそうです
• UML ツールはオープンソースの Topcased
– かなり多機能ですが少し癖があります
27. DSL利用の場合
• Graphical DSL
– eclipse GMF/EMF などのツール利用
– Grails 対応では UMLの Class 図(構造)+状態遷移図(振
る舞い)に近いものとなるでしょう
• Textual DSL
– eclipse Xtext, JetBrains MPS, Microsoft Oslo などのツール
利用
– Grails 対応では Code Completion機能を備えたIDE的なも
のも可能です
• Goovy/Grails から離れ一般的な説明から入ります
29. Graphical DSL 例
• 他の Graphical DSL ツール
– MetaEdit+ (MetaCase)
– Generic Modeling Environment (Vanderbilt Univ.)
– Visual Studio DSL Toolkit (Microsoft)
32. Textual DSL 例
• 他の Textual DSL ツール
– Oslo M Language [ と呼ばれていた技術 ]
(Microsoft)
– Meta Programming System (JetBrains)
36. DSL モデル変換
• UML であれ Graphical DSL であれ Textual DSL であ
れ、最終的には何らかのメカニズムでモデルをソー
スコードへ変換
• ここでは Xtext と同じファミリーにある機能(Xtext の
Distribution に含まれる)を利用
40. 体験から得た Xtext 適用のこつ
• Xtext で定義するDSL要素はメタモデルレベルのものを選
ぶと効果的
– クラス(Entity)や状態遷移図はサンプルをそのままかベースに
すれば良い
– UMLほかのメタモデル仕様も素材になる
• 生成されるエディタ
– 無理にソースエディタを目指さない(雑音が混入するため)
– 本質的な情報だけ記述できればよしとする
• 残りはコード変換テンプレートで頑張る(LoopingやNesting
などの構造も活用)
42. 最後に
• モデリングとプログラミングの境界領域に関する話で
した
– 夜の部で感想など聞かせて頂ければと思います
• JGGUG Groovy Lovers のみなさんの Enjoy Groovy
Programming という気持ちに棹さす積りはありません
• むしろ、こういった技術・ツールと組み合わせるともっ
と面白いことが出来るかもしれない、ということです
• ご清聴どうもありがとうございました