developerssummit2011 【17-e-1】 dbも変化せよ - jiemamy
DESCRIPTION
TRANSCRIPT
Developers Summit 2011
DBも進化せよDB変更に強い開発方法論を導入するために
JiemamyのチャレンジJiemamy Project / トライクレオ株式会社
都元ダイスケ【17-E-1】
(2011.02.17)
Developers Summit 2011
自己紹介•都元ダイスケ•はてなid:daisuke-m
http://d.hatena.ne.jp/daisuke-m/
• twitter @daisuke_m http://twitter.com/daisuke_m/
• Jiemamy Projectチーフコミッタ
Javaオブジェクト指向 Eclipse酒ライセンス
薬
Maven OSGiXML
Android
JiemamyDDD
SQLER
Hadoop
GAEHaskell
Scala
Developers Summit 2011
今日のポイント
• Jiemamyとは何なのか?
•どういう考えに基づいているのか?•「環境と戦う」とは何か?• Jiemamyは必須じゃない。
Developers Summit 2011
Agenda
• Jiemamyについて
• Jiemamy開発モデル
• Jiemamyモデルエディタ
• Jiemamy API構想のご紹介
Developers Summit 2011
アンケート• ソフトウェア開発をしている。• ソフトウェアの構成管理をしている。• 構成管理のおかげで、昔の状態がいつでも呼び戻せるから安心である。このメリットは重要だ。
• 昔の状態のソフトウェアをいつでも動かせる。• 昔の状態のソフトウェアをいつでも動かせる...
• 昔の状態のソフトウェアを今でも動かせる...!?
Developers Summit 2011
本当ですか?•WebアプリがSVNに置いてあります。このアプリを無事に起動できますか?
DBのインストール
DBの設定整備
スキーマ構築
アプリケーションに対するDB情報の
設定
ドキュメントがない or よくわからない
手順はどこに書いてあるの?
Developers Summit 2011
本当ですか?
•過去のリビジョンでも大丈夫ですか?
•その時、DBも整備構築できますか?
Developers Summit 2011
という問題を解決
• Jiemamyは開発モデルを提唱します
•単なるツール提供プロジェクトではない
Developers Summit 2011
Martin Fowler
• Planning Extreme Programming
• Refactoring
• Pattern of Enterprise Application Architecture(PoEAA)
Developers Summit 2011
DBの進化的設計
DB設計も早い時期にフリーズできない 進化を前提にした設計をしよう
DB構成情報はスキーマだけではない データも重要な管理対象である
計画的設計
Evolutional Database Design— Martin Fowler, 2003
http://www.objectclub.jp/community/XP-jp/xp_relate/evodb-jp
Developers Summit 2011
•目指すはDBの進化的設計の実現•それを補助するツール• Jiemamyモデルエディタ
•maven plugin, その他(いろいろ企画中)
•副産物的に出来たAPIを公開(β)
Project
Developers Summit 2011
進化的設計Smart
VersionControl
SmartModel
SmartBuild
Developers Summit 2011
Smart Build
A
Developers Summit 2011
環境と戦う•アプリは環境の中で動く•アプリの制御下にない前提条件•オペレーションシステム(OS)•環境変数• Javaランタイム•DBサーバ・APサーバ
•自動化(automated)または文書化(documented)重要
Developers Summit 2011
Java界ではMaven•Apache Projectによる、ビルドツール
•coしたらpom.xmlがあるディレクトリで
"mvn package" 等のコマンド実行
•プロジェクト構成・ビルド手順の標準化
スマート・ビルド
Developers Summit 2011
あるあるネタ•チェックアウト•(コンパイル と パッケージング)
•デプロイして起動(localhost辺りに)
•ブラウザからアクセスして操作• ...動かない
Developers Summit 2011
NOT automated•DBは別途、このSQLを流してください
CREATE TABLE T_GROUP (
ID integer NOT NULL,
NAME varchar(32) NOT NULL DEFAULT 'default group',
STATUS integer NOT NULL,
CREATED_DATE DATE DEFAULT now(),
UPDATED_DATE DATE DEFAULT now(),
DELETED_DATE DATE,
PRIMARY KEY (ID)
);
CREATE TABLE T_USER (
ID integer NOT NULL,
NAME varchar(32) NOT NULL DEFAULT 'default user',
STATUS integer NOT NULL,
CREATED_DATE DATE DEFAULT now(),
(...略...)
マルチDBだと作る方も使う方も不幸です。。
Developers Summit 2011
明日からできること•アプリが、どんな環境でも、チェックアウトしたら1コマンドでビルドでき、そのまま実行できる環境を整備せよ。
•1コマンドが無理なこともある。ただし、その場合は documented を意識せよ。
•README.txtを置く、など。
Developers Summit 2011
Jiemamyでは•DBはアプリにとって「環境」
•maven-jiemamy-pluginを提供(後述)
• pom内にスキーマ情報ファイルと適用先DB情報を明記
•ビルドの一環としてDBも整備する
•Webアプリのビルド完了と共にDBも完成
•今後、Antタスク等も提供したい
Developers Summit 2011
SmartVersion Control
B
Developers Summit 2011
チェンジセット•1つ以上のファイルの変更を1つの論理的な単位にまとめたもの
class Emp { String name; Busyo busyo;}
class Busyo { String name; // ...}
class Dept { String name; // ...}
class Emp { String name; Dept dept;}
Developers Summit 2011
構成の同期•各アプリケーションのrevisionには対応するDB構成がある
•アプリだけ過去に戻せても全く意味がない
•全てのリビジョンを、後から呼び出して動かせるように
アプリケーション
アプリケーション
アプリケーション
アプリケーション
DB構成
DB構成
DB構成
rev1000
rev1001
rev1002
rev1003
rev1004
rev1005
アプリケーション
DB構成
Developers Summit 2011
DB変更もチェンジセット•同時に変わらないと、壊れる
CREATE TABLE HOGE( ID integer ...);
@Table("HOGE")class Foo { // ...}
@Table("FOO")class Foo { // ...}
CREATE TABLE FOO( ID integer ...);
Developers Summit 2011
明日からできること
•アプリだけではなく、環境(を再現するための情報)もコミットせよ。
•前提環境が変わるとアプリも変わる。アプリだけをコミットせず、環境と同期したコミットを心がけよ。
Developers Summit 2011
Jiemamyでは•ツールの補助は無い(無理w)•プラクティスを提唱(再掲↓)•環境再現手段もコミットせよ。•アプリと環境情報を同期コミットせよ。(チェンジセットを意識せよ)
Developers Summit 2011
開発フェーズ
ビルドフェーズ
DBモデリング
プログラミング
構成管理
コミット
チェックアウト
コンパイルデプロイ(配備)等by Maven2
DBServer
SQL等
Repo-sitory
Source Package AppServer
Developers Summit 2011
DB構成情報の成分
DB初期化の為の情報テーブル(E)
外部キー(R)
インデックス等データ重要!
テーブル
1
関連(外部キー)
2インデックス
他
3
初期データ
4
Developers Summit 2011
DB構成情報の表現
•SQL文
•DB仕様書
•ER図
どれも必要
Developers Summit 2011
DB構成情報•具体的に何を管理する?
SQLファイル
ER図データ(バイナリ)
…両方?
アプリケーション
アプリケーション
アプリケーション
アプリケーション
rev1000
rev1001
rev1002
rev1003
rev1004
rev1005
アプリケーション
DB構成
DB構成
DB構成
DB構成DRY違反
スマートビルド妨害
編集困難
Developers Summit 2011
Smart Model
C
Developers Summit 2011
DRY原則
•情報の重複を防ぐ考え方•情報の重複が起こると変更が困難•透明性(明確性)を低下•不一致(不整合)の可能性が増大
Don't Repeat Yourself.
Developers Summit 2011
1つの事実を1箇所に•複数箇所で1つの事実を表現しない
class Emp { String name; Dept dept;}
class Dept { String name; List<Emp> members;}
Developers Summit 2011
2箇所で持っている例•「加藤さんは技術部に所属している」
Dept tech = new Dept("技術部");Emp kato = new Emp("加藤");kato.setDept(tech);tech.addMember(kato);
Developers Summit 2011
Jiemamyモデルとは•唯一の(DRYな)DB情報記述場所
•これを元にSQL, DB設計書(予定)等の派生リソースを生成できる
•実体はXMLファイル→SVNコミットする
•マージの可能性を考慮•そこそこの可読性が必要
Developers Summit 2011
Jiemamy モデルの特徴•実体はXML
•XMLでも読みやすい
•つまりSCMによるマージが容易
•GUIでER図として編集できる(後述)
•一般的なXMLエディタで「補完」と「validation」ができる(後述)
Developers Summit 2011
JiemamyModel
DBServer
SQL等SQL等
Repo-sitory
Source Package AppServer
開発フェーズ
ビルドフェーズ
DBモデリング
プログラミング
構成管理
コミット
チェックアウト
コンパイルデプロイ(配備)等by Maven2
Developers Summit 2011
明日からできること•DRYを心がけよ
•ただし、あくまでも「原則」は「原則」•従えない場合は、注意深く違反せよ•違反した場合、documentedを忘れるな
•仮にERとSQL両方コミットする場合
•正副関係を明確にする•同期していない可能性を念頭に置く
Developers Summit 2011
補助ツールJiemamyモデルエディタ
Developers Summit 2011
XML…•かといって手書きでXML編集は基本的に嫌
•ならばGUIによるER図エディタを提供
•しかし マージ時等に、手編集も必要
•XML Schemaを提供
•XMLエディタによる補完・validation
Developers Summit 2011
Jiemamyモデルエディタ•よくあるER図エディタ
•AmaterasERD, Clay, DBDesigner4,
ERWin, SI Object Browser, JUDE...
• Jiemamy開発モデルを強力にサポート
•データファイル形式を考え抜いた•まだ引き続き考えています
Developers Summit 2011
Demoせっかくなので
Developers Summit 2011
Jiemamy APIversion 0.3
Developers Summit 2011
Jiemamy Model/API• Jiemamyモデルを自由に操作できる
database
tablecolumn
Javaコードから操作
Java object
SQL
β
Developers Summit 2011
XML → Java model
•シリアライザを取得して• InputStreamから読み込む
Developers Summit 2011
Java model → XML
•新しいcontextはnewして作る
•同じくJiemamySerializerを使って
•OutputStreamに書き出す
Developers Summit 2011
Java model → SQL
•SqlExporterをnewして
•設定オブジェクトを作って•exportModelする
Developers Summit 2011
実DB → Java model
•DbImporterをnewして
•同じように設定オブジェクト作って• importModelする
Developers Summit 2011
Javadoc完備!
•ドキュメンテーションコメントによるAPI仕様を出来る限り整備しています。
•今後もより一層充実させていきます。
Developers Summit 2011
これ使ったら•色々面白い事できそうじゃないですか?•初回起動時に(ServletFilter辺りを使って)
自動でDB整備するWebアプリとか
•Smart Install / Update
•テスト用ダミーデータのジェネレータ•作ったらcontributeくださいw
Developers Summit 2011
まとめ
Developers Summit 2011
導入は段階的に!廃止も簡単!
Jiemamyの導入• Smart Build
• Maven / Ant / スクリプト
• Smart Version Control
• SCMの導入
• 環境の同期コミット• Smart Model
• 正副関係を明示• DB情報をDRYに管理
Developers Summit 2011
地豆も進化を続けます
• Jiemamyでアプリの進化的設計を。
•そしてJiemamyも進化します。
•そろそろコードベースは落ち着く予定•年内にv1.0出します。
Developers Summit 2011
Jiemamyの歩み•v0.0~v0.1系•v0.0.1 release 2007/6/21 ...
•v0.1.0 release 2008/2/29
•v0.1.1 release 2008/3/20
•v0.2系•v0.2.0 release 2009/5/6
•v0.3系•v0.3.0 release 今日!
Developers Summit 2011
•商用サポート•コンサルティング•などなど• Jiemamyと無関係でも、開発環境・開発プロセスなどのご相談もお受けします。
http://tricreo.jp/[email protected]
トライクレオ株式会社からのメッセージをお読み下さい
Developers Summit 2011
ご静聴ありがとうございました
Any Questions?
Evolutional Database Design...