Eclipse xtext 紹介

60
テキスト型 DSL 開発フレームワーク Xtext 田中 ビューファイブ LLC Xtext ユーザ会/Eclipse Modeling 勉強会

description

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

Transcript of Eclipse xtext 紹介

Page 1: Eclipse xtext 紹介

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

Xtext

 

田中    

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

Page 2: Eclipse xtext 紹介

自己紹介

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

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

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

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

Page 3: Eclipse xtext 紹介

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)

Page 4: Eclipse xtext 紹介

アジェンダ

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

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

•  Sample  Projects  – 例題  

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

Page 5: Eclipse xtext 紹介

簡単にいうと

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

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

Page 6: Eclipse xtext 紹介

Xtext  で出来ること

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

Page 7: Eclipse xtext 紹介

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

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

Page 8: Eclipse 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/  

まずはここから

Page 9: Eclipse xtext 紹介

Eclipse  Modeling  Project

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

Page 10: Eclipse xtext 紹介

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

Page 11: Eclipse xtext 紹介

準備作業   •  インストール  

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

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

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

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

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

Page 12: Eclipse xtext 紹介

インストール

おすすめ

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

Page 13: Eclipse xtext 紹介

Diagram  Editor  for  Ecore  インストール

これを選択

Help  -­‐>  Install  New  So`ware  …

Page 14: Eclipse xtext 紹介

workspace

Page 15: Eclipse xtext 紹介

Run  ConfiguraUons これを使います

Page 16: Eclipse xtext 紹介

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

Page 17: Eclipse xtext 紹介

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

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

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

この文法はサンプル

Page 18: Eclipse 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

Page 19: Eclipse xtext 紹介

Xtext  文法例

Model:    (elements  +=  Element)*;  

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

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

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

規則名

Page 20: Eclipse xtext 紹介

Xtext  文法例

Element:  Datatype  |  SimpleEnUty  ;  

 Datatype:  'type'  name=ID  ;

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

いずれか

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

Page 21: Eclipse xtext 紹介

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

•  GreeUng  – デフォルトの文法  

•  Domainmodel  – 簡単  EnUty  モデル  

•  Domainmodel2  –  Package  と  Import  追加  

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

•  Domainmodel4  –  JVM  言語化(Xbase他)  

Page 22: Eclipse xtext 紹介

DEMO  -­‐  GREETING

デフォルトの文法    

Page 23: Eclipse xtext 紹介

GreeUng

Page 24: Eclipse xtext 紹介

GreeUng

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

Page 25: Eclipse xtext 紹介

DEMO  DOMAINMODEL

簡単  EnUty  モデル    

Page 26: Eclipse xtext 紹介

Domainmodel

Page 27: Eclipse xtext 紹介

Domainmodel

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

•  シンタクスグラフ  

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

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

Page 28: Eclipse xtext 紹介

DEMO  DOMAINMODEL2

Package  と  Import  追加  

Page 29: Eclipse xtext 紹介

Domainmodel2

Page 30: Eclipse xtext 紹介

Domainmodel2

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

Page 31: Eclipse xtext 紹介

DEMO  DOMAINMODEL3

Xtend  によるコード生成追加  

Page 32: Eclipse xtext 紹介

Domainmodel3

Page 33: Eclipse xtext 紹介

Domainmodel3

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

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

Page 34: Eclipse xtext 紹介

DEMO  DOMAINMODEL4

JVM  言語化(Xbase他)  

Page 35: Eclipse xtext 紹介

Domainmodel4

Page 36: Eclipse xtext 紹介

Domainmodel4

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

Page 37: Eclipse xtext 紹介

ここまでの例題について

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

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

Page 38: Eclipse xtext 紹介

Example  Projects

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

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

– FowlerDSL  (Statemachine)  •  同上  

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

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

Page 39: Eclipse xtext 紹介

私のチャレンジ

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

Page 40: Eclipse xtext 紹介

ビジネスプロセス記述例

Page 41: Eclipse xtext 紹介

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

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

Page 42: Eclipse xtext 紹介

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

Page 43: Eclipse xtext 紹介

Eclipse  と Modeling

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

EMF

GEF

+

GMF GraphiU Spray

EmfaUc

Xcore Ecore  Tools

EMF  Text Xtext …

Papyrus

Time

Page 44: Eclipse xtext 紹介

DSLの定義

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

Page 45: Eclipse xtext 紹介

DSLの分類

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

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

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

Page 46: Eclipse xtext 紹介

GMF

•  ダッシュボード

Page 47: Eclipse xtext 紹介

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

Page 48: Eclipse xtext 紹介

そのための Ecore  モデル

Page 49: Eclipse xtext 紹介

同じことを Xtext  で書くと

Page 50: Eclipse xtext 紹介

Xtext  のモデル記述

Page 51: Eclipse xtext 紹介

この段階では同じレベル

Page 52: Eclipse xtext 紹介

この段階でも同じレベル

Page 53: Eclipse xtext 紹介

違うのは

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

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

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

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

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

Page 54: Eclipse xtext 紹介

Tips

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

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

Page 55: Eclipse xtext 紹介

もっとサンプルが見たい

という方のために・・・

Page 56: Eclipse xtext 紹介

……..

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

Page 57: Eclipse xtext 紹介

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

Page 58: Eclipse xtext 紹介

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

Page 59: Eclipse xtext 紹介

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

Page 60: Eclipse xtext 紹介

最後に

•  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