Docker環境でFlywayを活用するTips

Docker

はじめに

Flywayは、データベースのマイグレーション管理に非常に便利なツールです。特にDocker環境でFlywayの公式イメージを使用することで、マイグレーションの管理がよりシンプルになります。

本記事では、Flywayの基本的な仕組みやファイル構成について解説し、その後Docker Composeを使ってFlywayを実行する際の便利なTipsを紹介します。

Flywayの基本

マイグレーション履歴 (flyway_schema_history テーブル)

Flywayはデータベースのマイグレーション履歴を flyway_schema_history という専用のテーブルに記録します。このテーブルには、適用済みのマイグレーションのバージョンや実行日時、適用結果などが保存されます。

例えば、以下のようなデータが格納されます。

installed_rankversiondescriptiontypescriptsuccess
11.0.0Init SchemaSQLV1_0_0__init.sqltrue
21.1.0Add TableSQLV1_1_0__add_table.sqltrue

この履歴を 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.ymldepends_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_onwait-for-it.sh を活用することで安定性を向上

などの工夫をすると、よりスムーズな運用が可能になります。今後も、より良い運用方法を探りつつプロジェクトに活かしていきたいですね!

タイトルとURLをコピーしました