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

スポンサーリンク

開発

Flywayでテーブルを作る(DBマイグレーション)

なぜ、Flywayでテーブルを作るのか?

開発現場では必ずMySQLやPostgres、Oracleなどのデータベースを使います。

最初にまとめてどかっとCREATE文が配られて、開発を進めていくのが通例だと思います。その後、開発が進んでいくにつれて、「あのカラムがいる、このテーブルがいる…」とテーブルには変更が入っていきますね。

その都度、自分でAlter table文を書いたり、配られたりするわけですが、問題になるのが、「どこまで適用したっけ?」と、テーブル全体がどの状態なのかわからなくなるのです。

それを解決しようとするのが、データベースの状態をバージョン管理するFlywayです。

Flywayの基礎知識

Flyway はオープンソースのデータベースマイグレーションツール。Flyway を使うことで、データベースの状態をバージョン管理できるようになる。

FlywayをGradleプロジェクトに適用する

Flywayはgradleプラグインとして提供されているため、build.gradleのpluginsに以下を追加するだけ使えるようになります。

plugins {
    id "org.flywaydb.flyway" version "7.5.2"
}

intelliJでbuild.gradleを開いて、そのままペーストしました。
右端の象さんマークを押すことで、変更が反映されるため、押します。

正常にbuild.gradleの変更が反映されると、Gradleタスクにflyway関係のタスクが追加されています。

試にこの時点で flywayInfo を実行しても、「Unable to connect to the database. Configure the url, user and password!」と表示されるだけですが、flywayが使えるようになったことは分かりますね。

データベースを作成する

MySQLであれば、インストール時に「MySQL 5.7 Command Line Client」が入っていると思います。プログラムメニューから探して起動しましょう。

mysql> create database sampledb;
mysql> create user 'springuser'@'%' identified by 'ThePassword'; -- Creates the
user
Query OK, 0 rows affected (0.26 sec)
mysql> grant all on sampledb.* to 'springuser'@'%'; -- Gives all privileges to
the new user on the newly created database
Query OK, 0 rows affected (0.00 sec)

これでデータベース(スキーマ)が作成されました。

この時点でflywayInfoを動かせるようにします。
build.gradleにflywayの接続先を設定します。(application.propertiesではありません)

flyway {
	url = 'jdbc:mysql://localhost:3306/sampledb'
	user = 'root'
	password = 'rootpw'
	schemas = ['sampledb']
}

これでflywayInfoを実行してみます。

BUILD SUCCESSFUL in 2s と表示されれば成功しています。

テーブルを作る

Create table文を作る

flywayInfoを実行したときに、ログに「Skipping filesystem location:D:\sample-project\sample-project-api\src\main\resources\db\migration (not found).」と出力されていますね。

その場所にディレクトリを作って、Create文やAlter table文を記載したSQLファイルを追加していきます。

SQLファイルの命名ルールは下記です。

  • V<Version>__<Description>.sql
  • <Version> は任意のバージョン番号…半角数値と、ドット . またはアンダーバー _ の組み合わせで指定する。
  • <Description> は任意の説明文

例としてはこんな感じです。(チーム内で命名ルールを決めておきましょう。緩いルールで良いです。)

  • 例1 V1__create_users.sql
  • 例2 V1.0.1__alter_users_add_dept_id.sql
  • 例3 V10.1__create_tables_dept_salary.sql

flywayMigrateを実行する

今回は users というテーブルを作ります。
sample-project-api\src\main\resources\db\migration にcreate table文を書きます。

CREATE TABLE USERS(
  USER_ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT
  , name VARCHAR (20)
  , name_kana VARCHAR (20)
  , age int
  , enterAt date
);

Gradleタスクの flyway > flywayMigrate を実行します。
すると、SQLの中身が実行されます。

DBクライアントで確認すると、今回作りたかったusersテーブルとともに、flyway_schema_historyというテーブルが作成されました。これはflywayの実行履歴を管理するテーブルです。削除しないでください。

もし、flywayMigrateがうまくいかなければ、Gradleタスクの flyway > flywayRepairやflywayCleanを行ってからやり直してみてください。

この後、テーブルを追加したり、テーブル定義を変更するには、SQLファイルを作る→flywayMigrateを実行するの繰り返しでOKです。

スポンサーリンク

-開発