xtext and grails20091218

42
モデリングと Grails あやしい関係

Upload: akira-tanaka

Post on 28-May-2015

1.596 views

Category:

Technology


1 download

DESCRIPTION

Introduction of Xtext to Japan Groovy and Grails User Group

TRANSCRIPT

Page 1: Xtext And Grails20091218

モデリングと Grailsのあやしい関係

Page 2: Xtext And Grails20091218

はじめに

• 今回ご紹介する考え方・方式やツールは必ずしも Groovy/Grails専用のものではありません

– Groovy/Grails の世界にも適用可能で、後半でGrailsとの対応付けを試みました

–余り期待せず「こんな世界もある」ということで、気楽に聞いてください

Page 3: Xtext And Grails20091218

自己紹介

ブログ

仕事

Page 4: Xtext And Grails20091218

モデル駆動ソフトウェア開発(MDSD)

• 主題はModel Driven Software Developmentです。

–モデルをソフトウェア開発につなげるという考え方や開発手法

–欧州(独・仏・英ほか)で研究開発が活発

• まずは雰囲気を理解して貰うための例題から入ります。

Page 5: Xtext And Grails20091218

ソーシャルネット(Twitter/LinkedIn)

フォロー

フォロー

コネクト

コネクトCathyさん

山田さん

鳩山さん

誰かさん

Page 6: Xtext And Grails20091218

ソーシャルネットモデルエディタ

当エディタはEclipse GMF で作成

Page 7: Xtext And Grails20091218

ソーシャルネットメタモデル

Eclipse GMF へのインプットデータ

Page 8: Xtext And Grails20091218

モデル

• モデル(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.

• モデリングとは関心事以外の詳細を切り捨て単純化した結果(モデル)を作る作業– 詳細をドロップしているため、プログラム・ソースコードの世界とちと違います

Page 9: Xtext And Grails20091218

モデリング言語

• 汎用(標準)モデリング言語– Unified Modeling Language (UML)– 特徴

• グラフィカル言語(テキストより全体像を把握しやすい)– 実際は要素数がある程度まで

• カバレッジが広い(広すぎる)

• 特定用途向モデリング言語– Domain Specific Language (DSL)– 特徴

• 特定用途に最適化(カバレッジが狭い)• グラフィカル言語もテキストベース言語もある• 標準になるもあるが誰でも作成可能

Page 10: Xtext And Grails20091218

DSL の分類

• Internal DSL と External DSL– Internal: 母体となるプログラミング言語を持つ

– External: プログラミング言語独立

• Graphical DSL と Textual DSL– Graphical: ダイアグラムベース (BPMNなど)

– Textual: テキストベース (GroovyやRubyのDSLなど)

• DSLについての一般的な説明・議論についてはWikipediaとmartinfowler.comへどうぞ

Page 11: Xtext And Grails20091218

モデル駆動ソフトウェア開発(MDSD)

• Model Driven Software Design/Development/Engineering (MDD, MDA, MDE, MBD, … ) ---言い方多数有

• モデルとソースコードをつなげる仕組み(試み)• モデルは「UMLモデル」だけでない

– DSLに基づくモデル– UML Profile(UML拡張)を適用した拡張UMLモデル など

• モデルの作成– DSL/UMLモデルエディタ– モデル作成→{モデル変換}* もある

• モデルのテキストへの変換(コード生成)– モデル→ソースコード変換

Page 12: Xtext And Grails20091218

Meta Object Facility (MOF)

4階層メタモデルアーキテクチャ

メタメタモデル

メタモデル

モデル

インスタンス

UML, BPDM/BPMN, BMM, CWM, …

UML モデル, BPMNモデル, …

M0

M1

M2

M3

標準仕様の世界

Page 13: Xtext And Grails20091218

ユーザが作成したモデル(データ)

4階層メタモデルアーキテクチャ

メタメタモデル

メタモデル

モデル

インスタンス

Eclipse Modeling Framework (EMF), …

M0

M1

M2

M3

UML tools, BPMN tools, …

標準実装の世界

Page 14: Xtext And Grails20091218

4階層メタモデルアーキテクチャ

メタメタモデル

メタモデル

モデル

インスタンスM0

M1

M2

M3

プログラミング言語を用いて書かれたプログラム(例:Grails Apps)

EBNF

Java, Groovy, Grails, Scala, …言語仕様

プログラミング言語

言語設計用言語

悪乗り

Page 15: Xtext And Grails20091218

ということで

• 「モデリング」と「プログラミング」は実は近そう

• どちらも抽象化により下位の詳細を隠蔽– プログラミング言語は機械語を隠蔽– モデリング言語はプログラミング言語を隠蔽

• プログラミング言語には対応するコンパイラやインタープリタがある

• モデリング言語にはどうして対応する何かが無いの?– モデル駆動開発(MDSD)

Page 16: Xtext And Grails20091218

実例に基づいて

• ソーシャルネットワークと Grailsで考えます

Page 17: Xtext And Grails20091218

Grails メタモデル

• Grails言語仕様

–プログラミング言語は通常 EBNF 等で規定

• 残念ですが、私はまだ Grailsの EBNFによる Grails言語(Framework?)規定をWeb 上で見つけていません

– あれば助かったのですが・・・

– ご存じの方おられれば是非教えてください

• とりあえず、どこかに存在するものと勝手に想定しておきます

Page 18: Xtext And Grails20091218

期待する Grails との対応付け

• モデルに基づき(可能な範囲で)– Grails の Domain Classを導きたい– Grailsの Controller を導きたい– Grailsの Viewを導きたい

• そのためには– モデリングツールの準備要

• Grails 対応 Profile を組み込んだ UMLツールまたは Grails 対応DSLツール

– コード生成支援ツールの準備要• コード編集支援ツール• コード生成ツール

Page 19: Xtext And Grails20091218

UML利用の場合

• 純粋UMLではGrailsのセマンティクスを表現できません

• Grails のメタモデルとそれに基づく UML Profile が必要です– Grails特有の概念をUMLモデルとして記述するための規定(標準はありません)

– UMLツールにこの拡張(Profile定義)を組み込む– 例

• Grails ドメインクラス→ UMLクラス• Grails Web Flow → UML状態遷移図やアクティビティ図• Grails View → UMLクラス

Page 20: Xtext And Grails20091218

ツールについて

• 最初に eclipse/GMF の例を見て頂きましたが、

ここからはドイツのオープンソースプロジェクトが推進している、相互に関連を持つ2種類のツールについて紹介します

– eclipse/Xtext(旧openArchitectureWare)

– Fornax-Platform の Grails Cartridge

• 話の都合により後者から説明します

Page 21: Xtext And Grails20091218

Fornax-Platform: Grails Cartridgeご存じだった方おられますか?

Page 22: Xtext And Grails20091218

Fornax-Platform: Grails Cartridge

• この Cartridgeは Grails用の拡張を加えた UML図に基づいて以下の(それなりの)コード生成を行います– Domain Class

– Controller

– View

• 作成者によると 2007年に大学でマスター論文中に行ったプロジェクトの一部だそうです

• UMLツールはオープンソースの Topcased– かなり多機能ですが少し癖があります

Page 23: Xtext And Grails20091218

UML Profile for Grails定義例

Page 24: Xtext And Grails20091218

Domain Class定義例

Page 25: Xtext And Grails20091218

Controller定義例

Page 26: Xtext And Grails20091218

Demo

Page 27: Xtext And Grails20091218

DSL利用の場合

• Graphical DSL– eclipse GMF/EMFなどのツール利用

– Grails対応では UMLの Class図(構造)+状態遷移図(振る舞い)に近いものとなるでしょう

• Textual DSL– eclipse Xtext, JetBrains MPS, Microsoft Oslo などのツール利用

– Grails対応では Code Completion機能を備えたIDE的なものも可能です

• Goovy/Grails から離れ一般的な説明から入ります

Page 28: Xtext And Grails20091218

Graphical DSL 例

• eclipse Graphical Modeling Framework (GMF)

Page 29: Xtext And Grails20091218

Graphical DSL 例

• 他の Graphical DSL ツール

– MetaEdit+ (MetaCase)

– Generic Modeling Environment (Vanderbilt Univ.)

– Visual Studio DSL Toolkit (Microsoft)

Page 30: Xtext And Grails20091218

Graphical DSL 例

Page 31: Xtext And Grails20091218

Textual DSL 例ご存じだった方おられますか?

Page 32: Xtext And Grails20091218

Textual DSL 例

• 他の Textual DSL ツール

– Oslo M Language [と呼ばれていた技術 ] (Microsoft)

– Meta Programming System (JetBrains)

Page 33: Xtext And Grails20091218

Textual DSL 例DSL 言語定義

Page 34: Xtext And Grails20091218

このEMFモデルと同義DSL 言語定義

Page 35: Xtext And Grails20091218

Textual DSL 利用例

この生成されたエディタにはIDE的サポート機能がおまけで付いてきます

DSL ベースモデル定義

Page 36: Xtext And Grails20091218

DSL モデル変換

• UMLであれ Graphical DSLであれ Textual DSLであ

れ、最終的には何らかのメカニズムでモデルをソースコードへ変換

• ここでは Xtextと同じファミリーにある機能(XtextのDistributionに含まれる)を利用

Page 37: Xtext And Grails20091218

DSL モデル変換例変換手順定義 &変換結果

当テンプレートを使いモデル

変換

Page 38: Xtext And Grails20091218

DSL モデル変換例変換手順定義 &変換結果

当テンプレートを使いモデル

変換

Page 39: Xtext And Grails20091218

Demo

Page 40: Xtext And Grails20091218

体験から得た Xtext適用のこつ

• Xtextで定義するDSL要素はメタモデルレベルのものを選ぶと効果的– クラス(Entity)や状態遷移図はサンプルをそのままかベースにすれば良い

– UMLほかのメタモデル仕様も素材になる

• 生成されるエディタ– 無理にソースエディタを目指さない(雑音が混入するため)– 本質的な情報だけ記述できればよしとする

• 残りはコード変換テンプレートで頑張る(LoopingやNesting などの構造も活用)

Page 41: Xtext And Grails20091218

日本Xtextユーザ会http://groups.google.co.jp/group/xtext-users-japan

Page 42: Xtext And Grails20091218

最後に

• モデリングとプログラミングの境界領域に関する話でした– 夜の部で感想など聞かせて頂ければと思います

• JGGUG Groovy Lovers のみなさんの Enjoy Groovy Programming という気持ちに棹さす積りはありません

• むしろ、こういった技術・ツールと組み合わせるともっと面白いことが出来るかもしれない、ということです

• ご清聴どうもありがとうございました