.NET Core がオープン ソースに


 

本記事は、マイクロソフト本社の .NET Blog の記事を抄訳したものです。
【元記事】 .NET Core is Open Source 2014/11/12 7:39 AM

投稿者: Immo Landwerth [MSFT]、投稿日: 2014 年 11 月 12 日 午前 7 時 39 分

本日、.NET にとって重大な発表がありました。マイクロソフトはランタイムおよび Framework のライブラリを含む .NET Core (英語) 全体をオープン ソース化することを発表しました。

今回の発表は、既に実施された以下のマネージ コンパイラ (C#、VB、F#) と ASP.NET のオープン ソース化という流れに沿って決定されたものです。

· C# および Visual Basic ("Roslyn") (英語)

· Visual F# ツール (英語)

· ASP.NET 5 (英語)

· Entity Framework (英語)

これにより、.NET ランタイムおよび .NET Core Framework が拡張され、.NET が次なる段階へと引き上げられることになります。

 

.NET Core とは

.NET Core とはモジュール化された開発スタックで、今後すべての .NET プラットフォームの基盤となるものです。ASPNET Core 5 および NET Native では既に利用が開始されています。今回の記事では、.NET Core の詳細、および .NET Framework との関係について説明します。

clip_image002

 

マイクロソフトが .NET Core をオープン ソース化する理由

マイクロソフトが .NET Core をオープン ソース化する理由は、主に次の 2 つです。

  1. クロス プラットフォームの .NET の基盤を築く
  2. より強力なエコシステムを構築し、活用する

ここからはこれらの詳細についてご説明しましょう。

 

クロス プラットフォームの .NET の基盤を築く

.NET ではこれまで Windows でのみコードのビルドと実行が可能でしたが、今後は Linux、MacOS、iOS、Android でもそれが可能になります。

これまで問題になっていたのは、Windows への実装と Mono への実装では、コード ベースがまったく異なることでした。オープン ソースの実装はこれまで不可であったため、Mono コミュニティでは必然的に .NET を再実装する必要がありました。Rotor のリリース以降、ソース コードは使用可能でしたが、OSI に承認されているオープンソース ライセンスを使用していなかったため、Rotor (英語) はその第一歩とはなりませんでした。お客様からは多数の不具合をご報告いただきましたが、双方が互いのコードを見ることができないため、修正は困難でした。この結果、プラットフォーム特有のものではない部分で、多くの重複作業が発生しました。その最近の例としては、Immutable Collections (英語) が挙げられます。

これらのことから、クロス プラットフォームのスタックを開発するには、共同で単一のスタックを開発することが最も理にかなっているといえます。また、これを推進するためには、オープン ソース化が欠かせないと判断しました。

 

より強力なエコシステムを構築し、活用する

開発チームでは、ここ 2 年ほど NuGet を通じてよりアジャイルな開発サイクルを模索してきました。そして、早期かつ頻繁にリリースし、お客様から多くのフィードバックをいただくことによって、私たちは大きな成功を収めることができました。

そう考えると、すべての変更がすぐに公開され (理論的には) すぐに活用できるオープン ソースは、アジャイルな開発の究極的な形であるといえます。私のチーム メンバーの多くは Twitter や Stack Overflow を利用して、ユーザーとコミュニケーションを図っています。私もこれまでに、特定のユーザーにマイクロソフトのシステムの実装に関する内部文書を示してもらったり、問題をどのように修正したのか説明をお願いしたいと思ったことが何度もありました。

スタックをオープン ソース化することには、私たちにとってユーザーとリアルタイムにかかわることができるという大きなメリットがあります。もちろん、すべてのユーザーが私たちと緊密に協力することを望んでいるわけではありませんが、中にはフィードバックを早い段階から頻繁に返して、スタックの改良にご協力くださる方もいらっしゃいます。

これは車の運転と同じで、少ない頻度で極端にハンドルを切るよりも、ハンドルの向きを頻繁に微調整するほうが効率がよく、リスクも少なくて済みます。

 

GitHub を選んだ理由

マイクロソフトは .NET Core を GitHub でホストすることにしました。これは、GitHub でコードを公開すると高いパフォーマンスが得られるという Phil Haack の意見を採用してのことです。

clip_image004

というのはちょっとした冗談ですが。

マイクロソフトは原則として、コミュニティの皆様が私たちの基準に合わせるのではなく、私たちがコミュニティの皆様の基準に合わせることにしています。他の多くのプロジェクトでいただいたフィードバックを拝見した結果、.NET のコミュニティの主流は GitHub であると判断しました。

疑いをお持ちの方もいらっしゃると思いますので、これを確認するために、[one of my personal open source] プロジェクトを CodePlex から GitHub に移動するという実験を行いました。その結果、CodePlex でホストしていた 2 年間にはプル リクエストが 1 件しかありませんでしたが、GitHub に移動してから 5 日間で 3 件のプル リクエストがあり、他に 2 人の協力者も得られました。その後、3 か月間で 16 件のプル リクエストがあり、そのうちの多くではかなりの機能が変更されていました (早期にいただいたプル リクエストのうちの 1 つはユニット テストの追加に関するもので、非常に有用でした)。これはサンプルの規模としては明らかに不足していますが、ユーザーからの反響は非常に大きいものでした。

結果、私たちがコミュニティの基準に合わせるために、.NET Core (英語) を GitHub でホストすることを決定しました。なお、既に 1 か月前からサンプルを GitHub で公開しています (英語)

 

オープンな環境での開発

私のチームはこれまでにも MEF (英語) などでオープン ソースの経験がありますが、正直なところ、これはあまり実りあるものではありませんでした。その最も大きな原因は、コミュニティの協力が欠けていたことでした。チームではソースコードの提供は行っていましたが、その周囲にコミュニティを築く努力を怠っていました。私たちは、あらゆるオープン ソース プロジェクトを成功させるためには、コミュニティを築くことが非常に重要であると考えています。また、コミュニティを築くためには、開発をオープンな環境で行うことが不可欠であるとも考えています。

これを実行するために、私たちはオープンな環境での開発の進め方について計画を開示し、解決すべき課題について明らかにしていきます。これについて詳しくご説明しましょう。

まず、 MEF のときに行っていた「コード ボム」の手法をやめました。コード ボムとは基本的に、チームが実際に作業をしている内部システムから、公開されているソース コードをほぼ定期的に更新することです。この手法には 2 つの問題がありました。1 つは、時間差があることによりすべての参加者が同じソースを見ることができないため、公開の場での議論が難しいことです。もう 1 つは、内部の履歴がすぐに失われるというもので、これは大きな問題でした。自動同期機能は一定の役割を果たしましたが、これは Git を開発しなおしたもののようでした。

このため、コード ボムの手法を取るのではなく、開発環境を整えて、公開されている GitHub リポジトリをシステムの中心とすることにしました。これで、コードが変更されるとすぐに公開されるようにしました。その他にも下記の点を変更しました。

  • コード レビュー: GitHub のプル リクエスト モデル (英語) により、チームが実施するすべてのコード レビューを公開します。
  • 設計関連のドキュメントと議論: 設計ノートや仕様、および実装関連のドキュメントも共有します。マイクロソフトでは、使用しているフォーマットを明確に示す必要があると考えており、少なくとも Mad の C# 設計ノート (英語) と同様の Markdown に準拠するドキュメントを公開する予定です。他に、設計会議を録画し、Channel 9 (英語) で共有することも検討していて、ある程度定期的に実施できるようにしたいと考えています。

バグの追跡には、主に GitHub の Issue 機能の使用を予定していますが、UserVoice や Connect、マイクロソフト内部の TFS など、他のソースを使用する場合も考えられます。これには、次の方針を取る予定です。

  • UserVoice: UserVoice には優れた投票システムがあり、このシステムは大規模なコストがかかる可能性がある取り組みの項目の優先度を決定するのに役立ちます。このため、大規模な機能や基礎的な技術革新に関する議論では UserVoice が最適な選択肢となります。
  • Connect: Connect は主に企業ユーザーと企業向け製品のサポートに使用されます。そのためこの場合は Connect を引き続き使用する可能性が高いですが、.NET Core のバグのファイリングには推奨しません。
  • 社内用 TFS: .NET Core の TF のバージョン管理では既に使用していませんが、DevDiv 部門の大部分では現在も使用しています。グループ間で共同して作業を進めるために、今後も TFS でのバグのファイリングを許可する予定です。開発チームでは、これらのバグをどのように公開するかを模索しており、その方法の 1 つとして自動ミラーリング システムの構築を検討しています。

UserVoice と Connect については、チーム メンバーが UserVoice および Connect での議論をクローズして GitHub の Issue にファイリングした後、ワークフローが公開される予定です。

 

成果物の採用

皆様からご提供いただいた成果物は、他のオープン ソース プロジェクトと同様に、審査のうえ採用の可否を決定します。お送りいただいたプルリクエストは、次の条件に基づいて審査されます。

  • ロードマップ: プロジェクトではそれぞれ、特定の分野に的を絞って集中的に作業が進められます。プロジェクトの目的と勢いをそのまま維持するためには、作業の大部分を製品のロードマップに沿って進めることが重要です。
  • 品質: 開発チームは高品質のコードを配信する責任があります。このため、外部の協力者にもマイクロソフトの従業員と同等の品質基準を満たしていただく必要があります。これには、適切な設計、アーキテクチャ、十分な範囲のテスト、およびコードのスタイルへの準拠などが含まれます。

マイクロソフトは、開発をオープンに行うことで、外部の開発者が満足する十分な情報を提供することが可能になると考えています。このため、マイクロソフトのコードレビューや内部の設計に関するドキュメントなどの公開を予定しており、ロードマップも同様に公開する予定です。

通常、何にご協力いただくかを早期に連絡していただくことで、後になって想定外の事態が起きることを防止できます。たとえば、ドキュメントの置き場所や協力者の手法はマイクロソフトがご提示することができます。また、GitHub の Issues の内容を Up For Grabs (英語) としてマーキングしておき、その作業項目を協力者の方に支援していただくことも検討しています。

通常、協力者の皆様による作業は GitHub のプル リクエスト モデル (英語) を使用して実施していただきます。つまり、プロジェクトに参加する場合はトピックのブランチ内で作業し、マスター ブランチにプル リクエストを送信します。マイクロソフトが実施するコードレビューでもこれと同じモデルを使用します。

プロジェクトにご協力いただくには、事前に Contributor License Agreement (CLA、英語) を結んでいただく必要があります。開発チームでは現在ツール関連の作業を進めていますが、これは Azure の CLA プロセス (英語) と類似のものになる予定です。

 

自分の環境でビルドし、実行する

マイクロソフトのコードを試したり、変更のテストを実施する場合、自分のバージョンのライブラリをビルドして実行する必要があります。これは、次の手順で簡単に実行できます。

  • リポジトリのクローンを作成する (git clone https://github.com/dotnet/corefx)
  • build.cmd を呼び出す

ビルドで必要なものは、Visual Studio 2013 のみです (“Dev14” は不要)。これですべてのライブラリをビルドし、ユニット テストを実施できます。

過去に経験した課題の 1 つに、命名規則が厳密であるためにバイナリを既存のプロジェクトに簡単に落としこみにくいというものがありました。この問題は、オープン ソースの署名を呼び出すことができる厳密な名前のバイナリを提供することで解決しました。詳細については開発者ガイドを参照してください。

 

.NET Foundation

.NET Core プロジェクトは、.NET Foundation (英語) の管理のもとで進められます。このことは、.NET Core スタックを推進し進歩させるうえで重要であると考えています。マイクロソフトは、クロスプラットフォームで .NET Core を実装するための共有コードの基礎の作成で、Xamarin および Mono に携わる Miguel de Icaza 氏 (英語) と緊密に協力しています。

現在はこのライブラリの一部のみが GitHub で公開されています。

現在作業を進めている分野は、次のとおりです。

  • ライブラリの拡充: 現在公開中の分は、今後追加されるものの頭金のようなものとお考えください。Build 2015 までに .NET Core のライブラリ スタック全体をオープン ソース化することを目標に作業を進めています。
  • Windows プラットフォーム以外でのビルドと実行: 現時点では、ビルドと実行は Windows のみでしかできませんが、開発チームと Mono コミュニティとの間で公開の作業グループを作成し、ここでコードを開発することを検討しています。
  • .NET コア ランタイム (CoreCLR): 現在、ランタイムのオープン ソース化の計画を策定しています。引き続きご注目ください。

 

まとめ

新しい .NET Core スタックは、GitHub で完全にオープン ソース化されます。開発チームでは既に一部のライブラリで技術的な変更を行い、.NET Core Framework リポジトリ (英語) で公開しています。これから Build 2015 までの間、そちらで進捗具合をご覧いただけます。皆様からのプル リクエストもお待ちしております。

ご意見などがございましたら、お気軽に .NET Foundation のフォーラム (英語) までお寄せください。

Comments (0)

Skip to main content