2005年4月7日、今からちょうど15年前、Gitはセルフホストの可能な完成度に到達した。すなわち、コードをコミットするためにGit自身を使用できるようになったのだ。今日、Gitは最も広く使用される開発ツールのひとつとなり、開発者がコードを管理する方法を大きく変えている。InfoQは今回、GitHubの上級(Distinguished)ソフトウェアエンジニアであるJeff King氏、GitLabのシニアデベロッパエバンジェリストであるBrendan O'Leary氏と、Gitの持つ重要性について話す機会を得ることができた。
Gitは元々、LinuxカーネルのSCM問題に終止符を打つために、Linuxの作成者でメンテナであるLinus Torvalds氏の手によって生まれた。氏は当時のLinuxが使用していたSCMであるBitKeeperの代替として、その開発を個人的に続けていた。Torvalds氏自身が説明しているように、BitKeeperでの氏らの経験が、Gitの全体的な目標を定める上で重要な意味を持っていた。
BKの影響のひとつは、非常に基本的な部分で、私たち(特に私)の作業の方法を変えたことです。その影響の範囲は、変更セットを詳細に追跡していた当初の方式から、サブメンテナによるもっと大きな変更を最終的に信頼することでパッチ単位の作業をする必要がなくなる、というまでに至っています。ですから、BKで開発した3年間は決して無駄ではなかったのです — それによって私たちの作業の方法は間違いなくよくなりましたし、現在まで確実に引き継がれている、と私は思っています。
Torvalds氏はGitを、驚くほどの短期間で書き上げた。2005年4月3日に開発に着手し、最初のコミットを"手作業で"作って、その後まもなく公開可能な状態となり、Git自身の最初のコミット、続いてLinuxの最初のGitコミットを行った。
Gitの最初のバージョンのコードは1,300行にも達しないものでした。最後のBKリリースが4月3日なので、開発を始めたのはその頃だったはずです。2週間以内に代わりになるものを作りたかった、という目標も覚えています。
Git自体をホストした時のことは、あまり印象に残っていません — (Linux)カーネルをホストすることの方が重要だったからです。最初にカーネルをコミットしたのは、4月16日(最初のマージはその数日後)です。先程の"2週間という目標"に間に合いました。
Gitがソフトウェアの世界をいかに変えたのか、より深く理解するために、InfoQは今回、GitHubの上級ソフトウェアエンジニアであるJeff King氏、GitLabのシニアデベロッパエバンジェリストであるBrendan O'Leary氏と、Gitの持つ重要性について話す機会を持った。
InfoQ: あらゆる面から、Gitは2005年に登場して以来、小さな開発ショップから大企業に至るまで、オープンソースの世界を席巻しました。これについて、どう思われますか?Gitがこれほど広範に採用されたのは、どのような機能によるものでしょうか?
King: Gitがオープンソースソフトウェア開発に大きな影響を与えたのは、分散型であるというその特徴が、すべての人たちに同じツールを提供することになったからです。
Gitのデータモデルは、高速で柔軟性のあることが証明されています。これにより、さまざまな規模やワークフローを持ったプロジェクトで採用することが可能になっているのです。さらに、LinuxカーネルやRuby言語エコシステムといった、著名なプロジェクトで早くから使用されていたため、それが短期的にユーザベースを広げると同時に、ソフトウェア開発の他の人々へのエンドースメントの役割も果たしました。
O'Leary: Gitが登場する前は、一般的なソースコード管理ツールの大部分が集中型でした。つまり、何かを行うためには、中央のサーバに接続しなければならなかったのです。分散形式によるコード作業を現実のものにしたのがGitなのです。Linuxカーネルのような大規模なコードベースでも、この点は同じです。この分散型という特徴は、過去15年間に私たちが見てきたオープンソース革命を可能にする上で、重要な役割を果たしました。
InfoQ: Gitの"キラーフィーチャー(killer feature)"は何だと思いますか?
O'Leary: Gitが内部的に行っていることをすべて理解しようというのは難しいかも知れませんが、それでも、Gitのキラーフィーチャーはやはり — 信じるかどうかは別として - そのシンプルさにあります。Gitは特定のワークフローや、特定の外部ツールを前提にしていません。可能な限り軽量な変更追跡というコアコンピタンスを重視した上で、これまで世界のどこにもなかった規模の分散ソースコード管理を実現しているのです。
King: ソフトウェアアーキオロジ(archaeology)に関わるものすべてですね。Gitのバグを調査する時、最後にはいつも、問題のコードがいつ頃からそうなっているのかを知るために、過去15年間の歴史を探ることになります。その時には、
git blame
(特にtig
blameビューア)、git bisect
、git log -S
などが、ツールボックスの一部として欠かせません。
InfoQ: Gitは開発者の作業やコラボレーションの方法をどうやって変えたのでしょう?どのような"開発ワークフロー"が、それまでは簡単な選択肢ではなく、Gitによって可能になったのでしょうか?
King: Gitの分散型という特徴は、それまでにはなかった柔軟性と透過性を開発者に提供します。プロジェクトの常連コントリビュータであっても、初めてプロジェクトを覗いた人であっても、同じ情報とツールにアクセスできるのです。ツールもデータもローカルにあるので、他の人たちとは独立して、自分自身の個人的なワークフローを作ることができます。
O'Leary: オープンソースソフトウェアを今日のようなものにしたのはGitです — かつては夢にも思わなかった、ソフトウェアの開発方法が実現しました。Git以前のほとんどのソースコード管理ツールでは、常にサーバに接続して作業を行う必要がありました。大企業や少数のコアエンジニアによるプロジェクトならば大きな問題ではありませんが、エンジニアが新たに参画してひとつの機能を提供し、それをメインラインに簡単に統合する、というような方法はほとんど不可能です。Gitは、オープンソースの分散ソース管理システムを作り上げることで、これを完全にひっくり返しました。世界中の開発者が同じコードベースでコラボレーションできるようになり、私たちが目にしているオープンソースソフトウェアの爆発的増加を実現したのです。
InfoQ: Gitのオープンソース領域での成功は誰もが目にするところですが、非オープンソースのソフトウェア開発においても、Gitは同じように幅広く採用されています。これをどうご覧になりますか?Gitのようなコラボレーションツールの使い方に関して、オープンソースと非オープンソースのソフトウェア開発で違いはあるのでしょうか?
O'Leary: Gitはオープンソースコミュニティのために設計されたものではありますが、クローズドソースやプロプライエタリなソフトウェアの開発においても有用であることを自ら証明しています。企業自身も、多数のエンジニアからなるグループを、よりよいソフトウェアを迅速に提供するという共通の目標に向かう上で、オープンソースプロジェクトと同じ課題の多くを抱えているのです。Gitはまさに、それを可能にするためにゼロから構築されています。世界中に開発力を分散させたり、リモートで開発を行う企業が増えるにつれて、Gitはそれらの独立したソフトウェアベンダに必要なものを提供します。MicrosoftがWindowsプロジェクトにGitを採用していることを見れば、Linuxカーネルのために設計されたこのソース管理システムが世界中で受け入れられていることの証明としては申し分ありません。
King: これがまさに、パワフルでフレキシブルなツールセットを開発者の手に届けるためのものであることは、オープンソースコントリビュータであっても、個人的プロジェクトのハックであっても、あるいはプロプライエタリなソフトウェア開発であっても関係ありません。Gitの分散的なコアは、企業よりもオープンソース開発者にとってより魅力的であるかも知れませんが、どのようなグループに属していようとも、Gitはソフトウェア開発のドキュメントやコラボレーションを簡単にしてくれるのです。
InfoQ: GitHubやGitLab,BitBucket、その他多数のコードに関わる開発者のコラボレーションを可能にしたプラットフォームの存在は、Gitの成功に関係しているのでしょうか?
King: これらのプラットフォームは、いずれもGitなしには存在し得なかったものです。Gitには早い段階から、さまざまな開発コミュニティ(カーネル、Rubyなど)のエンドースメントがありました。GitHubのような新進のプラットフォームが意識されるようになったのには、それらの存在が影響しています。
O'Leary: Gitのストーリは、コミュニティ主導の開発における究極のサクセスストーリです。たくさんの個人が集まって、アイデアや機能をGitのコードベースに提供しました。これによってGitは、極めて堅実で信頼性の高い、現代的なソースコード管理システムになったのです。Gitのユーザビリティと安定性は、特に開発チームにGitを提供する手段として立ち上がったGitLabやGitHubなどの企業において素晴らしい価値を生み出しただけでなく、オープンソースの急激な成長を実現させたことにより、今日作成されるすべてのソフトウェアに影響を与えました。
Jeff King氏はGitHubの上級(Distinguished)ソフトウェアエンジニアで、2011年からGitリポジトリのスケールアップとメンテナンスに従事している。Gitプロジェクトには2006年から参加し、アクティブなコントリビュータとして活動している。
Brendan O'Leary氏はGitLabのシニアデベロッパエバンジェリストである。GitLabはDevSecOpsライフサイクルを対象とした最初のアプリケーションである。氏はソフトウェア開発に情熱を持ち、我々がコードのイテレーションを行うような早さでプロセスのイテレーションを行っている。価値を提供するためにカスタマと共に働くことが、氏のDevOpsとスムーズなCI/CD実装への熱意の源である。氏は国家トップの医療機関から環境サービス企業や国防省に至るまで、幅広いカスタマと仕事をしている。仕事以外では、いつも1人から4人の子供を連れていたり、作業場で何かを作っている氏の姿を見つけられるはずだ。
同じトピックとして、Jeff King氏による現在のGitメンテナであるJunio Hamano氏へのインタビューもぜひ読んで頂きたい。