Jiemamy作者が考える
“データベースの進化的設計”
データベースもアジャイル開発に対応したい!
ソースやスキーマだけ管理しても意味がない
近年注目を集めている「アジャイル開発」は、リファクタリングが重要な要素の1つであることはご存じのとおりです。アジャイルの考え方においては、実装前にシステム要件・設計を確定させることはせず、常に変化を受け入れていく体制が必要です。アジャイル開発の考え方にのっとるなら、アプリケーションだけではなくデータベースについても設計の凍結はせず、また、ソースコードに限らずデータベースの構成・設計についてもリファクタリングが適用されるべきです。
しかし、データベースはシステム全体の中でも比較的被依存性の高い要素です。従って、データベースに対する変更の影響は広範囲にわたることになり、リファクタリングの適用が難しい領域であるのもまた事実です。Jiemamyはこの問題に取り組むプロジェクトとして始められました。本稿ではこのJiemamyの取り組みを紹介します。
理想的な構成管理の要件はワンアクションでビルドできること
SubversionやCVSをはじめとする構成管理ツールを利用すると、システムの過去の状況を即座に呼び出すことができます。このシステム構成管理では、ソースコードをはじめ、該当するシステムが依存するすべての要素が対象となり得ます。ライブラリの依存関係についてはApache Maven2などのツールの普及により、比較的きちんと構成が管理されるようになってきてはいますが、データベースの構成に関してはきちんと管理ができていないのが現状のようです。
構成管理ツールの理想的な運用目的は、コンパイルできる状態のソースコードを維持管理することではなく、正常に動作する状態のシステムを維持管理することです。この考え方を基にすると、ソースコードについて昔の状況が呼び出せてたとしても、それに依存するデータベースの状況も再現できなければまったく意味がないのです。これを実現するためには、従来はDDLを記述したファイルを直接コミットして管理するしかありませんでした。
また、アプリケーションにとっては、チェックアウトから成果物を得る「ビルド手順」も重要な情報です(ある意味で成果物はビルド手順に依存している、と考えることもできます)。OSSのプロジェクトにしばしば見受けられる状況ですが、コードをチェックアウトしたはよいものの、どのような手順を踏めば起動までたどり着けるのかが明確でないケースがあります。前述のMaven2はこの問題を解決します。特に筆者は、「チェックアウトした直後に、ワンアクションでいますぐそのソフトウェアが使える状況が整う」という要素が重要だと考えており、これを「スマートビルド」と呼んでいます。
アプリケーションはデータにも依存する
IT業界屈指の権威であるMartin Fowler氏の論文に『データベースの進化的設計』(原文)があります。データベースに対するリファクタリングのためのプラクティスをまとめた論文です。この論文では「データベースの構成管理対象はスキーマだけではなく、その中にINSERTされるデータ(初期データ、テストデータなど)もきちんと管理する必要がある」という主張がされています。
アプリケーションによっては、初期のマスタデータが入っていないと正常に動作しないものも多くあります。つまり、アプリケーションはこの「初期データにも依存しているといえます。もしこのようなアプリケーションの初期データが構成管理されていない場合、動作に必要なデータを把握するのは難しく、別途情報を入手するなどしない限り、自力でそのアプリケーションを起動するまでには多大な労力が必要となってしまいます。開発の現場において、こういった作業に労を費やすには大変大きなロスです。
そこで、「ソースコード」や「データベーススキーマ」と同様に、「初期データ、テストデータなど」に関しても構成管理を行うことにより、リバート(復元)時にもきちんと動作する状態のアプリケーションを用意することができるようになります。
こうしたことからも、Webアプリケーションのアジャイル開発においては、データベーススキーマおよびデータの構成管理をきちんと行い、リファクタリングを継続していく必要性があるのですが、前述のとおり、その実現は容易ではありません。
例えば、あるテーブルのプライマリーキーのカラム名を変更するというリファクタリングを考えます。このリファクタリングによって行わなければならない作業は下記のとおり多岐にわたります。
- CREATE TABLE文の変更
- そのテーブルを参照している外部キー定義の変更
- そのテーブルに対する初期データINSERT文の変更
- そのテーブルを使用するアプリケーションの変更
::
::
以上のような作業をすべて人の手と目のみで行った場合、修正漏れの危険やミスの危険性が高まり、安心して気軽にリファクタリングを行うことができません。 こうした作業を自動化することにより、よりアジャイルに開発を進めることができるようになります。これらの点を踏まえ、本稿では「データベースの進化的設計」をサポートするツール、Jiemamy(じーまみー)をご紹介します。
データベース設計・リファクタリングサポートツール「Jiemamy」
Jiemamy (じーまみー)は、現在私が開発中のOSSプロジェクトであり、Eclipseのプラグインとして提供されているデータベースの設計・リファクタリングサポートツールです。「ぱっと見」は、ただのER図エディタの印象しか持てないと思いますが、目に見えない部分も含め、細かな工夫を凝らし、データベースのリファクタリングをサポートする役割を果たすよう設計しています。
Jiemamyの主な特徴は以下のとおりです。
- スキーマとともに初期データも管理可能
- Maven2との連携により、データベースの構成設定も含めたスマートビルドを実現
- Jiemamyのデータファイルをリポジトリに直接コミットして、差分管理および、マージが可能(XML形式のデータファイル)
このほかにも、データベースの設計・編集作業のほとんどをEclipseのER図エディタ上で済ませられるようになっており、極力(データベース初期化のための)SQLを隠ぺいするように設計しています。
Jiemamyを使ってみる
OS:下記Eclipseが対応するOS
Eclipse 3.3.x(Europa)
GEF Runtime 3.2
EMF Runtime 2.3
Apache Maven 2.0.x
JiemamyはEclipseプラグイン形式で配布していますので、更新サイトからインストールします。
更新サイトとして上記URLの新規Remote Siteを登録します。
インストール時は、依存プラグイン(GEF、EMF)も同時にインストールするため、Europa Discovery Siteにもチェックを入れた上で、Jiemamyのインストールを行う必要があります。インストールするプラグインは図1のとおりです。
![](/fdb/single/08s_jiemamy/figs/01.jpg)
次に、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 ・まとめと今後の展望 ・最後に |
- Oracleライセンス「SE2」検証 CPUスレッド数制限はどんな仕組みで制御されるのか (2017/7/26)
データベース管理システムの運用でトラブルが発生したらどうするか。DBサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は、Oracle SE2の「CPUスレッド数制限」がどんな仕組みで行われるのかを検証します - ドメイン参加後、SQL Serverが起動しなくなった (2017/7/24)
本連載では、「SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「ドメイン参加後にSQL Serverが起動しなくなった場合の対処方法」を解説します - さらに高度なSQL実行計画の取得」のために理解しておくべきこと (2017/7/21)
日本オラクルのデータベーススペシャリストが「DBAがすぐ実践できる即効テクニック」を紹介する本連載。今回は「より高度なSQL実行計画を取得するために、理解しておいてほしいこと」を解説します - データベースセキュリティが「各種ガイドライン」に記載され始めている事実 (2017/7/20)
本連載では、「データベースセキュリティに必要な対策」を学び、DBMSでの「具体的な実装方法」や「Tips」などを紹介していきます。今回は、「各種ガイドラインが示すコンプライアンス要件に、データベースのセキュリティはどのように記載されているのか」を解説します
![]() |
|
|
|
![]() |