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

Xtext And Grails20091218

May 28, 2015

Download

Technology

Akira Tanaka

Introduction of Xtext to Japan Groovy and Grails User Group
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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 という気持ちに棹さす積りはありません

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

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