id:hiro_nemuさんから頂いたご要望に対してお返事するでござるの巻

Jiemamyに欲しい機能 - ありの日記

Jiemamyに関してエントリを頂きました。ありがとうございます!

最初、コメントでお返ししようかと思って書いていたのですが、私も長くなってしまったのでトラバにてw

私が欲しいなと思った機能は、Railsマイグレーション機能なんですね。

Jiemamyに欲しい機能 - ありの日記

Jiemamyの構想をアタマに組み立て始めた頃、Railsは名前くらいしか知らず、(現在もmigrationの概要程度しか知らないのですが…w)どこかで話をする度に「Railsのmigrationみたいな奴?」と言われていました。

その後、多少migrationを意識するようにはなっていると思います。

migrationは、どのバージョンのスキーマにもワンアクションで切り替えることができるということを知ってはいるのですが、まだ細かい仕様は把握していません^^;

現在のJiemamyは、簡単に言えば「全DROP→全CREATE」でDB構成を切り替えます。これを、現状DB構成と目的DB構成の差分から、ALTER文でDB構成切り替えができるように、今後作りこんで行こうと考えています。

その際、「バージョンを進めるロジック」と「戻すロジック」の一部を、ユーザが手書きしなければならない(実現できない)のか、全自動で移行できるのかは、まだ検討中です。(何となく自動で出来る気はしているのですが、Railsがそうなっていないのは、やはり人が判断する手書きのロジックが必要なのかな、と疑っている感じです。)

また「生DB情報」だけでは情報落ちがある事も問題になります。例えばカラム名が変わった場合、Jiemamyは「カラムが減って、そして増えた」のか「リネーム」なのか、判断できません。そこは、Jiemamyメタデータ情報を格納するテーブルをDB上に強引に用意することで解決しようかな、と考えています。Railsにもそんなテーブルがあると思います。(Railsでは確か、日時とバージョン番号程度の情報しか入っていませんが、もっと多くの情報を格納する予定)

ちなみに、Jiemamyの考え方では、構成管理(バージョン管理)は完全にSCM(subversion等)に依存しており、「上手くコミットしようね」という指針(Smart Version Control)を与えるに留まっています。Jiemamyのデータファイル自体は、過去のスキーマ情報を保持しません。言い換えれば、前提として「DB構成のバージョン切り替え(過去の状態に戻す / 新しい状態に進める)をしたいのは、アプリケーションのバージョンが切り替わった時である」ことを想定しています。

まだ全く出来上がっていないのですが、想定シナリオはこんな感じです。

  1. (例えばsvn switch等で)作業コピーを目的のリソース(再現したいリビジョン/ブランチのアプリソース等)に切り替える。
  2. mvn jiemamy:migrate で「現在のDB構成の生情報(実DBの状態)」と「作業コピー内のJiemamyモデルファイル」を比較し、ALTER文を適用する。

1. DBに対する変更を一つずつ適用できる機能(前にも、後ろにも)

Jiemamyに欲しい機能 - ありの日記

というわけで、要望1番に関して、現在はDROP-CREATEによる移行はできる状態です。これをALTERで何とかしたい、というのが将来的な目論見。
この辺りは、差分モデルを実装する必要があるので、プロジェクトは立ち上げてあります。まだ仕様も実装もまったく揃っていませんが…w
http://jira.jiemamy.org/jira/browse/SDIFF

2. DBに簡単にデータを投入できる機能、またその逆の機能

Jiemamyに欲しい機能 - ありの日記

次に、要望2番については、「データ投入」は現在も可能です。データセットというものを定義して、SQL生成時にINSERT文も発行することができます。
その逆の生DBからデータセットへのインポートは、実装するつもりですが、まだ手がついていません。近い将来、実現します。
http://jira.jiemamy.org/jira/browse/CORE-132

3. これらの操作をコマンドラインから実行できる機能

Jiemamyに欲しい機能 - ありの日記

3番について、現在maven上から出来ることは、簡単に以下の通り。

jiemamy:executeゴールはjiemamy:jiemamy+sql:executeを連続して行うゴールですが、未実装です。これも近い将来。
http://jira.jiemamy.org/jira/browse/MVN-3

要望3番に関して。以上で「DB構成切り替え」「データ投入」は実現できます。あとは「データの吸出し」ですが、これは新たにCLIを用意してもいいかな、と思いました。色々工夫してみたいと思います。
http://jira.jiemamy.org/jira/browse/MVN-5

以上ですー。