Project.json への変更

 

本記事は、マイクロソフト本社の .NET Blog の記事を抄訳したものです。【元記事】 Changes to Project.json 2016/5/23

 

今回は Scott Hunter の記事をご紹介します。

先日、.NET Core および ASP.NET の RC2 と RTM の今後のスケジュール (英語) を発表しました。そして今回その RC2 がリリースされました。ここでは .NET Core のツールを .xproj/project.json から .csproj/MSBuild に移行する点についてさらに詳しい情報をお伝えします。

 

MSBuild

ASP.NET チームが ASP.NET 5 (現在は ASP.NET Core) の開発するにあたって目標としたのは、Windows、Mac、Linux での作成や開発をさらに容易にできるようにすることでした。このため .xproj/project.json を基盤とするシステムは、この目標に従って作成されました。以下はその主な成果の一部です。

  • プロジェクト ファイルのファイル リストが不要に
  • IDE を使用しなくても、プロジェクト定義が簡単に変更可能に
  • プロジェクトから Nuget パッケージを直接生成可能に
  • 複数のターゲット フレームワークにプロジェクトをクロス コンパイル可能に
  • プロジェクトのソースを使用して、簡単にパッケージのリファレンスの切り替えが可能に

プロジェクトが進むにつれ、.NET Core の役割は以下のように広がりました。

  • .NET Core がユニバーサル Windows アプリケーション (UWP) のプラットフォームに
  • .NET Core がコンソールおよびクラス ライブラリの構築に使用する新しいクロス プラットフォーム ツール チェーンに進化
  • マイクロソフトが Xamarin を買収したことで、.NET 開発者が iOS アプリや Android アプリを構築できるように

これらのことは project.json にどのような影響を与えるのでしょうか? 「プラットフォームとしての .NET」の主要原則の 1 つに、開発者がすべての .NET アプリケーション モデル (WinForms、WPF、UWP、ASP.NET、iOS、Android など) でコードを共有できるようにする、というものがあります。これにはさまざまな問題があり、project.json は Web アプリケーションやクラス ライブラリの構築に非常に適していながら、他のアプリケーションモデルとの統合は実現されませんでした。

これを解決するには 2 つの選択肢がありました。1 つは、すべての .NET プロジェクトで project.json を使用するという方法です。これには Visual Studio、Xamarin、パートナー様の Unity などあらゆる種類のプロジェクトに関連するツールを対応させる必要があります。この場合、それぞれのプロジェクトで必要なシナリオをすべて構築し移行できるように project.json を拡張する必要があります。もう 1 つの方法は、ブリッジを構築して、Visual Studio や Xamarin Studio で .xproj project から .csproj プロジェクトへの参照と .csproj プロジェクトから .xproj プロジェクトへの参照を可能にする方法です。このブリッジの構築も簡単ではなく、たとえば今ユーザーがプロジェクトを構築するとしたら .xproj または .csproj を選択する必要があり、選択肢が増えると同時に複雑さも増します。

この 2 つの選択肢を検討したところ、.NET Core プロジェクトを .csproj/MSBuild に移行してすべての .NET プロジェクトで同一のツールとビルド システムを使用するほうが容易であることがわかりました。

しかし同時に project.json のメリットも維持したいため、これによって失われる機能を以下のように .csproj を強化することサポートすることを計画しています。

  • プロジェクト システムのファイル リストを不要に
  • プロジェクト ファイルでのあらゆる操作を CLI ツールで行い、ほとんどのシナリオでファイルの編集を不要に
  • プロジェクトからパッケージを直接ビルド可能に
  • 複数のターゲットに対応

また、すべての .NET で同じツールを使用するため、MSBuild も強化されます。マイクロソフトでは、余分なファイルを生成するようなツールをなくすことを目標に、XML ではなく JSON をサポートしているコミュニティやユーザーの皆様からフィードバックをいただきたいと考えております。すべての環境で同じツールを使用すれば、あらゆる .NET プロジェクトでこの機能強化のメリットを得ることができます。

この変更はまず Visual Studio “15” RTM で実施されます。Visual Studio で任意の .NET Core プロジェクトを開くと .xproj から .csproj に自動的に変換され、アセットが project.json ファイルから構成ファイルと .csproj ファイルに移動されます。また、.NET コマンド ライン ツールを使用する変換アプリケーション用のツールも提供されます。

その次の段階は Visual Studio “15” のリリース後に実施され、プロジェクトやビルド エクスペリエンスがさらに改良される予定です。

 

オープンソースによる開発

.NET Core と ASP.NET Core は、完全オープン ソースで開発された初の .NET プロジェクトです。これまでは製品テストを社内チームが行っていたため、すべての変更が公開されることはありませんでした。マイクロソフトは透明性とのバランスについて、GitHub やコミュニティ、このブログなどのさまざまな場所で検討を行っています。今後大きな動きがあった場合は、最初にこのブログでお伝えしたいと考えています。

 

今後の展望

次回のブログ記事では、.NET プロジェクト全体で容易にコードを共有できるようにする .NET Standard についてお伝えします。

Scott Hunter (.NET チーム)