データベースのバージョン管理とも言えるマイグレーションはRuby on Railsが実装した辺りから注目されるようになりました。新しいフレームワークがあると、ついマイグレーション機能はないのかと探してしまうくらいです。 しかし常にRuby on Railsを使うわけではありません。そこで使ってみたいのが独立したマイグレーションツールのRamblerです。

Ramblerの使い方

Ramblerでは実行するSQLを実際に書いて指定します。rambler upでバージョンアップ時に実行するSQL、rambler downでバージョンダウン時に実行するSQLを書きます。

-- rambler up

CREATE TABLE foo (
    id INTEGER UNSIGNED AUTO_INCREMENT,
    bar VARCHAR(60),
    PRIMARY KEY (id)
);

-- rambler down

DROP TABLE foo;

後はrambler applyコマンドでSQLを反映します。reverseで戻せるようになっています。

$ ./rambler 
NAME:
   rambler - Migrate all the things!

USAGE:
   rambler [global options] command [command options] [arguments...]

VERSION:
   3.5.0

AUTHOR:
   Romain Baugue <romain .baugue@elwinar.com>

COMMANDS:
     apply    apply the next migration
     reverse  reverse the last migration
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --configuration value, -c value  path to the configuration file (default: "rambler.json")
   --environment value, -e value    set the working environment (default: "default")
   --help, -h                       show help
   --version, -v                    print the version

一度実行するとmigrationsというテーブルが作られ、その中に実行したSQLファイル名が入ります。

mysql> show tables;
+--------------------+
| Tables_in_mig_test |
+--------------------+
| foo                |
| migrations         |
+--------------------+
2 rows in set (0.00 sec)

mysql> select * from migrations;
+----------------------------------+
| migration                        |
+----------------------------------+
| 201409272258_Added_table_foo.sql |
+----------------------------------+
1 row in set (0.00 sec)

Ramblerの仕組みはシンプルで、O/Rマッパーと連動している訳でも、専用の記法がある訳でもありません。それだけに自由度が高く、データベース特有の機能(トリガーなど)の記述もしやすいでしょう。何よりフレームワーク依存がないのでどのプロジェクトでも扱えます。

RamblerはGo製のオープンソース・ソフトウェア(Public Domain)です。

elwinar/rambler: A simple and language-independent SQL schema migration tool