developerssummit2011 【17-e-1】 dbも変化せよ - jiemamy

56
Developers Summit 2011 DB も進化せよ DB変更に強い開発方法論を導入するために Jiemamyのチャレンジ Jiemamy Project / トライクレオ株式会社 都元ダイスケ 17-E-1(2011.02.17)

Upload: daisuke-miyamoto

Post on 16-Jan-2015

5.039 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

DBも進化せよDB変更に強い開発方法論を導入するために

JiemamyのチャレンジJiemamy Project / トライクレオ株式会社

都元ダイスケ【17-E-1】

(2011.02.17)

Page 2: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

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

Page 3: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

今日のポイント

• Jiemamyとは何なのか?

•どういう考えに基づいているのか?•「環境と戦う」とは何か?• Jiemamyは必須じゃない。

Page 4: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Agenda

• Jiemamyについて

• Jiemamy開発モデル

• Jiemamyモデルエディタ

• Jiemamy API構想のご紹介

Page 5: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

アンケート• ソフトウェア開発をしている。• ソフトウェアの構成管理をしている。• 構成管理のおかげで、昔の状態がいつでも呼び戻せるから安心である。このメリットは重要だ。

• 昔の状態のソフトウェアをいつでも動かせる。• 昔の状態のソフトウェアをいつでも動かせる...

• 昔の状態のソフトウェアを今でも動かせる...!?

Page 6: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

本当ですか?•WebアプリがSVNに置いてあります。このアプリを無事に起動できますか?

DBのインストール

DBの設定整備

スキーマ構築

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

設定

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

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

Page 7: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

本当ですか?

•過去のリビジョンでも大丈夫ですか?

•その時、DBも整備構築できますか?

Page 8: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

という問題を解決

• Jiemamyは開発モデルを提唱します

•単なるツール提供プロジェクトではない

Page 9: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Martin Fowler

• Planning Extreme Programming

• Refactoring

• Pattern of Enterprise Application Architecture(PoEAA)

Page 10: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

DBの進化的設計

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

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

計画的設計

Evolutional Database Design— Martin Fowler, 2003

http://www.objectclub.jp/community/XP-jp/xp_relate/evodb-jp

Page 11: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

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

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

Project

Page 12: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

進化的設計Smart

VersionControl

SmartModel

SmartBuild

Page 13: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Smart Build

A

Page 14: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

環境と戦う•アプリは環境の中で動く•アプリの制御下にない前提条件•オペレーションシステム(OS)•環境変数• Javaランタイム•DBサーバ・APサーバ

•自動化(automated)または文書化(documented)重要

Page 15: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Java界ではMaven•Apache Projectによる、ビルドツール

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

"mvn package" 等のコマンド実行

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

スマート・ビルド

Page 16: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

あるあるネタ•チェックアウト•(コンパイル と パッケージング)

•デプロイして起動(localhost辺りに)

•ブラウザからアクセスして操作• ...動かない

Page 17: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

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だと作る方も使う方も不幸です。。

Page 18: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

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

•README.txtを置く、など。

Page 19: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Jiemamyでは•DBはアプリにとって「環境」

•maven-jiemamy-pluginを提供(後述)

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

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

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

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

Page 20: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

SmartVersion Control

B

Page 21: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

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;}

Page 22: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

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

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

アプリケーション

アプリケーション

アプリケーション

アプリケーション

DB構成

DB構成

DB構成

rev1000

rev1001

rev1002

rev1003

rev1004

rev1005

アプリケーション

DB構成

Page 23: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

DB変更もチェンジセット•同時に変わらないと、壊れる

CREATE TABLE HOGE( ID integer ...);

@Table("HOGE")class Foo { // ...}

@Table("FOO")class Foo { // ...}

CREATE TABLE FOO( ID integer ...);

Page 24: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

明日からできること

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

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

Page 25: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

Page 26: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

開発フェーズ

ビルドフェーズ

DBモデリング

プログラミング

構成管理

コミット

チェックアウト

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

DBServer

SQL等

Repo-sitory

Source Package AppServer

Page 27: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

DB構成情報の成分

DB初期化の為の情報テーブル(E)

外部キー(R)

インデックス等データ重要!

テーブル

1

関連(外部キー)

2インデックス

3

初期データ

4

Page 28: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

DB構成情報の表現

•SQL文

•DB仕様書

•ER図

どれも必要

Page 29: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

SQLファイル

ER図データ(バイナリ)

…両方?

アプリケーション

アプリケーション

アプリケーション

アプリケーション

rev1000

rev1001

rev1002

rev1003

rev1004

rev1005

アプリケーション

DB構成

DB構成

DB構成

DB構成DRY違反

スマートビルド妨害

編集困難

Page 30: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Smart Model

C

Page 31: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

DRY原則

•情報の重複を防ぐ考え方•情報の重複が起こると変更が困難•透明性(明確性)を低下•不一致(不整合)の可能性が増大

Don't Repeat Yourself.

Page 32: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

class Emp { String name; Dept dept;}

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

Page 33: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

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

Page 34: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

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

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

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

Page 35: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Jiemamy モデルの特徴•実体はXML

•XMLでも読みやすい

•つまりSCMによるマージが容易

•GUIでER図として編集できる(後述)

•一般的なXMLエディタで「補完」と「validation」ができる(後述)

Page 36: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

JiemamyModel

DBServer

SQL等SQL等

Repo-sitory

Source Package AppServer

開発フェーズ

ビルドフェーズ

DBモデリング

プログラミング

構成管理

コミット

チェックアウト

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

Page 37: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

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

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

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

Page 38: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

Page 39: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

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

•しかし マージ時等に、手編集も必要

•XML Schemaを提供

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

Page 40: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy
Page 41: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Jiemamyモデルエディタ•よくあるER図エディタ

•AmaterasERD, Clay, DBDesigner4,

ERWin, SI Object Browser, JUDE...

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

•データファイル形式を考え抜いた•まだ引き続き考えています

Page 42: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Demoせっかくなので

Page 43: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Jiemamy APIversion 0.3

Page 44: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

database

tablecolumn

Javaコードから操作

Java object

SQL

β

Page 45: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

XML → Java model

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

Page 46: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Java model → XML

•新しいcontextはnewして作る

•同じくJiemamySerializerを使って

•OutputStreamに書き出す

Page 47: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Java model → SQL

•SqlExporterをnewして

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

Page 48: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

実DB → Java model

•DbImporterをnewして

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

Page 49: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

Javadoc完備!

•ドキュメンテーションコメントによるAPI仕様を出来る限り整備しています。

•今後もより一層充実させていきます。

Page 50: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

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

•Smart Install / Update

•テスト用ダミーデータのジェネレータ•作ったらcontributeくださいw

Page 51: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

まとめ

Page 52: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

導入は段階的に!廃止も簡単!

Jiemamyの導入• Smart Build

• Maven / Ant / スクリプト

• Smart Version Control

• SCMの導入

• 環境の同期コミット• Smart Model

• 正副関係を明示• DB情報をDRYに管理

Page 53: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

地豆も進化を続けます

• Jiemamyでアプリの進化的設計を。

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

•そろそろコードベースは落ち着く予定•年内にv1.0出します。

Page 54: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

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 今日!

Page 55: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

•商用サポート•コンサルティング•などなど• Jiemamyと無関係でも、開発環境・開発プロセスなどのご相談もお受けします。

http://tricreo.jp/[email protected]

トライクレオ株式会社からのメッセージをお読み下さい

Page 56: DevelopersSummit2011 【17-E-1】 DBも変化せよ - Jiemamy

Developers Summit 2011

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

Any Questions?

Evolutional Database Design...