2008年6月22日日曜日

RubyGemでSqld4rをリリースしました

Sqld4rとは何の事かというと、SQLDesignerのデータ保存用XMLファイルから、Railsのマイグレートファイルとモデルファイルを生成してくれるgemの事です。

以前からrailsアプリケーションのコーディング前に、データベースの構造を決めるんですが、その時に使うツールとしてSQLDesignerを使っていました。

他にも色々DBの設計ツールはあるんですが、SQLDesignerを好んでいるのは以下の理由です。

  • 特定データベース専用ということではなく、幅広く対応している
  • ActiveRecordの設計をする場合、(単数形テーブル名)_idという表現をよく使うが、このサポート機能がある
  • Web上で設計できるので、クライアントOSに依存しない。(実際にはブラウザ依存はしますが。汗)
  • データがXMLなので、応用できそう
  • データがXMLなので、SubversionやGitでの管理がスムーズ(変更点が管理しやすいなど)
  • 自分でセットアップしなくても、上記デモで十分実用的じゃん(ネットワークが無い時用にローカルにもあるけど)

まぁ、 SQLDesigner上で直接データが保存できない(正確には、できるけど微妙)とか、特定ブラウザで使い物にならないとか、Ver1とVer2(現行)で、データ互換性が無いとか、色々不平不満はありますが、他の設計ツールと比較してみても、やっぱりSQLDesignerに戻ってきたので、これが一番なのかなと。

で、今まではSQLDesigner上でカラムの型や名前を見ながら、script/generatorやmigrationファイルに打ち込んでいたんですが、せっかくXMLなんだから、これを流し込むだけでSQLDesigner上に作った構造を、そのままRailsに流し込む事は出来ないかなぁと思って、作ってみたものがコレです。

Sqld4rの対象としている環境

現状としてはMaxOSX 10.5かLinux系やBSD系です。

ただ、Windows系でダメな事はしてない気がする(設定ファイルのデフォルトパスぐらい?)なので、そのまま動くのかもしれません。正確には試していません。(もしかしたら、フォルダの区切りがスラッシュでダメな部分があるかも)

あ、そうそう。Rails 2.1.0以降で動作確認しています。実際にはRails 2.0から動くのかもしれないです。ライブラリとしてはActivezSupportが必要で、一応2.1.0に依存させています。(必要な方は再ビルドしてください)

ちなみに、Sqld4rではなく、Sqld4ARだったかなと、今後悔しています。(名前変えれないよね?)

Sqld4rの使い方

一応RubyForge上にプロジェクトのサイトも作ったんだけど、かなりいいかげんなので、こちらちゃんとしたものを書いておきます。

Rocketstarterと基本構造は変わってないので、このマニュアルもかなりパクリです。

1.gemをインストールします

これは簡単ですね。

gem install sqld4r

2.設定ファイルのパスを環境変数にセット

設定ファイル自体はひな形を作ってくれる機能があるので、設定ファイルを保存するパスのみ指定しておく必要があります。

export SQLD4R_CONF=~/.sqld4rr

とかでいいと思います。今回からデフォルトで自分のホームディレクトリを指しているようにしましたので、この環境変数が必要ない方も居るかもしれません。。

3.設定ファイルのひな形を作ります

sqld4rに設定ファイルのひな形を吐くようにオプションを付けます。

sqld4r --init

4.設定ファイルをエディタなどで編集します

vi ~/.sqld4r

など。

--conf=/path/to/conffile

sqld4rの設定値を保存しておくファイルのパスです。パラメータを指定すれば、無くても動きます。デフォルトの$HOME/.sqld4r < 設定ファイル < コマンドラインからのパラメータという順で優先されます。

--svn

--git

--skip-timestamps

--skip-migration

--skip-fixture

上記は、script/generate modelまたはrspec_modelに渡すためのパラメータです。意味もそのままです。

--rspec

このオプションを付けると、script/generate rspec_modelとして使われ、rspecのひな形が生成されます。デフォルトはオフです。

--skip-relation

このオプションを付けると、app/models内の各モデルファイルに関連(belongs_toとかhas_manyとか)を追加しません。デフォルトはオフです。

--skip-index

このオプションを付けると、マイグレーションファイル内のPKとFKにインデックスを付けません。デフォルトはオフです。※未実装

--verbose

動作内容の詳細を表示します。デフォルトはオフです。

--sudo

実行にsudoなどが必要な環境の場合、このオプションを指定すれば、各コマンドの頭にsudoを付けます。デフォルトはオフです。

--log

このオプションを指定すれば、verboseに指定したものと同様の出力を--logfileで指定したパスのファイルに書き出します。デフォルトはオフです。

--logfile=/path/to/logfile

ログファイルへのパスです。

--emulate

デバック/テスト用として、各コマンドを実行しないエミュレーションモードです。デフォルトはオフです。

5.設定ファイルやパラメータのチェック

sqld4r --check

で現在の設定値をチェックできます。

設定ファイルで指定した値を、コマンドラインのオプションで上書きできているかもチェックできます。

sqld4r --check --conf=/path/to/another

など。


6.いよいよ実行

各設定値は既に設定ファイルに書かれてあるはずなので、ここで指定すべきはSQLDesignerのXMLファイルへのパスです。

sqld4r /path/to/database.xml

エラーが無ければ作られているはずです。

例によって、テストが書いてなかったり、インデックス絡みが未実装だったりしています。

バグ、要望などはフォーラム(英語)またはフォーラム(日本語)またはRubyForgeのプロジェクトページへどうぞ。

あー、完全パクリだなぁ。

0 件のコメント: