« GoogleガジェットとWebサービスAPI | トップページ | 技術力とは何か »

2006年10月 5日 (木)

ソースとターゲット

通常、コンパイル言語の場合、ソースファイル上でプログラミングを行い、ビルドを行なうことで「ターゲット」となる、実行可能ファイルを作ります。スクリプト言語など、インタプリタ言語では、ソースファイルがそのまま実行できますので、基本的にはソースとターゲットは同じファイルとなります。

ところが、このソースとターゲットを分けるかどうか、はっきりしないものがあります。

Oracleデータベース上で、PL/SQLを使用して開発を行なっていた際、これが問題となりました。

私はテキストファイルの「ソース」上でプログラミングを行い、そのソースを「ターゲット」となる、開発用のデータベース上で、コンパイルする、という方法を考えていました。というか、これが当然と思い、他のやり方があると考えていなかったのですが。

ある人は、Oracleデータベース上で、データベースのディクショナリに格納されている、「ソース」を、直接編集していたのです。ある種のGUIツールを使えば、これが可能なんですよね(親切なことに、このGUIツールには、「デバッガ」までついてました)。そして、その人は、それが「当然」だと思っていたわけです。

で、ここで「どちらの方法が良いか」議論となったわけですが。

私は、以下の点を主張して、説得しました。
--
1)
ソースは別にしないと、ソース管理システムに入れられない。

2)
「ソース」が、おざなりに管理されている、開発用データベースに置かれているのはまずい。開発用データベースは、誰かが「無茶をして」クラッシュさせても良いものだから。

3)
「共有の」開発用データベース上で、複数の人間が「ソース」を編集し始めると、互いの変更が影響しあって、訳がわからなくなる。また、編集中やデバッグ中は、オブジェクトがロックされる。こうしたことで、作業が円滑に進まなくなる。
--

一応、納得はしてもらったのですけど。多少腑に落ちない風でもありました。私自身、ちょっと強引だったように思いまして。結局、これはどうなのでしょうね。

MicrosoftのAccessで開発するような場合も同様ですよね。テキストファイルに書いた「ソース」プログラムを「ビルド」して、AccessのMDBファイルを作る、というのは出来そうですけど、Accessの製品そのものには、そのような機能はなかったと思います。

ファイルの形式については、伝統的に、テキスト派(Unix)とバイナリ派(Windows)の対立があって、それと似た構図は感じるんですけども。ただ、私自身は「絶対テキストでなくては嫌だ」というほどの、こだわりはありません。場合によっては、バイナリ形式でも一向に構わないです。

|

« GoogleガジェットとWebサービスAPI | トップページ | 技術力とは何か »

コメント

小規模なら
DBを各自で保持、変更した場合は
スクリプトをDBから作成し、それをソース管理するといういう方法もあるとは思うのですが。
ORACLEにそういう機能があったかは知らないので…。
(MS-SQLならたしか標準でついてた記憶があります)

投稿: Lefty | 2006年10月 5日 (木) 09時08分

Leftyさん、コメントありがとうございます。

おっしゃるとおり、開発者ごとに個別にDBを保持すれば、問題とはならないように思います。ソースをチェックインさえしてもらえば、後は各メンバーの「お好み」で作業してもらえば良いと思いますので(OracleでもDBからスクリプトの抽出はできます)。

このプロジェクトでは、それなりに大規模なシステムでした。DBも1つではなく、「本店DB-支店DB」のような連携や、他システムのDBとの連携が含まれ、また、ご本尊のDBもかなり巨大なしろものでした。これを各開発者のPCに入れるのは、一度は考えたのですけど、結局断念してしまいました。

また、メンバーには「DB構築」のスキルがある人があまりいなかった、というのもありました。人数を考えれば、「プロジェクト専任のDBA(サポータ)」が必要かもしれません。が、そんな人は用意できませんで...
私が兼任でやっておりましたが。

”Agile Database”や、DBUnitツールでも、開発者ごとに個別DBを持つことを推奨していますので、これは、ぜひ実現したいとは考えています。
開発DBが「共有」ですと、色々不便ですので。

投稿: ron | 2006年10月 6日 (金) 01時40分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« GoogleガジェットとWebサービスAPI | トップページ | 技術力とは何か »