「Flywayって何?」な状態から「あーね。Flywayね。」ぐらいのレベルになるための記事。

flyway-basic-top DB
スポンサーリンク

「Flyway昔使ったけど、使い方を忘れた。。」

「Flywayって何?」

みたいな状況から、なるべく簡単に概要を把握して、基本的な使い方なら大丈夫!となれることを目指しています。

Homepage - Flyway
Version control for your database. Robust schema evolution across all your environments. With ease, pleasure, and plain ...

本ページはプロモーションが含まれています。

あなたの才能に、正当な価格を。転職ドラフトで見つける、次のステージ。
スポンサーリンク

Flywayの概要をなるべく簡単に掴む。

Flywayは、「データベースのバージョン管理ツール」の1つです。Flywayを通して、DDLやDMLを適用していくことでバージョン管理していくことができます。

特徴としては、以下の2つ。

  • 多種多様なDBに対応
  • CLIやJava API、Maven/Gradleのプラグインで使用可能

データベースマイグレーションツールってなぜ利用するの?ってところですが、利用することで以下の課題を解決することができます。ご参考まで。

  • データベースを再作成可能にする。
  • データベースの状態を常に把握する。
  • どのスクリプトがDBに適用されているか知ることができる。

Flywayでマイグレートするまでの実際の流れ

Flywayの使い方を実際の流れから紹介していきます。

サンプルはこちら

GitHub - katsuya-yamaguchi/flyway-recipe
Contribute to katsuya-yamaguchi/flyway-recipe development by creating an account on GitHub.
転職エージェントなら「レバテック」!
レバテックキャリア

求人数も多く、完全無料で利用することができます。すぐに退会もすることもできるので、1度登録して、相談に乗ってもらうことがオススメです。

1.Flywayの初期設定を行う。(conf/flyway.conf)

今回は、必要最低限の設定をします。DBへの接続情報、管理するSQLファイルの格納パス。

...
# DBへの接続URL
flyway.url=jdbc:postgresql://[ホスト名orIP]:[ポート]/[DB名]

# DBに接続するユーザーとパスワード
flyway.user=postgres
flyway.password=postgres

# 管理するSQLファイルを格納するパス
flyway.locations=filesystem:sql
...

2.FlywayからDBに繋がるか確認する。

$ flyway info
Flyway is up to date
Flyway Community Edition 8.5.10 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#8.5.10

Database: jdbc:postgresql://db:5432/work (PostgreSQL 12.7)
Schema version: 4

+-----------+---------+-----------------------+----------+---------------------+----------+
| Category  | Version | Description           | Type     | Installed On        | State    |
+-----------+---------+-----------------------+----------+---------------------+----------+
+-----------+---------+-----------------------+----------+---------------------+----------+

flyway info コマンドでは、マイグレーションの履歴などを確認することができます。

Flyway Documentation - Flyway - Product Documentation

3.ベースラインを作成する。

FlywayでDDLなどを適用していくためには、まずベースラインを作成します(Flywayで管理を始める基準ようなもの)。

$ flyway baseline
Flyway is up to date
Flyway Community Edition 8.5.10 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#8.5.10

Database: jdbc:postgresql://db:5432/work (PostgreSQL 12.7)
Schema version: 4

+-----------+---------+-----------------------+----------+---------------------+----------+
| Category  | Version | Description           | Type     | Installed On        | State    |
+-----------+---------+-----------------------+----------+---------------------+----------+
|           | 1       | << Flyway Baseline >> | BASELINE | 2022-05-09 04:27:27 | Baseline |
+-----------+---------+-----------------------+----------+---------------------+----------+

4.SQLファイルを作成する。

それではSQLファイルを作成していきます。まず、SQLファイルの格納先は flyway.confflyway.locations=filesystem:sql で定義した場所になります。

また、SQLファイル名には決まりがあるため、以下の決まりに沿った名称をつけます。

flyway naming rule.
Versioned Migrations基本的にこれを使用する。DDLやDMLが対象。
Undo Migrations同じバージョンでマイグレーションの結果を元に戻す際に使用する。有料プランのみ使用可能。

例:V1__create_table.sql → U1__drop_table.sql でinfoを実行するとバージョンは1のまま。
Repeatable MigrationsViewやプロシージャ、ファンクションなど1つのファイルで管理するものが対象。

今回は、簡単なテーブルを作成する以下のSQLファイルを作成します。

V1__create_user_table.sql

// デフォルトスキーマをflyway.confに設定していないため、スキーマまで指定しています。
CREATE TABLE public.user (
  id SERIAL PRIMARY KEY,
  name VARCHAR(30) NOT NULL,
  password VARCHAR(40) NOT NULL,
  email VARCHAR(30) NOT NULL,
  created_at TIMESTAMP NOT NULL
);

5.作成したSQLファイルをinfoコマンドで確認する。

infoコマンドを実行すると、作成したSQLファイルが表示されます。まだ、DBに適用されていないため、「Status」が「Pendding」になっています。

$ flyway info
Flyway is up to date
Flyway Community Edition 8.5.10 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#8.5.10

Database: jdbc:postgresql://db:5432/work (PostgreSQL 12.7)
Schema version: 1

+-----------+---------+-----------------------+----------+---------------------+----------+
| Category  | Version | Description           | Type     | Installed On        | State    |
+-----------+---------+-----------------------+----------+---------------------+----------+
|           | 1       | << Flyway Baseline >> | BASELINE | 2022-05-12 12:41:50 | Baseline |
| Versioned | 2       | create user table     | SQL      |                     | Pending  |
+-----------+---------+-----------------------+----------+---------------------+----------+

flyway@d4fb4712499a:~$

6.マイグレートを実行する。

$ flyway migrate
Flyway is up to date
Flyway Community Edition 8.5.10 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#8.5.10

Database: jdbc:postgresql://db:5432/work (PostgreSQL 12.7)
Successfully validated 2 migrations (execution time 00:00.060s)
Current version of schema "public": 1
Migrating schema "public" to version "2 - create user table"
Successfully applied 1 migration to schema "public", now at version v2 (execution time 00:00.066s)
flyway@d4fb4712499a:~$

実際のDBを確認すると、以下のようにちゃんとテーブルが作成されていることが分かります。

work=# \d
                  List of relations
 Schema |         Name          |   Type   |  Owner   
--------+-----------------------+----------+----------
 public | flyway_schema_history | table    | postgres <- Flywayのメタデータを保存しているテーブル。
 public | user                  | table    | postgres
 public | user_id_seq           | sequence | postgres
(3 rows)

work=#

以上でFlywayの紹介は終了です。

柔軟性と高収入を両立。Midworkで、理想のワークスタイルを実現
Midworks

Midworkはフリーランスエンジニアのために、高単価からフルリモートまで、多様な働き方をサポートするプロジェクトマッチングサービスです。専任カウンセラーによる手厚いキャリアサポートも、特徴の一つ。これらのサービスを通じて、あなたのキャリアを次のレベルへ。

プロフィール
この記事を書いた人
katsuya

SESからキャリアをスタートし、現在はフリーランスとして活動しています。フリーランスになってから6年で年収1,000万円を達成しました。「Study Infra」では、今までの経験やITインフラに関する情報を発信中です。

katsuyaをフォローする
DBFlyway
スポンサーリンク
シェアする
katsuyaをフォローする

コメント

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