話題の記事

Flywayで簡単DBマイグレーション

2013.03.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Flywayとは

FlywayとはDBマイグレーションフレームワークです。
複数人でのアプリケーション開発時のDBマイグレーション作業を素早く手軽に行うことができます。
MavenやAnt、APIやコマンドラインツール形式で提供されており、柔軟に対応することができます。

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.4
  • MySQL : 5.5.15

flywayを使ってみよう

環境設定

flywayはMavenやAPIからも使用できますが、今回はCommand-line Toolを使ってみましょう。
ここからCommand-line Toolをダウンロードして解凍しておきましょう。

次にテストで使用するデータベースを用意します。今回はMySQLを使用しました。
mysqlを起動し、コンソールからデータベースを作成しておきましょう。

mysql> create database flysample;
Query OK, 1 row affected (0.00 sec)

次はここからMySQL用のJDBCドライバをダウンロードします。
ダウンロードしたjarファイルは、解凍したflywayディレクトリのjarsディレクトリにコピーします。

DBへの接続情報を設定します。conf/flyway.propertiesに接続URLとユーザー名、パスワードを記述しましょう。

・
・
# Jdbc url to use to connect to the database
flyway.url=jdbc:mysql://localhost/flysample

# User to use to connect to the database (default: <<null>>)
flyway.user=<ユーザー名>
flyway.password=<パスワード>
・
・

マイグレーション実行

では、DBに対してマイグレーションを実行してみます。
DBへはsqlファイルを使用して操作をします。sqlディレクトリに実行したいSQL文を記述しましょう。
使用するsqlファイルの名前はとても重要です。今回は「V1__Create_person_table.sql」という名前のファイルを用意しました。
頭の「V」は固定で、その後の数値がバージョン番号を表します。その後に_を2つ続けます。さらにその後ろはDescriptionとなり、
マイグレーション実行ログ(flyway info実行時に確認できる)に記録されます。
ファイル内容は下記のように、テーブルを作成するSQL文になってます。

create table PERSON (
    ID int not null,
    NAME varchar(100) not null
);

では、コマンドを実行しましょう。自分の環境の場合、flyway.shを実行します。migrateコマンドを実行すると、先ほどのSQLが実行されます。

%./flyway.sh migrate                                      
Flyway (Command-line Tool) v.2.1.1

Creating Metadata table: `flysample`.`schema_version`
Current version of schema `flysample`: << Empty Schema >>
Migrating schema `flysample` to version 1
Successfully applied 1 migration to schema `flysample` (execution time 00:00.278s).

mysqlを確認してみてください。テーブルが作成されているのがわかります。

mysql> create database flysample;
Query OK, 1 row affected (0.00 sec)

mysql> use flysample;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------+
| Tables_in_flysample |
+---------------------+
| PERSON              |
| schema_version      |
+---------------------+
2 rows in set (0.00 sec)

では、続けてマイグレーションを行いましょう。sqlディレクトリに「V2__Add_people.sql」という名前でデータ登録用SQLを記述します。

insert into PERSON (ID, NAME) values (1, 'isaka');
insert into PERSON (ID, NAME) values (2, 'ogawa');
insert into PERSON (ID, NAME) values (3, 'minato');

再びmigrateコマンドを実行します。V1で作成したテーブルにデータが登録されます。

%./flyway.sh migrate                                        
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
Flyway (Command-line Tool) v.2.1.1

Current version of schema `flysample`: 1
Migrating schema `flysample` to version 2
Successfully applied 1 migration to schema `flysample` (execution time 00:00.071s).

まとめ

今回はDBマイグレーションツール、flywayを使ってみました。簡単に使用できますし、いろいろな形式で使用できて便利だと思います。
なお、次バージョンのFlyway 3.0ではSQLiteおよびAndroidのサポートが予定されているようです。

参考サイトなど