DBFlute-0.9.6-RC1改めRC2 公開

@DBFlute, DBFlute.NET, Java, C#
DBFlute-0.9.6-RC1RC2を公開しました。

http://d.hatena.ne.jp/jflute/20091015/1255535961
のBETA1に続けて、モジュールとランタイム両方でRC1RC2公開です。
(未だ誰からもコメントありませんが、めげずにRC出します!)
モジュールはEMechaから(SNAPSHOTとして)ダウンロード可能です。

【追記】
/= = = = = = = = = = = = = = = = = = = = = = = = = = = 
「EMecha-0.4.6」をリリースしました。
DBFlute-0.9.5.5から0.9.6-RC1RC2にアップグレードされる方は、
このバージョンのEMechaでアップグレードする必要があります。
= = = = = = = = = =/

「DBFluteの移行」
「対応課題の一覧(Wikiページ)」

同時にDBFlute.NET-0.8.9.6-RC1RC2も公開しています。
以下説明の「1」以外は全てJavaC#で共通です。
<1>
このRC1RC2では完全にOGNLの依存が消えています。
Seasarを利用されている方は、S2Container自体がOGNLを利用するので、
特に意識する必要はありません(OGNLは削除してはいけません)。
他のDIコンテナ(Spring FrameworkやT2 Lucy、Google Guiceなど)を
利用されている方は、他でOGNLを使っていないのであれば、
クラスパスから削除しても構いません。

IFコメントの判定をDBFluteが行っています。
OutsideSqlTestにて、IFコメントでサポートされない構文の
チェックが行われます。(&&と||の同時利用など)
<2>
OutsideSqlTestで、パラメータコメントを「できるだけチェック」
するようにしました。例えば、ENDコメントが存在しない場合は、
それを検知して例外になります。他にも細かいチェックをやっています。
単にSQLを実行するだけのタスクからさらに飛躍しました!
先述した「1」のIFコメントでサポートされない構文のチェックも
これの一貫です。

ディベロッパーの方は、外だしSQLを実装したら気軽にこのタスクを
実行して、SQLがしっかり通ることを確認しましょう。
低レベルのバグを残したまま画面を動かすのは効率良くないですから、
最低限OutsideSqlTestが通るレベルまで仕上げてからにしましょう。

アーキテクトの方は、DB変更時は必ず実行して影響範囲を確認しましょう。
また、定期的に実行するようにして品質を確保するのも良いでしょう。
(実際に、OutsideSqlTestを定期的に実行して、例外発生したら
 開発メンバーに自動通知するプロジェクトがありました)
<3>
SchemaHTMLで(BehaviorQueryPathを利用した)外だしSQLの
情報を表示するようにしました。テーブルの情報から関連付いてる
外だしSQLの一覧がページ内リンクで辿ることができます。
「dbflute-basic-exampleのSchemaHTML」
ぜひ一度ご覧下さい。
<4>
SchemaHTMLで(DBFluteで自動生成対象の)プロシージャの
情報を表示するようにしました。外だしSQLの一覧の一番下にあります。
「dbflute-oracle-exampleのSchemaHTML」
ぜひ一度ご覧下さい。
(DB上にコメントが設定されていれば表示されます)
<5>
外だしSQL上で、ある規約に従って「SQLのタイトル」と「SQLの説明」を
記述しておくと、SchemaHTMLの外だしSQLの一覧で表示されるようになります。
/*
 [df:title]
 シンプルな会員検索
 
 [df:description]
 このSQLはOutsideSqlの最も基本的なExampleです。
 主に以下のポイントにおいて参考になります:
   o パラメータコメント(IFコメントやバインド変数コメントなど)の利用方法
   o Sql2Entityで生成するCustomizeEntityとParameterBeanの定義方法
   o 外だしSQLの業務的なタイトル・説明(SchemaHTMLにて表示される)の記述方法
 外だしSQLのエンコーディングはデフォルトで「UTF-8」です。
 ダブルバイト文字を利用する場合はエディタのエンコーディングにご注意下さい。
*/
-- #df:entity#

-- !df:pmb!
-- !!Integer memberId!!
-- !!String memberName!!

select member.MEMBER_ID
     , member.MEMBER_NAME
     , memberStatus.MEMBER_STATUS_NAME
  from MEMBER member
 where ...
ブロックコメント「/**/」の中で[df:title]と[df:description]を
宣言してそれぞれのコメントを記述すると、SchemaHTMLがこれを拾います。

[df:title]は、改行なしの一行のそのSQLを表現する業務的なタイトル。
[df:description]は、改行ありのそのSQLの業務的・実装的な説明。
SQLがわかりにくい構造・複雑な構造をしている場合はここで補足を
入れておくと良いでしょう。

「dbflute-basic-exampleのSchemaHTML」
の「selectSimpleMember」をご覧下さい。
SQLファイル上の「SQLのタイトル」と「SQLの説明」が記載されています。
Javaのプログラムは、JavaDocなどの仕組みがあり、
プログラム中のコメントの記述方法も書籍などで色々と
精査されており、ディベロッパーもコメントを書く習慣が
付いているかと思います。しかし、ことSQLに関しては、
この辺に関して、あまり精度が高いように思えません。
そもそもSQLにコメントを書く習慣も無い人もいるのでは!?

また、SQLは書き方・フォーマットの一般的な統一性が
Javaに比べると遥かに足りてないと考えています。
皆皆皆、書き方バラバラ、フォーマットバラバラ。
Javaではフォーマッタもあるし、それなりに統一的な
コーディング規約(というかコーディング習慣)があります。
他の人が書いたSQLをメンテするのはとても大変です。
(SQLもツールによってフォーマッタありますが、うまく綺麗に
 フォーマットされないことも多く、まだまだ発展途上かと)

それだけに、SQLの役割を一言で示す「SQLのタイトル」、
そして、業務的・実装的な補足をする「SQLの説明」、
これらがSQLに書いてあることがとても有益と考えます。
特に他の人が書いたSQLをメンテする際にはとても役に立ちます。

面倒なことはメリットがないとなかなか習慣付きません。
「コメントをしっかり書けばSchemaHTMLで載るよ!」
ということで、少しでも習慣付いてくるといいなと思っています。
「このSQLのタイトル・説明を必須にしたい!」
と思われたアーキテクトの方、用意しております。
DBFluteプロパティで設定すると、OutsideSqlTestで
これらコメントの有無を検知することができます。

DBFluteはオーソドックスじゃないSQLが外だしSQLになるので、
(オーソドックスなSQLはConditionBeanで実装するので)
全て外だしSQLにちゃんとしたタイトル・説明を付与するべき
とも考えていいかもしれませんね。
#
# @outsideSqlDefinitionMap.dfprop
#

# 「SQLのタイトル」を必須にする
isRequiredSqlTitle = true

# 「SQLの説明」を必須にする
isRequiredSqlDescription = true
# +------------------------------------+
# | ぜひ、DBFlute-0.9.6-RC2をお試し下さい! |
# +------------------------------------+