はじめに
Flywayは、データベースのマイグレーション管理に非常に便利なツールです。特にDocker環境でFlywayの公式イメージを使用することで、マイグレーションの管理がよりシンプルになります。
本記事では、Flywayの基本的な仕組みやファイル構成について解説し、その後Docker Composeを使ってFlywayを実行する際の便利なTipsを紹介します。
Flywayの基本
マイグレーション履歴 (flyway_schema_history テーブル)
Flywayはデータベースのマイグレーション履歴を flyway_schema_history
という専用のテーブルに記録します。このテーブルには、適用済みのマイグレーションのバージョンや実行日時、適用結果などが保存されます。
例えば、以下のようなデータが格納されます。
installed_rank | version | description | type | script | success |
---|---|---|---|---|---|
1 | 1.0.0 | Init Schema | SQL | V1_0_0__init.sql | true |
2 | 1.1.0 | Add Table | SQL | V1_1_0__add_table.sql | true |
この履歴を flyway info
コマンドで確認できます。
マイグレーションスクリプトの命名規則
Flywayでは、マイグレーションスクリプトを特定の命名規則に従って作成する必要があります。
基本的なフォーマット
V<バージョン>__<説明>.sql
例えば、以下のようなファイルが存在するとします。
V1_0_0__init.sql
V1_1_0__add_table.sql
V2_0_0__modify_column.sql
Flywayはバージョン番号を解析し、適用されていないスクリプトを自動的に実行します。
Docker Composeでの基本的なコマンド
プロジェクトでは、以下のようなコマンドを使用してマイグレーションを管理しています。
1. 現在のマイグレーションの状態を確認
docker compose run migrate-container info
このコマンドを実行すると、現在適用されているマイグレーションの一覧や、まだ適用されていないマイグレーションの情報を確認できます。データベースの変更履歴を把握する際に便利です。
2. 破損したマイグレーション履歴を修正
docker compose run migrate-container repair
マイグレーション履歴の不整合が発生した場合、このコマンドを実行することで修正できます。例えば、適用途中で失敗したマイグレーションを修復し、次のマイグレーションを正常に実行できる状態にします。
3. 順序が前後するマイグレーションを適用
docker compose run migrate-container migrate -outOfOrder=true
通常、Flywayは適用済みのバージョンよりも古いバージョンのマイグレーションを適用しません。しかし、このオプションを指定することで、後から追加された古いマイグレーションを適用できます。開発時に一部の変更を後から適用する必要がある場合に役立ちます。
Tips①: データベースの起動を待ってからFlywayを実行
Flywayのコンテナを起動する際に、データベースコンテナがまだ起動しきっていないとエラーになることがあります。これを防ぐため、Flywayを実行する前にデータベースの起動を待つようにすると安定します。
方法1: depends_on を使用する
docker-compose.yml
に depends_on
を設定すると、指定したコンテナの起動を待ってからFlywayのコンテナが実行されます。
services:
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
migrate-container:
image: flyway/flyway
depends_on:
- db
command: ["migrate"]
ただし、depends_on
はコンテナの起動を待つだけで、DBの準備が整うまで待つわけではない点に注意が必要です。
方法2: wait-for-it.sh を使う
より確実な方法として、wait-for-it.sh
などのスクリプトを利用し、DBが完全に起動してからFlywayを実行する方法があります。
migrate-container:
image: flyway/flyway
entrypoint: ["/bin/sh", "-c", "./wait-for-it.sh db:5432 -- flyway migrate"]
まとめ
Docker環境でFlywayを活用する際には、
flyway_schema_history
を確認しながら、適切にマイグレーションを管理- マイグレーションスクリプトの命名規則を守ることで、バージョン管理を明確化
docker compose
コマンドで手軽にマイグレーションを実行可能- DBの起動を考慮し、
depends_on
やwait-for-it.sh
を活用することで安定性を向上
などの工夫をすると、よりスムーズな運用が可能になります。今後も、より良い運用方法を探りつつプロジェクトに活かしていきたいですね!