SlideShare a Scribd company logo
わんくま同盟 名古屋勉強会 #33
一口で何度もおいしい?
DSL(Domain-Specific Language)
2014/11/15(土) You&I
わんくま同盟 名古屋勉強会 #33
ジコ、ショウカイ。
• H/N: You&I(読み:ユーアンドアイ)
• SNS: @you_and_i
• 出身: 生まれも育ちも名古屋市
• 年齢: 30代中盤
• 本職: 商学部出身の職業プログラマ
• 言語: C++, C#他
• 所属: プログラミング生放送勉強会 名古屋支部
名古屋アジャイル勉強会
わんくま同盟 名古屋勉強会
2
わんくま同盟 名古屋勉強会 #33
AGENDA
1. 何がしたいのか
2. DSLとは
3. Xtextとは
4. Xtextの環境構築
5. まとめ
3
わんくま同盟 名古屋勉強会 #33
1. 何がしたいのか
一口で何度もおいしい?DSL
4
わんくま同盟 名古屋勉強会 #33
1. 何がしたいのか(1/9)
楽をしたい
5
わんくま同盟 名古屋勉強会 #33
1. 何がしたいのか(2/9)
ソースコード
を
書きたくない
6
わんくま同盟 名古屋勉強会 #33
1. 何がしたいのか(3/9)
マジで?
本当は
違うでしょ?
7
わんくま同盟 名古屋勉強会 #33
1. 何がしたいのか(4/9)
似たような実装
を何度も
書きたくない
8
わんくま同盟 名古屋勉強会 #33
1. 何がしたいのか(5/9)
でした
9
わんくま同盟 名古屋勉強会 #33
1. 何がしたいのか(6/9)
• 困っている事
– 通信処理(TCP/IP, シリアル)で、それぞれで似たよう
な処理を書いている。
• データ送受信
• データ生成・保存
• 内部データから電文への相互変換
– ネットワークバイトオーダー変換
• テストコード(書いてないけど)
– そしてそのデータ構造にはちょくちょく修正が入る。
10
わんくま同盟 名古屋勉強会 #33
1. 何がしたいのか(7/9)
• 一部出来ている事
– 全てではないが、データ数の定義やデータ項目の初
期値、値域などを設定ファイル化して、ファイル読み込
みで設定する。
– でもその仕組みは、色々なシステムで別な実装形態
となっているし、書式も多種多様になってしまっている。
11
わんくま同盟 名古屋勉強会 #33
1. 何がしたいのか(8/9)
• 出来たら嬉しい事
– データ構造の定義を1つ修正したら、関連するもの
全てが更新される。
• テストコードを修正して、コード書いて、テストを実行するの
も良いです
• ここで言っているのは、定義ファイルを修正する事により、テ
ストコードも実装コードも修正され、あとはビルドしてテスト
実行するだけにしたいと言う事ですね。
12
わんくま同盟 名古屋勉強会 #33
1. 何がしたいのか(9/9)
• その仕組みがDSL(Xtext)で実現できるという話
を先月伺ったので今回調べてみました。
– DSLの定義で以下のものを生成
• C#の送信・受信コード生成
• C#のデータシミュレーター生成
– 勉強会で事例紹介として取り上げていた模様
• 第56回 SEA関西プロセス分科会
• http://sea.jp/kansai/wp/?p=240
• ただ、その事例は凄すぎて今回はそこまでは出来
ません。無理です。
13
わんくま同盟 名古屋勉強会 #33
2. DSLとは
一口で何度もおいしい?DSL
14
わんくま同盟 名古屋勉強会 #33
2. DSLとは(1/4)
• DSLとはDomain-Specific Language、ドメ
イン特化言語(ドメイン固有言語)の事です。
• ドメインは英単語としては領域とか範囲、分野と
いった意味になります。
• DSLのドメインとは何か?を理解するには、
DDD:Domain Driven Design、ドメイン駆
動設計を学ぶのが一番かと思います。ソフトウェア
設計寄りな概念ですね。
15
わんくま同盟 名古屋勉強会 #33
2. DSLとは(2/4)
今回の資料では、
設計、モデリング、ドメイン駆動設計
などで良く使われる単語・用語が
大量に出てきますので、
ご注意下さい。
16
わんくま同盟 名古屋勉強会 #33
2. DSLとは(3/4)
• DSLの種類
– 内部DSLと外部DSL
• 内部DSLは、開発言語と深く結びつき、その言語上で実
装されているDSL(=その言語で記述する)。
• 外部DSLは、ホスト言語とは異なる言語で実装されている
DSL。XMLやMakefile、シェルスクリプトなどが該当する。
– テキストDSLとグラフィカルDSL
• テキストDSLは、DSLの記述をテキスト形式で行うもの。
• グラフィカルDSLは、DSLの記述を図式で行うもの。
17
わんくま同盟 名古屋勉強会 #33
2. DSLとは(4/4)
• よくあるDSLの使われ方
– 画面レイアウト
• VC++, VB
• Windows Forms, XAML
• その他多数の統合開発環境(IDE)のGUI作成ツール
– unixシェルやスクリプト言語
• このような使われ方は、外部DSLとなる。スクリプ
ト言語などはテキスト形式で記述するのでテキス
トDSLとなります。
18
わんくま同盟 名古屋勉強会 #33
3. Xtextとは
一口で何度もおいしい?DSL
19
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(1/12)
• Eclipse Modeling Projectに含まれている
DSL作成環境。
– http://www.eclipse.org/Xtext/
– http://xtext.itemis.com
• Xtextのヘルプ
– 現時点の最新版Eclipse 4.3(luna)のもの
– http://help.eclipse.org/luna/topic/org.ecli
pse.xtext.doc/contents/xtext.html?cp=70
20
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(2/12)
• 外部DSLなテキストDSLを作成する為のフレーム
ワーク。
• 元々はEclipseのoAW(open Architecture
Ware)というモデル駆動開発プロジェクトのサブプ
ロジェクトだった。
21
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(3/12)
• The Grammer Language(文法言語)
– Xtextの基礎を成すもの
– セマンティックモデル
• Xtextの場合は、具体的な構文を記述し、記述内容をメ
モリ表現に紐付けるもの
• セマンティックモデルの構造は、抽象構文木(AST :
Abstruct Syntax Tree)となる。
– 通常の構文木から言語の意味に関係ない情報を取り除き、意味
に関係ある情報のみを取り出した(抽象した)木構造のデータ構造
• DSLからモデルを生成する上でライブラリやフレームワークの
ような役割を果たす。
22
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(4/12)
• The Grammer Languageの構文
1. 言語定義
2. EPackage定義
3. ルール
4. パーサールール
5. 構文の述語
23
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(5/12)
24
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals
generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"
Model:
(elements += Element)*;
Element:
Datatype | SimpleEntity ;
Datatype:
'type' name=ID ;
SimpleEntity:
'simpleEntity' name=ID ( 'extends' superClass=[SimpleEntity] )? '{'
properties+=Property*
references+=Reference*
'}';
Property:
'property' name=ID ':' propertyType=[Element];
Reference:
'reference' name=ID ':' refereceEntity=[SimpleEntity] (many?='[]')? ;
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(6/12)
1. 言語定義
– 「grammar」から始まる定義部
– DSLの言語名を定義する部分。
25
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(7/12)
2. EPackage定義
– 「generate」から始まる定義部
– Xtextパーサーは、テキスト処理中にメモリオブジェクト
グラフ(EMF:Eclipse Modeling Frameworkの
Ecoreモデル)を生成します。
• Ecoreモデルは以下の要素から成ります
– EPackage
– EClasses
– EDataTypes
– EEnums
26
generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(8/12)
3. ルール
– 「terminal」から始まる定義部
– パース処理を以下のフェーズに分類
• 字句解析
• パース
• リンク
• 検証
– 基本データ型(ID, INT, STRING,
ML_COMMENT, SL_COMMENT, WS)について、
値域や入力規則などの定義を行う。
27
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(8.5/12)
3. ルール(続き)
28
terminal ID : '^'?('a'..'z'|'A'..'Z'|'_')
('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
terminal INT returns ecore::EInt: ('0'..'9')+;
terminal STRING:
'"' ( '¥¥' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'¥¥' */
| !('¥¥'|'"') )* '"' |
"'" ( '¥¥' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'¥¥' */
| !('¥¥'|"'") )* "'"
;
terminal ML_COMMENT: '/*' -> '*/';
terminal SL_COMMENT : '//' !('¥n'|'¥r')* ('¥r'? '¥n')?;
terminal WS: (' '|'¥t'|'¥r'|'¥n')+;
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(9/12)
4. パーサールール
– 「XXX : ~ ;」の定義部
– ルールで定義された基本データ型を組み合わせて、ク
ラス定義を行う。
• モデル定義
• クラス名定義
• クラスのメンバ関数、メンバ変数定義
29
Model:
(elements+=Element)*;
Element:
Datatype | SimpleEntity ;
Datatype:
'type' name=ID ;
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(10/12)
5. 構文の述語
– if文のネスト等の曖昧な文法表現が起こった場合の
定義を行う。
30
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(11/12)
• 内部構成
– 言語生成器
• MWE2(The Modeling Workflow Engine 2)を利用
してDSLの言語を生成する。
• MWE2は更にANTLR(ANnother Tool for
Language Recognition)を使ってパーサーとレキサーを
生成する。
– DI(Dependency Injection)
• Google Guiceを利用して、クラスやインターフェースの依
存関係を定義する。
– CI(Continuous Integration)
• Mavenを利用して、作成したDSL定義をビルドする。
31
わんくま同盟 名古屋勉強会 #33
3. Xtextとは(12/12)
• その他
– Xtextだけでも、DSLから言語を定義してコード生成
する事は可能ですが、既存言語に対してまた一から
DSLを書いていくのは大変ですね。
– Java向けの言語テンプレートを定義したXpandとい
うテンプレートエンジンがEclipseには含まれています。
32
わんくま同盟 名古屋勉強会 #33
4. Xtextの環境構築
一口で何度もおいしい?DSL
33
わんくま同盟 名古屋勉強会 #33
4. Xtextの環境構築(1/7)
• Java SE
– Eclipseを実行するには、Java SEのRuntime
(JRE)又はJDKがインストールされている必要がありま
す。
• Oracle Java SE Downloads
• http://www.oracle.com/technetwork/java/jav
ase/downloads/index.html
34
わんくま同盟 名古屋勉強会 #33
4. Xtextの環境構築(2/7)
• Eclipse本体
– 公式サイトから入手するか、日本語表示をしたいので
あれば、Pleiades All in Oneをインストールします。
– Eclipse公式
• https://www.eclipse.org/downloads/
• Eclipse IDE for Java and DSL Developersをダウン
ロードする。
– Pleiades All in One
• http://mergedoc.sourceforge.jp/index.html#pl
eiades.html
• Javaパッケージ版をダウンロードすればXtextは含まれてい
る。
35
わんくま同盟 名古屋勉強会 #33
4. Xtextの環境構築(3/7)
• Xtextプロジェクトの作成
36
わんくま同盟 名古屋勉強会 #33
4. Xtextの環境構築(4/7)
• Xtextのプロジェクトを作成すると、以下のプロジェ
クトが作成されます。
1. 「xxxdsl」プロジェクト
• DSL定義
2. 「xxxdsl.tests」プロジェクト
• DSLのテスト
3. 「xxxdsl.sdk」プロジェクト
• DSLで作成した言語のEclipseプラグイン生成
– 作成したDSLのインテリセンスによる入力補助で使われます。
4. 「xxxdsl.ui」プロジェクト
• DSL定義のUIプロジェクト
37
わんくま同盟 名古屋勉強会 #33
4. Xtextの環境構築(5/7)
• 開発時はXtextのプロジェクト毎にEclipseのワー
クスペースを用意するのが良いかも知れないです。
38
わんくま同盟 名古屋勉強会 #33
4. Xtextの環境構築(6/7)
• DSLから言語を生成するには
1. DSLのプロジェクトの[src] –
[org.xtext.example.XXX]の下にある
「XXX.xtext」の右クリックメニューを開く
2. 右クリックメニューの[実行(R)] - [Generate
Xtext Artifacts]を開く
3. 環境構築して初回の実行時はANTLRのダウンロー
ド確認メッセージが表示されるので、コンソールで
「Y」を入力してダウンロードする。
4. Javaのソースコードなど沢山生成されます。
39
わんくま同盟 名古屋勉強会 #33
4. Xtextの環境構築(7/7)
40
わんくま同盟 名古屋勉強会 #33
5. まとめ
一口で何度もおいしい?DSL
41
わんくま同盟 名古屋勉強会 #33
5. まとめ
• 仕組みを理解して使いこなすのは、難しそうです
ね・・・
42

More Related Content

Viewers also liked

パターンを活用したチーム活動を体験しよう
パターンを活用したチーム活動を体験しようパターンを活用したチーム活動を体験しよう
パターンを活用したチーム活動を体験しようYou&I
 
POStudy Day 2013 Spring in Tokyo - 振り返り結果 - 体験!Fearless Journeyでパターンによる改善
POStudy Day 2013 Spring in Tokyo - 振り返り結果 - 体験!Fearless Journeyでパターンによる改善POStudy Day 2013 Spring in Tokyo - 振り返り結果 - 体験!Fearless Journeyでパターンによる改善
POStudy Day 2013 Spring in Tokyo - 振り返り結果 - 体験!Fearless Journeyでパターンによる改善満徳 関
 
Agile Japan 2013 仙台サテライト クロージング・振り返り:Agile Japan 2013 ワールド・カフェ ~ともに創ろう、日本のアジャイル!
Agile Japan 2013 仙台サテライト クロージング・振り返り:Agile Japan 2013 ワールド・カフェ ~ともに創ろう、日本のアジャイル!Agile Japan 2013 仙台サテライト クロージング・振り返り:Agile Japan 2013 ワールド・カフェ ~ともに創ろう、日本のアジャイル!
Agile Japan 2013 仙台サテライト クロージング・振り返り:Agile Japan 2013 ワールド・カフェ ~ともに創ろう、日本のアジャイル!満徳 関
 
ユーザーストーリーワークショップ
ユーザーストーリーワークショップユーザーストーリーワークショップ
ユーザーストーリーワークショップYou&I
 
Fearlessjourney-postudy
Fearlessjourney-postudyFearlessjourney-postudy
Fearlessjourney-postudyMasanori Kado
 
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう増田 亨
 
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発Mao Ohnishi
 

Viewers also liked (12)

パターンを活用したチーム活動を体験しよう
パターンを活用したチーム活動を体験しようパターンを活用したチーム活動を体験しよう
パターンを活用したチーム活動を体験しよう
 
当日のお楽しみ
当日のお楽しみ当日のお楽しみ
当日のお楽しみ
 
POStudy Day 2013 Spring in Tokyo - 振り返り結果 - 体験!Fearless Journeyでパターンによる改善
POStudy Day 2013 Spring in Tokyo - 振り返り結果 - 体験!Fearless Journeyでパターンによる改善POStudy Day 2013 Spring in Tokyo - 振り返り結果 - 体験!Fearless Journeyでパターンによる改善
POStudy Day 2013 Spring in Tokyo - 振り返り結果 - 体験!Fearless Journeyでパターンによる改善
 
Agile Japan 2013 仙台サテライト クロージング・振り返り:Agile Japan 2013 ワールド・カフェ ~ともに創ろう、日本のアジャイル!
Agile Japan 2013 仙台サテライト クロージング・振り返り:Agile Japan 2013 ワールド・カフェ ~ともに創ろう、日本のアジャイル!Agile Japan 2013 仙台サテライト クロージング・振り返り:Agile Japan 2013 ワールド・カフェ ~ともに創ろう、日本のアジャイル!
Agile Japan 2013 仙台サテライト クロージング・振り返り:Agile Japan 2013 ワールド・カフェ ~ともに創ろう、日本のアジャイル!
 
初めてのDocker
初めてのDocker初めてのDocker
初めてのDocker
 
ユーザーストーリーワークショップ
ユーザーストーリーワークショップユーザーストーリーワークショップ
ユーザーストーリーワークショップ
 
SWでKYT
SWでKYTSWでKYT
SWでKYT
 
Fearlessjourney-postudy
Fearlessjourney-postudyFearlessjourney-postudy
Fearlessjourney-postudy
 
Fearless Journey
Fearless JourneyFearless Journey
Fearless Journey
 
Xtext 紹介
Xtext 紹介Xtext 紹介
Xtext 紹介
 
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
 
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発
 

Similar to 一口で何度もおいしい?DSL

Xtextハンズオン(仮)
Xtextハンズオン(仮)Xtextハンズオン(仮)
Xtextハンズオン(仮)You&I
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
蔵書選定のための学位論文タイトルマイニング
蔵書選定のための学位論文タイトルマイニング蔵書選定のための学位論文タイトルマイニング
蔵書選定のための学位論文タイトルマイニングgenroku
 
個人的なさがしもののはなし #rubyhiroba
個人的なさがしもののはなし #rubyhiroba個人的なさがしもののはなし #rubyhiroba
個人的なさがしもののはなし #rubyhirobaTakeshi Komiya
 
Catchでお手軽にテストコード書いてみよう
Catchでお手軽にテストコード書いてみようCatchでお手軽にテストコード書いてみよう
Catchでお手軽にテストコード書いてみようYou&I
 
Eclipse modeling 勉強会 はじめに
Eclipse modeling 勉強会 はじめにEclipse modeling 勉強会 はじめに
Eclipse modeling 勉強会 はじめにAkira Tanaka
 
Team Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるTeam Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるYou&I
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門Daiyu Hatakeyama
 
AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21Yuki Higuchi
 
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介Hiromu Yakura
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
MinChain – Bitcoin ライクな最小限のブロックチェーン実装
MinChain – Bitcoin ライクな最小限のブロックチェーン実装MinChain – Bitcoin ライクな最小限のブロックチェーン実装
MinChain – Bitcoin ライクな最小限のブロックチェーン実装Yuto Takei
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介Akira Tanaka
 
サブカルのためのWord2vec
サブカルのためのWord2vecサブカルのためのWord2vec
サブカルのためのWord2vecDeNA
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしようYasuhiro Yoshimura
 
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Ken SASAKI
 
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Tatsuya Tojima
 

Similar to 一口で何度もおいしい?DSL (20)

Xtextハンズオン(仮)
Xtextハンズオン(仮)Xtextハンズオン(仮)
Xtextハンズオン(仮)
 
japan teacher
japan teacherjapan teacher
japan teacher
 
KOGEI & KAIT Funnel WS
KOGEI & KAIT Funnel WSKOGEI & KAIT Funnel WS
KOGEI & KAIT Funnel WS
 
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pubScrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
蔵書選定のための学位論文タイトルマイニング
蔵書選定のための学位論文タイトルマイニング蔵書選定のための学位論文タイトルマイニング
蔵書選定のための学位論文タイトルマイニング
 
個人的なさがしもののはなし #rubyhiroba
個人的なさがしもののはなし #rubyhiroba個人的なさがしもののはなし #rubyhiroba
個人的なさがしもののはなし #rubyhiroba
 
Catchでお手軽にテストコード書いてみよう
Catchでお手軽にテストコード書いてみようCatchでお手軽にテストコード書いてみよう
Catchでお手軽にテストコード書いてみよう
 
Eclipse modeling 勉強会 はじめに
Eclipse modeling 勉強会 はじめにEclipse modeling 勉強会 はじめに
Eclipse modeling 勉強会 はじめに
 
Team Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみるTeam Foundation Serivceを使ってみる
Team Foundation Serivceを使ってみる
 
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
 
AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21AozoraYomite @InfoTalk 2012/12/21
AozoraYomite @InfoTalk 2012/12/21
 
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
MinChain – Bitcoin ライクな最小限のブロックチェーン実装
MinChain – Bitcoin ライクな最小限のブロックチェーン実装MinChain – Bitcoin ライクな最小限のブロックチェーン実装
MinChain – Bitcoin ライクな最小限のブロックチェーン実装
 
Eclipse xtext 紹介
Eclipse xtext 紹介Eclipse xtext 紹介
Eclipse xtext 紹介
 
サブカルのためのWord2vec
サブカルのためのWord2vecサブカルのためのWord2vec
サブカルのためのWord2vec
 
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
【関東GPGPU勉強会#3】OpenCVの新機能 UMatを先取りしよう
 
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01
 
Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門Python による 「スクレイピング & 自然言語処理」入門
Python による 「スクレイピング & 自然言語処理」入門
 

Recently uploaded

論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizesatsushi061452
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptxssuserbefd24
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...atsushi061452
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルCRI Japan, Inc.
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matchingharmonylab
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptxyassun7010
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)NTT DATA Technology & Innovation
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance
 

Recently uploaded (14)

論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 

一口で何度もおいしい?DSL

  • 2. わんくま同盟 名古屋勉強会 #33 ジコ、ショウカイ。 • H/N: You&I(読み:ユーアンドアイ) • SNS: @you_and_i • 出身: 生まれも育ちも名古屋市 • 年齢: 30代中盤 • 本職: 商学部出身の職業プログラマ • 言語: C++, C#他 • 所属: プログラミング生放送勉強会 名古屋支部 名古屋アジャイル勉強会 わんくま同盟 名古屋勉強会 2
  • 3. わんくま同盟 名古屋勉強会 #33 AGENDA 1. 何がしたいのか 2. DSLとは 3. Xtextとは 4. Xtextの環境構築 5. まとめ 3
  • 4. わんくま同盟 名古屋勉強会 #33 1. 何がしたいのか 一口で何度もおいしい?DSL 4
  • 5. わんくま同盟 名古屋勉強会 #33 1. 何がしたいのか(1/9) 楽をしたい 5
  • 6. わんくま同盟 名古屋勉強会 #33 1. 何がしたいのか(2/9) ソースコード を 書きたくない 6
  • 7. わんくま同盟 名古屋勉強会 #33 1. 何がしたいのか(3/9) マジで? 本当は 違うでしょ? 7
  • 8. わんくま同盟 名古屋勉強会 #33 1. 何がしたいのか(4/9) 似たような実装 を何度も 書きたくない 8
  • 9. わんくま同盟 名古屋勉強会 #33 1. 何がしたいのか(5/9) でした 9
  • 10. わんくま同盟 名古屋勉強会 #33 1. 何がしたいのか(6/9) • 困っている事 – 通信処理(TCP/IP, シリアル)で、それぞれで似たよう な処理を書いている。 • データ送受信 • データ生成・保存 • 内部データから電文への相互変換 – ネットワークバイトオーダー変換 • テストコード(書いてないけど) – そしてそのデータ構造にはちょくちょく修正が入る。 10
  • 11. わんくま同盟 名古屋勉強会 #33 1. 何がしたいのか(7/9) • 一部出来ている事 – 全てではないが、データ数の定義やデータ項目の初 期値、値域などを設定ファイル化して、ファイル読み込 みで設定する。 – でもその仕組みは、色々なシステムで別な実装形態 となっているし、書式も多種多様になってしまっている。 11
  • 12. わんくま同盟 名古屋勉強会 #33 1. 何がしたいのか(8/9) • 出来たら嬉しい事 – データ構造の定義を1つ修正したら、関連するもの 全てが更新される。 • テストコードを修正して、コード書いて、テストを実行するの も良いです • ここで言っているのは、定義ファイルを修正する事により、テ ストコードも実装コードも修正され、あとはビルドしてテスト 実行するだけにしたいと言う事ですね。 12
  • 13. わんくま同盟 名古屋勉強会 #33 1. 何がしたいのか(9/9) • その仕組みがDSL(Xtext)で実現できるという話 を先月伺ったので今回調べてみました。 – DSLの定義で以下のものを生成 • C#の送信・受信コード生成 • C#のデータシミュレーター生成 – 勉強会で事例紹介として取り上げていた模様 • 第56回 SEA関西プロセス分科会 • http://sea.jp/kansai/wp/?p=240 • ただ、その事例は凄すぎて今回はそこまでは出来 ません。無理です。 13
  • 14. わんくま同盟 名古屋勉強会 #33 2. DSLとは 一口で何度もおいしい?DSL 14
  • 15. わんくま同盟 名古屋勉強会 #33 2. DSLとは(1/4) • DSLとはDomain-Specific Language、ドメ イン特化言語(ドメイン固有言語)の事です。 • ドメインは英単語としては領域とか範囲、分野と いった意味になります。 • DSLのドメインとは何か?を理解するには、 DDD:Domain Driven Design、ドメイン駆 動設計を学ぶのが一番かと思います。ソフトウェア 設計寄りな概念ですね。 15
  • 16. わんくま同盟 名古屋勉強会 #33 2. DSLとは(2/4) 今回の資料では、 設計、モデリング、ドメイン駆動設計 などで良く使われる単語・用語が 大量に出てきますので、 ご注意下さい。 16
  • 17. わんくま同盟 名古屋勉強会 #33 2. DSLとは(3/4) • DSLの種類 – 内部DSLと外部DSL • 内部DSLは、開発言語と深く結びつき、その言語上で実 装されているDSL(=その言語で記述する)。 • 外部DSLは、ホスト言語とは異なる言語で実装されている DSL。XMLやMakefile、シェルスクリプトなどが該当する。 – テキストDSLとグラフィカルDSL • テキストDSLは、DSLの記述をテキスト形式で行うもの。 • グラフィカルDSLは、DSLの記述を図式で行うもの。 17
  • 18. わんくま同盟 名古屋勉強会 #33 2. DSLとは(4/4) • よくあるDSLの使われ方 – 画面レイアウト • VC++, VB • Windows Forms, XAML • その他多数の統合開発環境(IDE)のGUI作成ツール – unixシェルやスクリプト言語 • このような使われ方は、外部DSLとなる。スクリプ ト言語などはテキスト形式で記述するのでテキス トDSLとなります。 18
  • 19. わんくま同盟 名古屋勉強会 #33 3. Xtextとは 一口で何度もおいしい?DSL 19
  • 20. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(1/12) • Eclipse Modeling Projectに含まれている DSL作成環境。 – http://www.eclipse.org/Xtext/ – http://xtext.itemis.com • Xtextのヘルプ – 現時点の最新版Eclipse 4.3(luna)のもの – http://help.eclipse.org/luna/topic/org.ecli pse.xtext.doc/contents/xtext.html?cp=70 20
  • 21. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(2/12) • 外部DSLなテキストDSLを作成する為のフレーム ワーク。 • 元々はEclipseのoAW(open Architecture Ware)というモデル駆動開発プロジェクトのサブプ ロジェクトだった。 21
  • 22. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(3/12) • The Grammer Language(文法言語) – Xtextの基礎を成すもの – セマンティックモデル • Xtextの場合は、具体的な構文を記述し、記述内容をメ モリ表現に紐付けるもの • セマンティックモデルの構造は、抽象構文木(AST : Abstruct Syntax Tree)となる。 – 通常の構文木から言語の意味に関係ない情報を取り除き、意味 に関係ある情報のみを取り出した(抽象した)木構造のデータ構造 • DSLからモデルを生成する上でライブラリやフレームワークの ような役割を果たす。 22
  • 23. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(4/12) • The Grammer Languageの構文 1. 言語定義 2. EPackage定義 3. ルール 4. パーサールール 5. 構文の述語 23
  • 24. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(5/12) 24 grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals generate myDsl "http://www.xtext.org/example/mydsl/MyDsl" Model: (elements += Element)*; Element: Datatype | SimpleEntity ; Datatype: 'type' name=ID ; SimpleEntity: 'simpleEntity' name=ID ( 'extends' superClass=[SimpleEntity] )? '{' properties+=Property* references+=Reference* '}'; Property: 'property' name=ID ':' propertyType=[Element]; Reference: 'reference' name=ID ':' refereceEntity=[SimpleEntity] (many?='[]')? ;
  • 25. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(6/12) 1. 言語定義 – 「grammar」から始まる定義部 – DSLの言語名を定義する部分。 25 grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals
  • 26. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(7/12) 2. EPackage定義 – 「generate」から始まる定義部 – Xtextパーサーは、テキスト処理中にメモリオブジェクト グラフ(EMF:Eclipse Modeling Frameworkの Ecoreモデル)を生成します。 • Ecoreモデルは以下の要素から成ります – EPackage – EClasses – EDataTypes – EEnums 26 generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"
  • 27. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(8/12) 3. ルール – 「terminal」から始まる定義部 – パース処理を以下のフェーズに分類 • 字句解析 • パース • リンク • 検証 – 基本データ型(ID, INT, STRING, ML_COMMENT, SL_COMMENT, WS)について、 値域や入力規則などの定義を行う。 27
  • 28. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(8.5/12) 3. ルール(続き) 28 terminal ID : '^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*; terminal INT returns ecore::EInt: ('0'..'9')+; terminal STRING: '"' ( '¥¥' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'¥¥' */ | !('¥¥'|'"') )* '"' | "'" ( '¥¥' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'¥¥' */ | !('¥¥'|"'") )* "'" ; terminal ML_COMMENT: '/*' -> '*/'; terminal SL_COMMENT : '//' !('¥n'|'¥r')* ('¥r'? '¥n')?; terminal WS: (' '|'¥t'|'¥r'|'¥n')+;
  • 29. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(9/12) 4. パーサールール – 「XXX : ~ ;」の定義部 – ルールで定義された基本データ型を組み合わせて、ク ラス定義を行う。 • モデル定義 • クラス名定義 • クラスのメンバ関数、メンバ変数定義 29 Model: (elements+=Element)*; Element: Datatype | SimpleEntity ; Datatype: 'type' name=ID ;
  • 30. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(10/12) 5. 構文の述語 – if文のネスト等の曖昧な文法表現が起こった場合の 定義を行う。 30
  • 31. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(11/12) • 内部構成 – 言語生成器 • MWE2(The Modeling Workflow Engine 2)を利用 してDSLの言語を生成する。 • MWE2は更にANTLR(ANnother Tool for Language Recognition)を使ってパーサーとレキサーを 生成する。 – DI(Dependency Injection) • Google Guiceを利用して、クラスやインターフェースの依 存関係を定義する。 – CI(Continuous Integration) • Mavenを利用して、作成したDSL定義をビルドする。 31
  • 32. わんくま同盟 名古屋勉強会 #33 3. Xtextとは(12/12) • その他 – Xtextだけでも、DSLから言語を定義してコード生成 する事は可能ですが、既存言語に対してまた一から DSLを書いていくのは大変ですね。 – Java向けの言語テンプレートを定義したXpandとい うテンプレートエンジンがEclipseには含まれています。 32
  • 33. わんくま同盟 名古屋勉強会 #33 4. Xtextの環境構築 一口で何度もおいしい?DSL 33
  • 34. わんくま同盟 名古屋勉強会 #33 4. Xtextの環境構築(1/7) • Java SE – Eclipseを実行するには、Java SEのRuntime (JRE)又はJDKがインストールされている必要がありま す。 • Oracle Java SE Downloads • http://www.oracle.com/technetwork/java/jav ase/downloads/index.html 34
  • 35. わんくま同盟 名古屋勉強会 #33 4. Xtextの環境構築(2/7) • Eclipse本体 – 公式サイトから入手するか、日本語表示をしたいので あれば、Pleiades All in Oneをインストールします。 – Eclipse公式 • https://www.eclipse.org/downloads/ • Eclipse IDE for Java and DSL Developersをダウン ロードする。 – Pleiades All in One • http://mergedoc.sourceforge.jp/index.html#pl eiades.html • Javaパッケージ版をダウンロードすればXtextは含まれてい る。 35
  • 36. わんくま同盟 名古屋勉強会 #33 4. Xtextの環境構築(3/7) • Xtextプロジェクトの作成 36
  • 37. わんくま同盟 名古屋勉強会 #33 4. Xtextの環境構築(4/7) • Xtextのプロジェクトを作成すると、以下のプロジェ クトが作成されます。 1. 「xxxdsl」プロジェクト • DSL定義 2. 「xxxdsl.tests」プロジェクト • DSLのテスト 3. 「xxxdsl.sdk」プロジェクト • DSLで作成した言語のEclipseプラグイン生成 – 作成したDSLのインテリセンスによる入力補助で使われます。 4. 「xxxdsl.ui」プロジェクト • DSL定義のUIプロジェクト 37
  • 38. わんくま同盟 名古屋勉強会 #33 4. Xtextの環境構築(5/7) • 開発時はXtextのプロジェクト毎にEclipseのワー クスペースを用意するのが良いかも知れないです。 38
  • 39. わんくま同盟 名古屋勉強会 #33 4. Xtextの環境構築(6/7) • DSLから言語を生成するには 1. DSLのプロジェクトの[src] – [org.xtext.example.XXX]の下にある 「XXX.xtext」の右クリックメニューを開く 2. 右クリックメニューの[実行(R)] - [Generate Xtext Artifacts]を開く 3. 環境構築して初回の実行時はANTLRのダウンロー ド確認メッセージが表示されるので、コンソールで 「Y」を入力してダウンロードする。 4. Javaのソースコードなど沢山生成されます。 39
  • 40. わんくま同盟 名古屋勉強会 #33 4. Xtextの環境構築(7/7) 40
  • 41. わんくま同盟 名古屋勉強会 #33 5. まとめ 一口で何度もおいしい?DSL 41
  • 42. わんくま同盟 名古屋勉強会 #33 5. まとめ • 仕組みを理解して使いこなすのは、難しそうです ね・・・ 42