Git 対 Subversion:長引く争い
Pocket

ソフトウェア業界においてGitが支配的な存在ではなかった時代がかつて存在した、といつか言われる日が来るかもしれない。

2010年にはSubversionが、ソフトウェアの共同開発には欠かせないツールであるバージョン管理システムの60%以上を占めていた。Forresterによれば、この時期Gitのシェアはわずか2.7%であった。Redmonkのアナリストであるステファン・オグレディが集めたデータによると、今日ではGitのシェアは28%まで増加し、Subversionの地位を脅かしている。

Subversionのような集中型のシステムよりもGitのような分散型の方が優れているにも関わらず、マーケットがGitを受け入れるのにこんなに時間がかかっている理由は何だろうか?

これからは分散型が主流になる

バージョン管理システム(VCS)は、ソフトウェア開発の変更点を記録してプロジェクトを管理するための基本ツールである。開発者にとっては非常に重要であり、企業向けコンピューティングからモバイル・アプリケーションまであらゆる開発に使われている。VCSはソースコードへのアクセスを監視し、全ての変更点を記録する。コードの変更点だけではなく、変更したのは誰か、理由は何か、その変更によって何をしようとしたのか、という情報まで追跡できるようにするのだ。Googleドキュメントの変更履歴に似ているが、それよりもはるかに強力である。

VCSには、集中型のバージョン管理システム(CVS)と分散型のバージョン管理システム(DVCS)が存在する。集中型の場合、開発者はメインソースツリーを「単一のコード」として扱う必要があり、全ての開発内容はこの単一のコードに関連づけられる。分散型の場合はこれと異なり、開発者たちはメインソースツリーをフォーク(※)することができる。フォークしたソースを各個人のデバイス上でテストした後、変更内容をメインソースツリーにマージするのである。集中型が変更を「コントロール」するのに対し、分散型は変更を「共有する」という考え方だ。

※ソースのクローンを作成すること

最近では、開発者たちは分散型を好む傾向にあるようだ。

オグレディ は、Ohlohが調査した60 万以上に及ぶソフトウェア開発プロジェクトに関するデータを使って、集中型のバージョン管理システムから分散型へとトレンドが以降していく様子をグラフ化した。

ohloh-vcs-type-dist-wm

Git以外にも分散型のシステムはあるのだが、Gitが明らかに優勢である。

ohloh-vcs-dist-wm

Subversionが2010年から13%減少しているのに対し、Gitは30%増加している。2012年に急増しているのは、開発者が愛用している「Atlassian」がSubversionからGitに移行したためだ。実際Subversionは2010年から2012年にかけて4.3%減少しており、その後もAtlassianの離反による転落を続けている。

Gitが台頭した理由

Gitがここまで大幅な成長を遂げた理由は、優れたマーケティングや投資によるものではない。Gitのホスティングサービスを提供しているGitHubは2012年に1億ドルを調達しているが、Gitの成功は金で買われたものではないのだ。その資金が入ってきた時にはGitの成功は既に進行中であった。資金調達の達成は、Gitの成功の原因ではなく結果なのである。

開発者の間でGitの人気が急上昇したのは、単純にGitの使い勝手が良かったからだ。オグレディは「分散型だと並行して開発を行うことが可能なので、連番形式で運用される集中型に比べて大幅なスピードアップが見込めます」と述べている。Subversionの単一リポジトリでのチェックアウトは非常に非効率であり、Gitでリポジトリ全体のクローンを作成するのと同じくらいの時間がかかってしまう。

分散型のメリットは、開発者の並行作業が可能になることだけではない。メインの開発ラインに影響を与えることなく個々の変更を加えることができるため、よりきめ細やかな更新が行えるのだ。開発者が行った変更をメインソースツリーに自動でマージするためのプルリクエストも非常に簡単なので、Gitは開発者にとって非常に強力なツールなのである。

Gitの普及にはなぜ時間がかかるのか?

フォークとプルリクエストによってGitは人気を獲得した。にも関わらず、Gitの普及がなかなか進まないのはどうしたわけだろうか。

この点についてオグレディは以下のように推測している。

集中型から分散型に切り替えるためには、新しいツールや構文を学ぶだけではなく考え方そのものを変える必要がある。このアプローチに対する哲学の違いを理解するのには一流の開発者たちでさえも苦戦しており、これが技術の普及を減速させる原因になっているのだ。

こうした障害があるとはいえ、Gitのような分散型システムを使用するメリットは大きい。だからこそ開発者たちは時間とリソースを割いてそれを学ぼうとしてきたのだ。新しい技術が一気に広まるのは、それが古いものよりも簡単だったり安価だったりする場合である。Gitはこの例には当てはまらない。Gitは最初のうちはその本質を理解するために学習する必要があるが、結果的に開発者の生産性を高めたからこそ勝利したのだ。

GitとSubversionが要求される職の相対的な成長度を比べてみよう。

Job Trends

ちなみに、職の絶対数はこちらだ。

Job Trends absolute number

Gitをマスターすべき時期に差し掛かっていることがお分かりいただけただろうか。Bazaarに代表される競合システムのなかでもGitが抜きんでていることを踏まえれば、Gitは既にスタンダードなっていると考えて良いだろう。つまり企業が分散型の開発を取り入れたいと望んでいる場合、それはGitのでの開発経験を求めていることと同義なのである。従来とは考え方から変える必要があるとはいえ、その努力に対する報酬は今後何年にもわたって支払われるはずだ。

Pocket