Flywayとは
FlywayとはJavaの開発で使われるデータベースのマイグレーションツールです。使い方の詳細は下記に書いてあるので初めての方は読んでみてください。
Flywayのバージョン管理方法
Flywayはファイル名にV1.0.0__initial_setup.sqlのように__(アンダースコア2つ)の前半にバージョン情報、後半に説明文を記入する構成となっています。
このマイグレーションファイルをFlywayで実行するとschema_versionsというテーブルに実行結果が保存されます。
mysql> select * from schema_version; +----------------+---------+---------------+------+---------------------------+-----------+--------------+---------------------+----------------+---------+ | installed_rank | version | description | type | script | checksum | installed_by | installed_on | execution_time | success | +----------------+---------+---------------+------+---------------------------+-----------+--------------+---------------------+----------------+---------+ | 1 | 1.0.0 | initial setup | SQL | V1.0.0__initial_setup.sql | 260229630 | root | 2018-02-22 13:42:39 | 41 | 1 | +----------------+---------+---------------+------+---------------------------+-----------+--------------+---------------------+----------------+---------+
テーブルには実行したマイグレーションファイル名、実行日時、バージョン、ファイルのハッシュ値(checksum)などが入っています。このようにテーブルにマイグレーションの実行結果を残していくことで2重でマイグレーションを実行しないようにしたり、実行済みのマイグレーションファイルの中身が意図せず変わった時にハッシュ値が変わることで間違いを教えてくれます。
過去のマイグレーションファイルを変えたい時
Flywayを使ってマイグレーションを実行するとマイグレーションの実行順番とファイルの中身は簡単に変更することはできません。これが良いところでもあるのですが、開発中だとめんどくさい時もあるのが正直なところです。
例えば3つのファイルをすでに実行済みで1番最初に実行したファイルの中身を変えたくなった場合、4つ目のファイルでテーブルを修正するALTER文を作成して実行するのが一番の正攻法です。しかし、この方法だとどんどんファイルが増えてしまい把握がしづらくなってきます。
なので本番リリース前の開発中であればデータベースを丸ごと削除してファイルを修正し、最初からDBを作り直すのが一番楽です。けど、すでにDBにデータが入っていたり、データを消すことが困難な場合ファイルを追加していくしかないです。
ファイルを追加せずに修正する方法
これはかなりアウトローな修正方法なのでオススメしませんが、こういう方法もありますよということで紹介しときたいと思います。
まずFlywayがマイグレーションを実行する時の仕組みについてですが、Flywayは実行時にテーブルに保存しているファイル名とchecksumで実行済みのファイルのハッシュ値が同じになるか比較しています。このハッシュ値が同じ場合は何もエラーが起こりません。
しかし、マイグレーションファイルの中身を変更するとテーブルに保存されているハッシュ値と差異が出てエラーが発生します。ということはマイグレーションファイルを修正した後のハッシュ値でテーブルを更新してあげればFlywayはエラーを起こさないということです。
仕組みを理解してしまえば簡単なことなんですが、ツールを使うと中身はブラックボックスになってしまうことが多いので気をつけないといけないですね。
補足で、必要なくなったテーブルが出てきた場合はそのテーブルを作成したマイグレーションアフィルを削除してテーブルからもそのレコードを削除するだけで問題なかったです。この方法が正しいとは思えませんが一応大丈夫だったので書いておきます。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す