ConditionBean 5 周年

DBFlute よりも早く ConditionBean が 5 周年を
迎えました。ってどういうことかというと、
DBFlute はその名で世に出る前に、DaoGen(だおじぇん) という
名前で存在していました。その中で ConditionBean は誕生しました。

5年より前にも ConditionBean という名前はありましたが、
それは今のものとは全く別ものだったと言えるでしょう。

5年より前のCB = S2Daoの「DTOによる検索」の拡張
5年前からのCB = DBFlute の ConditionBean

ConditionQuery が導入されたこと、そして、自前でSQL文字列を
組み立てるようになったこと、これらが大きなターニングポイントと
なりました。それまでは、あくまで拡張。そして拡張ギャップから、
問題が幾つかありました。

o ソースコードの膨張(カラム数が多い、FK数が多い)
 -> 今より遥かに膨張率が高く、開発に明確な支障が出るほど
    コンパイルが遅くなってしまいやすかった
o IFコメントの嵐で解析時間が長い
 -> 全てのパターンのIFコメントが生成されるので、
    OGNLの処理コストが半端じゃなかった
o FK先を全て自動で結合してしまう
 -> S2DaoSQL自動組み立ての仕様

使える状況では便利に使えるのですが、ちょっと内部的に乱暴なロジック
なので、大きなテーブルになるとつらいもので、個人的には失敗かと。
拡張って難しいものです。拡張される側が想定していない拡張をすると、
論理的にはつじつまが合っていても、どこかに拡張ギャップが生まれて、
意外なところに落とし穴があるものです。まさにそんな感じでした。

で、年末仕事納めをして、夜10時スタート、Velocityテンプレートを
分解して(一度分解すると、わけわからなくなるので途中で止められない)、
できたのは朝8時頃。ずっとカウンターに PC を置いて立ちっぱで実装。
今ある ConditionBean は 5 年前の今日、生まれました。
恐らく今の時間まさしく実装中だったような...
(正確には覚えてないんだけど、仕事終わった直後あたりの日だったはず)

個人的には、DaoGenを作りながらもそれを使ったプロジェクトには
特に入っていなくて、別のかなり忙しいプロジェクトしていたもので、
「自分が DaoGen に専念させてくれれば幾らでも解決するのにぃ」
と、若気のいたり的な思いでありながらボランティアOSS活動に常に
つきまとうジレンマ、に襲われた初めての瞬間(まだOSSじゃないけど)、
かなりうっぷんがたまっていたのでしょう。その思いが実装に爆発した
という感じですね。

o ConditionQuery でFK先テーブルの条件メソッドを再利用
o 自前でSQLを組み立てる (当時は完全ではなかったのですが)
o SetupSelect の導入で取得するFK先は選択制に

これにより問題は解決し、DBFluteの歴史を一歩踏み出したと
言っても過言ではないでしょう。できたばかりの ConditionBean は、
今よりも遥かに未熟で、とても完璧なものとは言えませんでしたが、
「S2Daoの自動生成ツール」から「DBFlute」へ。
その瞬間だったかなと今でも思っています。