MicrosoftはWindowsのコードベースをSource Depotから、GVFSを使用したGitに移行する作業を完了した。
コーポレートVPのBrian Harry氏によると、同社は数年前に、エンジニアリングシステムの変更を決定した。社内で共通的に使用されているツールもいくつかあるが、ただひとつ、あるいは少数のチームだけが使用しているものもある。この状況はコラボレーションを難しくすると同時に、ツールやプロセスの違いに起因するマイナスの影響をもたらしている。Microsoftほどの規模の企業は、エンジニアリングシステムがカバーする分野も数多い – ソース管理、ビルド、リリース、テスト、テレメトリ、静的分析、セキュリティなど – ため、ひとつのステップで対応するには複雑過ぎる。そのため同社では、最初に作業計画、ソース管理、ビルドを対象とすることを決定した。
第1ステップのひとつは会社全体をVisual Studio Team Serviceで標準化し、そこから他のすべてのツールを使用可能にすることだった。ソース管理に関しては、大部分はTFSを使用しているものの、特に大規模な開発チーム - WindowsとOffice - で、同社が2000年代初めに導入したVCSであるSource Depotの使用が続けられていた。この2チームを別システムに移行する作業は、あまりにもコストが高いと考えられていたため、これまで誰もが尻込みしていたのだ。
いくつかの選択肢 - TFVC、Source Depot、Git、Mercurial - を議論した後、Microsoftは、Gitが適切な解であるかどうかを試してみることにした。中規模ないし小規模なリポジトリをGitに移行した時には問題がなくても、規模が大きな場合にはスケーリングに関する重大な問題が発生する。
当社ほど大規模なコードベースを持つ企業は多くありません。WindowsとOfficeは特に大規模で(他にもありますが),数千人のエンジニア,数百万のファイル,数千台のビルドマシンが常に稼働しています - 正直、気の遠くなる規模です。ここで明確にしておきますが,この記事で言うWindowsは,実際には非常に広い範囲 - PC用,モバイル用,サーバ用,HoloLens用,Xbox用など - を対象としています。Gitは分散型のバージョン管理システム(DVCS)なので,リポジトリとヒストリをすべてローカルマシンにコピーします。Windowsのソースでこれを行なうのは冗談のような話です(実際に私たちは、何度も笑わせてもらいました)。 TFVCとSource Depotについては,いずれも大規模なコードベースやチームを念頭に置いた綿密な最適化が行われているのですが、Gitはこれまで,これほどの規模で(あるいは多分,もっと小さな規模でも)採用されたことは「一度も」ありませんでしたし,「絶対に」うまく行かないだろう、と多くの人たちが断言していました。
数値で見るならば、Windowsのリポジトリはおよそ300GB、ファイル数は350万で、4,000人のエンジニアが、440のブランチで毎日1,700回程度のビルドを実施している。Gitリポジトリはクローン時にすべてをダウンロードする必要があるため、大規模なプロジェクトでは動作が遅くなる。この問題の解決策が、Git Virtual File System(GVFS)の導入による仮想化だ。GVFSを使用するGitでは、すべてのリソースがローカルにあるかのように動作するが、実際にはシステムがユーザの操作を監視して、必要に応じてリソースをネットワーク越しに取得する。仮想ファイルシステムを使用することによるgit.exeへの影響はほとんどない。Microsoftとしては、Gitにあまり手を入れたくなかったのだ。
Gitをフォークしたくはありませんでした - 厄介なことになりそうですから。また、コミュニティにコントリビューションとして返せないような変更は望んでいませんでした。そこで仮想ファイルシステムのドライバに関して、Gitの“内部”をできる限り詳細に調査することにしたのです。
3ヶ月以上の時間をかけることで、Microsoftは、Windowsチーム全体をSource DepotからVS Team ServicesのホストするGitに移行させた。移行は成功し、世界最大のGitリポジトリとなった、とHarry氏は述べている。当初発生したいくつかのパフォーマンス上の問題は、チューニングを行なうことで解決した。関係する開発者を対処とした内部調査では、70%以上がGitについて“非常に満足”あるいは“やや満足”と回答している。
MicrosoftはGVFSをオープンソースとして公開し、関心のある企業に対してその利用とコントリビューションを求めると同時に、非常に大規模なGitリポジトリを実現可能なソリューションとして推奨している。
この記事を評価
- 編集者評
- 編集長アクション