Database WatchJiemamy作者が考える “データベースの進化的設計”
データベースもアジャイル開発に対応したい!

都元ダイスケ(MIYAMOTO Daisuke)
(http://d.hatena.ne.jp/daisuke-m/ )
2008/9/4

アジャイルの考え方においては、実装前にシステム要件・設計を確定させることはせず、常に変化を受け入れていく体制が必要です。アジャイル開発の考え方にのっとるなら、アプリケーションだけではなくデータベースについても設計の凍結はせず、また、ソースコードに限らずデータベースの構成・設計についてもリファクタリングが適用されるべきです。Jiemamyはこの問題に取り組むプロジェクトとして始められました。本稿ではこのJiemamyの取り組みを紹介します。

ソースやスキーマだけ管理しても意味がない

 近年注目を集めている「アジャイル開発」は、リファクタリングが重要な要素の1つであることはご存じのとおりです。アジャイルの考え方においては、実装前にシステム要件・設計を確定させることはせず、常に変化を受け入れていく体制が必要です。アジャイル開発の考え方にのっとるなら、アプリケーションだけではなくデータベースについても設計の凍結はせず、また、ソースコードに限らずデータベースの構成・設計についてもリファクタリングが適用されるべきです。

 しかし、データベースはシステム全体の中でも比較的被依存性の高い要素です。従って、データベースに対する変更の影響は広範囲にわたることになり、リファクタリングの適用が難しい領域であるのもまた事実です。Jiemamyはこの問題に取り組むプロジェクトとして始められました。本稿ではこのJiemamyの取り組みを紹介します。

理想的な構成管理の要件はワンアクションでビルドできること

 SubversionやCVSをはじめとする構成管理ツールを利用すると、システムの過去の状況を即座に呼び出すことができます。このシステム構成管理では、ソースコードをはじめ、該当するシステムが依存するすべての要素が対象となり得ます。ライブラリの依存関係についてはApache Maven2などのツールの普及により、比較的きちんと構成が管理されるようになってきてはいますが、データベースの構成に関してはきちんと管理ができていないのが現状のようです。

 構成管理ツールの理想的な運用目的は、コンパイルできる状態のソースコードを維持管理することではなく、正常に動作する状態のシステムを維持管理することです。この考え方を基にすると、ソースコードについて昔の状況が呼び出せてたとしても、それに依存するデータベースの状況も再現できなければまったく意味がないのです。これを実現するためには、従来はDDLを記述したファイルを直接コミットして管理するしかありませんでした。

 また、アプリケーションにとっては、チェックアウトから成果物を得る「ビルド手順」も重要な情報です(ある意味で成果物はビルド手順に依存している、と考えることもできます)。OSSのプロジェクトにしばしば見受けられる状況ですが、コードをチェックアウトしたはよいものの、どのような手順を踏めば起動までたどり着けるのかが明確でないケースがあります。前述のMaven2はこの問題を解決します。特に筆者は、「チェックアウトした直後に、ワンアクションでいますぐそのソフトウェアが使える状況が整う」という要素が重要だと考えており、これを「スマートビルド」と呼んでいます。

アプリケーションはデータにも依存する

 IT業界屈指の権威であるMartin Fowler氏の論文に『データベースの進化的設計』(原文)があります。データベースに対するリファクタリングのためのプラクティスをまとめた論文です。この論文では「データベースの構成管理対象はスキーマだけではなく、その中にINSERTされるデータ(初期データ、テストデータなど)もきちんと管理する必要がある」という主張がされています。

 アプリケーションによっては、初期のマスタデータが入っていないと正常に動作しないものも多くあります。つまり、アプリケーションはこの「初期データにも依存しているといえます。もしこのようなアプリケーションの初期データが構成管理されていない場合、動作に必要なデータを把握するのは難しく、別途情報を入手するなどしない限り、自力でそのアプリケーションを起動するまでには多大な労力が必要となってしまいます。開発の現場において、こういった作業に労を費やすには大変大きなロスです。

 そこで、「ソースコード」や「データベーススキーマ」と同様に、「初期データ、テストデータなど」に関しても構成管理を行うことにより、リバート(復元)時にもきちんと動作する状態のアプリケーションを用意することができるようになります。

 こうしたことからも、Webアプリケーションのアジャイル開発においては、データベーススキーマおよびデータの構成管理をきちんと行い、リファクタリングを継続していく必要性があるのですが、前述のとおり、その実現は容易ではありません。

 例えば、あるテーブルのプライマリーキーのカラム名を変更するというリファクタリングを考えます。このリファクタリングによって行わなければならない作業は下記のとおり多岐にわたります。

  1. CREATE TABLE文の変更
  2. そのテーブルを参照している外部キー定義の変更
  3. そのテーブルに対する初期データINSERT文の変更
  4. そのテーブルを使用するアプリケーションの変更
    ::
    ::

 以上のような作業をすべて人の手と目のみで行った場合、修正漏れの危険やミスの危険性が高まり、安心して気軽にリファクタリングを行うことができません。 こうした作業を自動化することにより、よりアジャイルに開発を進めることができるようになります。これらの点を踏まえ、本稿では「データベースの進化的設計」をサポートするツール、Jiemamy(じーまみー)をご紹介します。

データベース設計・リファクタリングサポートツール「Jiemamy」

 Jiemamy (じーまみー)は、現在私が開発中のOSSプロジェクトであり、Eclipseのプラグインとして提供されているデータベースの設計・リファクタリングサポートツールです。「ぱっと見」は、ただのER図エディタの印象しか持てないと思いますが、目に見えない部分も含め、細かな工夫を凝らし、データベースのリファクタリングをサポートする役割を果たすよう設計しています。

 Jiemamyの主な特徴は以下のとおりです。

  • スキーマとともに初期データも管理可能
  • Maven2との連携により、データベースの構成設定も含めたスマートビルドを実現
  • Jiemamyのデータファイルをリポジトリに直接コミットして、差分管理および、マージが可能(XML形式のデータファイル)

 このほかにも、データベースの設計・編集作業のほとんどをEclipseのER図エディタ上で済ませられるようになっており、極力(データベース初期化のための)SQLを隠ぺいするように設計しています。

Jiemamyを使ってみる

〜Jiemamy動作環境〜
Java:Java 5以上
OS:下記Eclipseが対応するOS
Eclipse 3.3.x(Europa)
          GEF Runtime 3.2
          EMF Runtime 2.3
Apache Maven 2.0.x
  では、早速Jiemamyを使ってみましょう。Jiemamyの動作環境は右のとおりです。

 JiemamyはEclipseプラグイン形式で配布していますので、更新サイトからインストールします。

 更新サイトとして上記URLの新規Remote Siteを登録します。

 インストール時は、依存プラグイン(GEF、EMF)も同時にインストールするため、Europa Discovery Siteにもチェックを入れた上で、Jiemamyのインストールを行う必要があります。インストールするプラグインは図1のとおりです。


図1 インストールしておく必要があるプラグイン(チェックボックスをチェックしているもの)

 次に、Jiemamyの動作に必須ではありませんが、デモ用のプロジェクトを取得するために、別途Subversionクライアントが必要です。Subversionクライアントを導入していない場合は、事前に適宜準備してください。

 また、これから行うデモを実行するには、Maven2がインストールされ、適切に設定されている必要があります(Maven2はオンラインから必要なファイルをダウンロードするため、インターネットに接続している必要があります)。Maven2のインストールは、ダウンロードしたアーカイブを適当なディレクトリに展開し、binディレクトリにパスを通します。

 最後に、localhostにPostgreSQLを起動し、user:postgres、pass:postgresのアカウントでデータベースにアクセスできる状態にしておいてください(本デモでは、PostgreSQLに「jiemamy」という名前のデータベースを作成します。同名のデータベースが存在した場合、内容が上書き削除されますのでご注意ください)。

 以上で準備が整いました。以降では、Jiemamyを使った簡単なデモンストレーションの手順をお見せします。

  1/3 次のページへ

 Index
Jiemamy作者が考える “データベースの進化的設計”
データベースもアジャイル開発に対応したい!
→ Page 1
・ソースやスキーマだけ管理しても意味がない
・DB設計・リファクタリングサポートツール「Jiemamy」
・Jiemamyのインストール
  Page 2
・デモ1:チェックアウトから起動まで
・デモ2:リファクタリング
  Page 3
・まとめと今後の展望
・最後に



Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間