テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
-
Upload
shintaro-hosoai -
Category
Technology
-
view
3.141 -
download
3
Transcript of テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介
テキスト型 Domain Specific Language (DSL) 開発フレ ムワ ク Xte tの紹介開発フレームワーク Xtextの紹介
北陸先端科学技術大学院大学 細合晋太郎
ビューファイブ LLC 田中明ビュ ファイブ LLC 田中明
2010/9/6 1eclipse DemoCamp Helios 2010/Tokyo
Xt tについてXtext について
• Eclipse Modeling Project(EMP: http://www.eclipse.org/modeling/)に属するプロジェクト
• Xtext(http://www.eclipse.org/Xtext/)Xtext(http://www.eclipse.org/Xtext/)• Textual Domain Specific Language (DSL) 開発フレームワーク– Xtext Grammarに基づき DSLを定義– 必要に応じ妥当性チェックロジック追加– DSLに基づくエディタを生成– そのエディタでテキスト型モデルを記述– Xpandに基づくテンプレートを定義
そのテンプレ トを使いモデルをテキスト(XMLやプログラムソ スコ ドの 部)にM2T変換– そのテンプレートを使いモデルをテキスト(XMLやプログラムソースコードの一部)にM2T変換
• ベース技術– EMF (Eclipse Modeling Framework) http://www.eclipse.org/modeling/emf/
ANTLR (ANother Tool for Language Recognition) http://www antlr org/– ANTLR (ANother Tool for Language Recognition) http://www.antlr.org/• 利用領域
– 組込みシステム開発からエンタプライズ系システム開発までのテキスト型DSL開発
• Eclipse Community Awards 2010: “Most Innovative New Feature or Eclipse• Eclipse Community Awards 2010: Most Innovative New Feature or Eclipse Project”受賞
• 主な開発推進元:独 itemis社 http://www.itemis.de/
2010/9/6 2eclipse DemoCamp Helios 2010/Tokyo
DSLの分類についてDSLの分類について
• Domain Specific Language (DSL) 分類例
Graphical Textual
Internal Yahoo Pipes (?) Ruby on RailsInternal Yahoo Pipes (?),Google App Inventor for Android (?)
Ruby on Rails,Grails,Unix shell scripts,
External GMF,GME
SQLGME,MetaEdit+,…
…Xtext, Oslo M, MPS, Spoofax/IMP, ……
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 3
環境 デ
公開 Documentationに Entity, State Machine などのサンプル有り
HELIOS環境のデモ
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 4
作成するテキスト型モデル作成するテキスト型モデル
entity Party {property name : String
Sproperty address : Stringproperty phoneNummber : Integerref worksFor Party
f P t []ref manages Party []}
entity Person extends Party {entity Person extends Party {property socialSecurityNumber : String
}
entity Company extends Party {property publicCompany : Boolean
}}
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 5
DSL Grammar定義
テンプレートによるモデル変換
DSLベースエディタ / モデル
テンプレ トによるモデル変換
…
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 6
Xtextの仕組みについて
言語(メタ)
*dsl言語定義(.xtext)
言語(メタ)モデル(.ecore)
モデルファイル
パーサ*dsl.ui
モデル
プテンプレートクチェック
エディタ
content assist
(.xpt)
テンプレ
(.chk)
生成モデル
labeling
outline
i k fi
DSL
テンプレートエンジン
*dsl generator
生成コード
モデルチェッカ
quick fix
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 7
dsl.generator
E4環境のデモE4環境のデモ
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 8
4のアプリケ ション構成e4のアプリケーション構成
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 9
4 UI DSLe4 UI DSL{
sample.e4dsl
e4app projectapplication e4app {window win {part MyPart { <application:Applica....
hild i “b i Wi d ” l b l “ i ”
Application.e4xmi
part MyPart {label lab {text “hello e4”
}
<children xsi:type=“basic:Window” label=“win”<children xsi:type=“basic:Part” elementId=“e4app.MyPart”<children xsi Id “e4app MyXWTPart” >}
}xwtpart MyXWTPart
<children xsi... Id=“e4app.MyXWTPart”...>
src/partsMyPart.javaxwtpart MyXWTPart
{label lab2 {
class MyPart {....Label lab2 = new Label(parent,SWT.None);l b2 tT t("h ll t")text “hello xwt”
}}
lab2.setText("hello xwt");
class MyXWTPart <Composite .....>MyXWTPart.java MyXWTPart.xwt
}}}
extends XWTStaticPart {}
.....<Label text = “hello
xwt”></Label>/
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 10
</Composite>
国内 Eclipse Modeling Project 国 p g jコミュニティ活動について
• 経緯と提案– Eclipse Modelingが欧州で盛んなのは何故だろう?Eclipse Modeling が欧州で盛んなのは何故だろう?
• 多数のEU研究プロジェクト
• 産業界(自動車等)の支援・要求 (そう言えば日本でも自動車産業は・・・)
• Engineeringは元々の得意分野!?• 例:Eclipse DemoCamp in Germany: 6月に開催10回(モデリング中心)
それに比べ 日本 は ミ テ 活動 存在自体が余り見えな (例外 日本語• それに比べ、日本ではコミュニティ活動の存在自体が余り見えない(例外:日本語化プロジェクト) 企業の内部では使われているのかも
– ソフトウェアは今後も大量に開発しないといけない• もっと楽で確実な開発方法が必要 ← Modelingは一つの有力候補
– 日本でも Eclipse Modeling のコミュニティ活動を始めませんか?
• とりあえず質問・相談など発言出来る「場」を作るところからスタートしてはどうでしょう。「走りながら考える」で行きませんか。賛同頂ける方をお待ちしています。
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 11
E li M d li P j tEclipse Modeling ProjectAbstract Syntax Development Concrete Syntax DevelopmentAbstract Syntax DevelopmentEclipse Modeling Framework (EMF)EMF QueryEMF Transaction
Concrete Syntax DevelopmentGraphical Modeling Framework (GMF)Xtext
EMF TransactionEMF ValidationTeneoEMF Compare
Model Development ToolsUML2UML2 ToolsObj t C t i t L (OCL)EMF Compare
EMF SearchEcore Tools
Object Constraint Language (OCL)XSDEODM
Model TransformationModel to Model Transformation (M2M)Atlas Transformation Language (ATL)Q O (Q O)
Generative Modeling TechnologiesGMTAM3
QVT Operational Mappings Language (QVTO)QVT Core Language (QVTc)QVT Relations Language (QVTr)
AMWMoDiscoVIATRA2
Model IntegrationModel Driven Development integration (MDDi) FAQ
他に Eclipse SOA Project (BPMN/SCA)もあります
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 12
日本Xt tユ ザ会日本Xtextユーザ会http://groups.google.com/group/xtext-users-japan
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 13
Q&AQ&A• ご質問があればお願いします。
Eclipse Modeling ProjectEclipse Modeling ProjectXtextXtext
• ご清聴どうも有り難うございました。
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 14
補足補足
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 15
インスト ル手順(1)インストール手順(1)
• (幾通りかありますが)最も簡単と思われる手順
– HeliosのEclipse Modeling Tools (includes Incubating components)をダウンロード&解凍
– JRE:5と6の両系統インストールしておいた方が良さそう
li 起動– eclipse起動
– Marketplace client(Help→eclipse Marketplace)を用いXtextにチェックを入れインストール
– Updateの実行(現在のバージョンは1.0.1):オプション
– ANTLRモジュールの追加(TMF Update):オプション
// / /• http://download.itemis.com/updates/releases
– Window→Preference→General→workspaceのText file encoding(エンコーディング指定)をUTF‐8にグ指定)を
– Window→Customize Preference→ShortcutsでXtextボックスを選択
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 16
インスト ル手順(2)インストール手順(2)
• e4の場合
– e4 SDKをインストール
– e4 Update実行
– Marketplace clientをインストールしXtextをインストール
以降は 場合と同じ– 以降はHeliosの場合と同じ
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 17
Xt t付属サンプルプロジ クトXtext付属サンプルプロジェクト
• Domain Model– UMLのClassモデル相当(本日紹介したEntityとほぼ同じ)UMLのClassモデル相当(本日紹介したEntityとほぼ同じ)
– テキストモデルをJavaプロジェクトのsrcフォルダ配下に置くとsrc‐genフォルダ(要作成)配下にJavaコードを生成する機能が実装されている
• State Machine– Martin Fowler氏のSecret Compartmentに出てくる状態遷移機械を氏 p 出 る状態遷移機械を
Xtextで記述したもの
• GMF Integrationg– Domain Model相当ですがGMFとのブリッジ機能も実装されている(テ
キストモデルと図形モデルの相互同期が取れます)
2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 18
E4DSLのつかいかた
E li SDK 4 0の環境構築Eclipse SDK 4.0の環境構築
• Eclipse SDKのDL– http://www.eclipse.org/eclipse4/
から を し 解凍 設定等済ませ おからEclipse SDKをDLして解凍,workspaceの設定等済ませておく
• Pluginのインストール• Plugin のインスト ル– e4 package
Help > Install New Softwareから を選択し 以外(まWork with: からe4update Siteを選択し,ServerFeature以外(ま
たは全選択)しインストール– Xtext XpandXtext, Xpand
Help > Install New SoftwareWork with: Helios ‐Modeling > Xpand SDKと Xtext SDKにチェックを入れインストーModeling > Xpand SDKと,Xtext SDKにチェックを入れインストル,必要に応じてSubversionなども入れておく
プラグインとプロジ クトのインポ トプラグインとプロジェクトのインポート
S F (htt // f j / j t / 4 i• SourceForge(http://sourceforge.jp/projects/e4‐ui‐dsl/)から必要なファイルをDLする
• *e4dsl.jarと*e4dsl.ui.jarをeclipseをインストールしたフォルダのdropins/plugins/に配置するフォルダのdropins/plugins/に配置する
• Eclipseを起動し,プロジェクトエクスプローラ右クリック,Import, General > Existing Projects into ク, p , g jWorkspace.Select archive fileからe4dsl generator zipを選択しSelect archive fileからe4dsl_generator.zipを選択し,インポートする.
必要に応じて 4d l i のプロジ クトもインポ トしておく– 必要に応じて,e4dsl.zipのプロジェクトもインポートしておく
l j tの作成sample projectの作成N P j t 4 4 A li ti P j tでプロジ• New > Project, e4 > e4 Application Projectでプロジェクトを作成
• プロジェクト名は”e4app”としておく,(変更する場合は generatorプロジェクトのは,generatorプロジェクトの
– /src/templates/Extensions.ext/ / kfl /E4D lG t 2– /src/workflow/E4DslGenerator.mwe2
のプロジェクト名の箇所も変更する必要がある.)
• その他のオプションはそのままでウィザードを終了
• e4app productを開き ”Launch an Eclipse• e4app.productを開き, Launch an Eclipse application″をクリックし一度アプリケーションを実行しておくしておく
依存関係の追加依存関係の追加• 以下の依存を追加しておく以下の依存を追加しておく
– org.eclipse.e4.tools.emf.liveeditororg eclipse e4 xwt– org.eclipse.e4.xwt
– com.ibm.icu– org.eclipse.e4.core.di.extensions– org.eclipse.e4.xwt.css– org.eclipse.e4.xwt.ui.workbench下5つは plugin xmlで追加するか 一度XWT Static Partを下5つは,plugin.xmlで追加するか, 度XWT Static Partを新規追加すると自動的に追加される.
– 依存関係を追加した後は,実行の際にRun Configurationsを開き Plug insタブでAdd Required Plug insを押してApplyを開き,Plug‐insタブでAdd Required Plug‐insを押してApplyしておく
E4DSLの実行E4DSLの実行• generatorプロジェクトの実行generatorプロジェクトの実行
– /src/model/Example.e4dslを開いて適当に編集
/ / kfl / l を実行すると– /src/workflow/E4DslGenerator.mwe2を実行すると,e4appプロジェクトが更新される.
際 あ 書きされ 注意– この際元からあったファイルは上書きされるので注意.
• e4appの実行pp 実行
– 再度アプリケーションを実行すると,Part部などが変更されているのが確認できるれているのが確認できる.
– 現時点でPartの部品として生成できるのは,LabelとButtonとTextだけ DSLは作成しているので Generatorを追加すとTextだけ.DSLは作成しているので,Generatorを追加すれば対応可能.
e4dslの文法や生成コードについては まだ固まってない– e4dslの文法や生成コードについては,まだ固まってないのでドキュメント化はお待ちください.