今回は、そこそこ役に立つかもしれない小ネタをいろいろと。HibernateなどのO/Rマップライブラリを使っている人にとっては全く無用かもしれません。
ちょっと、前提として Perl が使える環境が必要となりますので、そのつもりで・・。
Windowsの場合は、
などで利用できます(cygwinはperlではないですが・・・、Vistaの人はActivePerl入れられないらしいので)。
データベースを使った開発をする際に結構困るのがテーブル定義のSQL文やデータオブジェクトのクラスの整合性維持とか管理だったりします。まずは、それらをある程度自動化する方法。
CREATE文の自動生成
CSVデータでテーブル定義を作成しておき、それを元にCREATE文を生成します。PostgreSQL用に調整していますが、ちょっとした修正で他のDBでも対応できると思います。
CSVの形式は、
列番号 | 内容 |
---|---|
1 | NO(無視します) |
2 | フィールド名 |
3 | コメント |
4 | プライマリキーフラグ |
5 | 外部キーフラグ(現状無視) |
6 | インデックスフラグ |
7 | NOT NULL |
8 | 型 |
9 | サイズ |
10 | シーケンス名 |
という形式で、テーブル名.csvという名前で作っておきます。それに対して以下のスクリプトを実行すると、CREATE文が生成されます。
CREATE文生成 Perlスクリプト
サンプルCSV(前回記事の記事テーブルの例)
このCSVがあれば、データオブジェクトも自動生成できるじゃないか、と考えるのが普通(?)ですね。
これについては使う人やプロジェクトによってさまざまだと思いますが、まあよくある感じのは以下のようなものですかね。(あらかじめ基底クラスとなるAbstractDtoが必要)
マスタデータの生成
同じような発想で、CSVデータからINSERT文を生成するスクリプトを作りました。
1行目にフィールド名、2行目以降に実データを入れる形で、テーブル名.csvのデータを作成し、以下のスクリプトに通すだけです。
結構いい加減な処理で、TRUE, FALSE に一致するもの以外はシングルクォートを行い、空の場合はNULLにするということを行っています。エスケープは特に行っていないのでクォート文字なんかがデータに入ってるとエラーになります(^^;
気軽に扱えるツール
データもスクリプトもテキスト形式なので、気軽に扱えるのが今回あげたスクリプトの良いところです。
プロジェクトの言語や環境にあまり依存しませんし、変更やバージョン管理も容易です。作るのも簡単なので、こういった細かいツールを色々と作るのは効率アップになるかもしれません。
自分の場合はディレクトリ内を操作して全ファイルを出力したり、それらを組み合わせて実際にSQLを実行するシェルスクリプトを書いたりして自動的に一括処理させるようにしています。アイデア次第で、面倒な作業から出来るだけ解放されることができるので、ためしてみたらいかが?(・・と無理やりまとめてみる。。)