• Like
Xtext And Grails20091218
Upcoming SlideShare
Loading in...5
×

Xtext And Grails20091218

  • 1,529 views
Uploaded on

Introduction of Xtext to Japan Groovy and Grails User Group

Introduction of Xtext to Japan Groovy and Grails User Group

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Acknowledgement:

    Thank Mr. Holger Schill of itemis for UML to Grails code generation sample.
    Thank all the people who have developed great textual dsl tool Xtext.

    Note: this slide is just an introduction of Xtext to Groovy/Grails programmers in Japan.

    ご関心をもたれた方は http://groups.google.co.jp/group/xtext-users-japan もご覧ください。
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
1,529
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
18
Comments
1
Likes
4

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. モデリングと Grails の あやしい関係
  • 2. はじめに • 今回ご紹介する考え方・方式やツールは必ず しも Groovy/Grails 専用のものではありません – Groovy/Grails の世界にも適用可能で、後半で Grails との対応付けを試みました – 余り期待せず「こんな世界もある」ということで、 気楽に聞いてください
  • 3. 自己紹介 ブログ 仕事
  • 4. モデル駆動ソフトウェア開発(MDSD) • 主題は Model Driven Software Development です。 – モデルをソフトウェア開発につなげるという考え方 や開発手法 – 欧州(独・仏・英ほか)で研究開発が活発 • まずは雰囲気を理解して貰うための例題から 入ります。
  • 5. ソーシャルネット(Twitter/LinkedIn) 山田さん フォロー Cathyさん コネクト フォロー コネクト 鳩山さん 誰かさん
  • 6. ソーシャルネットモデルエディタ 当エディタはEclipse GMF で作成
  • 7. ソーシャルネットメタモデル Eclipse GMF への インプットデータ
  • 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 インスタンス
  • 15. ということで • 「モデリング」と「プログラミング」は実は近そう • どちらも抽象化により下位の詳細を隠蔽 – プログラミング言語は機械語を隠蔽 – モデリング言語はプログラミング言語を隠蔽 • プログラミング言語には対応するコンパイラやインター プリタがある • モデリング言語にはどうして対応する何かが無いの? – モデル駆動開発(MDSD)
  • 16. 実例に基づいて • ソーシャルネットワークと Grails で考えます
  • 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 • 話の都合により後者から説明します
  • 21. Fornax-Platform: Grails Cartridge ご存じだった方 おられますか?
  • 22. Fornax-Platform: Grails Cartridge • この Cartridge は Grails 用の拡張を加えた UML 図に基づいて以下の(それなりの)コード生成を 行います – Domain Class – Controller – View • 作成者によると 2007 年に大学でマスター論文 中に行ったプロジェクトの一部だそうです • UML ツールはオープンソースの Topcased – かなり多機能ですが少し癖があります
  • 23. UML Profile for Grails 定義例
  • 24. Domain Class定義例
  • 25. Controller定義例
  • 26. Demo
  • 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. Graphical DSL 例 • eclipse Graphical Modeling Framework (GMF)
  • 29. Graphical DSL 例 • 他の Graphical DSL ツール – MetaEdit+ (MetaCase) – Generic Modeling Environment (Vanderbilt Univ.) – Visual Studio DSL Toolkit (Microsoft)
  • 30. Graphical DSL 例
  • 31. Textual DSL 例 ご存じだった方 おられますか?
  • 32. Textual DSL 例 • 他の Textual DSL ツール – Oslo M Language [ と呼ばれていた技術 ] (Microsoft) – Meta Programming System (JetBrains)
  • 33. Textual DSL 例 DSL 言語定義
  • 34. このEMFモデルと同義 DSL 言語定義
  • 35. Textual DSL 利用例 DSL ベースモデル 定義 この生成されたエディタにはIDE的サポート機能がおまけで付いてきます
  • 36. DSL モデル変換 • UML であれ Graphical DSL であれ Textual DSL であ れ、最終的には何らかのメカニズムでモデルをソー スコードへ変換 • ここでは Xtext と同じファミリーにある機能(Xtext の Distribution に含まれる)を利用
  • 37. DSL モデル変換例 変換手順定義 & 変換結果 当テンプレート を使いモデル 変換
  • 38. DSL モデル変換例 変換手順定義 & 変換結果 当テンプレート を使いモデル 変換
  • 39. Demo
  • 40. 体験から得た Xtext 適用のこつ • Xtext で定義するDSL要素はメタモデルレベルのものを選 ぶと効果的 – クラス(Entity)や状態遷移図はサンプルをそのままかベースに すれば良い – UMLほかのメタモデル仕様も素材になる • 生成されるエディタ – 無理にソースエディタを目指さない(雑音が混入するため) – 本質的な情報だけ記述できればよしとする • 残りはコード変換テンプレートで頑張る(LoopingやNesting などの構造も活用)
  • 41. 日本Xtextユーザ会 http://groups.google.co.jp/group/xtext-users-japan
  • 42. 最後に • モデリングとプログラミングの境界領域に関する話で した – 夜の部で感想など聞かせて頂ければと思います • JGGUG Groovy Lovers のみなさんの Enjoy Groovy Programming という気持ちに棹さす積りはありません • むしろ、こういった技術・ツールと組み合わせるともっ と面白いことが出来るかもしれない、ということです • ご清聴どうもありがとうございました