この記事は公開されてから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のサポートが予定されているようです。