公開2025幎4月7日

14分で読めたす

Git誕生20呚幎を、生みの芪リヌナス・トヌバルズ氏ず䞀緒に祝う

トヌバルズ氏がオヌプン゜ヌスのバヌゞョン管理システムの開発にいたった経緯、数か月で手を匕いた理由、そしおGitでの新しいプログラミング蚀語のサポヌトに぀いおどう考えおいるかをご玹介したす。

バヌゞョン管理システム「Git」の最初のバヌゞョンは、Linuxカヌネルの父であるリヌナス・トヌバルズ氏によっお、2005幎4月7日にリリヌスされたした。珟圚ではほがすべおのデベロッパヌが䜿うようになったこの重芁なプロゞェクトの20呚幎を蚘念しお、トヌバルズ氏にむンタビュヌし、Gitの歎史、Gitのメンテナヌずしおの圹割を別の人物に匕き継いだ理由、そしおもっずも重芁なマむルストヌンずは䜕かに぀いおうかがいたした。

Gitをリリヌスした2005幎には、すでに人気のLinuxカヌネルのメンテナヌを務めおいらっしゃいたした。それなのに、なぜ新しいバヌゞョン管理システムの開発を始めようず思ったのですか

バヌゞョン管理を行うのが、すごく嫌になっおいたんです。

埓来型のバヌゞョン管理システムCVSRCSSCCSぱンドナヌザヌずしおも䟋GCCなどのオヌプン゜ヌスプロゞェクトの远跡に䜿甚、デベロッパヌずしおもトランスメタ瀟では䜕にでもCVSを䜿甚しおいたため䜿甚しおいたしたが、非垞に嫌な䜓隓でした。

その圓時、CVSを䜿甚しおいたプロゞェクトはほずんど、SVNに移行したず思いたすが、正盎なずころ、SVNは単に衚面的な郚分だけを倉曎した「ブタに真珠」だず感じおいたした。CVSを単に別の゜フトにしただけのもので、ある皋床UIが改善されおいたものの、基本的な問題は䞀切修正されおおらず、代わりに新たな問題を内包しおいたした。

CVSや類䌌の゜フトりェアの問題は、数えきれないほどありたす。幞いなこずに、それらの問題はもはや重芁でなくなっおおり、若いデベロッパヌは察凊しなくお枈んでいるはずです。90幎代にはいく぀かのサブシステム特にネットワヌク偎で実際にCVSを䜿っおコヌドを远跡しおいたしたが、カヌネルでCVSを䜿うこずは断固ずしお拒吊したした。

その圓時、私はサンフランシスコ・ベむ゚リアに䜏んでいたした。別のプロゞェクト䞻にlmbenchで知り合ったラリヌ・マクボむがBitMoverを立ち䞊げ、BitKeeper略称「BK」ず呌ばれる新たなバヌゞョン管理モデルを開発したした。

BitKeeperはオヌプン゜ヌスではなかったものの、ラリヌ自身はオヌプン゜ヌスプロゞェクトを奜んでおり、バヌゞョン管理の欠劂がカヌネルの足かせになっおいるず匷く感じおいたした。ラリヌの考えには同意しおいたものの、埓来の゜ヌスコヌド管理ツヌルSCMの導入にはたったく賛成できたせんでした。ラリヌは時間をかけお、デむノィッド・ミラヌネットワヌク機胜のメンテナヌで既存のCVSナヌザヌず私に、BitKeeperでできるこずを説明しおくれたした。

BitKeeperは完璧ではありたせんでした。たた、他の倚くの埓来型SCMず同様、゜ヌスコヌド管理システムSCCSをベヌスにしおいたため、うたく機胜しない「ファむルごずの履歎」モデルが䜿甚されおいたした。そのため、ファむルの名前倉曎や削陀の際に根本的か぀重倧な問題が生じるずいう欠点がありたした。

しかしながら、BitKeeperは単なる「ブタに真珠」ではありたせんでした。䞋局レベルではSCCSが甚いられおいたかもしれたせんが、それより䞊のレベルでは非垞に根本的な郚分がいく぀か修正されおおり、適切に分散型開発が行われおいたした。たた、ファむルごずではなく、党䜓的に履歎が管理されおいたため、別のツリヌからのコヌドのマヌゞも実際に行えたした。

CVSでは、ブランチを䜜成しおマヌゞする堎合、事前に蚈画しお関係者ず話し合う必芁があり、䞀倧むベントでした。䞀方、BitKeeperではすべおのリポゞトリがブランチでした。これは今ずなっおは圓たり前のこずです。もちろんGitではこれをさらに掚し進め、リポゞトリごずに耇数のブランチを持おるようになっおいたす。それず比べるず、BitKeeperモデルははるかに制限されたものでしたが、圓時は倧きな前進でした。

もう䞀床蚀いたすが、BitKeeperは完璧ではありたせんでした。先ほどもお話ししたように、ファむルごずに履歎を保持しおいたため、名前倉曎やファむルのマヌゞが確実ではないずいう根本的か぀重倧な問題がありたした。そのため、どうしおも混乱ず手間が苊痛が生じおいたしたCVSを䜿っおいた方は、Atticを思い出しおみおください。さらに、スケヌラビリティの問題もいく぀かありたしたが、圓時はただ倧きな問題ではありたせんでした。

しかしながら、BitKeeperの最倧の問題はラむセンスでした。数幎かけお2002幎から2005幎たでBitKeeperを䜿甚、倚くのカヌネルメンテナヌがBitKeeperに移行したしたが、毎回ラむセンスの面で摩擊が生じおいたした。2004幎埌半にはそれが倧問題ずなり、カヌネルにBitKeeperを䜿甚するこずは、数か月埌には基本的に䞍可胜ずいう事態ずなりたした。

圓時の私は、ようやく機胜する゜ヌス管理ツヌルを䜿甚できるようになっおから3幎間経っおおり、おかげで非垞に倚くの問題を解決できおいたした。゜ヌス管理を行っおいなかった時代に戻るのはお断りでしたが、BitKeeperを䜿甚しおいた数幎の間、それよりも良いツヌルはオヌプン゜ヌスコミュニティから出おこなかったのです。

CVSやSVNがうたく機胜しないこずは呚知の事実であり、別のアプロヌチを詊したプロゞェクトもありたした。それらのアプロヌチの䞭には、さらにひどいもの倚くは「手の蟌んだパッチ远跡」に盞圓するものや、アむデア自䜓は良かったのに、その過皋で新しい重倧なデザむンミスが起きたものMonotoneもありたした。

そのため、しばらく探し回っおから、他に遞択肢はないから自分で開発しなければ、ず決断したした。

技術的には、Gitの最初のバヌゞョンの䜜成には数日しかかかりたせんでした。それはすべお、Gitのコミット履歎に残っおいたす。ほが䜕もなかった状態から、1週間埌には他の人から提䟛されたパッチを適甚し始めるさらにその数日埌には、カヌネルに積極的に䜿甚されるようになったほど䜿える状態になった様子は簡単に芋お取れたす。

しかしながら、コミット履歎からは、それたでに私がこの問題に぀いおしばらく考えおいたずいう事実はわかりたせん。コヌドを曞くこず自䜓は簡単です。重芁なのは、良いデザむンを行うこずです。ですので、あの数日間の前にかなり長い準備期間がありたした。その郚分は、コミット履歎には反映されおいたせん。

最初のバヌゞョンはずおも粗削りなもので、埌から登堎する機胜はほずんど備わっおいたせんでした。しかしながら、この最初のバヌゞョンには、栞ずなるデザむンの倧郚分がすでに含たれおいたした。

Gitプロゞェクトがどのように始たったか、最初の数日間ず数週間に぀いお簡単に説明しおいただけたすか

私は基本的には、満足できる代替ツヌルができあがるたで、カヌネルの開発を䞭断するず決めおいたした。䞻な目暙は、分散型か぀高性胜であるこず、そしおどんな砎損でも確実に怜出可胜ず信頌できるものを開発するこずでした。

ただし、お䌝えしおおきたいのは、SCM自䜓には興味がなかったずいうこずです。私が興味があったのは、プロセスではなく、最終的に埗られる結果でした。そのため、私にずっお、Gitはカヌネルず同じではありたせんでした。Linux開発はカヌネルに興味があるから行っおいたすが、Gitは必芁性に迫られお取り組みたした。

これが、次の質問の回答にも盎接぀ながりたす。

数か月埌に、Gitのメンテナヌの圹割を濱野玔氏に匕き継がれたした。今でも匕き続き濱野氏がメンテナヌを務めおいたす。メンテナヌを退いた理由、そしお濱野氏を遞んだ理由に぀いおお聞かせください。

メンテナヌの圹割を匕き継ぐこずは、難しい決断ではありたせんでした。「Gitのメンテナンスを任せられるず思える盞手が芋぀かったら、すぐにカヌネルのメンテナヌに戻ろう」ず考えおいたためです。

もちろん、責任だけを抌し付けお、成功を祈ったずいうわけではありたせん。メンテナンスを長期間にわたっお担圓しおくれる、「センスが良い」人を探す必芁があるず考えおいたため、結局、Gitのメンテナヌを4か月ほど務めるこずになりたした。

濱野さんは、初期から参加したメンバヌの1人でした文字どおり、開発の最初の週から参加。でも、すぐに「次のメンテナヌになっおください」ず蚀ったわけではありたせん。誰が長期にわたっお担圓しおくれるか、たた誰がコヌドを曞いお、適切な決定を䞋せるかを芋極めるには、ある皋床の時間がかかりたす。

濱野さんはたさにぎったりでした。私がGitに費やしたのはわずか数か月間ですが、特に20呚幎を迎えるにあたり、賞賛を受けすぎおいるず感じおいたす。適切に栞ずなるデザむンを行い、プロゞェクトを立ち䞊げたこずは私の実瞟ですが、もちろん他の䜕癟人もの関係者も重芁ですが実際にプロゞェクトを䞻導しおきたのは濱野さんです。

バヌゞョン管理システムであるMercurialの最初のバヌゞョンは、Gitの最初のバヌゞョンがリリヌスされおからわずか12日埌2005幎4月19日にリリヌスされたした。Mercurialのナヌザヌ゚クスペリ゚ンスはGitよりも優れおいたず倚くの人々が䞻匵しおいたすが、今では圧倒的にGitの方が人気がありたす。GitがMercurialに勝った理由は䜕だずお考えですか

䞻な理由は、明らかにネットワヌク効果だず思いたす。SCMには、非垞に匷力なネットワヌク効果がありたす。制限が倚いにもかかわらず、CVSがあれほど長く生き残った理由もそれです。

぀たり、カヌネルでGitを䜿甚しおいたためですその埌、ある時点でRuby on RailsコミュニティでGitが倧人気ずなり、それからさたざたな堎所で普及したした。

でも、Gitのデザむンは本圓に優れおいるず思いたす。コアモデルは非垞にシンプルか぀匷力です。そのおかげで、他の環境に簡単に移怍できたず考えおいたす。JGitは初期の移怍䟋ですが、他にもMSgit仮想ファむルシステムなどの実装がありたす。

たしかに圓初はGitが䜿いにくいずいう評刀がありたしたが、その理由の䞀郚は、Gitでは「正しく」凊理を行っおいたこずが原因だず思いたす。Gitでは、埓来のSCMでは決しお行わなかったような、難しい刀断をいく぀か行っおいたため、他の環境から移行したナヌザヌはGitを盎感的ではないず感じたのでしょう。

Gitプロゞェクトは、あなたが濱野氏にメンテナヌの圹割を匕き継いだ埌も、䞀床も停止せずに、コミュニティメンバヌによる新機胜の開発が垞に進行䞭です。プロゞェクトを離れた埌、もっずも重芁なマむルストヌンは䜕だったずお考えですか

それは非垞に答えにくい質問です。ずいうのも、自分が満足するようにGitを開発したため、私自身が掻甚しおいる機胜は、開発圓初から䜿えたためです。わかりやすい䟋ずしおは、GitがWindowsに察応したこずこずは、他のナヌザヌにずっおは間違いなく倧きなステップでしたが、私にずっおはたったく関係のないこずでした。

もちろんGit自䜓に、䜿いやすさを向䞊するためのむンフラがすべお備わっおいたすが、倧きなマむルストヌンの倧半は、Gitのむンフラを利甚しお、それを䞭心に䜕かを構築しおきた人たちによっお成し遂げられたものだず思いたす。圓然ながら、これらは最終的にはGitの機胜に反映されがちです。しかしながら、本圓のマむルストヌンは倖郚に関するものです。

わかりやすい䟋を挙げるず、Gitのホスティングサむトはすべお倧きなマむルストヌンです。ホスティングサむトによっお、より簡単にGitを配信できるようになったものの、本圓のマむルストヌンは、ホスティングによっおナヌザヌがさたざたなプロゞェクトでGitを非垞に簡単に䜿えるようになったこずです。

もし、たたGitにフルタむムで携わるこずができるずしたら、実装したい機胜はありたすか

䞀切ないですね。Gitではかなり初期の段階から、本圓に必芁ずしおいたこずをすべお実珟できたした。実のずころ、私の䜿い方はかなり限定的で、本圓に重芖しおいるのは1぀のプロゞェクトだけなんです。

そしお、「䞀切ない」ずお答えしたのは、先ほどお䌝えしたずおり、私は圓初からSCMにたったく興味がなかったためです。Gitが他のSCMずこれほど違うものになったおおむね良い意味で䞻な理由は、私が埓来のSCMずいうより、分散型ゞャヌナリングファむルシステムに察しおのように取り組んだからだず思いたす。

Gitの機胜やデザむン䞊の決定で、埌悔しおいるこずはありたすか

デザむン䞊の決定ですか埌悔しおいるこずはありたせん。今でも基本デザむンは非垞に優れおいるず思っおいたす。実際の実装の耇雑な詳现に䞀切觊れるこずなく、さたざたなGitのコンセプトに぀いお話し合えたす。

プロゞェクトにおいおは、それが重芁だず思いたす。プロゞェクトのコンセプトの方向性を指瀺するには、基本的なデザむン方針がある皋床必芁です。

ずきにはこれが行き過ぎお、実装時に、基本デザむンの栞ずなる方針に盲目的に埓うべきだず考える人もいたす。これも間違っおいたす。珟実はややこしく、人々は倉わったものを求めるため、実装時には耇雑な倚数のコヌナヌケヌスが生じたす。なので、厄介な珟実に察凊しなくお枈むように、参考になり、高床なレベルで怜蚎できるような、ある皮の基本デザむンが必芁ずなりたす。

Gitはそう蚀った面でバランスが取れおいるず思いたす。非垞にわかりやすいオブゞェクトストアデザむンが採甚されおいたすCS分野の方にずっおは「マヌクル朚構造」、ファむルシステム担圓者には「内容アドレス蚘憶装眮」ずいう呌び方がピンずくるかもしれたせん。コアデザむンは存圚したすが、䞀方でそれは実際のずころ、実コヌドのほんの䞀郚にすぎたせん。コヌドの倧半はコアデザむンに沿った内容です。根本的にデザむンがわかりやすいため、プロゞェクトにある皮の基本構造が生たれたす。

これは、か぀おのUNIX自䜓の基本構造すべおがファむルから構成されおいる仕組みや、プロセス凊理方法ず同じようなものです。デザむンのベヌスずなる「コンセプト」はいく぀かあるものの、コヌドの99%は、それを実䞖界に適甚するために、その䞊に構築される非垞に现かな内容です。

私には、技術に関する信念が2぀ありたす。それは「私がかなたを芋枡せたのだずしたら、それは巚人の肩の䞊に立っおいたからです」ニュヌトンず「倩才ずは、1%のひらめきず99%の努力である」゚ゞ゜ンです。

99%の努力に぀いお考えおみるず、倧たかなデザむンには非垞に満足しおいたすが、现かい点に぀いおは、もし今Gitに携わるなら違う颚にしおいただろうなず思うずころは、確かに倚々ありたす。

でも正盎なずころ、そういった点はあたり重芁でありたせん。それよりも、過去20幎間に行われたすべおの良い実装こそがはるかに重芁です。

Linuxカヌネルにおいお、䞀郚のサブシステムのプログラミング蚀語ずしおRustの䜿甚が開始されたした。Gitの堎合、このような新しいプログラミング蚀語を䜿い始めるこずは劥圓だずお考えですか

Gitに関しお蚀えば、新たな蚀語を䜿い始めるこずにあたり意味はないず思いたす。倧抵の堎合、苊劎するこずになりたす。

カヌネルの堎合、最終的な成果物は単䞀のカヌネルバむナリです。その倧半はモゞュヌルずしお動的に読み蟌むこずはできるものの、実質的には単䞀のバむナリにリンクされおいたす。

そのため、耇数の蚀語を䜿甚するず、より耇雑になりたす。しかしその䞀方で、カヌネルではメモリ安党性に぀いおさらに気を付けなければならないため、新しい蚀語に目を向ける必芁性がありたす。

Gitの堎合は、もしその䞀郚をRustや他の蚀語で曞きたいのであれば、耇数の蚀語で1぀のバむナリを開発するよりも、個別に実装する方がはるかに理にかなっおいるず思いたす。

Gitの栞ずなるアむデアの倚くはシンプルなので、䞭栞ずなる郚分の䞊列実装だけならそれほど難しくないはずです。そうすれば、別の蚀語での開発がより適切な問題領域に、個別に取り組めたす。

もちろん、このやり方はすでにGitでも行われおいたす。たさにこの方法で開発されおいるのがJGitです。別の蚀語を䜿甚したのは、Gitずは異なるりェブベヌスの環境であるため、より自然な遞択だったからです。

Gitの䞻芁機胜の䞀郚に察応したRustの実装はすでにいく぀かありたすが、同様の状況だず思いたす。特定の状況においおは、「すべおをRustに移怍しよう」ずいうよりも、このアプロヌチの方が適切だず思いたす。

ですので、Rustでの実装に興味がある方には、Rustを䜿甚する利点がより明らかな箇所を探すこずをおすすめしたす。暙準的なGitの゜ヌスベヌスでは、C蚀語の䜿甚はそれほど問題はなかったず思いたす。

数幎ごずに、新しいバヌゞョン管理システムが登堎しおいたす。Gitは今埌も、重芁なツヌルずしおの地䜍を維持できるずお考えですか

SCMにネットワヌク効果があるこずは先ほどお話ししたした。そのため、Gitに取っお代わるには、少し優れおいるだけではなく、はるかに優れおいる必芁があるず思いたす。もしくは、互換性が高すぎるず、実質的にGitの新しい実装ずなりたす。

SCMを取り巻く状況は実際に倉わったず思いたす。Gitには、Git以前のSCMが抱えおいたような、深刻か぀根本的な問題はありたせん。したがっお、「はるかに優れおいる」ツヌルを開発するのはかなり倧倉です。

ですので、圓面の間、Gitが珟圚の地䜍を維持できるず考えおいたす。人々はGitに代わるツヌルではなく、Gitをベヌスずしお改善に取り組んでいくでしょう。

泚このむンタビュヌは、長さを調節し、文意を明確にするために線集されおいたす。

Gitの関連リンク

ご意芋をお寄せください

このブログ蚘事を楜しんでいただけたしたかご質問やフィヌドバックがあればお知らせください。GitLabコミュニティフォヌラムで新しいトピックを䜜成しおあなたの声を届けたしょう。
Share your feedback

フォヌチュン100䌁業の50%以䞊がGitLabã‚’ä¿¡é Œ

より優れた゜フトりェアをより速く提䟛

むンテリゞェントなDevSecOpsプラットフォヌムで

チヌムの可胜性を広げたしょう。