Javaの世界にはMaven2という便利なビルドツールがあります。
先日開催されたSeasar Conference 2008 Autumnにて、JiemamyというEclipse&Maven2プラグインが紹介されていました。
このツールに触発されて、Ruby on Railsが持っている便利な機能であるmigrationがMaven2で行えないか、と考えました。
先日開催されたSeasar Conference 2008 Autumnにて、JiemamyというEclipse&Maven2プラグインが紹介されていました。
JiemamyはオープンソースのDB設計・リファクタリングサポートツールです。
DBリファクタリングの必要性は明らかですが、様 々な要因により、気軽にリファクタリングを行うことができません。Jiemamyは、DBの進化的設計(Evolutionaly Database Design)を実現するために、以下の要件を軸に、DBに依存するシステムの開発・運用をサポートします。
- データベースの構成変更をGUIの操作みで行える。
- DML(INSERT文 = データ)も一緒に管理出来る。
- Maven2等と連携することにより、チェックアウトしたてのアプリケーションをコマンド一つで「使える状態」に出来る。
このツールに触発されて、Ruby on Railsが持っている便利な機能であるmigrationがMaven2で行えないか、と考えました。
仕様
ザックリとした仕様は以下のとおり。まだ思いつきレベルなので今後大いに変更があります。
pom.xmlの設定
pom.xmlに、プラグインを使うための設定を記述する。<project>
<build>
<plugins>
<plugin>
<groupId>st.happy_camper.siphon</groupId>
<artifactId>maven-db-plugin</artifactId>
<configuration>
<rootPackage>root.package</rootPackage>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>siphon.happy-camper.st</id>
<name>siphon : Happy-Camper Street Maven2 Repository</name>
<url>http://siphon.happy-camper.st/maven2</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>siphon.happy-camper.st</id>
<name>siphon maven plugin</name>
<url>http://siphon.happy-camper.st/maven2</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>st.happy_camper.siphon</groupId>
<artifactId>siphon.db.api</artifactId>
<version>x.x.x</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
Migrationクラス
pom.xmlに設定した${rootPackage}.migrateパッケージに設置。package root.package.migrate;
import st.happy_camper.siphon.db.api.Migration;
public class _20080915185500_CreateUser extends Migration {
public void up() {
createTable( "tablename", new CreateTableHandler() {
public void createTable(Table t) {
t.integer("userId").notnull().primaryKey();
t.string("userName").notnull();
}
} );
}
public void down() {
dropTable( "tablename" );
}
}
こんな感じでRuby on Rails風に。
クラス名のアンダーバーで囲まれた数字を連番で実行していきます。
database.properties
database.propertiesファイルにDB接続の設定を記述。database.root.jdbc = com.mysql.jdbc.Driver
database.root.url = jdbc:mysql://localhost:3306/xxxxx?characterEncoding=UTF-8&characterSetResults=UTF-8
database.root.username = username
database.root.password = password
実行
mvnコマンドにて実行。$ mvn db:migrate
もちろん、接続するDBの型などに合わせたSQLを吐きます。
うーん、できたら便利かも!?