ããžãã¹ã¢ããªã±ãŒã·ã§ã³ã®éçºã¯ãããŒã¿ã¹ãã¬ãŒãžãããžãã¹ããžãã¯ã®åŠçããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®èšèšãªã©ãããŸããŸãªåéã®åé¡ã®è§£æ±ºã«é¢é£ããŠããŸãã çç£æ§ãšå質ãåäžãããã«ã¯ãåäžã®ãã¡ã€ã³åºæèšèªïŒDSLïŒã ãã§ã¯ååã§ã¯ãããŸãããååã«çµ±åãããŠããªãå Žåã¯å°æ°ã§ãã éèŠãªæ¹åã¯ãããŸããŸãªäž»é¡åéã®ã¢ãã«ãœãªã¥ãŒã·ã§ã³ã«è€æ°ã®DSLãäžè²«ããŠé©çšããå šäœçãªã¢ãããŒãã«ãã£ãŠã®ã¿ããããããŸãã
ãã®èšäºã§ã¯ãDSLã®äŸãèŠãŠãããŸããDSLã䜿çšããŠã modellwerkstatt.orgã§ããžãã¹ã¢ããªã±ãŒã·ã§ã³çšã®æšæºåããããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãã¢ãã«åããŸãã DSLã«åºæã®ããžãã¯ã䜿çšãããšããªããžã§ã¯ãã®ã°ã©ããå®å šãã€éåžžã«åçŽãªå®£èšçãªæ¹æ³ã§èŠèŠåã§ããŸãã 察話ã§ããéåžžã®Javaã³ãŒããå®è£ ããã®ãããã«ç°¡åãã瀺ããŸããããã«ãããç¹ã«åã®å®å šæ§ã«ãããŠãæè»æ§ãšã»ãã¥ãªãã£ãããã«åäžããŸãã å éšDSLãšå€éšDSLã®éããææãã JetBrains MPSã«é²ã¿ãããã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®DSLã調ã¹ãŸãã æåŸã«ãDSLã®çžäºäœçšããã³æ¡åŒµã«é¢ããäžè¬çãªèæ ®äºé ãããã€ã瀺ããŸãã
å éšããã³å€éšDSL
ãã¡ã€ã³åºæã®èšèªã¯ãçŸä»£ã®ãœãããŠã§ã¢ã¢ããªã±ãŒã·ã§ã³éçºã§åºã䜿çšãããŠããŸãã ãããã°ã©ãã³ã°ã®ç¯å²ãè¶ ããŠæœè±¡åã®ã¬ãã«ãåããç¹å®ã®äž»é¡åéã®æŠå¿µãšã«ãŒã«ãçŽæ¥äœ¿çšãããœãªã¥ãŒã·ã§ã³ãèšå®ããããã°ã©ãã³ã°èšèªããšããå®çŸ©ãäžããããšãã§ããŸãã ïŒã±ãªãŒãšãã«ããã³ã2008ïŒã JavaãKotlinãªã©ã®æ±çšèšèªïŒGPLïŒã¯ããŸããŸãªãµããžã§ã¯ãé åã§åºã䜿çšãããŠããŸããããµããžã§ã¯ãæåèšèªã¯ç¹å®ã®ãµããžã§ã¯ãé åã«é©åããŠããããããã®é åã§éåžžã«é«ãå¹çãåŸãããŸãã ãã®ãããªèšèªã¯ã解決ãããåé¡ã«é©åãªæœè±¡åãæäŸãããœãªã¥ãŒã·ã§ã³ãç°¡æœãã€ç°¡æœã«è¡šçŸããããšãå¯èœã«ãããã®ãããªãœãªã¥ãŒã·ã§ã³ã®äœ¿çšã¯ãã°ãã°ããã°ã©ããŒã®è³æ Œãå¿ èŠãšããŸããã
å€ãã®å ŽåãDSLã®äŸã¯SQLã¯ãšãªèšèªã§ãã SQLã䜿çšãããšãããã°ã©ãã³ã°ã¹ãã«ããªããŠãããŒã¿ãããŒãã«ãããŒã¿ããŒã¹ãåŠçã§ããŸãã SQLã¯ããè¡ãšåã®ããŒã¿ããµããžã§ã¯ãé åã®ããã§ãããããæŽæ°ããªã©ã®ç¹å®ã®æŠå¿µã«ãããé«åºŠãªæœè±¡åãæäŸããŸãã SQLèšèªã¯æ確ã§è¡šçŸåè±ãã§ãããåæã«ãŠãŒã¶ãŒãç¹å®ã®ãµããžã§ã¯ããšãªã¢ã«ãªãããããŸãã CSSãæ£èŠè¡šçŸãXPathãªã©ã®DSLãæåã§ãã ãããã®ããŠãããŒãµã«ãDSLã«å ããŠãå€ãã®é«åºŠã«å°éåãããDSLãäœæãããåã ã®çµç¹ã§äž»é¡ã®ç¥èãä¿®æ£ããäžè¬çãªèšèªã§çµ±äžã³ãŒããèªåçã«çæããŸãã
æ®åããŠããã®ã¯ãããŒã¹GPLã«åºã¥ãããããããå éšDSLã§ãã ãå éšDSLã¯ãæ±çšããŒã¹èšèªã®APIã®ç¹å¥ãªåœ¢åŒã§ãããå€ãã®å Žåãæµåçã€ã³ã¿ãŒãã§ã€ã¹ãšãåŒã°ããŸããïŒFowlerã2010幎ïŒã å éšDSLã¯ãç¹å®ã®ãµããžã§ã¯ããšãªã¢ã«ã®ã¿ååšããæŠå¿µãšæäœãå®çŸ©ãããã®ãšãªã¢ã§ã®äœæ¥ã«åœ¹ç«ã¡ãŸãã Javaã§æ§ç¯ãããå éšDSLã®ããç¥ãããäŸã¯ãJMockãšJooQã§ãã ãã ããå éšDSLã«ã¯å€§ããªå¶éããããŸãã å éšDSLã®æ§æã¯ãæ±çšããŒã¹èšèªã®æ§æã«éåããããšã¯ã§ããŸããã ããããªããšãããŒã¹èšèªã³ã³ãã€ã©ã¯çµæã®ã³ãŒãã解æããŠã³ã³ãã€ã«ã§ããŸããã§ããã ããã«ãIDEã§ã®æ§æã®åŒ·èª¿è¡šç€ºããªãŒãã³ã³ããªãŒããããã³ã¿ã€ããã§ãã¯ã®ãµããŒããDSLã«éå®ãããåºç€ãšãªãGPLã«äŸåããŸãã ãã®çµæã第1ã«ãå éšDSLã¯GPLãææããéçºè ã«ã®ã¿æçšã§ããã第2ã«ãæ§æãšèŠèŠçè¡šçŸã«å³ããå¶éã課ããããŸãã
SQLã¯ä»ã®GPLã«çµã¿èŸŒãŸããŠããããããã«åºã¥ããŠããªããããå€éšDSLãšèŠãªãããšãã§ããŸãã SQLã¯ãç¬èªã®ããŒã¯ãŒããæäœãããã³æ§æãæäŸããŸãã æ±çšèšèªãšã®ïŒæ§æçãªïŒæ¥ç¶ãªãã§æ§æ³ãããŸãã-å®å šã«ç¬ç«ããŠããŸãã å€éšDSLã¯æé©åå¯èœã§ãèªã¿ããããç解床ã®å¶éãªãã«ãäž»é¡é åã®æ å ±ãå®å šã«ç¶²çŸ ããæ倧éã®è¡šçŸåãä¿èšŒããŸãã å€éšDSLã®èŠèŠçè¡šçŸãçŸåŠã人éå·¥åŠã¯ãéçºè ã ãã§ãªããå Žåã«ãã£ãŠã¯å¯Ÿè±¡åéã®å°é家èªèº«ã®èŠä»¶ãèæ ®ããŠéçºããããšãã§ããŸãã ãã®å Žåã«ã®ã¿ãç¹å®ã®äž»é¡åéã§ã®ææ決å®ã®çå®ãäŒéãããã³ç解ã«é¢ããŠæ¹åãå¯èœã§ãã æåã«ãã¡ã€ã³åºæã®èšèªãäœæãããã®ã¯ããããã®èæ ®äºé ã§ããã
ãã ããå€éšDSLã«ã¯å€ãã®æ¬ ç¹ããããŸãã ãŸãããã®ãããªèšèªã¯æ±çšèšèªã«åºã¥ããŠããªããããæåã¯IDEããããŸããã ããã¯ãDSLãéåžžã«çããµããžã§ã¯ããšãªã¢ã察象ãšããŠããå Žåãã€ãŸããèšèªãŠãŒã¶ãŒã®æœåšçãªæ°ãèšèªããŒã«ããããŸãã¯æ¬æ ŒçãªIDEãäœæãã人件費ãæ£åœåããªãå Žåã«ç¹ã«åœãŠã¯ãŸããŸãã åæã«ãDSLãŠãŒã¶ãŒã«ã¯ãä»äºãããŠçç£æ§ãåäžãããããã®ã¹ããŒãããŒã«ãå¿ èŠã§ãã 第äºã«ãããã«éèŠãªããšãšããŠãå€éšDSLã¯ãæ±çšã³ãŒããXMLã«ä¿åããã宣èšãªã©ã®å€éšææç©ã«ã¢ã¯ã»ã¹ããç°¡åãªæ¹æ³ãæäŸããŸããã ããæå³ã§å€éšDSLã¯ãè¿œå ã®ã€ã³ããŒãããã³ãšã¯ã¹ããŒãæ段ïŒäžè¬çãªèšèªã§å®è¡å¯èœã³ãŒããçæãããžã§ãã¬ãŒã¿ïŒãéçºããããŸã§éé¢ããããŸãŸã§ãã å®éã«ã¯ãDSLã ãã§ã¯ãœãããŠã§ã¢ãœãªã¥ãŒã·ã§ã³ã®ãã¹ãŠã®åŽé¢ãç¶²çŸ ãããŠããããã§ã¯ãªããããå®å šãªéçºç°å¢ãšã®å¯Ÿè©±ã¯éåžžã«éèŠã§ãã ããã¯ãèšèªéçºããŒã«ã圹ç«ã€å Žæã§ãã
JetBrains MPS
JetBrains MPSã¯ããã¡ã€ã³åºæã®èšèªãå®çŸ©ãåå©çšãããã³æ§æã§ããèšèªéçºããŒã«ã§ããããããã®èšèªçšã®è¿œå ããŒã«ãæäŸããŸãã
ä»ã®éçºç°å¢ãšã¯ç°ãªããMPSã¯ããŒãµãŒã«äŸåããããšãªããããŒã«ã®å¹ åºããµããŒããæäŸããŸãã éåžžãããŒã«ãšã³ã³ãã€ã©ã¯æœè±¡æ§æããªãŒïŒASDïŒãååŸããããªãå ·äœçãªææ³ã§ã³ãŒãã®ããã¹ãè¡šçŸã解æããŸãã ãã®åŸããã®æ§é åããªãŒã䜿çšããŠãéä¿¡ãããæ å ±ãå®è¡å¯èœãªã³ãŒãã«å€æãããŸãã
ãã®ã¢ãããŒããšã¯å¯Ÿç §çã«ãMPSã§ã¯ãASDã®æäœã¯æ圱ãšãã£ã¿ãŒã䜿çšããŠçŽæ¥å®è¡ãããŸãã ãããžã§ã¯ã·ã§ã³ãšãã£ã¿ãŒã¯ããã¹ããšãã£ã¿ãŒã®ããã«èŠããŸããããŠãŒã¶ãŒã¯ãªã¢ã«ã¿ã€ã ã§ããªãŒã®æ§é ãç·šéããŸãã ã³ãŒãã®ä¿åã«ããã¹ãã¯äœ¿çšãããŸãã-ASDèªäœãä¿åãããããã解æã®å¿ èŠããªããªããŸãã ãããã£ãŠãæ§æã®ãããŸããã¯æé€ãããæŠå¿µãåºå¥ããããã«ã»ãã³ãã³ãæ¬åŒ§ã¯å¿ èŠãããŸããã ãããžã§ã¯ã·ã§ã³ãšãã£ã¿ã¯ãäž»é¡é åã®èŠèŠçè¡šçŸã®ç°¡æœããšé©åããæäŸããŸãã ã³ãŒãè£å®ãšãšã©ãŒå¶åŸ¡ã¯ãASDã®èª¿æ»ãšãã€ãã¹ãéããŠç°¡åã«å®è£ ã§ããŸãããããã¯ãã¹ãŠãIDE MPSã§ç°¡åã«ãµããŒããããŠããŸãã èŠããã«ãMPSã¯äžè¬çãªæ¹æ³ã§ãã¡ã€ã³åºæã®èšèªã®ã€ã³ã¹ãã«ã¡ã³ã¿ã«ãµããŒããæäŸãããããèšèªããšã«åå¥ã«å®è£ ããå¿ èŠã¯ãããŸããã
ASDãMPSã®åºç€ãšããŠäœ¿çšãããšãéèŠãªå©ç¹ãåŸãããŸãã ææ³ã®ãããŸããã解æ¶ããããããèšèªã¯ä»»æã®æ¹æ³ã§çµã¿åãããããšãã§ããŸãã æ¢åã®èšèªã¯ãæ°ããæŠå¿µã§æ¡åŒµããã³åŒ·åã§ããŸãã èšèªã¯äºãã«è£å®ãåããæ©èœãšæ©èœãç¶æ¿ã§ããŸãã ããã«ãããæ¢åã®èšèªã®æŠå¿µãç°¡åã«åå©çšã§ãããããéçºãè¿ éåãããçµ±äžãããã¢ãããŒããä¿é²ãããŸãã
ãããã®èæ ®äºé ãå®çšçãªèŠ³ç¹ãã説æããããã«ãäŸã«æ»ããŸãã
DataUx-JavaããŒã¹ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èšèª
DataUxã¯ãèšèªãçµã¿åããããšããã¢ã€ãã¢ãããŸãââå®èšŒããŠããŸãã ãã®èšèªã¯ãéäžçãªããŒã¿åŠççšã«èšèšãããJavaã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ä»æ§å°çšã«äœæãããŸãããéåžžããããã¯ãæ¯æãã®è«æ±æžç®¡çãåšåº«ç®¡çãªã©ã®ããžãã¹ã¢ããªã±ãŒã·ã§ã³ã§ãã DataUxã¯ãããŒã¿å ¥åãã©ãŒã ãã³ã¬ã¯ã·ã§ã³ãèŠèŠåããããã®ããŒãã«ãããã³ã¬ã€ã¢ãŠããå®çŸ©ã§ããããŸããŸãªèšèªã®æŠå¿µãæäŸããŸãã DataUxã§ã¯ãæ¡åŒµããããã£ãã€ã³ãã£ã³ã°ãä»ããŠå®éã®ããŒã¿å€ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã«æäŸãããŸãã ã³ã³ããŒãã³ãããããã£ïŒç¹å®ã®èå¥åã®åä¿¡è ãšã€ã³ã¹ããŒã©ãŒïŒãæã€Javaãªããžã§ã¯ãã¯ããªããžã§ã¯ãã°ã©ãã«ç·šæãããŸãã ãããã-ãããŠããã¯ãç§ãã¡ã®æèŠã§ã¯ãéåžžã«çããã§ã-ãã®ã°ã©ãå šäœããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã«æ·»ä»ãããŠããŸãã ãã®ç°¡åãªäŸã§ã¯ãããŸããŸãªããããã£ãæã€æ³šæãªããžã§ã¯ãïŒOrderïŒã«æ³šæã¢ã€ãã ã®ãªã¹ãïŒOrderPositionïŒãå«ãŸããŠããŸãã 次ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãããããã£ãšæ³šæé ç®ãå«ãOrderãªããžã§ã¯ãã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã瀺ããŠããŸãã 2çªç®ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãDataUxã䜿çšãããã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ä»æ§ã瀺ããŠããŸãã
ã¹ã¯ãªãŒã³ã·ã§ãã1ïŒè€æ°ã®OrderPositionãªããžã§ã¯ããå«ã1ã€ã®Orderãªããžã§ã¯ãã䜿çšãããã¢ã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹
ã¹ã¯ãªãŒã³ã·ã§ãã2ïŒMPSã®DataUxãã¢ã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ä»æ§ã泚æãã
äžèšã®ã¹ã¯ãªãŒã³ã·ã§ãã2ã§ã¯ããã¡ã€ã³æ³šæããŒãžãã衚瀺ããã泚æãªããžã§ã¯ãã®ãªã¹ãã«é¢é£ä»ããããŠããŸãã åäžã®åã§æ§æãããã°ãªããã¬ã€ã¢ãŠãïŒ1 * =éã¿ä¿æ°1ã®æ倧åïŒã§ã¯ã2ã€ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã2è¡ã«é 眮ããæåã®èŠçŽ ãå¯èœãªéãæå°åïŒ-1ïŒãã2çªç®ã®èŠçŽ ãåã³æ倧åïŒ1 *ïŒããŠããŸãã ããªã²ãŒããã©ãŒã ã§ã¯ãOrderãªããžã§ã¯ãã®6ã€ã®ããããã£ã®å€ã2åã«è¡šç€ºãããŸãã ããŒãã«ã«ã¯ããã®æ³šæã®ã¢ã€ãã ã®ãªã¹ãã衚瀺ãããŸãã DISABLEDããŒã¯ãŒãã¯ããã©ãŒã å šäœãèªã¿åãå°çšã¢ãŒãã«ããŸãã ããŒãã«ã¯è¿œå èšå®ãªãã§ããã©ã«ãã§èªã¿åãå°çšã§ãã
DataUxèšèªã®äž»ãªã¢ã€ãã¢ã¯ãã³ã³ããŒãã³ããã€ã³ãã£ã³ã°ãšããã¹ã¿ãŒããŒã¿-詳现ããŒã¿ããã³ãã¬ãŒãã«åºã¥ããŠããŸãã åPagePaneã¯ããªããžã§ã¯ãã®çš®é¡ããšã«ãéžæããããªããžã§ã¯ãããååšãããªããžã§ã¯ãã§æ§æãããã°ã©ããèŠèŠåã§ããŸãã ãã®äŸã§ã¯ãOrderãšOrderPositionã®2ã€ã®ã¿ã€ãã®ãªããžã§ã¯ãããããŸãã ãããã£ãŠã2ã€ã®çŸåšã®éžæãéèŠã§ããéžæããã泚æãšéžæããã泚æã¢ã€ãã ã§ãã ç¹å®ã®ã¿ã€ãã®çŸåšéžæãããŠãããªããžã§ã¯ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã«ããŒãããã«ã¯ãåã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã察å¿ãããªããžã§ã¯ãã¿ã€ãã«ãã€ã³ãããå¿ èŠããããŸãã åã ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã§ã¯ããªããžã§ã¯ãã®ããããã£ã«ã¢ã¯ã»ã¹ããŠãã€ã³ãã§ããŸãã
ããªã²ãŒããã©ãŒã ã¯çŸåšéžæãããŠãã泚æã«æ·»ä»ãããããŒãã«ã¯éžæããã泚æïŒOrder.posãšããŠèšè¿°ãããŠããïŒã®ã¢ã€ãã ã®ãªã¹ãã«æ·»ä»ãããŸãã ãããã£ãŠãããªã²ãŒããã©ãŒã ã¯Orderãªããžã§ã¯ãã®ããããã£ãèŠèŠåã§ããããŒãã«ã¯åå ã®OrderPositionãªããžã§ã¯ãã®ããããã£ãèŠèŠåã§ããŸãã OrderPositionã«å¯ŸããŠ5ã€ã®ããããã£ã宣èšããã察å¿ããåã®å¹ ãèšå®ãããŸãã
ãéžæããããªããžã§ã¯ããã®ããžãã¯ã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãããŒãã«ã¯ãªããžã§ã¯ãã®ãªã¹ãã衚瀺ããã ãã§ãªããéžæããããªããžã§ã¯ãã決å®ããããã«ã䜿çšãããŸãã ããŒãã«ã®éžæãããè¡ã¯ããã®ã¿ã€ãã®ãéžæããããªããžã§ã¯ããã«çŽæ¥å¯Ÿå¿ããŸãã ãã®äŸã§ã¯ãããŒãã«å ã®å¥ã®è¡ãéžæãããšãOrderPositionåã®ãªããžã§ã¯ããéžæããã³å®çŸ©ãããŸãã ãããã£ãŠããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯ãOrderPositionãªããžã§ã¯ãã«çŽæ¥æ¥ç¶ãããç°ãªããã©ãŒã ã§æ³šæäœçœ®ïŒãã®ããããã£ïŒã®è©³çŽ°ãèŠèŠåããããšã«ããæ¹åãããŸããã
ã¿ã€ãå¥ã®2çªç®ã®ã¹ã¯ãªãŒã³ã·ã§ããã®ã泚æã¡ã€ã³ããŒãžãã¯æ³šæãªããžã§ã¯ãã®ãªã¹ãã§ããã1ã€ã®æ³šæã®ã¿ã転éãããå Žåããã®ã¿ã€ãã®éžæãªããžã§ã¯ãã«èªåçã«ãªããŸãã ããã¯ãPagePaneã³ã³ã»ããã®æ©èœã§ãã è€æ°ã®æ³šæãããŒãžã«è»¢éãããå Žåãéžæãã泚æã決å®ããããã«è¿œå ã®ããŒãã«ãå¿ èŠã«ãªããŸãã ããã«ãããéžæãããªãŒããŒãå®è£ ã§ããŸããããã¯ã詳现ãã©ãŒã ãšOrderPositionããŒãã«ã«å¿ èŠã§ãã 3çªç®ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãè€æ°ã®æ³šæãå«ãããè€éãªã±ãŒã¹ã瀺ããŠããŸãã æ¢ã«è¿°ã¹ãããã«ãéžæãã泚æäœçœ®ïŒOrderPositionãªããžã§ã¯ãïŒã®ããããã£ã衚瀺ããããã«ã詳现ãã©ãŒã ãè¿œå ããŸããã
ã¹ã¯ãªãŒã³ã·ã§ãã3ïŒããã¹ã¿ãŒããŒã¿-詳现ããŒã¿ããšããé¢ä¿ãæã€ãã¢ã¢ããªã±ãŒã·ã§ã³ã®ããæŽç·ŽããããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹
DataUxã䜿çšããŠããªããžã§ã¯ããã€ã³ãã£ã³ã°ã®ãã®ããžãã¯ãåŒãç¶ã䜿çšãããšãè€éãªãªããžã§ã¯ãã°ã©ãã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãç°¡åã«å®çŸ©ã§ããŸãã ãŠãŒã¶ãŒã¯ãç¹å®ã®ãªããžã§ã¯ãã®ç¹å®ã®ããããã£ã«ã¢ã¯ã»ã¹ããããã«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ããªããžã§ã¯ãã¿ã€ãã«ãã€ã³ãããŸãã å®è¡æã«ã察å¿ããã¿ã€ãã®çŸåšéžæãããŠãããªããžã§ã¯ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã«ããŒããããŸãã ããã¯ããããDataUxèšèªã§ç解ããã®ãæãé£ããç¬éã§ãã ãã ãããªããžã§ã¯ããã€ã³ãã£ã³ã°ã®ãã®ããžãã¯ã¯ãDataUxåã·ã¹ãã ãšäžé£ã®äžè²«æ§ãã§ãã¯ã«ãã£ãŠãã§ãã¯ãããŸãã ã€ã³ããªãžã§ã³ããªç·šéã¯ãç¶æ³äŸåã®èªåè£å®ãããã«ã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã®èªåè£å®ããæäŸããŸãã
ãã¡ã€ã³åºæã®èšèªã®è°è«ã§ã¯ãDataUxãšJavaã®é¢ä¿ã¯æ³šç®ã«å€ããŸãã æããã«ãDataUxã¯Javaæ§æãšäºææ§ããããŸããããããããã£ãã¯ã©ã¹ãªã©ã®Javaã®æŠå¿µã«äŸåããŠããŸãã JavaããŒã¹ã®ã¿ã€ããã§ãã¯ã«ãŒã«ããããŸãã ããã«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã®äžã«ã¯ãå€éšJavaã¢ãŒãã£ãã¡ã¯ããèšèŒãããŠããŸãã ããã¯ã©ã®ããã«éæãããŸããïŒ
JetBrains MPSã«ã¯å®å šãªJavaå®è£ ãä»å±ããŠããŸãã MPSã§ã®ãã®GPLã®å®è£ ã¯ãç¹æ®ãªDSLã®å®è£ ãšå€ãããŸããã ã€ã³ããªãžã§ã³ããªããã¹ããšãã£ã¿ãŒJavaã䜿çšããéåžžã®ã¢ãã«ãåçŸããåªãããããžã§ã¯ã·ã§ã³ãšãã£ã¿ãŒããããŸããã¯ã©ã¹ãšã€ã³ã¿ãŒãã§ã€ã¹ããã®ã¡ã³ããŒããããŠãã¡ããåŒã®å®çŸ©ããµããŒããããŠããŸãã MPSã«ã¯jarã€ã³ããŒãããŒã«ããããããã¹ã¿ã³ãã¢ãã³ã®ãã«æ©èœã®Java IDEãšããŠäœ¿çšã§ããŸãã ãã®Javaå®è£ ãæ¡åŒµããDataUxèšèªã§è£å®ããŸããã ãã®çµæã匷åãªJavaã®æŠå¿µãç¹ã«åŒãšåã䜿çšã§ããããã«ãªããŸããã ãããã£ãŠãDataUxã¯åºæ¬çãªããã°ã©ãã³ã°ãµããŒããè¿œå ã®åªåãªãã§åããŸããã
DataUxèšèªã§ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ãèšå®ããããšã«ããããŠãŒã¶ãŒã¯ã宣èšãããJavaãªããžã§ã¯ããšãã®ããããã£ãIDEã«ããŒããããŠå©çšå¯èœãªå Žåãããããåç §ã§ããŸãã ã¯ã©ã¹åç §ãããããã£ãããã³éžæã®ã€ã³ããªãžã§ã³ãã¢ã¯ã»ã¹é åã¯ãç·šéäžã«èšç®ãããŸãã ã¹ã¯ãªãŒã³ã·ã§ãã2ã§ãããããã«ãDataUxãã©ã¡ãŒã¿ãŒã®ãTable Summary Lineãã¯ãå€æ°ãallObjectsãïŒã¿ã€ã-ãªã¹ãïŒãæã€ã¯ããŒãžã£ãŒã«äŒŒãæŠå¿µãæäŸããŸãã å³åŽã§ã¯ãJavaåŒã¯æååãè¿ãããšãæåŸ ãããŠããŸãïŒã¿ã€ãã¯Java.lang.Stringã§ãïŒã ãã®äŸã§ã¯ãã¯ã©ã¹MyUtilã®éçã¡ãœããsumïŒïŒãåŒã³åºããŸãã ãã®ãã©ã¡ãŒã¿ã®ã³ã³ããã¹ãã§ã¯ãã¡ãœããåŒã³åºãããæååã®é£çµãJavaå€æ°ãžã®åç §ãŸã§ãæå¹ãªJavaåŒã衚瀺ãããããšã«æ³šæããŠãã ããã ãã¹ãŠã®ãªã³ã¯ã®ã€ã³ããªãžã§ã³ãã¢ã¯ã»ã¹ãšãªã¢ã¯ããã©ã¡ãŒã¿ãŒã®ã³ã³ããã¹ãã§æ£ç¢ºã«èšç®ãããŸãã ãã¹ãŠã®åŒã«å¯ŸããŠåãã§ãã¯ãå®è¡ãããŸãã
DataUxèšèªã¯ãJava MPSèšèªã®æ¢åã®ãã¹ãŠã®æŠå¿µãç¹ã«åŒãšåã·ã¹ãã åŠçãæ倧éã«æŽ»çšããŸããéåžžããããã®èšèªã®èŠçŽ ã¯éåžžã«è€éã§ãã DataUxã§ã®JavaåŒã®äœ¿çšã¯ããã®åçŽãã«ãããããããèšèªãŠãŒã¶ãŒã«è¿œå ã®å©ç¹ãæäŸããŸãã åŒã䜿çšãããšãçµ±åãããŠããªãå€éšã®ããã°ã©ã ã³ãŒãã«é Œãããšãªããç¹å®ã®ã±ãŒã¹ã®èŠä»¶ã«æè»ã«é©å¿ã§ããŸãã äž»ãªå©ç¹ã¯ãä»ã®èšèªãæ¡åŒµããå¯èœæ§ã«ãã£ãŠãæäŸãããŸãïŒMPS Javaèšèªã®æ§æããã®ç¬ç«æ§ãç¶æããªããããã®èšèªã§å®£èšãããæŠå¿µãããšãã°ãTable Summary LineããŒãã«ã®ãã©ã¡ãŒã¿ãŒã§åŒã³åºãããéçã¡ãœãããç°¡åã«åç §ã§ããŸãã
DataUxã¯ããªãŒã¹ãã©ãªã¢ã®äž»èŠãªé¡§å®¢ã§ããå°å£²æ¥è åãã«éçºãããŸããã 顧客åŽã§ã¯ã8人ã®éçºè ãå¿ èŠãªãã¹ãŠã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãDataUxã«å®è£ ããŸãããã¬ãŒã³Javaã³ãŒãã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®è¿œå ã®åŽé¢ã«åœ±é¿ãäžããããšã¯ãããŸããã èšèªã®æŠå¿µãšæ§é ãããŸãå®çŸ©ããåŸãèšèªèªäœã¯æ°æ¥ã§éçºãããŸããã ãã ããããã€ãã®ç°ãªããã¯ãããžã®å®è£ ãè€éã§ããããããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã©ã³ã¿ã€ã ã®éçºã«ã¯æéãããããŸããã
DataUxã¯GitHubã§å ¥æã§ããŸãã
ãããã«
DataUxã¯ãããã°ã©ãã³ã°ã¹ãã«ã®ãªããŠãŒã¶ãŒã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®éçºãå§ä»»ã§ãããéåžžã«ã·ã³ãã«ã§è«ççãªãã¡ã€ã³æåã®èšèªã§ãã åŠç¿æ²ç·ã®æ¥å³»ãã¯éåžžã«å°ããããã説æã¯ã»ãšãã©å¿ èŠãããŸããã ãŸãããã®èšèªã¯ãæ¢åã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®ç解ãšä¿å®ãå€§å¹ ã«ç°¡çŽ åããŸãã ããã«ãDataUxã䜿çšããŠå®çŸ©ããããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã¯ãå®è£ ãã¯ãããžã«äŸåããŸããã ããã¯éåžžã«éèŠãªå©ç¹ã§ããæè¿ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãã¯ãããžãŒã¯æ¥éã«å€åããŠããããã§ãã Apache PivotãJavaFXãvaadinãããã³HTML5çšã®DataUxã©ã³ã¿ã€ã ãæ¢ã«æäŸããŠããããšã«æ³šæããŠãã ããã ãŠãŒã¶ãŒãå¿ èŠãªãã©ãããã©ãŒã ãéžæããã ãã§ååã§ãããMPSã¯DataUxèšèªã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èšè¿°ããå¿ èŠãªã³ãŒããçæããŸãã
DataUxã¯ãå€éšDSLãçµåããJetBrains MPSã®æ©èœãå®èšŒããŸã-ãã®å ŽåãDataUxã¯å éšJavaå®è£ ãæ¡åŒµããŸãã DataUxã¯ãåŒãªã©ã®éèŠãªJavaã®æŠå¿µã䜿çšããªãããé åçãªèŠèŠçè¡šçŸãæäŸããŸãã DataUxãJavaåºåãšå¯Ÿè©±ã§ããããã«ããã®ã¯ããã®èšèªæ¡åŒµæ©èœã§ãã éåžžãMPSã®èšèªã¯ä»ã®èšèªã®æŠå¿µãåç §ã§ãããããä»ã®èšèªã§ã¢ãã«åãããä»æ§ãåç §ã§ããŸãã ãããžã§ã¯ã·ã§ã³ãšãã£ã¿ã¯ASDãšé£æºããèšèªã®äœæè ãèšèªãäœæãåå©çšãããã³å€æŽã§ããããã«ããŸãããæãéèŠãªããšã¯ãç°ãªãäž»é¡æåèšèªãçžäºã«ããåãã§ããããã«ããããšã§ãã MPSã¯ãç°ãªããµããžã§ã¯ããšãªã¢éã®ã¢ã¯ãã£ããªå¯Ÿè©±ãä¿é²ããŸãã
å³1ïŒããžãã¹ã¢ããªã±ãŒã·ã§ã³ãã¢ãã«åããããã®ããŸããŸãªãã¡ã€ã³åºæèšèªãçžäºã«è£å®ãåã
å®éãDataUxã䜿çšããŠããžãã¹ã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãå®çŸ©ããã ãã§ã¯ãããŸããã å žåçãªããžãã¹ã¢ããªã±ãŒã·ã§ã³ã¯ãããŒã¿ã¹ãã¬ãŒãžïŒã¯ãšãªãSQLå€æãªã©ïŒãããžãã¹ããžãã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãªã©ãããŸããŸãªãµããžã§ã¯ãé åãšäº€å·®ããŸãã JetBrains MPSã¯DSLéã®çžäºéçšæ§ãæäŸãããããããžãã¹ã¢ããªã±ãŒã·ã§ã³ã®ç¹æ®ãªéšåããšã«åå¥ã®èšèªãéçºããŸããïŒå³1ãåç §ïŒã éçºããŒã«ã®å®å šãªã»ããã圢æãã3ã€ã®é«åºŠã«å°éåãããäž»é¡æåèšèªãäœæãããŸããã ãããã£ãŠãç¹å®ã®ã¿ã¹ã¯ããšã«ãåäžã®éçºç°å¢å ã§ããžãã¹ã¢ããªã±ãŒã·ã§ã³å šäœãäœæããããšãæåŠããããšãªããæãè¡šçŸåã®ããèšèªãæäŸããŸãã ããžãã¹ã¢ããªã±ãŒã·ã§ã³ã®ãµããžã§ã¯ããšãªã¢ããšã«ãé«ã¬ãã«ã®æœè±¡åãæäŸãããŸããçµ±åã«æ¯éã¯ãªããå®åŒåãšç解ã®ç°¡çŽ åãç¶æãããŸããã€ãŸããé·æçãªã¡ã³ããã³ã¹ãšé«å質ã容æã«ãªããŸãã
åèæç®ãšæç®
- GitHubã®DataUX
- JetBrains MPS
- Kelly and Tolvanenã2008ïŒãã¡ã€ã³åºæã®ã¢ããªã³ã°ïŒå®å šãªã³ãŒãçæã®å®çŸãWiley-IEEE Computer Society
- Fowler 2010ïŒãã¡ã€ã³åºæèšèªãAddison-Wesley Educational Publishers Inc