DB2のブログでDBFlute紹介頂きました

// DB2にも対応している国産O/RマッパーのDBFluteがついにv1.0リリース!
http://db2.jugem.cc/?eid=2519

ありがとうございます!
オープンソースDBFluteが、
こういったブログで紹介頂けるなんて、
うれしいうれしいの一言に尽きます。

もちろん、DBFluteDB2 にも対応しています。
もっと気軽にテストができるようにと、
ついこないだ頑張りましたしね!
 -> DB2 on Mac for DBFlute

自分にとって、DB2はどうしても「お堅い」イメージの
あるDBMSです。そしてちょっと距離が遠い。
業務でも利用したことはそんなに多くはありません。

唯一がっつり関わったプロジェクトはとても思い出深いものでした。
テーブルのアクセス順序が完全に決められていて、
トランザクションの中で後戻って検索ができない!
 A -> B -> C -> D ->...
という順序が決まっていて、Dを検索するときに、
Aを結合して取得したいんだけど、それはOKですか?
って質問をしたら「だめです」って、えぇぇーー!?
ということなので、最初の処理で、その中の処理で使う
最小公倍数分のデータを全部保持しておいて、
メモリ上で絞り込みをして振り分けして結合をして...
(しかも参照するテーブルが20個以上あるんだけど)

そして、オープンソース禁止!
「DBUtilとか使わないでください」
使わないよぅ、そんなもの!禁止するにしても例えが古いわー。
もうこうなったらー、ってJavaの標準APIのProxyを使って、
簡易DIコンテナみたいなものを作って(Factory化)、
単体テスト時と実行時のトランザクション境界を差し替え
られるようにして、徹底して自動テストできるようにしました。
(開発環境はオープンソース使ってもOKだったのでJUnit)
DB周りも簡易自動生成作って、シンプル実装できるようにして。
って、ここまでくると確かにオープンソースではないけど、
もう完全に jflute オリジナル独自フレームワークなんだけど...
(ちゃんと図を書いてドキュメントも残しましたよ)

その巨大バッチ一つだけ、チームのタスクから漏れてしまっていて、
わりと無茶なスケジュールで助っ人的な立場で入ったのですが、
大幅にコスト削減して納品。でもまあ、無茶な残業しましたね。
受け入れテストの方で、どんだけテストしてもバグが出ないとかで、
「仕様変更をバグ扱いで登録させてもらってもいいですか?」と一言。

どうぞっ!

どうやら、バグがないとテストしてないだろと言われてしまうみたいで。
(しかも短期間実装だったのでバグはかなりあると想定してたみたいで)
バッチスピードもデッドロックも全く問題なく本番稼働。
「バグゼロ納品、してやったり!」と、まあ若かりし頃なのでね。
オープンソース禁止に反抗心を持ちながら。(意地が品質を高める)

まあ、今思えば、クラスの依存性を減らして、ロジックを小分けにして、
ブラックボックスでテストしづらい部分を徹底して検証しながら、
つどつど発生する仕様変更でもデグレがでないような「再帰的なテスト」
を作り上げるっていう概念があまり世には浸透してないんだろうなぁと。
たぶん、ベタベタ書いてたらバグはいっぱい出たでしょう。
プログラマ側でまともなテストがなかなかできないから。
(そして次の仕事に進めなかったでしょう、
すぐに別の現場早く来いって言われてたから...危なかったぁ)

そういう意味ではバグあったんですよ。
書いていきなり動いたわけじゃない。単に実装直後にバグを
発見するためのテストコードを書いて、すぐさま直しただけ。
そのための仕組みを最初に用意した。信じられないほど残業したけど。

自分は、単にJUnitの概念に素直に従って実践してみただけ。
でもまあ、それがなかなか現実難しいのかもしれませんけどね。
たまたまその案件にフィットしただけで。
今も悩むことですが。
 -> 現場のテストコードはどこへ? | jfluteの日記
自分の中でも DB2 との付き合いは、
そんなわけで昔も今も色々と考えさせられる印象深い案件でした。

そういうことからも、逆に DB2DBFlute が利用されるって
なったら、それはそれはとてもうれしいことではあります。
多くはありませんが、幾つかの案件を耳にしています。
(ちなみに、その一つは DBFlute.NET (C#) です)

DB2を使ってるってことは、クリティカルなデータを取り扱ってる
システムって可能性が高いかなって。まあ単なるイメージですけど。
堅い世界で、ApacheライセンスのオープンソースであるDBFluteを
使ってもらえるなんて(しかも個人開発と言っていいものですからね)、
それはそれはオープンソースプログラマ冥利に尽きます。

全部の select 文に with RS や with RR などを付与しなければ
ならない、というような規約があるプロジェクトでも、
オプションで ConditionBean で DB2 独自メソッドを生成できる
ようにしてますし。やろうと思えば、デフォルトで with XX を
固定で付与できるようにもできますし。
まあまだ経験値が浅いので、もっと必要なことがあるかもしれませんが、
DB2プロジェクトでの現場フィット、フィードバックあり次第対応して
いくつもりです。

#
# ClubDB2 という素敵な勉強会が定期的に開催されています。
#  -> ClubDB2 | IBM
#
# DB2中心ですが、他のDBMSを使ってる人でも通じる話が多いです。
# 自分もまだまだ勉強不足なので、今後ちょくちょく顔出していきたいと
# 思っているので、みなさんもよければぜひ参加してみてください。
# 会場でお会いできるかもしれませんね。
#