レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

データベースのアジャイル開発を実現する8のプラクティス

アジャイルな開発に欠かせない割りに、あまり言及されていなかったのが
データベースのアジャイル開発です。


今、私の参画しているプロジェクトで、データベースに関するアジャイルな開発の方法を模索していました。
現在実践していて効果のあるプラクティスをまとめます。

1.データベース作成ツールのVSS管理

スキーマ定義クエリ」と、移行に必要な「初期データCSV」および「移行クエリ」、「移行プログラム」は、管理ツール(VSS)にチェックインされていて、だれでも修正が可能です。
スキーマ定義クエリだけでなく、「移行データ」についてもVSSで管理しているのがポイントです。
マスタなどのデータは、業務の設計に応じて変わるものですし、移行プログラムも実装チームやテストチームが柔軟に修正できたほうが便利です。
データは、単体テスト用データとしても利用できます。

2.データベースのデイリービルド

データベースの移行を自動化しデイリーで実行しています。
常に最新の移行プログラムが実行されたデータベースが手に入ります。


これによって、アプリケーションのテストに移行データが利用可能です。
アプリケーションのプログラミングと同時に移行データのテストが可能です。
アプリケーションのバグの多くは、データとの組み合わせで発生しますが、
それらを見つけるのに効果的です。

3.スキーマ変更の一元管理

データベーススキーマの変更は、DBAだけに許可しています。
DBAにスキーマ変更を依頼するときには、「DB変更履歴」のドキュメントに変更内容と変更対象を記載します。
(これによって変更履歴のドキュメントが常に最新に保たれます。)
DBAは、スキーマ変更と移行データへの対応を行い、さらにER図の修正をおこなったら、DB変更履歴のステータスを「完了」にします。ER図も、DBAにしか修正は許可されていません。
この一元管理は、次の「4」に関連します。

4.スキーマ変更クエリの配布

データベースに変更があった場合は、DBAが通知を受け修正します。
DBAはスキーマ変更を「クエリ」として実装します。(データに影響を与えないクエリとする。)
そして、ソース管理ツールで時系列にチェックインします。
開発中は、多くのテスト用データベースサーバーを利用するので、
中にはスキーマが最新化されていないものがあります。
そういった場合でも、時系列にスキーマ変更クエリを適用していけば、
データをそのままに保持しながらスキーマを最新化できます。

また、ローカルでテスト用にデータベースを構築し、
独自のテストデータを登録していた場合でも、
スキーマ変更クエリを適用すればデータを壊さずにスキーマを最新化できます。

5.ローカルテスト用DBファイルの配布

デイリーに移行プログラムを実行して、完成したデータベースファイルをファイルサーバーにコピーしています。
このファイルを使って、ローカルにデータベースサーバーを立ててテストに利用することができます。
ローカルテスト用DBファイルは、毎日最新版を取得できます。

6.個人情報マスキングクエリの作成

ローカルデータベース用にコピーされたデータベースは、
個人情報を含むカラムは、すべてマスキングします。

これに使用するマスキングクエリは、誰でも利用できるように配布しています。

7.データベースの移行チェッククエリ

移行プログラムを実行した結果、最低何件のデータが登録されていれば正しいかをチェックするクエリを作成しています。
完全に正しいことを証明するクエリを作成するのは難しいですが、
「最低限何件登録されていれば、移行プログラムはおおよそ正常だ」という条件ならチェックするのは簡単です。
これによって、移行プログラムの実施エラーが見つけやすくなります。

8.ER図からテーブルの論理名および物理名の一覧をExcel出力

ER図はVisioで描いていますが、この情報から論理名(日本語)と物理名(英名)や
型、桁数、テーブルの概要など、さまざまな情報をExcelに出力しています。
Excelであれば、フィルタを掛けやすく物理名称の一覧をプログラミングに利用することも多いようです。




■関連
データベースもアジャイル開発に対応したい! (1/3) − @IT

- データベースの進化的設計