DevLOVE 2009.11
http://jiemamy.org/
DevLOVE DB勉強会
「DBも、進化せよ。」都元ダイスケ
2009.11.20
DevLOVE 2009.11
自己紹介•都元ダイスケ•はてなid:daisuke-m
•twitter @daisuke_m
•Jiemamy Projectチーフコミッタ
Javaオブジェクト指向 Eclipse酒ライセンス
薬
Maven OSGiXML
Android
JiemamyDDD
SQL
ER
DevLOVE 2009.11
今日のポイント
•Jiemamyとは何なのか?
•どういう考えに基づいているのか?•「環境と戦う」とは何なのか?
DevLOVE 2009.11
Agenda
•Jiemamyについて
•Jiemamy開発モデル
•Jiemamyモデルエディタ
•Jiemamy APIのご紹介
•その他
DevLOVE 2009.11
って何さ。
DevLOVE 2009.11
モデリングツール?
DevLOVE 2009.11
モデリングツール?NO!
DevLOVE 2009.11
開発モデルは
DevLOVE 2009.11
Martin Fowler
DevLOVE 2009.11
DBの進化的設計Evolutional Database Design
— Martin Fowler, 2003
DB設計も早い時期にフリーズできない 進化を前提にした設計をしよう
DB構成情報はスキーマだけではない データも重要な管理対象である
計画的設計
DevLOVE 2009.11
•目指すはDBの進化的設計•それを補助するツール•Jiemamyモデルエディタ
•maven plugin, その他(いろいろ企画中)
•副産物的に出来たAPI公開(β)
DevLOVE 2009.11
進化的設計Smart
VersionControl
SmartModel
SmartBuild
DevLOVE 2009.11
Smart Build
A
DevLOVE 2009.11
従来の問題点•WebアプリがSVNに置いてある。このアプリを無事に起動できますか?DBの
インストール
DBの設定整備
スキーマ構築
アプリケーションに対するDB情報の
設定
ドキュメントがない or よくわからない
手順はどこに書いてあるの?
DevLOVE 2009.11
環境と戦う•アプリは環境の中で動く•アプリの制御下にない前提条件•環境変数•Javaランタイム
•DBサーバ・APサーバ
•自動化、または文書化(documented)
DevLOVE 2009.11
Maven•Apacheによる、ビルドツール
•coしたらpom.xmlがあるディレクトリで
"mvn package"コマンド実行
•プロジェクト構成・ビルド手順の標準化
スマート・ビルド
DevLOVE 2009.11
明日からできること•アプリが、どんな環境でも、チェックアウトしたら1コマンドでビルドでき、そのまま実行できる環境を整備せよ。
•1コマンドが無理なこともある。ただし、その場合は documented を意識せよ。
•README.txtを置く、など。
DevLOVE 2009.11
Jiemamyでは•maven-jiemamy-pluginを提供
•pom内にスキーマ情報ファイルと適用先DB情報を明記
•ビルドの一環としてDBも整備する
•Webアプリのビルド完了と共にDBも完成
•今後、Antタスク等も提供したい
DevLOVE 2009.11
SmartVersion Control
B
DevLOVE 2009.11
構成の同期
•各アプリケーションのrevisionには対応するDB構成がある
•アプリだけ過去に戻せても全く意味がない
•全てのリビジョンを、後から呼び出して動かせるように
アプリケーション
アプリケーション
アプリケーション
アプリケーション
DB構成
DB構成
DB構成
rev1000
rev1001
rev1002
rev1003
rev1004
rev1005
アプリケーション
DB構成
DevLOVE 2009.11
明日からできること
•アプリだけではなく、環境(を再現するための情報)もコミットせよ。
•前提環境が変わるとアプリも変わる。アプリだけをコミットせず、環境と同期したコミットを心がけよ。
DevLOVE 2009.11
Jiemamyでは
•ツールの補助は無い(無理w)•プラクティスを提唱(再掲)•環境再現手段もコミットせよ。•アプリと環境情報を同期コミットせよ。
DevLOVE 2009.11
Smart Model
C
DevLOVE 2009.11
DRY原則
•情報の重複を防ぐ考え方•情報の重複は...
•変更の困難さが増大•透明性を低下•不一致(不整合)の可能性が増大
Don't Repeat Yourself.
DevLOVE 2009.11
1つの事実を1箇所に•複数箇所で1つの事実を表現しない
class Emp { String name; Dept dept;}
class Dept { String name; List<Emp> members;}
DevLOVE 2009.11
2箇所で持っている例•「加藤さんは技術部に所属している」
Dept tech = new Dept("技術部");Emp kato = new Emp("加藤");kato.setDept(tech);tech.addMember(kato);
DevLOVE 2009.11
DB構成情報の種類• DB初期化の為の情報
•データ重要!
•表現手段は?
• SQLファイル
• ER図
• DB設計書
テーブル
1
関連(外部キー)
2初期データ
3
DevLOVE 2009.11
開発フェーズ
ビルドフェーズ
DBモデリング
プログラミング
構成管理
コミット
チェックアウト
コンパイルデプロイ(配備)等by Maven2
DBServer
SQL等
Repo-sitory
Source Package AppServer
DevLOVE 2009.11
DB構成情報•具体的に何を管理する?
SQLファイル
ER図データ(バイナリ)
…両方?
アプリケーション
アプリケーション
アプリケーション
アプリケーション
rev1000
rev1001
rev1002
rev1003
rev1004
rev1005
アプリケーション
ER図データ
ER図データ
ER図データ
ER図データ
SQL
SQL
SQL
SQLDRY違反
スマートビルド妨害
編集困難
DevLOVE 2009.11
明日からできること•DRYを心がけよ。
•ただし、あくまでも「原則」は「原則」•従えない場合は、注意深く違反せよ。•違反した場合、documentedを忘れるな。
•仮にERとSQL両方コミットする場合
•正副関係を明確にする•同期していない可能性を念頭に置く
DevLOVE 2009.11
Jiemamyでは
DevLOVE 2009.11
JiemamyModel
DBServer
SQL等
Repo-sitory
Source Package AppServer
開発フェーズ
ビルドフェーズ
DBモデリング
プログラミング
構成管理
コミット
チェックアウト
コンパイルデプロイ(配備)等by Maven2
DevLOVE 2009.11
Jiemamyモデルとは•唯一の(DRYな)DB情報記述場所
•これを元にSQL, DB設計書(予定)等の派生リソースを生成できる
•実体はXMLファイル→SVNコミットする
•マージの可能性を考慮•そこそこの可読性が必要
DevLOVE 2009.11
補助ツールJiemamyモデルエディタ
DevLOVE 2009.11
XML…•かといって手書きでXML編集は基本的に嫌
•ならばGUIによるER図エディタを提供
•ちなみに、手編集(マージ時等)にも対応•XML Schemaを提供
•XMLエディタによる補完・validation
DevLOVE 2009.11
Jiemamyモデルエディタ
•よくあるER図エディタ
•AmaterasERD, Clay, DBDesigner4,
ERWin, SI Object Browser, JUDE...
•Jiemamy開発モデルを強力にサポート
•データファイル形式を考え抜いた
DevLOVE 2009.11
Demoせっかくなので
DevLOVE 2009.11
Jiemamy API
DevLOVE 2009.11
Jiemamy Model/API•Jiemamyモデルを自由に操作できる
database
tablecolumn
Javaコードから操作
Java object
SQL
β
DevLOVE 2009.11
XML → Java model
•Jiemamyインスタンスを作って
•シリアライザを取得して•InputStreamから読み込む
DevLOVE 2009.11
Java model → XML
•同じくJiemamySerializerを使って
•OutputStreamに書き出す
DevLOVE 2009.11
Java model → SQL
•SqlExporterをnewして
•設定オブジェクトを作って•exportModelする
DevLOVE 2009.11
実DB → Java model
•DatabaseImporterをnewして
•同じように設定オブジェクト作って•importModelする
DevLOVE 2009.11
Javadoc完備!
DevLOVE 2009.11
これ使ったら•色々面白い事できそうじゃないですか?•初回起動時に(ServletFilter辺りを使って)
自動でDB整備するWebアプリとか
•Smart Install / Update
•動的にテーブルをCREATE/DROPする
Webアプリとか
DevLOVE 2009.11
地豆も進化を続けます•Jiemamyでアプリの進化的設計を。
•そしてJiemamyも進化します。
•まだ未熟なのでAPIは今後変わっていく
•XML形式も変わる予定(converter提供予定)
•今後ともよろしくお願いします。
DevLOVE 2009.11
http://jiemamy.org/
ご静聴ありがとうございました
Evolutional Database Design...