テキスト型domain specific language (dsl) 開発フレームワークxtext の紹介

24
テキスト型 Domain Specific Language (DSL) 開発フレ ムワ Xte t の紹介 開発フレムワXte xt の紹介 北陸先端科学技術大学院大学 細合晋太郎 ビュファイブ LLC 田中明 ビュ ファイブ LLC 田中明 2010/9/6 1 eclipse DemoCamp Helios 2010/Tokyo

Upload: shintaro-hosoai

Post on 06-May-2015

3.145 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

テキスト型 Domain Specific Language (DSL) 開発フレ ムワ ク Xte tの紹介開発フレームワーク Xtextの紹介

北陸先端科学技術大学院大学 細合晋太郎

ビューファイブ LLC 田中明ビュ ファイブ LLC 田中明

2010/9/6 1eclipse DemoCamp Helios 2010/Tokyo

Page 2: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

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

Page 3: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

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

Page 4: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

環境 デ

公開 Documentationに Entity, State Machine などのサンプル有り

HELIOS環境のデモ

2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 4

Page 5: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

作成するテキスト型モデル作成するテキスト型モデル

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

Page 6: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

DSL Grammar定義

テンプレートによるモデル変換

DSLベースエディタ / モデル

テンプレ トによるモデル変換

2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 6

Page 7: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

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

Page 8: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

E4環境のデモE4環境のデモ

2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 8

Page 9: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

4のアプリケ ション構成e4のアプリケーション構成

2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 9

Page 10: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

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>

Page 11: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

国内 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

Page 12: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

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

Page 13: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

日本Xt tユ ザ会日本Xtextユーザ会http://groups.google.com/group/xtext-users-japan

2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 13

Page 14: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

Q&AQ&A• ご質問があればお願いします。

Eclipse Modeling ProjectEclipse Modeling ProjectXtextXtext

• ご清聴どうも有り難うございました。

2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 14

Page 15: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

補足補足

2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 15

Page 16: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

インスト ル手順(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

Page 17: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

インスト ル手順(2)インストール手順(2)

• e4の場合

– e4 SDKをインストール

– e4 Update実行

– Marketplace clientをインストールしXtextをインストール

以降は 場合と同じ– 以降はHeliosの場合と同じ

2010/9/6 eclipse DemoCamp Helios 2010/Tokyo 17

Page 18: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

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

Page 19: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

E4DSLのつかいかた

Page 20: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

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なども入れておく

Page 21: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

プラグインとプロジ クトのインポ トプラグインとプロジェクトのインポート

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のプロジェクトもインポートしておく

Page 22: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

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″をクリックし一度アプリケーションを実行しておくしておく

Page 23: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

依存関係の追加依存関係の追加• 以下の依存を追加しておく以下の依存を追加しておく

– 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しておく

Page 24: テキスト型Domain Specific Language (DSL) 開発フレームワークXtext の紹介

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の文法や生成コードについては,まだ固まってないのでドキュメント化はお待ちください.