Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

Xtext And Grails20091218

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 42 Anuncio

Más Contenido Relacionado

A los espectadores también les gustó (20)

Similares a Xtext And Grails20091218 (20)

Anuncio

Más de Akira Tanaka (20)

Más reciente (20)

Anuncio

Xtext And Grails20091218

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

×