DBFluteのreplace-schema

久しぶりにDBFluteを使ってみたら、replace-schemaを使う時にisDropGenerateTableOnlyがなくなっている事に気がついた。やっぱりあるならあったで便利なオプションなので、復活しないかなと思う今日この頃です。

理由としては、以下の様な事が挙げられます。あくまで自分の所の環境だけですが・・・。

複数のアプリがスキーマを共有している場合

ホントはダメだと思うのですが、今の環境だと結構ある。*1こういった場合、同じスキーマ内にアプリA用のテーブルとアプリB用のテーブルが出来てしまうので、replace-schemaをアプリAでやる場合は、dropされるテーブルをアプリAのテーブルだけに留めたい。現状だとスキーマ内の全てのテーブルがdropされてしまう気がする。*2

アプリに直接関係ないビューを作る事がある

例えばカッコ悪いやり方かもしれないが、「create view テスト系 as select * from dual」*3見たいなビューをテスト系と本番系に作っていてこうしておくと、どんな環境から接続した場合も「select * from tab」とかやると自分が今どこに繋いでいるかハッキリするので指差し呼称とセットで実施していたりする。このビューの場合はDDLで作る時に本番環境なのか、テスト環境なのかの判定が出来ないと作れない。まぁ、本番環境は一度リリースしたらほぼreplace-schemaをやる事はないので、常にテスト系に合わせて作っておけば良い気はする。

見たいな感じでisDropGenerateTableOnlyがあったらなーと思いました。作成するときは自作のDDLを使うので、削除するときも自作のDDLで出来れば良いかも^^;

余談ですが、DBFluteのContainerTestCase良いですね。injectがめっちゃ便利。PlainTestCaseを見ると現在時刻の取得とか色々便利なメソッドも詰まっているので便利そう。後は、Actionのテストの時にバリデーションをJUnit上から実行出来ればかなり良い感じの開発環境が出来そうだ。id:newtaさんの方法などを参考にして作ってみようと思ってます。基底クラスに持たせずにユーティリティー見たいな感じでやりたいな。

*1:特に見える化とかがちょっと貸して的なノリで乗っかってくる時がある。迷惑な話だけど・・・

*2:特定のテーブルだけ無効化出来れば解決!

*3:oracle