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

Xtext And Grails20091218

on

  • 2,671 views

Introduction of Xtext to Japan Groovy and Grails User Group

Introduction of Xtext to Japan Groovy and Grails User Group

Statistics

Views

Total Views
2,671
Views on SlideShare
2,658
Embed Views
13

Actions

Likes
4
Downloads
17
Comments
1

2 Embeds 13

http://www.slideshare.net 9
http://www.linkedin.com 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • 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
    Processing…
Post Comment
Edit your comment

Xtext And Grails20091218 Xtext And Grails20091218 Presentation Transcript

  • モデリングと Grails の あやしい関係
  • はじめに • 今回ご紹介する考え方・方式やツールは必ず しも Groovy/Grails 専用のものではありません – Groovy/Grails の世界にも適用可能で、後半で Grails との対応付けを試みました – 余り期待せず「こんな世界もある」ということで、 気楽に聞いてください
  • 自己紹介 ブログ 仕事 View slide
  • モデル駆動ソフトウェア開発(MDSD) • 主題は Model Driven Software Development です。 – モデルをソフトウェア開発につなげるという考え方 や開発手法 – 欧州(独・仏・英ほか)で研究開発が活発 • まずは雰囲気を理解して貰うための例題から 入ります。 View slide
  • ソーシャルネット(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モデルエディタ – モデル作成→{モデル変換}* もある • モデルのテキストへの変換(コード生成) – モデル→ソースコード変換
  • 4階層メタモデルアーキテクチャ M3 メタメタモデル Meta Object Facility (MOF) 標準仕様の世界 M2 メタモデル UML, BPDM/BPMN, BMM, CWM, … M1 モデル UML モデル, BPMNモデル, … M0 インスタンス
  • 4階層メタモデルアーキテクチャ M3 メタメタモデル Eclipse Modeling Framework (EMF), … 標準実装の世界 M2 メタモデル UML tools, BPMN tools, … M1 モデル ユーザが作成したモデル(データ) M0 インスタンス
  • 悪乗り 4階層メタモデルアーキテクチャ 言語設計用言語 M3 メタメタモデル EBNF プログラミング言語 M2 メタモデル Java, Groovy, Grails, Scala, … 言語仕様 プログラミング言語を用いて書かれた M1 モデル プログラム(例:Grails Apps) M0 インスタンス
  • ということで • 「モデリング」と「プログラミング」は実は近そう • どちらも抽象化により下位の詳細を隠蔽 – プログラミング言語は機械語を隠蔽 – モデリング言語はプログラミング言語を隠蔽 • プログラミング言語には対応するコンパイラやインター プリタがある • モデリング言語にはどうして対応する何かが無いの? – モデル駆動開発(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 利用例 DSL ベースモデル 定義 この生成されたエディタにはIDE的サポート機能がおまけで付いてきます
  • 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 という気持ちに棹さす積りはありません • むしろ、こういった技術・ツールと組み合わせるともっ と面白いことが出来るかもしれない、ということです • ご清聴どうもありがとうございました