SQLèšèªãšãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã¯ã40幎以äžã«ããã£ãŠäœ¿çšãããŠããŸããã ãã®éãSQLæšæºã¯å€ãã®æ¹èšãçµãŠãæããã«ãéçºããã»ã¹ã¯ããã§æ¢ãŸããŸããã ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã¯äœå幎ãã®éãããŒã¿ãŠã§ã¢ããŠã¹ãšããŠåç¶ããŠããŸãããã仿¥ã§ã¯æ¯é
çã§ãããããæè¿ã§ã¯ä»£æ¿ã¢ãããŒããå°ããã€æ®åããŠããŸãã
SQLã¯ãããŒã¿æœåºã«é¢ããŠã¯ã»ãŒå
šèœã§ãã ïŒèª°ããç¥ã£ãŠããããã§ã¯ãããŸãããã1ã€ã®SQLã¯ãšãªã§ã
Mandelbrotã®ã»ãããã°ã©ãã£ã«ã«ã«æ§ç¯
ã§ããŸãïŒã ãããã1ã€ã®åé¡ãåŒãç¶ãæŠå¿µçã«è§£æ±ºãããŠããŸãããããã¯ãããŒã¿ã¹ããŒãã®ç§»è¡ã®åé¡ã§ãã

ITã®ãã£ãªã¢ã®ããŸããŸãªæ®µéã§ãäœæ¥äžã®ããŒã¿ããŒã¹ã®æ§é ãå¶åŸ¡ãããœãããŠã§ã¢ã®æ°ããããŒãžã§ã³ãå±éããããã³ã«æŽæ°ããããšã¯éåžžã«å°é£ã«çŽé¢ãããšæããŸãã ãã§ã«ä¿®æ£ãããåŸã«æ»ããã°ãããã£ãŒã«ããããŒãã«ã«ãªãããªã©ã®ãšã©ãŒããã¹ãã¬ãŒãžãä¿®æ£ãããããæ¶å»ããŸããïŒã-ããããã¹ãŠç¥ã£ãŠããŸããïŒ
ãã®åé¡ã®æ·±å»åºŠã¯ããœãŒã¹ã³ãŒãã®ããŒãžã§ã³ç®¡çã®åé¡ãæ ¹æ¬çã«è§£æ±ºããæ¹æ³ãšã¯å¯Ÿç
§çã«ç¹ã«æç¢ºã§ããGitãSubversionã®ãããªã·ã¹ãã ã§ã¯ãå€ãã®éçºè
ã®ã³ââã©ãã¬ãŒã·ã§ã³ãå¶åŸ¡ã§ããåäžã®å€æŽã倱ãããšãªããããã¹ãŠã®åããèšé²ãããããŒã ã¯ãŒã¯ã®çµæãåéã§ããŸãäžç·ã«ã ãããããã®è¯ãç¶æ³ã¯ãããŒãžã§ã³ç®¡çã·ã¹ãã ã®é©çšå¯èœæ§ãçµãããšããã§çµãããŸãã ããŒã¿ã¹ããŒã ã®æ§é ã«ã€ããŠèª¬æããå Žåããã®éçºã®ããã®ããŒãžã§ã³ç®¡çã·ã¹ãã ã®äœ¿çšã¯äŸç¶ãšããŠéåžžã«éãããŠããŸãã
ããŒã¹ã§æ§é ã倿Žããã®ã¯ãšãŠãç°¡åã§é
åçã§ãïŒ ãã®ãããªå€æŽãææžåãããŠããªãå Žåãå°æ¥çã«ã·ã¹ãã ãéçºããå¿
èŠãããã倧æšäºãè¿ã¥ããŠããŸãã ããããããŒã¿ããŒã¹ã®æ§é ã倿Žããããã«ãã¹ãŠã®ã¹ããããææžåããå¿
èŠæ§ãèªèããŠããããè¡ãããšã¯éåžžã«äžäŸ¿ã§ãããããŒã¿ã¹ããŒã ãå®çŸ©ããDDLèšèªã¯ããã«åœ¹ç«ããªããšããçµè«ã«éããŸãã ããšãã°ãããŒãã«ã«ãã£ãŒã«ãã远å ããã«ã¯ãALTER TABLE ADDã³ãã³ããå¿
èŠã§ãã ãã®åŒã1åã ãå®è¡ãããã£ãŒã«ãããŸã ããŒãã«ã«ååšããªãç¬éã«å®è¡ããããšã¯çã«ããªã£ãŠããŸããããã§ã«å¿
èŠã§ãã ä»ã®ãšãã«ãã®ã¹ã¯ãªãããå®è¡ãããšãã¹ã¯ãªããèªäœã®å®è¡ã§ãšã©ãŒãçºçããããããã«æªãããšã«ãããŒã¿ããŒã¹æ§é ã®ç¶æ
ãäžé©åã«ãªããŸãã
éçºè
ã«ãã£ãŠè¡ããããã¹ãŠã®å€æŽãåäžã®çµæã«éçŽãããã®å®è£
ãå¶åŸ¡ããæ¹æ³ã¯ïŒ
ã¢ãããŒãïŒ1ïŒå€æŽã¹ã¯ãªããã®èç©
远å ã®ããŒã«ã䜿çšããã«æåã§ãã®åé¡ã解決ããå®çšçãªãœãªã¥ãŒã·ã§ã³ã¯ããããžã§ã¯ãã³ãŒãããŒã¹ã«çªå·ä»ãã¹ã¯ãªããã䜿çšããŠãã©ã«ããŒãäœæããããŒã¿ããŒã¹æ§é ã倿Žãããããããã®ãã©ã«ããŒã«èç©ããéçºãããžã§ã¯ãã®åå è
ã«æãå³ããèŠåŸãå°å
¥ããããšã§ãã æ¬¡ã®ã¹ã¯ãªãããã¡ã€ã«ã§ã®å€æŽãèšé²ããããã»ã¹ãšãããŒã¿ããŒã¹ãžã®å€æŽããããŒãªã³ã°ãããããã»ã¹ã圢åŒåããå¿
èŠããããŸãã
ããé«åºŠã§äŸ¿å©ãªãœãªã¥ãŒã·ã§ã³ã¯ã
Liquibaseãªã©ã®ã·ã¹ãã ã䜿çšããããšã§ãã Liquibaseã¯ãæåŸã«å®è¡ãããããŒã¿æ§é ã®å€æŽåæ°ãå¶åŸ¡ããã¹ã¯ãªãããæ§é 倿Žã¹ã¯ãªãããç·åœ¢åœ¢åŒã§1åã ãå®è¡ããããã«ããŸãã ããã¯ãã§ã«å€ãã®ããšã§ãããLiquibaseã䜿çšããããšã§ãããŒã¿ã¹ããŒã ã®éçºãšæŽæ°ã§çºçããæ··ä¹±ã確å®ã«æé€ã§ããŸãã
ããã§ãã倿Žã¹ã¯ãªããã®èç©ã«åºã¥ããLiquibaseããã®ä»ã®ããŒã«ã䜿çšããŠããã¢ããªã±ãŒã·ã§ã³ã®ãœãããŠã§ã¢ãœãŒã¹ã³ãŒãã倿Žããã®ã¯ç°¡åã§æè¡çã§ããã®ã§ãããŒã¿ã¹ããŒãã倿Žããã¿ã¹ã¯ã¯ç°¡åã§æè¡çã§ã¯ãããŸããã
ãŸãã倿Žã¹ã¯ãªãã
ãèç©ãããŸãã ååã«é·æéå®è¡ããããããžã§ã¯ãã¯ããããã®ã¹ã¯ãªãããã倧ããªãããŒã«ããåŒãåºããŸããã»ãšãã©ã®ã¹ã¯ãªããã¯ãããªãåã«è¡ããã倿Žãå«ãŸããŠãããããé¢é£æ§ã倱ããŸãã ãããŒã«ãå
šäœãä¿åããããšã¯ç¡æå³ã§ãããªããªãããã°ã®ããå Žæã§ã®å€æŽã¯ãå¥ã®å Žæã§ã®å€æŽã®çµæããã£ã³ã»ã«ããå¯èœæ§ãããããã§ãããã°eã 倧ãããªãããããã°ãèŠããšãããŒã¹ã®æ§é ã«é¢ããçŸåšã®çè§£ãçè§£ããããšãã§ããªããªããŸãã ãŸããããšãã°å®å
šã«æ°ãããããžã§ã¯ãã§ããŒã¿ããŒã¹æ§é ããŒãããåçŸãããå Žåã¯ãã¹ã¯ãªãããå®è¡ããããã»ã¹ã§é²åçéçºã®å
šãã¹ãç¹°ãè¿ãå¿
èŠããããŸãïŒ
第äºã«ããã®ã¢ãããŒãã§ã¯ã倿Žã»ãããä»ããŠããŒã¿ããŒã¹æ§é ã倿Žããè€éããšãããã°ã©ã ã®ãœãŒã¹ã³ãŒãã倿ŽããåçŽããšã®éã«å€§ããªéãããããŸãã
ãæ°ã«å
¥ãã®ããã°ã©ãã³ã°èšèªã§ã¯ã©ã¹ãèšè¿°ããã³ãŒãããããã·ã¹ãã ãæ¹åããéçšã§ã1ã€ã®ã¡ãœãããã¯ã©ã¹ã«è¿œå ããä»ã®ã¡ãœãããåé€ããå¿
èŠããããšããŸãã äœããŠãã®ïŒ ã¯ã©ã¹ã®ãœãŒã¹ã³ãŒããååŸããŠå€æŽããããŒãžã§ã³ç®¡çã·ã¹ãã ã«ã³ãããããŸããïŒ æ¬¡ã®åœ¢åŒã®ã³ãã³ãã䜿çšããŠå€æŽã»ãããäœæããå¿
èŠã¯ãããŸããã
alter class drop method foo;
alter class add method bar(âŠ) {
âŠ
}
ããŒã¿ã¹ããŒãæ§é ã«å¯ŸããŠãããè¡ãå¿
èŠãããã®ã¯ãªãã§ããïŒ
ãã¡ããããã®çç±ã¯ãæ§é ã倿Žãããšãã«äœããããå¿
èŠãããããŒã¿ãããŒã¿ããŒã¹ã«å«ãŸããŠããããã§ãã ãã®åé¡ã«ã€ããŠè©³ãã説æããŸããããŸããåé¡ã解決ããããã®å¥ã®å¯èœãªã¢ãããŒããèŠãŠã¿ãŸãããã
ã¢ãããŒã2ïŒiçDDLã¹ã¯ãªãã
ãµãŒããŒã®æ§ææã«ãããŒã¿ããŒã¹ã¹ããŒãã®ç§»è¡æã«çºçããåé¡ãšåæ§ã®åé¡ãé·ãéçºçããŠããŸããã
ãµãŒããŒãžã®å¿
èŠãªãœãããŠã§ã¢ã®ã€ã³ã¹ããŒã«ãèªååããæ§æã®æŽæ°ãæäŸããæ¹æ³ã¯ïŒ 空ã®ä»®æ³ãã·ã³ã§å®è¡ããããšããã®äžã«ãã¹ãŠãã€ã³ã¹ããŒã«ããŠæ§æããã·ã§ã«ã¹ã¯ãªãããäœæã§ããŸãã ããã¯ãããŒã¿ããŒã¹æ§é ãäœæããã¹ã¯ãªããïŒCREATE TABLE ...ã¹ã¯ãªããïŒã«é¡äŒŒããŠããŸãããåé¡ã¯ã空ã®ãã·ã³äžã§ã®ã¿1åããå®è¡ã§ããªãããšã§ãã ãã·ã³ããã§ã«å±éãããŠå®è¡ãããŠãããã·ã¹ãã ã®æ°ãã仿§ã«åŸã£ãŠåäœããå Žåãããšãã°ãå¥ã®ããŒãžã§ã³ã®Javaãå¿
èŠã«ãªããŸããããã«æçš¿ããã«ã¯ã©ãããã°ããã§ãããå€ãããŒãžã§ã³ãç Žæ£ããŠæ°ããããŒãžã§ã³ã®Javaãã€ã³ã¹ããŒã«ãã倿Žã¹ã¯ãªããã远å ããŸããïŒ ããŠã空ã®ãã·ã³ã§æ§æãåçŸããå¿
èŠãããå Žå-éå»ã«è¡ã£ããã¹ãŠã®ã¹ããããå®è¡ããã«ã¯äœãå¿
èŠã§ããïŒ
ãã®å Žåã«çºçããäž»ãªéèŠãªè³ªåïŒã€ã³ãã©ã¹ãã©ã¯ãã£/ããŒã¿ã¹ããŒã ãããœãŒã¹ã³ãŒããç·šéããã®ãšåããããç°¡åã«ç·šéã§ããŸããïŒãã®èª¬æãçŽæ¥å€æŽããŠããŒãžã§ã³ç®¡çã«æžã蟌ãããšã§å¯èœã§ããïŒ
ãµãŒããŒæ§æã®åé¡ã«å¯Ÿãããããã®è³ªåã«å¯Ÿããçãã¯ã
Infastructure as CodeïŒIaCïŒã®ååãšãæ§æç®¡çã·ã¹ãã ãšããŠç¥ãããã·ã¹ãã ã®ã¯ã©ã¹å
šäœã®åºçŸã§ãããAnsibleãChefãPuppetãªã©ã§ãã demçæ§ïŒã¹ãçæ§ïŒããã³åæïŒåæãåæïŒã ãããã®çšèªã¯äž¡æ¹ãšãæ°åŠããåçšããŠããŸãã åé¡ã«é©çšãããäžå¿
èŠãªåœ¢åŒãç Žæ£ããå Žåããããã®çšèªã¯æ¬¡ã®ããšã瀺ããŸãã
- ã¹ãçããã³åæã¹ã¯ãªããã¯ããªããžã§ã¯ãã«å¯ŸããŠå®è¡ããå¿
èŠãããã¢ã¯ã·ã§ã³ã§ã¯ãªã ããªããžã§ã¯ããåã蟌ãå¿
èŠãããç¶æ
ãèšè¿°ããŸãã
- ã¹ãçæ§ãšã¯ããã®ãããªã¹ã¯ãªãããæ£åžžã«å®è¡ããããªããžã§ã¯ãããã§ã«ç®çã®ç¶æ
ã«ããå Žåãã¹ã¯ãªããã®ç¹°ãè¿ãå®è¡ã¯äœã倿Žãããäœããããããªãããšãæå³ããŸãã ããšãã°ãå¿
èŠãªããã±ãŒãžã®ã€ã³ã¹ããŒã«ã宣èšããã·ã¹ãã ã®æ§æç®¡çã¹ã¯ãªããã«ã€ããŠè©±ããŠããå Žåããããã®ããã±ãŒãžãæ¢ã«ã€ã³ã¹ããŒã«ãããŠãããšãã¹ã¯ãªããã¯åèµ·åæã«æäœãå®è¡ããŸããã
- åæãšã¯ãã¹ã¯ãªãããå®è¡ãŸãã¯å€±æããªãã£ãå Žåãå床å®è¡ãããšãã«ãã·ã¹ãã ãç®çã®ç¶æ
ã«ãªãåŸåãããããšãæå³ããŸãã ããšãã°ãããã±ãŒãžã®ããŠã³ããŒãæã«ãããã¯ãŒã¯ãæ¶å€±ããããã«ããã±ãŒãžã®1ã€ã®ã€ã³ã¹ããŒã«ã倱æããå Žåãã¹ã¯ãªãããåå®è¡ãããšãäžè¶³ããŠããããã±ãŒãžãã€ã³ã¹ããŒã«ãããŸãïŒååã€ã³ã¹ããŒã«ãããããã±ãŒãžã¯ãã®ãŸãŸæ®ããŸãïŒã
ãããã®ååã¯äžè¬çãªãã®ã§ããããã·ã³ã®ãœãããŠã§ã¢æ§æã ãã«é©çšãããããã§ã¯ãããŸããã ããšãã°ãTerraformã·ã¹ãã ã䜿çšãããšãå¿
èŠãªä»®æ³ãµãŒããŒã®ã»ãããšãã®ããŒããŠã§ã¢æ§æãã³ãŒãã®åœ¢åŒã§æå®ããã¯ã©ãŠãå
ã®ä»®æ³ãã·ã³çŸ€ãå¶åŸ¡ã§ããŸãã
ãããã®ååãããŒã¿ã¹ããŒãã®å¶åŸ¡ã«ã©ã®ããã«åœ¹ç«ã€ããçè§£ããã«ã¯ãäžèšã§ãã§ã«ååã ãšæããŸãã ããŒã¿ããŒã¹ãããŒã¯ãŒããCONVERGEãããµããŒãããŠãããæ¬¡ã®ã¹ã¯ãªããããããšããŸãã
CONVERGE TABLE OrderHeader(
id VARCHAR(30) NOT NULL,
date DATETIME DEFAULT GETDATE(),
customer_id VARCHAR(30),
customer_name VARCHAR(100),
CONSTRAINT Pk_OrderHeader PRIMARY KEY (id)
);
CONVERGEããŒã¯ãŒãã¯ããããŒãã«ãç®çã®æ§é ã«ããããšè§£éããå¿
èŠããããŸãã ã€ãŸããããŒãã«ããªãå Žåã¯ãããŒãã«ãäœæããããŒãã«ãããå Žåã¯ããã®äžã«ãããã£ãŒã«ããã¿ã€ããã€ã³ããã¯ã¹ãå€éšããŒãããã©ã«ãå€ãªã©ã確èªãããã®äžã®äœãã倿Žããå¿
èŠããããã©ããã確èªããŸãé©åãªçš®é¡ã«ãããããããããã®ããŒãã«ã
ããŒã¿ããŒã¹ããã®ãããªããŒã¯ãŒãããµããŒãã§ããå Žåãã€ãŸããããŒã¿ããŒã¹ã«å¯ŸããŠã¹ãçããã³åæDDLã¹ã¯ãªãããèšè¿°ã§ããå Žåããã®èšäºãæžãå¿
èŠã¯ãããŸããã å
šå¡ãããŒãžã§ã³ç®¡çã·ã¹ãã ã«ãCONVERGE TABLEãã¹ã¯ãªãããä¿æããŠãçŸåšã®ããŒã¿ã¹ããŒã ãèšè¿°ãããœãŒã¹ã³ãŒããæäœããã®ãšåãããã«ããããæäœããŸããããŒãã«ã«æ°ãããã£ãŒã«ããå¿
èŠã§ããã€ã³ããã¯ã¹ã®ãã£ãŒã«ã-ç·šéã ïŒããªãã®è³ªåãèããŸãïŒããŒã¿ã®ç§»è¡ã«ã€ããŠã¯ã©ãã§ãã-ããããå¿èãç§ã¯ããã«ããã«é²ã¿ãŸããïŒ
æ®å¿µãªããããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®äžçã§ã¯ãDDLã®çã®ã¹ãçæ§ããµããŒãããåãã¯ãããŸããã ãããŸã§ããŒã¿ããŒã¹ã§DDLã³ãŒãã®ã¹ãçæ§ã«åããŠè¡ãããããšã¯ãã¹ãŠãCREATE IF NOT EXISTSæ§é ã®ãµããŒãã§ãããããã¯ççŽã«èšã£ãŠãããªã匱ã詊ã¿ã§ãã ãã¡ãããCREATE TABLE IF NOT EXISTSã¹ã¯ãªããã¯ãå€éšçã«ã¯ã¹ãçãšããŠåäœããŸãïŒããŒãã«ãæ¢ã«äœæãããŠããå Žåã¯ãšã©ãŒã«ãªããŸããïŒããåæãšããŠã¯åäœããŸããïŒæ¢ã«äœæãããããŒãã«ã®æ§é ã倿ŽããŸããïŒã
å€éšããŒã«ã«äŸåããå¿
èŠããããŸãã ããšãã°ã
Celestaã·ã¹ãã ã§ã¯ãã¹ãçããã³åæDDLã䜿çšã§ããŸãã éçºè
ãšéçºããŒã«ïŒERãã€ã¢ã°ã©ã ã®ããžã¥ã¢ã«ãšãã£ã¿ãŒãªã©ïŒãéåžžã®DDLã¹ã¯ãªããã®ããã«èŠããããã«ãCelestaããŒã¯ãŒãã¯CREATEã䜿çšããŸãããCelestaã§ã¯ä»®æ³CONVERGEã®æå³ãæã¡ãŸãã Celestaã¯ãèµ·åãããã³ã«ãæ¥ç¶ãããŠããçŸåšã®ããŒã¿ããŒã¹æ§é ãšCelestaSQL DDLã¹ã¯ãªãããšããŠèšè¿°ãããŠããç®çã®æ§é ãæ¯èŒããå¿
èŠã«å¿ããŠå¿
èŠ
æå°éã®CREATE / ALTER / DROPã³ãã³ããå®è¡ããŸãã çŸåšãµããŒããããŠããããŒã¿ããŒã¹ã¯ãPostgreSQLãOracleãMS SQL Serverãããã³H2ã®4çš®é¡ã§ãïŒåŸè
ã¯ãäž»ã«åäœãã¹ãçµç¹ã®ããŒãºã«å¯Ÿå¿ããŠããŸãïŒã
ããŒã¿ããŒã¹æ§é ãå®çŸ©ããiçã¹ã¯ãªããã¯ãåçŽã«ååŸããŠçŽç·çã«å®è¡ããããšã¯ã§ããŸããã ãåãã®ããã«ãããŒã¿ããŒã¹å
ã®äžéšã®ãªããžã§ã¯ãã¯ä»ã®ãªããžã§ã¯ãã«äŸåããŠããŸã-ããšãã°ãããŒãã«ã¯å€éšããŒãä»ããŠçžäºã«åç
§ãããã¥ãŒãšã€ã³ããã¯ã¹ã¯ããŒãã«ã«äŸåããŸãããããã£ãŠãäžé£ã®ãªããžã§ã¯ããäœæ/åæ§ç¯ããåã«ãã©ã³ã¯ä»ãããå¿
èŠããããŸãçžäºäŸåé¢ä¿ã®é åºïŒåœ¢åŒçã«èšãã°ãäŸåé¢ä¿ã°ã©ãã®ããããžã«ã«ãœãŒããå®è¡ããäœãäŸåããŠããªããªããžã§ã¯ãããéå§ããŠãªããžã§ã¯ããåŠçããŸãã æ¥ç¶ããããŒãã«ã倿ŽããåŸã§å€éšããŒãåŸã§åŸ©å
ããããã«ãå€éšããŒããªã»ããããå¿
èŠãããããšããããããŸãã ãã®åé¡ã¯Celestaã§è§£æ±ºããããããã»ãšãã©ã®å Žåãåé¡ãªãã¢ããã°ã¬ãŒãã§ããŸãã
ããŒã¿ç§»è¡
ã§ã¯ãããŒã¿å€æã«ã€ããŠã¯ã©ãã§ãããããåçŽãªALTERã ãã§ã¯ååã§ã¯ãªãããã§ãã ããšãã°ã空ã§ãªãããŒãã«ã«NOT NULLãã£ãŒã«ãã远å ããDEFAULTå€ãæäŸããªãå Žåã¯ã©ããªããŸããïŒ å®éããã®ãããªãã£ãŒã«ãã«ããŒã¿ãäºåã«å
¥åãããŠããªãå ŽåãããŒã¿ããŒã¹ã¯ALTER TABLE ADDã¹ã¯ãªããã®å®è¡ãèš±å¯ããŸããã ãããŠãå€éšããŒã远å ãããããããŒãã«å
ã®ãã¹ãŠã®ããŒã¿ãå¶éãæºãããŠããããã§ã¯ãªãå Žå ãŸããããšãã°ãã¢ããªã±ãŒã·ã§ã³ããžãã¯ã倿Žãããããåããå¥ã®åã«ããŒã¿ã転éãããå Žåã¯ã©ãã§ããããã
ãããã®è³ªåã¯ãã¹ãŠæ£ããã®ã§ããããŸããã¢ããªã±ãŒã·ã§ã³ã®éçºäžã«ããŒã¿ããŒã¹ã§è¡ãã»ãšãã©ã®å€æŽã«ã€ããŠãç§»è¡ã¯å¿
èŠãªããåçŽãªALTERã¹ã¯ãªããã§ååã§ããããšã«æ³šæããŠãã ããã æ°ããããŒãã«ãŸãã¯æ°ããåãããŒãã«ã«è¿œå ããã ãã®å ŽåïŒNULLABLEãŸãã¯DEFAULTå€ã䜿çšïŒãããŒã¿ãç§»è¡ããå¿
èŠã¯ãããŸããã ã€ã³ããã¯ã¹ã远å ãŸãã¯åæ§ç¯ããå ŽåãããŒã¿ãç§»è¡ããå¿
èŠã¯ãããŸããã ãã¥ãŒã®ã¯ãšãªã倿Žãããå Žåãäœãç§»è¡ããå¿
èŠã¯ãããŸããã Celestaã·ã¹ãã ã䜿çšããæ
£è¡ã¯ãéçºè
ã«ãã倿Žã®å€§éšåããã®ã¿ã€ãã®ãã®ã§ããããšã瀺ããŠããŸãã
ããŒã¿ã®ç§»è¡ãæ¬åœã«å¿
èŠãªå Žåã¯ãã¯ãã1åéãã®ç§»è¡ã¹ã¯ãªãããäœæããŠå®è¡ããå¿
èŠããããŸãã ãã®ã¹ã¯ãªããããé·æã«ããã£ãŠãä¿åããå¿
èŠããªããšããã ãã§ããããããã°ãšã¢ããªã±ãŒã·ã§ã³ã®ã¹ããŒãªãŒã¯ã倿Žãã°ã«åºã¥ããŠæ§ç¯ãããã·ã¹ãã ãããã¯ããã«ç°¡åã§ãã
空ã§ãªãããŒãã«ã«å€éšããŒã远å ããå ŽåãèããŠã¿ãŸãããããã®ãããªããŒãæºããã¬ã³ãŒãã¯ãã¹ãŠãããŸããã ã¢ããã°ã¬ãŒãããã»ã¹äžã«ãCelestaã¯ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEYã³ãã³ãã䜿çšããŠãã®ãããªããŒãäœæããããšããŸãã 圌女ãæåããå Žå-ããŸãããã°-ã·ã¹ãã ã¯åæ¢ããCelestaã¯äœããã®çç±ã§ãã®ãããªãªããžã§ã¯ããããŒã¿ããŒã¹ããã®ã¡ãã»ãŒãžã§æŽæ°ã§ããªãã£ãããšãå ±åããŸãã
changelog-systemsã®å Žåãäžéç¶æ
ã§ååå®äºããŠä¿®æ£ããããã§ã³ãžã»ããã»ã©æªããã®ã¯ãããŸããããã®ç¶æ³ã§ã¯ãã·ã¹ãã ã¯2ã€ã®ãªããžã§ã³ã®ãäžéãã«ãããæåã§ãã解決ã§ããŸããã å€ãã®ããŒã¿ããŒã¹ã§ããŒã«ããã¯DDLãã©ã³ã¶ã¯ã·ã§ã³ããµããŒããããŠããªããããããã«å°é£ãçããŸãã
ã倿Žãã°ãã·ã¹ãã ãšã¯ç°ãªãããåæãã·ã¹ãã ã®å ŽåãæåŸãŸã§å®äºããŠããªãæŽæ°ã¯åé¡ã«ãªããŸãããALTERã³ãã³ããçæããããã«ãã·ã¹ãã ã¯ããŒã¿ããŒã¹ã®çŸåšã®
å®éã®ç¶æ
ãç®çã®ç¶æ
ãšæ¯èŒãããã詊ã¿ã§ã圌女ã¯å¥ã®è©Šã¿ã§çµããããšããŸãã
æŽæ°ãèªåçã«å®è¡ã§ããªãç¶æ³ã«çŽé¢ãããšïŒç¹°ãè¿ããŸããããã®ç¶æ³ã¯éåžžã«ãŸãã§ãïŒã1åéãã®ã¹ã¯ãªãããäœæã§ããŸãã åç
§ããŒãã«ã«å¿
èŠãªããŒã¿ãå
¥åããããã«ããCelestaãæŽæ°ãèªåçã«å®è¡ããããã®æ¡ä»¶ãäœæãããšããŸãã ãã®ã¹ã¯ãªããã¯ãå®çšŒåããŒã¹ã®æ°ããã³ããŒã§ãããã°ããå®çšŒåããŒã¹ã§å®è¡ããŠããCelestaæŽæ°ãçæã§ããŸãã
çµå±
ãã¹ã¯ãªããã¯äºåºŠãšå¿
èŠãªãã®ã§ã
åã«æšãŠãããšãã§ããŸã ïŒ çµå±ã®ãšãããäœæ¥ããŒã¹ã¯ãã§ã«æ§é äžå¿
èŠãªç¶æ
ã«ãããæ°ããããŒã¹ãæåããäœæããäºå®ãããå Žåã¯ãããŒã¹ããã¹ãŠã®æ¹æ³ã§é²è¡ãããŠãéçºããã»ã¹ã§ãã®æ§é ã宿ãããå¿
èŠã¯ãããŸããã
ããããããã®ã¢ãããŒãã¯ãæ§é ã倿Žãããã³ã«ããŒã¿ã®ç§»è¡ã«å¿
èŠãªæé ãæ€èšãããã®ãããªæé ã倿Žã»ããã«åã蟌ã倿Žãã°ã·ã¹ãã ã䜿çšãããããä¿¡é Œæ§ãäœããšæãããŸãã ããããèããŠã¿ããšããã®ç¹ã«é¢ããchangelogã·ã¹ãã ã®ä¿¡é Œæ§ã¯æ³åäžã®ãã®ã§ããããšãæããã«ãªããŸãã ãåç¥ã®ããã«ãæœåšçãªãšã©ãŒã®ãªãããã°ã©ã ã¯ãããŸãã;ãã®ã«ãŒã«ã¯ããŒã¿å€æŽã¹ã¯ãªããã«ãé©çšãããŸãã 倿Žã»ããã¹ã¯ãªãããæ¢åã®ããŒã¿ã»ããã§ãããã°ãããæ£ããåäœã瀺ãããšããäºå®ã¯ãããŒã¿ã«å¯ŸããŠãšã©ãŒãªãã§å®è¡ãããããšã100ïŒ
確å®ã«ä¿èšŒãããã®ã§ã¯ãããŸããã demçDDLã䜿çšããå Žåãå°ãªããšãããŒã¿å€æŽã¹ã¯ãªããã倿Žäžå¯ãšããŠå®£èšããªãå Žåãç£æ»å±æ§ã¯ãã§ãã¯ãµã ã«ãã£ãŠä¿è·ãããŸãã ãšã©ãŒãçºçããå Žåãã·ã¹ãã ãç®çã®æ§é ã«çž®å°ãããŸã§ãæŽæ°ããã€ã§ãç¹°ãè¿ãããšãã§ããŸãã Celestaã¯ããŒã¿ãå«ãåãšããŒãã«ã®ãããããèªåçã«å®è¡ããããã®æäœã¯æåã§å®è¡ããããããããŒã¿ã¯å€±ãããŸããã
* * *
æ®å¿µãªãããCelestaSQLã®ç¯å²ã¯Celesta ã·ã¹ãã ãšçµã¿åãããŠäœ¿çšââããŠããžãã¹ããžãã¯ã³ãŒããäœæããããšã«éå®ãããŠããã ïŒããæŽæ°ã¯ãããŸããïŒïŒãããã£ãŠã仿¥ã®ãããžã§ã¯ãã§ã¯ãããããLiquibaseããå§ãããŸãã ãã ããCelestaã¯ãªãŒãã³ãããžã§ã¯ãã§ããããã®éçºã®å¯èœãªæ¹åã®1ã€ã¯ãæ±çšã®ããŒã¿ããŒã¹æ§é ç§»è¡ããŒã«ã®äœæã§ãã
å人çã«ã¯ãããŒã¿ããŒã¹éçºè
ãã¹ãçæ§ãšDDLã³ã³ããŒãžã§ã³ã¹ã®å®éã®ãµããŒããå®è£
ããããšãåžæããŸãã
UPDïŒ2018幎åé ãããCelestaSQLã䜿çšããŠã
2bassã·ã¹ãã ã䜿çšããŠä»»æã®ããŒã¿ããŒã¹ãã¹ãçã«æŽæ°ã§ããŸãã