2009年6月12日に、僕は分散バージョン管理システムMercurialについて短い記事を書いて、そこで次のような言ってます。
実は僕は、分散バージョン管理という発想と仕掛けを最初はまったく理解できず、「エエーッ?なんだそれ」「そんなんでうまくいくのかよ?」とかグダグダ言っていたのですが、いったん使い始めればラクチンラクチン。
要するに、最初は誤解に基づき否定的だったってことね。僕と同じような誤解をする人がいるような気はしたのですが、あまりうまく解説できそうにないので*1:
「四の五の言ってないで、使ってミソ」ってことです。
最近になって、ジョエル・スポルスキ(Joel Spolsky / 青木靖 訳)の「分散バージョン管理で間違いないって、ベイビー」という記事を目にしました。2010年3月17日に書かれた記事です。
なんと、あのジョエル・スポルスキも最初は誤解に基づき否定的だったらしいですね。
そのポッドキャストで私はこんなことを言った。「私に言わせれば、ブランチやマージが簡単にできるようになるというのは、単に同僚たちがもっとブランチやマージをするようになるということで、余計混乱させられるだけのことだよ」
...[snip]...
あの時に関しては根本的に間違っていた。ストロベリーピザみたいに、あるいはハラペニョドーナツみたいに、間違っていたのだ。
僕は「いったん使い始めればラクチンラクチン」で、あまり深く追求はしなかったのですが、ジョエルはやっぱり違います。
だから調べて、調べて、最後にはそれが何なのか理解した。
彼は分散バージョン管理システムの本質を次のように語っています。
分散バージョン管理で実際のところ一番重要なのは、「分散」という部分ではないのだ。
重要なのは、このシステムが「バージョン」ではなく「変更」で物事を捉えているということだ。...[snip]...
一方分散バージョン管理では、最初何もない。それから変更が来る。それからまた別な変更がくる。
これは異なるプログラムモデルであり、ユーザモデルを変える必要がある。...[snip]...
SubversionのマインドセットのままMercurialにやってくると、大概のことはうまくいくが、うまくいかないところで混乱してしまい、惨めで失敗した気分になり、Mercurialを嫌いになるだろう。
その後はMercurialを絶賛してます。
私がここで文章を書くようになってからの10年間に起きた、ソフトウェア開発技術における最大の進歩かもしれない。
言い方を変えると、Mercurialをあきらめるくらいなら私はC++に戻る方を選ぶ。 Subversionを使っているなら、やめることだ。すぐに。Subversion=ヒルで、MercurialとGit=抗生物質だ。より優れたテクノロジーが今や存在するのだ。
そしてジョエル・スポルスキは、http://hginit.com/ というチュートリアルを書いて、Kiln(http://www.fogcreek.com/kiln/)というMercurialベースのサービスまでリリースしたというわけです*2。
*1:断片的な言及なら http://d.hatena.ne.jp/m-hiyama/archive?word=Mercurial
*2:ジョエル・スポルスキ自身の企画じゃなくて、彼の会社のメンバーが言い出したみたいです。ジョエルはメンバーより遅れてMercurialを学習したと書かれています。