ニュース

15周年を迎えた分散バージョン管理システム「Git」、コアコントリビューターに聞く、その特徴

 バージョン管理システムの「Git」が、今年4月で15周年を迎えた。

 初登場は2005年4月。Linuxを作ったLinus Torvalds氏が、それまでLinuxカーネル開発コミュニティで使われていたBitKeeperに代わるものとして開発したのが始まりだ。現在では濱野純(Junio C Hamano)氏がメンテナーを務めている。

 GitがLinuxカーネル開発以外で広く使われるようになったのは、GitHubの影響が大きい。GitHubは2008年という比較的初期に、Gitを使ったコードホスティングサービスとして登場した。そのほかGitHubは、Gitに関するトレーニングコンテンツの提供や、Git開発の支援など、Gitの開発や利用をサポートしてきた。

 そのGitHubでGitリポジトリを扱うエンジニアであり、長くGitのコアコントリビューターでもあるJeff King(peff)氏に、Gitについてメールインタビューで話を聞いた。

Gitの公式サイト

DVCSをすべての人の手にもたらした

 まず、Gitはそれまでのバージョン管理システムとは何が違ったのだろうか。

 「Gitは、非中央集権的なバージョン管理を、すべての人の手にもたらすツールです。このことにより、オープンソースソフトウェア(OSS)の開発に巨大なインパクトを与えました。プロジェクトの正式なコントリビューターでも、プロジェクトを初めて見る人でも、同じ情報やツールにアクセスできます。これは、常連コントリビューター以外の人に頼る部分の大きいOSSプロジェクトでは非常に重要です」(King氏)。

 Gitは分散バージョン管理システム(DVCS)と呼ばれる方式をとっている。Git以前に使われていたバージョン管理システムの多くは、集中型バージョン管理システムと呼ばれる方式だった。

 集中型では、中央に1つのリポジトリ(マスターデータの貯蔵庫)があり、利用者はそこからソースコードを取り出し、変更したものを中央のリポジトリに反映するという方式をとる。

 それに対しGitでは、利用者がそれぞれリポジトリを持つ。利用者は、GitHubなどにあるプロジェクトの公式リポジトリからローカルにクローンを作り、そのローカルリポジトリに変更を反映していける。仕組み的には、公式リポジトリもローカルリポジトリも平等だ。なお、OSSのDVCSとしてはほかに、Mercurialなどがある。

 「この方式により、開発者には作業の柔軟性が与えられます。Gitではツールとデータがローカルにあるため、開発者はほかの人から独立して自分のワークフローで作業できるからです」(King氏)。

Jeff King's home page

スケーラビリティや履歴利用にも特徴

 Gitはまた、大規模なリポジトリでも高速であるように最初からTorvalds氏が設計したのも特徴だ。

 「Gitのデータモデルは、高速で柔軟であることが証明されています。この性質により、異なるサイズや異なるワークフローの多数のプロジェクトで採用されました。初期から、Linuxカーネル開発やRubyエコシステムなどの著名プロジェクトで使われたことで、ユーザーベースができて、ほかのプロジェクトへもお墨付きを与えました」(King氏)。

 ほかにもGitは、履歴を調査するためのさまざまな機能を持っている。

 「Gitはまた、ソフトウェア業界をよりよいコミュニケーターにしました。バージョン管理システムは開発者が変更について説明するようになっています。ただし、後から履歴を調査するよいツールがなければ、多くの人は、そこにどんな価値があるかわかりません。Gitは、特定のコードや、特定の観察対象の挙動などをもたらしたコミットを探すための、初めてで柔軟なツールです。履歴の表示も高速です」(King氏)。

GitHubもGit開発に貢献

 分散型であるとはいえ、公式リポジトリの管理は重要だ。また、ソースコードをリポジトリに単に貯蔵するだけでなく、ソースコードなどの情報を見える化したり、イシュー管理などプロジェクト管理の機能を提供したりなどで、GitHubなどのサービスが広く使われている。

 「GitHubのようなツールは、非中央集権的なバージョン管理のコンセプトを広げます。Gitでプロジェクトを管理する上で残っている面倒なこと取り除き、リポジトリをホストして場所を与え、変更を公開し、コメントを付ける、といったことです」(King氏)。

 Gitの開発には世界中の人が参加している。その中で、GitHubでもGitにさまざまな貢献をしているとのことで、「われわれはGitが信頼性を失わずに成長し続けることを守り、必要に応じてサポートすることにコミットしてきました」(King氏)のだという。

 なおGitHubはその一環として、King氏を含むGitの主要開発者を雇用している。King氏は、「GitHubでは、コアコントリビューターを何人か雇用し、Gitのサポートに時間を使えるようにしました」と述べた。

 一方でGitHubにとっても、Gitが改善されることには直接のメリットがある。

 King氏は「GitHubではたくさんの役に立つ機能をGitの開発プロジェクトにコントリビュートしました。これらの機能の多くは、GitHub固有のニーズから生まれて、Gitを使うすべての人に役立つものに成長しました」と指摘。

 具体例としては、「例えば、参照を記録するバックエンドのプラガブル(プラグインで切り替えられるようにする)機構や、オブジェクトのビットマップ、delta islands(データを内部的に共有できる範囲を指定してディスク領域を節約する機能)、SHA-256への移行の基礎となった多くの作業、HTTP認証、証明書のサブシステムなどがあります」とする。

ソフトウェア開発者のさまざまなタスクをもっと非中央集権的に?

 いまGitに求められていて、対応しようとしていることには、どのようなものがあるだろうか。

 「リポジトリというものは、どんどん大きくなっていく一方です。そこでGitでは、近い将来の計画として、どのようにしてリポジトリをスケールさせ続けて、開発者がアクセスできるようにするかにフォーカスしています」(King氏)。

 最後に、Gitの周辺について、King氏がどのようなことを期待しているか聞いてみた。

 これに対してKing氏は、「Gitは非中央集権的なソース管理を世界にもたらしました。しかし、ソフトウェア開発はソースコードにとどまりません。開発者の議論や、イシュートラッカーなど、ソフトウェア開発者のいろいろなタスクに、もっと非中央集権的なツールが出てくるといいなと私は思っています」と回答している。