Play flyway ãã©ã°ã¤ã³ãä½ãã¾ãã
https://github.com/tototoshi/play-flyway
Play ã«ã¯ãã¨ã㨠Evolutions ã¨ãããã¼ã¿ãã¼ã¹ãã¤ã°ã¬ã¼ã·ã§ã³æ©è½ãã¤ãã¦ãã¾ãããããã¨åããããªæ©è½ã Flyway ã§ä½ãã¾ããã
Flyway 㯠Java 製ã®ãã¼ã¿ãã¼ã¹ãã¤ã°ã¬ã¼ã·ã§ã³ã©ã¤ãã©ãªãªãã§ãããJava ã§ã³ã¼ããæ¸ããããXML ã使ã£ããã§ã¯ãªããEvolutions ã¨åæ§ã«ãPlain 㪠SQL ãã¡ã¤ã«ã使ãã®ãåºæ¬ã§ãã
Motivation 1 (éè¦)
Play ã® Evolutions Plugin ã£ã¦å®ã¯ DBPlugin ã«ä¾åãã¦ããã®ã§ãDBPlugin ã使ããªã人ã«ã¨ã£ã¦ã¯ã¡ãã£ã¨ãã©ãããã¨ãããããã¾ããDBPlugin ã使ããªã人ã£ã¦ã®ã¯ä¾ãã°
- Mongo ã¨ã使ã£ã¦ã人
- Scalikejdbc ã® PlayPlugin ãªã©ãDBPlugin ã«ä¾åããªã形㧠RDB ã使ã£ã¦ãã人
ãªã©ã§ãããããã人ã¯ä¸è¦ã§ã Evolutions ã使ãããã«ã¯ DBPlugin ãç¡å¹ã«ã§ãã¾ããã
ããã«ãEvolutions ã¯å®ã¯ã¤ã³ã¿ã¼ãã§ã¼ã¹ã¨ãã¦ã® DBPlugin 㨠DBPlugin ã®å®è£ ã§ãã BoneCPPlugin ã®ä¸¡æ¹ã«ä¾åãã¦ããããã
- Play ã® DBPlugin ã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ãç¶æ¿ãã DBPlugin ãèªä½ãã人
ã Evolutions ã使ããããã° BoneCPPlugin ããªãã«ã§ãã¾ããã
ã¨ããããã§ãªãã§ããããã DBPlugin ã«ä¾åããªã Evolutions ã®ä»£æ¿ã欲ããã£ãã
Motivation 2
Evolutions 㯠Ups 㨠Downs æ¸ãã¾ãããDB ãã¤ã°ã¬ã¼ã·ã§ã³ã®æ´¾é¥ã«ã¯ ãDowns ãããªããããã? æ´¾ããããããã Evolutions ã® feature request ã«ãããããããªã®ãããã¾ãããã㨠Evolutions ã®å ´å㯠Ups 㨠Downs ã両æ¹ã¨ãåããã¡ã¤ã«ã«æ¸ãã®ã§æããã¨ããæè¦ãããã¾ãã
Flyway 㯠Ups ã®ã¿ã§ Downs ã¯ããã¾ãããããã¯ã¾ã好ã¿ã ã¨æãã¾ãã
ã¤ã³ã¹ãã¼ã«
Build.scala/build.sbt ã« dependency ã追å ãã¦
libraryDependencies += "com.github.tototoshi" %% "play-flyway" % "0.1.0"
play.plugins ã«ãããæ¸ãã
1000:com.github.tototoshi.play2.flyway.Plugin
ä½¿ãæ¹
SQL ã¹ã¯ãªããã®é ç½®ã®ä»æ¹
conf/db/migration/${dbName} 以ä¸ã«ç½®ãã¦ãã ããã
default ãªã conf/db/migration/default ã§ãã
ãã¡ã¤ã«å㯠flyway ã®è¦ç´ã«å¾ã£ã¦ä¸ãããV1__create_nantoka_table.sql ã®ããã«ãªãã¾ãã詳ãã㯠Flyway ã®ããã¥ã¡ã³ããè¦ã¦ãã ããã
Dev
Evolutions ã¨åãããããªæãã®ç»é¢ãåºã¦ããã®ã§ã½ã¡ã£ã¨ãã¦ãã ããã
ãã¹ã
ãã¹ãæã¯ãã¤ã°ã¬ã¼ã·ã§ã³ã¯èªåã§é©ç¨ããã¾ãã
Play 2 ã§ã¯ h2 ã®ã¤ã³ã¡ã¢ãªãã¼ã¿ãã¼ã¹ã使ã£ã¦ãã人ãå¤ããã¨æãã¾ããããã®ã¨ãã¯æ³¨æãå¿ è¦ã§ããã¤ã³ã¡ã¢ãªãã¼ã¿ãã¼ã¹ã¯æ¥ç¶ãåããã¨ãã¼ã¿ãæ¶ããã®ã§ããããé²ãããã« DB_CLOSE_DELAY=-1 ãè¨å®ãã¾ããPlay ã® inMemoryDatabase ãã«ãã¼ã使ãã°ä»¥ä¸ã®ããã«ã㦠DB_CLOSE_DELAY ãªãã·ã§ã³ãè¨å®ã§ãã¾ãã
running(FakeApplication( additionalConfiguration = inMemoryDatabase(name = "default", options = Map("DB_CLOSE_DELAY" -> "-1")) )) { test() }
ã¡ãªã¿ã«ãã®ãªãã·ã§ã³æå®æ©è½ãã¤ããã®ã¯ç§ã§ããï¾ï¾ï¾
https://github.com/playframework/Play20/commit/f99b03d35f843c8e536435e6c597f8383c51dee0
Production
Production ã¢ã¼ãã ã¨ãã¤ã°ã¬ã¼ã·ã§ã³ãå¿
è¦ãªç¶æ
ã§ã¯èµ·åã§ãã¾ãããéçºæã®ããã«ãã¿ã³ãæ¼ãã¦ã¼ã¡ã£ã¨ãã§ããªãã®ã§ãEvolutions ã¨åãã§ãã
db.${dbName}.migration.auto ã application.conf ã§æå®ãããã¨ã§ãã¤ã°ã¬ã¼ã·ã§ã³ãé©ç¨ã§ãã¾ãã
ããã¡ããã¨ããã¯ã¢ããã¨ããã¦ããã«ãã¦ãã ãããã
ã¾ã¨ã
ãã«ãªã¯ãå¾ ã¡ãã¦ããã¾ãã