Edited at

Flywayのsbt pluginを利用した環境で、SQL-based migrationとJava-based migrationを併用する

More than 1 year has passed since last update.


概要

FlywayのMigrationには、SQLを利用した SQL-based migration の他に、マイグレーション処理をコードで書くことができる Java-based migration がある。

(Java-based と書かれているが、もちろんScalaなどで書くことが可能なので Code-based migration と呼んだ方が正確かも)

Flywayのsbt-pluginを利用した環境で、この2種類のマイグレーション方法を併用する(通しのバージョン番号を付ける) 方法についてまとめる。


サンプルプロジェクト

実際にやってみたサンプルプロジェクトがこちら。

https://github.com/h-1k10/sbt-flyway-sample

sbtの flyway サブプロジェクト内で flywayMigrate タスクを実行するとマイグレーション処理が走る。


サンプルプロジェクトの説明

flyway-sbt の基本的な設定については説明を省略し、2種類のマイグレーション方法を併用するのに関連する設定についてのみ説明する。


build.sbt



  • libraryDependenciesflyway-core を追加する



    • Java-based migration に必要




  • flywayLocations にマイグレーション用のSQLファイルを配置したディレクトリ名と、マイグレーション用のScalaコードを配置したパッケージ名(ディレクトリ名ではない点に注意) を設定する


マイグレーション用Scalaコード



  • flyway/src/main/scala/com/github/h_ikio/sbt_flyway_sample/migration 配下を参照


  • JdbcMigration インターフェースを実装するクラス内にマイグレーション処理を書く


  • ドキュメント に記載がある通り、クラス名のネーミングにルールがある点に注意

  • サンプルプロジェクトでは、ScalikeJDBCを利用してマイグレーション処理のコードを書いている

  • バージョン番号は SQL-based migration のものも含めて通し番号で付ければよい