導入 Flyway 鈴木 雄登
導入 Flyway鈴木 雄登
自己紹介
• 鈴木 雄登
• Scala / Python / NLP
Flywayとは?
• DBのマイグレーションツール
• Javaと親和性が高い
マイグレーション?• DBのテーブル構成管理を行うツール
• SQLなどのソースコードレベルで管理できる
• 有名なものは、railsのActiveRecordsなど
• 大体、どの言語でも実装されている。GO, Python, PHP etc.
なぜ使う??
• データベースのテーブル構造に関する変更の差分のみを管理できる
• 簡単に同じテーブル構成を作成できる
• GitHubなどでDBの変更をソースとして管理できる。
Javaでの マイグレーション
Javaでのマイグレーション
• Flyway→SQLで管理。シンプル。
• Liquibase→XMLもしくは注釈(必須)付きSQLで管理。高機能。
Flywayの紹介
【紹介理由】
• 会社で利用が多いplay-frameworkのプラグインがある。
• シンプルなため理解しやすい。
Flywayでできること• migrate
• clean
• info
• validate
• baseline
• repair
migration
DBのバージョンを更新 現在のバージョンを確認し、差分だけ更新してくれる
clean
すっきり!!
info
validate
DBが正しく動くかSQLをチェック
baseline
あるバージョンをベースラインとして、 そこからクエリを投げるようにする。
repair
マイグレーションが失敗したことにより、 壊れたmetadataを修復
flywayで出来ないこと
• ロールバック:railsでは、当たり前のロールバックがありません。。
flywayの起動まで1,インストール
2,confのコピー
3,conf書き換え
flyway起動まで24,sql作成
5,マイグレーション!
デフォルトの読み込むconfがflyway.propertiesなので注意
実際に試してみる• 今回は、H2を利用。
• H2 • SQLiteのように使えるデータベースエンジン • インメモリデータベース • ファイルオープン中は同一セッション • ファイルを使うと、GUIで確認できる
実際に試してみる2
• play-flyway
• Playの起動時に、マイグレーションを実行してくれます。
• サンプルコードhttps://github.com/moc-yuto/test-playframework
おまけ
• h2のハマりどころ • 複数アプリケーションからは、開けない
• デフォルトでusersテーブルがある。自分でusersテーブルを作ると、失敗する