Gitを触ってみるよ その5「分散型バージョン管理システムによる開発って生物の進化っぽい」

Gitの仕組みを勉強するにつれて思っていた事なんですが、分散型のバージョン管理システムで進める開発って、何だか生物の進化みたいだなと。今回はそんなお話です。

分散型バージョン管理システムって?

本編の前にまずはおさらいという事で、「分散型バージョン管理システムって、何ぞや?」というところから。本シリーズで散々Gitを使ってきているので今更なんですが、自分的なまとめの意味も込めて、改めて…。

今のところ本シリーズでは、どちらかと言うとSubversion的な集中管理型の使い方をしてきました。

こんな感じですね。

分散型になるとどうなるかというと、こんな感じになります。

開発の流れとしては以下のような感じですね。

  1. Aさんが自分のローカルリポジトリ上で開発を進める。
  2. 公開したくなったタイミングで公開リポジトリにpushする。
  3. Aさんの公開リポジトリを見て気になったBさんが、自分のローカルリポジトリソースコードをcloneしてくる。
  4. Bさんは自分のローカルリポジトリ上で適宜ソースコードを弄る。
  5. Bさんは自分が修正した分をAさんに取り込んでもらいたくなったら、修正分をパッチでAさんに送る、またはAさんにBさんの公開リポジトリからpullしてもらう。

こういう流れにより、AさんはAさんで自分の好きなように開発を進めて、Bさんのように公開されているソースコードを見て気になった人は、自分の環境にソースコードを持ってきて自由に弄り倒して、本家に取り込んでもらいたい修正があれば、Aさんにお願いして取り込んでもらう事もできます。

それぞれがローカルリポジトリと公開リポジトリの両方を持っているのがミソで、ローカルリポジトリ上で好きなだけcommitしても他の人に一切影響を与えないので、開発をガンガン進めていく事ができるというのがポイントです。

Gitが元々Linuxの開発の為に作られたという事もありますが、分散型バージョン管理システムオープンソースの開発に非常に適した作りになっていますよね。

進化していくソースコード

そして、本題。

分散型バージョン管理システムだと、ソースコードは次のような変遷を辿ります。

  1. どこかで誰かが新しく作り始める。(誕生)
  2. 気に入った他の誰かがforkしてソースコードを改変する。(突然変異)
  3. forkされたものの中で優れたものが生き残り、それ以外は淘汰される。(自然淘汰)*1

カッコ内に書いたように、それぞれの流れがちょうど生物の進化みたいだなと思うんですが、いかがなもんでしょうか?

こういった事が可能になる為には、

というような条件が必要になると思うんですが、GitHubが提供している場がまさにこれらを満たしている訳で、ソースコードが生物のごとく進化していく場としてGitHubは非常に可能性を秘めたサービスだと思います。*2

こんな思いもあって、Gitのこれからには非常に注目しております…が、まずは自分で使いこなせるようにならないといかんですな。(^^;ゞ

P.S.
Gitに関する書籍って無いのかなと思って調べてみたら、5月に洋書でOreilly本が出るようですな。

Version Control with Git

Version Control with Git

日本語版は多分出るのはまだまだ先になるんでしょうけど、割と期待度は高まっている(ような気がする)ので、その内に出るのかも?

*1:"淘汰される"というのはいい過ぎかもしれませんが、評価の高いもの程forkされ易いけど、評価されないものは多様化も進まないだろうな、という考え方です。

*2:そんな事を書きながら、自分はまだ全然GitHubを使っていないので、偉そうな事を言えるもんではないですが…。