.NET インフラストラクチャ チームが整合性に投資してオープンソースのイノベーションを加速

GitHub リポジトリの共有ツールと単一の共有 CI システムによって、開発者の生産性を大幅に向上させる方法をご覧ください。

課題: オープンソース貢献者のコラボレーションの効率化

オープン開発とコラボレーションによるイノベーションの促進を目的に設立された独立団体である .NET Foundationは、.NET Core をはじめとする一連の大規模で複雑なオープンソース プロジェクトを支援しています。Microsoft .NET Engineering Services チームは .NET Core プロジェクトに貢献しており、世界中の貢献者が協力して作業することを可能にするインフラストラクチャの大部分を担当しています。

GitHub の多数のさまざまな Git リポジトリ、幅広いツール、プロジェクトで使用されている複数の異なる継続的インテグレーション (CI) システムにより、生産性を妨げる多くの混乱が生じていました。プロジェクトの規模が巨大であることから複雑さが増していました。たとえば、Roslyn (C# コンパイラ) リポジトリだけで、プル要求の 1 回のイテレーションで 600,000 回以上の自動テストが実行されます。週に 50 件以上の pull request があり、それぞれに複数のイテレーションがあるため、CI テストの数は数十億単位になります。CoreFx (ライブラリ) の場合、この数がさらに増えます。.NET Engineering Services チームは .NET Core 3.0 のリリースを予定していたため、より高い整合性を確立し、貢献者がプロジェクトの可能性を最大限に実現できるように、大きな変更を加えることにしました。

"A distributed repo structure and tooling makes it a lot harder for developers to move from one repo to another … And if it's this hard on Microsoft developers, how can we expect most individual contributors to figure it out?"

.NET Engineering Services、プリンシパル ソフトウェア エンジニア、Matt Mitchell

共有ツールと単一の CI システムによる生産性の向上

開発者がソフトウェア スタックのさまざまな部分間を簡単に移動できるように、.NET Engineering Services チームは、すべてのリポジトリを共通のディレクトリ構造、コマンド セット、ビルドおよびテスト ロジックの下に置くよう取り組みました。チームは、さまざまな CI システムの既存のすべてのワークフローを Azure Pipelines 内の単一のシステムに移動することで、生産性のさらなる障壁を排除しました。このシステムは完全に管理されているため、CI サーバー インフラストラクチャを管理する負担がなくなります。現在、チームは GitHub に格納されている YAML ファイルを使用して構成をコードとして実践しており、YAML パイプラインはあらゆる場所で使用されています。以前は一部のリポジトリで CI が順次実行されていたため、開発者はコードのイテレーション間で 2、3 時間待機することが必要な場合がありましたが、現在はすべての CI パイプラインが並列化され、より迅速なイテレーションが可能になりました。

"Now that we longer need to worry about the operational aspects of CI, we're free to focus on further improvements that will be felt by all—including Microsoft developers and individual contributors alike."

.NET Engineering Services、プリンシパル ソフトウェア エンジニア、Matt Mitchell

コラボレーションの向上が優れた製品を生み出す

今日、開発者は、これまで必要とされた専門知識がほとんどなくても、リポジトリ間の移動、バグの根本原因の特定、修正の提案とテストを簡単に行うことができます。GitHub でのこの効率化されたオープンソース コラボレーションにより、開発者が協力して高品質のソフトウェアを作成、テスト、ビルドし、出荷できるので、イノベーションをより迅速に実現できます。また、.NET Engineering Services チームはスタック全体にわたってインフラストラクチャの変更を行うことができるため、開発者がすべてのリポジトリでより迅速かつ効率的に利用できるツールの改善を実現できます。

チームの取り組みと意思決定について詳しく見ていきましょう。

物語を全部読む