WEB+DB Press vol.55 特集1

@DBFlute, Java, ReplaceSchema, WEB+DB Press
"WEB+DB Press vol.55" の見本誌が届き、いつものように
読ませて頂いているのですが...なんといっても "特集1"。
うぉっ、"DBFluteのReplaceSchema" が紹介されてる!?
"設計と実装に活かす技術" ということで、およそDBFlute
は出る幕も無いなぁと思いきや、素晴らしい展開で紹介して
頂いています。(筆者の方、ありがとうございます!)

で、一番真っ先に思ったのが:
"あっ、サイトにReplaceSchemaのドキュメントがない!"

ドキュメントリニューアルのマイルストーン
http://d.hatena.ne.jp/jflute/20100219/1266545175

にて、書かせて頂きましたが、リニューアル後は
完全なReplaceSchemaのドキュメントが公開される予定です。
でも、WEB+DB Press vol.55発売までには間に合わないぞ!
ということで、ReplaceSchemaに関する情報を取り急ぎ
ここでまとめてみました。
"現場ソリューション2 DBFlute (PDF)"

"DDL&データ" というカテゴリでReplaceSchemaに関する
記事があります。紹介記事ではありますが、今、存在する中で
一番良いと思われるドキュメントです。
データ登録時のデフォルト値設定やシート名30文字問題の設定など
のファイル名が "xxx.txt" 形式から "xxxMap.dataprop"
に変わっていることだけ注意です。(でも古い形式でも動きます)

ex) デフォルト値設定
default-value.txt ==> defaultValueMap.dataprop
"DBFluteのタスク全体図"

タスク全体図と言いつつ、ReplaceSchemaに関する
補足説明がごついです。
あと、Blogでの紹介記事。
特殊な機能とかは、ここでしか書いてないこともあります。

"DBFlute: ReplaceSchemaの思想"
"ReplaceSchemaの紹介・おさらい"
"ReplaceSchemaの最後にシーケンス調整"
"シーケンス調整のシーケンス増分値の想定"
"ReplaceSchemaでDBユーザも作る"
"ReplaceSchemaのチェック機能"
"take-finallyのAssertを環境毎に切り替え"
"take-finallyでのAssertで「存在すること」も"
"ReplaceSchemaでBatchUpdateしないモード"
"OracleのSequenceを自動Drop"
"空文字データを登録できるように"
"DBFlute: データエクセルのテンプレート"
"DBFlute: ReplaceSchemaで埋め込み変数"
"HibernateプロジェクトでもDBFlute"
"ReplaceSchemaがWindows Azureで"

"ReplaceSchemaでDBユーザも作る" は、最近の機能ですが、
とても便利ですね(自分で実感)。ユーザ作成・権限設定周りが
本当にバッチでできちゃうので設定さえできちゃば本当に楽です。
dbflute-oracle-example、dbflute-mysql-example
にて実際に利用しています。
実は、新ドキュメントのReplaceSchemaの記事は
おおよそは書き終わっています。サイト全体ができて
ないので、まだ公開できていないだけなのです。

"新ドキュメント(推敲中)のReplaceSchema"

まだデザインも仮のもの、レビューも終わってませんが、
がっつり理解するのであれば、こちらを見てもらっても
良いかと思います。
dfwww-factoryプロジェクトを(SVN)チェックアウトして、
ローカルファイルとしてブラウザで見れば仮のデザインが
適用されて、直接上記のリンクで見るよりは見やすいです。
ちなみに、このWEB+DB Pressの特集1の記事、
とても共感の持てる勉強になる良い記事でした。
たくさんあるのですが、その中で幾つかの言葉を
ピックアップして、jfluteの感想を:

<1>
"ユーザは実物を見て初めて次の要求が出せる"

全くその通りで、ユーザに限らず人間そうですよね。
想像力にも限界があって(個人差もあるし)、
普段別のこと(業務)をやってる最中で、システムの
要件を出し切るのはそもそも難しい、それを踏まえた
上でそれをフォローする仕組みを作っていかないと。

ちなみに今やってるDBFluteのドキュメントリニューアル
でまさに実感です。どのようなデザインにするか?
最初から全部の細かい要件はなかなか出て来ないものです。
段階的にWEBデザイナに伝えて、一旦ある程度できたもの
を見て、そこからまた思いついたものを伝えて、を繰り返し、
というやり方でスムーズに進んでいます。

<2>
"(可能であれば)設計者が実装車に説明した仕様をもとに、
実装者自身に詳細化を行ってもらい、それを設計者が
レビューするという方法"

詳細設計の話ですが、自分は幾つかのプロジェクトで
これを実践したのを経験しました。
(自分が主導したプロジェクトでも導入)
詳細設計の全てというわけではありませんが、
少なくとも実装者には "処理概要フロー" に相当する
"コミュニケーション図" を書いてもらいました。
これは必ず実装前に書いてもらいます(これ大事)。
それを設計者とレビューし、意識の乖離がある場合は、
その場で修正します。クラス図やシーケンス図は、
そういう役割としてはあまり向いていないと考えています。
ある一方の視点からの "非常に正確な" 構造もしくは動き
を表現できるのですが、それを書くのはそれこそ時間がかかり
ますし、設計者はそれを見てもあまりピンと来ません。
それよりも、構造(依存関係とか)と動きの両方を "漠然と"
表現できる "コミュニケーション図" の方が向いていると。
まさに設計者と実装者のコミュニケーションをつなぐもの。

また、設計者だけとなく隣接する機能を実装する他の
実装者(+1人、2人)もレビューに加わります。
それは、最後のコラムで書かれている "共に仕様を把握
している実装メンバーで助け合う..." につながります。

実際にやったプロジェクトでは、本当に複雑な画面において
のみ、クラス図やシーケンス図を作成し、それ以外は全て
コミュニケーション図だけで開発を進めて行きました。
(もちろん、画面定義書は別にちゃんとありますよ)
結果、レビューはとてもスムーズにでき、意識のズレと
いうのはほとんどなく、リリース後のメンテナンスでも
そのコミュニケーション図が新加入のメンバーの
現状把握の一番の良い入り口となりました。
メインの図をコミュニケーション図に絞ることで、
図のメンテも皆嫌がること無くしっかり同期されました。

などなど、
他にもとても興味深い内容が記事に書かれています。
ぜひ興味ある人は読んでみて下さい。