Eclipse xtext 紹介

Post on 12-Nov-2014

1.702 views 2 download

description

2014年1月30日に開催されたBPStudy#77で使ったスライド(多少手を加えました)です。

Transcript of Eclipse xtext 紹介

テキスト型 DSL  開発フレームワーク

Xtext

 

田中    

ビューファイブ  LLC  Xtext  ユーザ会/Eclipse  Modeling  勉強会

自己紹介

•  本日の話題と関係しそうなこと  –  以前  OMG  のモデリング標準作成に参加していました  

•  UML  や  MDA  はある程度なじんでいます  –  Eclipse  Conference  には  2  回参加したことがあります(モデリング系セ

ション主体)  –  本年5月に Xtext  CON  がありそうなので、参加したいと思っています  –  現在の対外的活動  

•  Xtext  ユーザ会  •  Eclipse  Modeling  Project  勉強会  •  Eclipse  Regional  Community/Japan  (名ばかり)

Message  from  Xtext  Project  Lead Good  evening  everybody!    I  hope  you’ll  have  a  good  5me  hearing  about  Eclipse  Xtext.    I  am  very  pleased  to  hear  that  there  is  so  much  interest  in  this  topic  in  Tokyo!    You  are  all  very  welcome  to  try  this  framework  out  and  in  case  you  have  any  ques5ons  feel  free  to  ask  them  in  the  ac5ve  online  forum  at  Eclipse.      Also  in  case  you  consider  basing  some  serious  business  on  it,  you  should  know  that  my  company  itemis  offers  professional  services,  like  trainings  and  onsite  consul5ng.    Have  fun  and  keep  the  abstrac5ons  sound!    Best  Regards,  Sven  EKinge  (Xtext  project  lead)

アジェンダ

•  Xtext  で出来ること  これだけは見てから帰ってください  

•  Xtext  – 概要    出来るだけ短くします     – 使い方    本日はこれを中心にお話します  

•  Sample  Projects  – 例題  

•  時間に余裕があれば  – モデリングは  UML  だけじゃない・・・という話  –  EMF/GMF  まわりの進化の話  

簡単にいうと

•  Xtext  は  – Eclipse  環境で動作する  – テキスト型 External  DSL  開発フレームワーク  

•  DSL  エディタがほぼ自動的に作成できてしまう  •  コード生成のための仕組みもある

Xtext  で出来ること

•  デモ  – こんなことが出来ます(エディタ側だけ)

少しは気になりましたか?

•  では、もう少しおつきあいください

Xtext  概要

•  プロジェクト所在場所  –  hIp://www.eclipse.org/Xtext/  –  hIp://www.eclipse.org/xtend/    –  hIp://xtext.itemis.com/  

•  国内活動  –  日本Xtextユーザ会  

•  hIps://groups.google.com/forum/#!forum/xtext-­‐users-­‐japan  •  hIps://sites.google.com/site/xtextusersjapan/  

–  Xtext入門e-­‐book  •  hIp://www.beta-­‐publish.com/  

まずはここから

Eclipse  Modeling  Project

hIp://www.eclipse.org/modeling/  

hIp://www.eclipse.org/Xtext/index.html  

準備作業   •  インストール  

–  updateより全体をダウンロードした方が確実  –  Diagram  Editor  for  Ecore  を追加インストールしておくと作成した文法

の ecore  モデルをクラス図的に確認できる(確認不要の方はインストール不要)  

•  設定  –  workspaceのencodingはUTF-­‐8に設定する  –  Run  configuraUonを使う  –  入力方法(”«»”)  

•  その他  –  Net上に多くのXtext情報があるが、本体が進化し続けているため、最

新版では動作しない場合も往々にしてある  –  YoutubeやVimeoにも動画あり  –  ドキュメンテーションは、まず現住所のものを確認しよう  –  疑問点はマニュアルの他に  forum  や stackoverflow  もチエックしよう  

インストール

おすすめ

hIp://www.eclipse.org/Xtext/download.html  

Diagram  Editor  for  Ecore  インストール

これを選択

Help  -­‐>  Install  New  So`ware  …

workspace

Run  ConfiguraUons これを使います

新規 Xtext  プロジェクト作成画面

こんな  .xtext  ファイルが生成されます

新規 Xtext  プロジェクト作成画面の情報に基づき作成される

我々が書き直す文法定義部分

この文法はサンプル

Xtext  文法例

grammar  org.eclipse.xtext.example.domainmodel.Domainmodel  with  org.eclipse.xtext.xbase.Xbase        generate  domainmodel  "hIp://www.xtext.org/example/Domainmodel"  

org.eclipse.xtext.common.Terminals

言語名の宣言

パッケージ名 .xtextファイル名

別言語とのmixin

生成 Ecore  モデルの Epackage  名宣言

nsURI

Xtext  文法例

Model:    (elements  +=  Element)*;  

  =  右側の規則が1回だけ呼び出される +=  右側の規則が1回以上呼び出される(結果はリスト相当になります) ?=  右側の式が成立した場合、左側の式が真となる(ブーリアン)

?  0または1(つまりオプション) *  0以上 +  1以上

規則の最後は“;”(セミコロン)で締めくくる

規則名

Xtext  文法例

Element:  Datatype  |  SimpleEnUty  ;  

 Datatype:  'type'  name=ID  ;

 terminal  ID  :      ('^')?('a'..'z'|'A'..'Z'|'_')  ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;  

いずれか

ID  は mixin  した別文法で下のように規定される

サンプルプロジェクト紹介

•  GreeUng  – デフォルトの文法  

•  Domainmodel  – 簡単  EnUty  モデル  

•  Domainmodel2  –  Package  と  Import  追加  

•  Domainmodel3  –  Xtend  によるコード生成追加  

•  Domainmodel4  –  JVM  言語化(Xbase他)  

DEMO  -­‐  GREETING

デフォルトの文法    

GreeUng

GreeUng

•  デモで見て貰うポイント  – プロジェクト作成  – デフォルト文法定義  – ArUfacts  生成(Workflow  実行)  – エディタ起動(Run  ConfiguraUon)  – エディタ動作(コード補完)  

DEMO  DOMAINMODEL

簡単  EnUty  モデル    

Domainmodel

Domainmodel

•  デモで見て貰うポイント  – EnUty  文法定義  

•  シンタクスグラフ  

– エディタ動作(コード補完)  – Ecore  ファイル  

•  場所  •  Sample  ReflecUve  Editor  •  ダイアグラム表示  

DEMO  DOMAINMODEL2

Package  と  Import  追加  

Domainmodel2

Domainmodel2

•  デモで見て貰うポイント  – 文法定義:Package  と  Import  の導入  – エディタ動作(モデルの分割)  

DEMO  DOMAINMODEL3

Xtend  によるコード生成追加  

Domainmodel3

Domainmodel3

•  デモで見て貰うポイント  – Xtend  によるコード生成  – 言語の  Unit  Test  の書き方  – カスタムバリデーションの書き方  

– MyDsl  にもコメントアウトのサンプルコード有  

DEMO  DOMAINMODEL4

JVM  言語化(Xbase他)  

Domainmodel4

Domainmodel4

•  デモで見て貰うポイント  – Terminal  から Xbase  へ (Java言語へ)  –  JvmModelInferer    – Xtend  ライブラリ追加  –  Java  コード生成  

ここまでの例題について

•  Domainmodel  から  Domainmodel4  まで、すべて Xtext  DocumentaUon  の  Gevng  Started  セクションで解説されているものです  – 実際に Xtext  をインストールし、これら例題をご自

分で動かしてみることをオススメします  

Example  Projects

•  同梱されている  Example  Projects  – Domainmodel  

•  いろいろなコードが埋め込まれているので参考になります  

– FowlerDSL  (Statemachine)  •  同上  

– ArithmeUcs  (計算)  – Xbase  Tutorial  – Xtend  Tutorial  

Java  コード生成をやりたい方はこれらも試して下さい

私のチャレンジ

•  Xtext  をより上位のモデリングに使えないか、いろいろやってみた  – ビジネスプロセス記述  – サービス(SOA)記述  – エンタプライズアーキテクチャ記述

ビジネスプロセス記述例

モデリング言語は UML  だけじゃない

•  OMG  のモデリング言語  – MOF  – UML  – Metamodels  

Layers  of  Models

Meta-­‐meta  model

Metamodel

Model

Instance  or  Object  Model

Instance  of

conform  to

conform  to

MOF  (CMOF,  EMOF/ecore)

e.g.  UML,  SOA,  BPMN,  …

e.g.  UML  models,  SOA  models,  BPMN  models,  …

M3

M2

M1

M0

Eclipse  と Modeling

•  EMF  関連プロジェクト(一部)

EMF

GEF

+

GMF GraphiU Spray

EmfaUc

Xcore Ecore  Tools

EMF  Text Xtext …

Papyrus

Time

DSLの定義

•  Domain-­‐Specific  Languages  (DSLs)  の定義は MarUn  Fowler  さんの本では次のようになっています  – “a  computer  programming  language  of  limited  expressiveness  focused  on  a  parUcular  domain”  

DSLの分類

•  Internal  (or  embedded)  と External  – ホストとなるプログラミング言語を持つものが Internal  (or  embedded)  DSLs  

– ホストとなるプログラミング言語を持たないものがExternal  DSLs  

•  Graphical  と Textual  – モデルを図式表現するのが Graphical  DSLs  – モデルをテキスト表現するのが Textual  DSLs

GMF

•  ダッシュボード

GMF  で実現できるエディタ例

そのための Ecore  モデル

同じことを Xtext  で書くと

Xtext  のモデル記述

この段階では同じレベル

この段階でも同じレベル

違うのは

•  グラフィカル要素有無  •  Tooling  

–  GMF  •  直観的で分かり易いグラフィカルエディタとなる  •  ツール習得時間が長く、グラフィカルエディタ作成に必要な手数が多い  •  コード生成は別途  

–  Xtext  •  シンプルで一見テキストエディタ(コード補完など有)  •  ツール習得時間が長い(?)  •  コード生成にはXtend  

•  振る舞い記述  –  プロセス記述的なものはグラフィカル記述が優位かも?  

•  Scale  –  要素数が多くなったときに扱い易いのはどちら?(テキスト型?)

Tips

•  メジャーリリース時に Xtext  の  DocumentaUon  を印刷し手元に置いておくといろいろ便利(検索には  HTML  が便利)  

•  Youtube  等の動画サイトに説明ビデオ有り  •  Slideshare  等に説明スライド有り  •  参考になる各種プロジェクト  – hIp://www.eclipse.org/Xtext/community.html

もっとサンプルが見たい

という方のために・・・

……..

hIp://www.eclipse.org/Xtext/community.html  

hIp://www.eclipse.org/Xtext/7languages.html  

hIp://www.eclipse.org/xtend/  

hIp://www.beta-­‐publish.com/  

最後に

•  Xtext/Xtend  はかなり「使える」道具です  

•  皆さんの開発ツールの一つに加えて貰えれば幸いです  

•  日本 Xtext  ユーザ会  –  hIps://sites.google.com/site/xtextusersjapan/    –  hIps://groups.google.com/forum/#!forum/xtext-­‐users-­‐japan    

•  Eclipse  Modeling  勉強会  –  hIps://sites.google.com/site/eclipsemodelingsigjapan/    –  hIps://groups.google.com/forum/#!forum/eclipse-­‐modeling-­‐sig-­‐japan