Scalaで行うマイグレーション ~Flyway~

Preview:

Citation preview

導入 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テーブルを作ると、失敗する

Recommended