2008年11月8日土曜日

バージョン管理

さて漸く午後に入ります。第7章です。ここで自由課題を追加してしまったので、ソースを替えようかと思って一句。浮かびました。

バージョン管理ツールがどれほど使いやすくて素晴らしいのか分かりませんが、使っていることを普段感じさせないというものは、まだ無いように思います。無知なだけでしたらごめんなさい。

大勢で1つのプロジェクトを更新する、ということと、純粋にバージョンという意味には本質的な違いがあると思います。私が考える本質的なバージョンとは、変更履歴の集合(積み重ね)です。

一方、複数の人が同じファイルを修正するというのは、同じファイルの違う場所なのか、同じ場所なのかという、単純に競合の問題だと思います。ですから当然一人でやってるときには、競合の問題は起こり得ません。

しかし競合の問題も各人からみれば、2つ(変更前と変更後)の違いでしかありません。実際、異なるファイルであれば、競合は起きない訳です。ただし全体として1つ選ぶとき、各人のどのバージョンをそれぞれ選ぶのか、ということになってきます。そこで初めてプロジェクトとしての総合的なバージョンという概念に当てはめたバージョン管理が必要になってくるわけです。そしてそこから翻って個々人のバージョンにおいて、プロジェクト全体のバージョンとどういう関係なの?という属性が付いてくるというか、必要になってくるわけです。

話を初めの方に戻すと、使っていることを感じさせない、というのは、何らかの文書を作成するものであれば大概やっている自動保存というものになると思います。それと自分が明示的に保存したい場合。そしてバージョン管理のためには、保存の度に2つの保存の間の差分と、その全変更履歴が正しく保存され、後でそれに基づいて、さまざまな管理操作ができる、ということになってくると思います。

従ってバージョン管理のリポジトリとの出し入れの間だけバージョン管理されているというのは、本質的なバージョン管理として、ちょっと弱いと思うわけです。つまり、あるエディタがバージョン管理ウェアに対応するということは、保存先(開く元)としてOS管理上のファイルを指定するのではなく、バージョン管理上の仮想ファイルとやりとりする必要がある、というkとです。

で、そういうものを私は作りたいと。

ディスク管理ソフトの作り方を知ってる訳じゃないのでアレですけど、Macで言えば、仮想ファイルをマウントして使う。アプリケーションからみると普通にファイルですが、仮想ファイルの管理モジュールを介在させ、ユーザから見えない所で差分情報を管理します。プロジェクト単位のバージョン管理を行う場合は、アドミンツールを使って仮想ファイルをコントロールします。また仮想ファイル(ディスク)としてマウントすることで、WebDAVやSFTP、SSHなど、ネットワーク上に配置することも可能でしょう。

また、プロジェクト管理ツールとも連携して、あるバグ票、あるリリースバージョンといったクエリから差分情報だけを抜き取ってバグ票に添付する、FAQに流す、チュートリアルにエクスポートする、といったことが可能だと思います。

ま、かなり適当なことを書きましたが、兼ねてから明確なイメージが沸かなかったので、この機に書いておきました。

0 件のコメント: