47
DevLOVE 2009.11 http://jiemamy.org/ DevLOVE DB勉強会 DBも、進化せよ。」 都元ダイスケ 2009.11.20

2009-11-20 DevLOVE 2009 DB勉強会

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

http://jiemamy.org/

DevLOVE DB勉強会

「DBも、進化せよ。」都元ダイスケ

2009.11.20

Page 2: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

自己紹介•都元ダイスケ•はてなid:daisuke-m

•twitter @daisuke_m

•Jiemamy Projectチーフコミッタ

Javaオブジェクト指向 Eclipse酒ライセンス

Maven OSGiXML

Android

JiemamyDDD

SQL

ER

Page 3: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

今日のポイント

•Jiemamyとは何なのか?

•どういう考えに基づいているのか?•「環境と戦う」とは何なのか?

Page 4: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Agenda

•Jiemamyについて

•Jiemamy開発モデル

•Jiemamyモデルエディタ

•Jiemamy APIのご紹介

•その他

Page 5: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

って何さ。

Page 6: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

モデリングツール?

Page 7: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

モデリングツール?NO!

Page 8: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

開発モデルは

Page 9: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Martin Fowler

Page 10: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

DBの進化的設計Evolutional Database Design

— Martin Fowler, 2003

DB設計も早い時期にフリーズできない  進化を前提にした設計をしよう

DB構成情報はスキーマだけではない  データも重要な管理対象である

計画的設計

Page 11: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

•目指すはDBの進化的設計•それを補助するツール•Jiemamyモデルエディタ

•maven plugin, その他(いろいろ企画中)

•副産物的に出来たAPI公開(β)

Page 12: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

進化的設計Smart

VersionControl

SmartModel

SmartBuild

Page 13: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Smart Build

A

Page 14: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

従来の問題点•WebアプリがSVNに置いてある。このアプリを無事に起動できますか?DBの

インストール

DBの設定整備

スキーマ構築

アプリケーションに対するDB情報の

設定

ドキュメントがない or よくわからない

手順はどこに書いてあるの?

Page 15: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

環境と戦う•アプリは環境の中で動く•アプリの制御下にない前提条件•環境変数•Javaランタイム

•DBサーバ・APサーバ

•自動化、または文書化(documented)

Page 16: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Maven•Apacheによる、ビルドツール

•coしたらpom.xmlがあるディレクトリで

"mvn package"コマンド実行

•プロジェクト構成・ビルド手順の標準化

スマート・ビルド

Page 17: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

明日からできること•アプリが、どんな環境でも、チェックアウトしたら1コマンドでビルドでき、そのまま実行できる環境を整備せよ。

•1コマンドが無理なこともある。ただし、その場合は documented を意識せよ。

•README.txtを置く、など。

Page 18: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Jiemamyでは•maven-jiemamy-pluginを提供

•pom内にスキーマ情報ファイルと適用先DB情報を明記

•ビルドの一環としてDBも整備する

•Webアプリのビルド完了と共にDBも完成

•今後、Antタスク等も提供したい

Page 19: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

SmartVersion Control

B

Page 20: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

構成の同期

•各アプリケーションのrevisionには対応するDB構成がある

•アプリだけ過去に戻せても全く意味がない

•全てのリビジョンを、後から呼び出して動かせるように

アプリケーション

アプリケーション

アプリケーション

アプリケーション

DB構成

DB構成

DB構成

rev1000

rev1001

rev1002

rev1003

rev1004

rev1005

アプリケーション

DB構成

Page 21: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

明日からできること

•アプリだけではなく、環境(を再現するための情報)もコミットせよ。

•前提環境が変わるとアプリも変わる。アプリだけをコミットせず、環境と同期したコミットを心がけよ。

Page 22: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Jiemamyでは

•ツールの補助は無い(無理w)•プラクティスを提唱(再掲)•環境再現手段もコミットせよ。•アプリと環境情報を同期コミットせよ。

Page 23: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Smart Model

C

Page 24: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

DRY原則

•情報の重複を防ぐ考え方•情報の重複は...

•変更の困難さが増大•透明性を低下•不一致(不整合)の可能性が増大

Don't Repeat Yourself.

Page 25: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

1つの事実を1箇所に•複数箇所で1つの事実を表現しない

class Emp { String name; Dept dept;}

class Dept { String name; List<Emp> members;}

Page 26: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

2箇所で持っている例•「加藤さんは技術部に所属している」

Dept tech = new Dept("技術部");Emp kato = new Emp("加藤");kato.setDept(tech);tech.addMember(kato);

Page 27: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

DB構成情報の種類• DB初期化の為の情報

•データ重要!

•表現手段は?

• SQLファイル

• ER図

• DB設計書

テーブル

1

関連(外部キー)

2初期データ

3

Page 28: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

開発フェーズ

ビルドフェーズ

DBモデリング

プログラミング

構成管理

コミット

チェックアウト

コンパイルデプロイ(配備)等by Maven2

DBServer

SQL等

Repo-sitory

Source Package AppServer

Page 29: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

DB構成情報•具体的に何を管理する?

SQLファイル

ER図データ(バイナリ)

…両方?

アプリケーション

アプリケーション

アプリケーション

アプリケーション

rev1000

rev1001

rev1002

rev1003

rev1004

rev1005

アプリケーション

ER図データ

ER図データ

ER図データ

ER図データ

SQL

SQL

SQL

SQLDRY違反

スマートビルド妨害

編集困難

Page 30: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

明日からできること•DRYを心がけよ。

•ただし、あくまでも「原則」は「原則」•従えない場合は、注意深く違反せよ。•違反した場合、documentedを忘れるな。

•仮にERとSQL両方コミットする場合

•正副関係を明確にする•同期していない可能性を念頭に置く

Page 31: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Jiemamyでは

Page 32: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

JiemamyModel

DBServer

SQL等

Repo-sitory

Source Package AppServer

開発フェーズ

ビルドフェーズ

DBモデリング

プログラミング

構成管理

コミット

チェックアウト

コンパイルデプロイ(配備)等by Maven2

Page 33: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Jiemamyモデルとは•唯一の(DRYな)DB情報記述場所

•これを元にSQL, DB設計書(予定)等の派生リソースを生成できる

•実体はXMLファイル→SVNコミットする

•マージの可能性を考慮•そこそこの可読性が必要

Page 34: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

補助ツールJiemamyモデルエディタ

Page 35: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

XML…•かといって手書きでXML編集は基本的に嫌

•ならばGUIによるER図エディタを提供

•ちなみに、手編集(マージ時等)にも対応•XML Schemaを提供

•XMLエディタによる補完・validation

Page 36: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Jiemamyモデルエディタ

•よくあるER図エディタ

•AmaterasERD, Clay, DBDesigner4,

ERWin, SI Object Browser, JUDE...

•Jiemamy開発モデルを強力にサポート

•データファイル形式を考え抜いた

Page 37: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Demoせっかくなので

Page 38: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Jiemamy API

Page 39: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Jiemamy Model/API•Jiemamyモデルを自由に操作できる

database

tablecolumn

Javaコードから操作

Java object

SQL

β

Page 40: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

XML → Java model

•Jiemamyインスタンスを作って

•シリアライザを取得して•InputStreamから読み込む

Page 41: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Java model → XML

•同じくJiemamySerializerを使って

•OutputStreamに書き出す

Page 42: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Java model → SQL

•SqlExporterをnewして

•設定オブジェクトを作って•exportModelする

Page 43: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

実DB → Java model

•DatabaseImporterをnewして

•同じように設定オブジェクト作って•importModelする

Page 44: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

Javadoc完備!

Page 45: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

これ使ったら•色々面白い事できそうじゃないですか?•初回起動時に(ServletFilter辺りを使って)

自動でDB整備するWebアプリとか

•Smart Install / Update

•動的にテーブルをCREATE/DROPする

Webアプリとか

Page 46: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

地豆も進化を続けます•Jiemamyでアプリの進化的設計を。

•そしてJiemamyも進化します。

•まだ未熟なのでAPIは今後変わっていく

•XML形式も変わる予定(converter提供予定)

•今後ともよろしくお願いします。

Page 47: 2009-11-20 DevLOVE 2009 DB勉強会

DevLOVE 2009.11

http://jiemamy.org/

ご静聴ありがとうございました

Evolutional Database Design...