MSBuild ベースの .NET Core Tools の「アルファ版」を発表

本記事は、マイクロソフト本社の .NET Blog の記事を抄訳したものです。【元記事】 Announcing .NET Core Tools MSBuild “alpha” 2016/11/16

 

マイクロソフトはこのたび、新しい MSBuild ベースの .NET Core Tools (英語) の最初の「アルファ版」リリースを発表しました。この .NET Core Tools は、Visual Studio 2017 RCVisual Studio for Mac (英語)Visual Studio Code (英語)、コマンド ラインでお試しいただけます。また、.NET Core 1.0 (英語).NET Core 1.1 (英語) の両方のランタイムで利用できます。

.NET Core と ASP.NET Core の開発を始めたときに重視したのは、Windows、Mac、Linux のいずれでも動作し、Visual Studio 以外のエディターでも機能するプロジェクト システムを構築することでした。新しいプロジェクト形式 project.json はそのために作成されました。一方、お客様からは新しい project.json モデルは気に入っているものの、そのプロジェクトを既存の .NET コードでも利用できるようにしたいというご意見もいただきました。これを実現するために現在マイクロソフトでは、既存の .NET プロジェクトと相互運用できるように .NET Core を .csproj/MSBuild ベースに変更し、project.json の優れた機能を .csproj/MSBuild に移行する取り組みを行っています。

Windows、macOS、Linux での .NET Core 開発に利用できるエクスペリエンスは現時点で 4 つあります。

お気づきかと思いますが、Visual Studio ファミリに新しく加わった、Mac 専用の製品があります。この Visual Studio for Mac は、Xamarin および .NET Core プロジェクトをサポートするもので、現在はプレビュー版です。Visual Studio for Mac での .NET Core の使用方法の詳細については本記事の「Visual Studio for Mac」セクションをご覧ください。

新しい MSBuild ベースの .NET Core Tools プレビューは、こちらから (英語) ダウンロードできます。また、新しいエクスペリエンスの詳細については .NET Core のドキュメントをご覧ください。

概要

最近投稿されたブログ記事 (英語) をご覧になっていれば、新しい Preview 3 リリースで MSBuild ビルド システムと csproj プロジェクト形式がサポートされるようになったことをご存知でしょう。マイクロソフトでは以下の理由から、.NET Core に MSBuild を取り入れることにしました。

  • .NET ツール エコシステムの一貫性確保 – MSBuild は、.NET ツール エコシステムの重要なコンポーネントです。MSBuild 向けのツール、スクリプト、Visual Studio 拡張機能は、.NET Core で機能するように拡張されるべきです。
  • プロジェクト間参照の実現 – MSBuild を利用すると、複数の .NET プロジェクト間でのプロジェクト間参照が可能になります。他の .NET プロジェクトではすべて MSBuild が使用されるため、.NET Core も MSBuild に切り替えることで、たとえば、.NET Core プロジェクトからポータブル クラス ライブラリ (PCL) を参照したり、.NET Framework プロジェクトから .NET Standard ライブラリを参照したりすることができます。
  • 実証済みのスケーラビリティ – MSBuild は、大規模なプロジェクトをビルドできることが実証されています。.NET Core の採用が広がるにつれて、だれもが信頼できるビルド システムを用意することが重要になります。MSBuild に変更することで、.NET Core だけでなく、すべての種類のプロジェクトにおけるエクスペリエンスが向上します。

project.json から csproj への移行は重要な変更であり、これについては多くのご意見をいただいていました。まず、変更のない点について説明します。

  • プロジェクト ファイルは 1 つ – 依存関係やターゲット フレームワークの情報はすべて 1 つのプロジェクト ファイルに格納されます。既定ではソース ファイルを指定する必要はありません。
  • ターゲットと依存関係 – .NET Core のターゲット フレームワークとメタパッケージの依存関係に変更はなく、新しい csproj 形式でも同様の方法で宣言されます。
  • .NET Core CLI Toolsdotnet ツールでは引き続き同じコマンド (dotnet builddotnet run など) が提供されます。
  • .NET Core テンプレート – 引き続き dotnet new でテンプレートを利用できます (例: dotnet new -t library)。
  • 複数のバージョンの .NET Core をサポート – 新しいツールは、.NET Core 1.0 と .NET Core 1.1 のどちらを対象とする場合も利用できます。なおこのツール自体は、既定では .NET Core 1.0 上で実行されます。

多くの皆様が既に .NET Core と、既存の project.json のプロジェクト形式およびビルド システムを採用しています。そして、私たちも同様です。そこで、project.json プロジェクト ファイルを csproj に移行するための移行ツールを作成しました。私たちのプロジェクトで利用した限りでは、問題なく移行できています。この移行ツールは Visual Studio と Visual Studio for Mac に組み込まれています。また、コマンド ライン (dotnet migrate コマンド) でも利用可能です。マイクロソフトでは皆様のご意見を基に移行ツールを引き続き改良し、最終リリースまでには大きな規模で実行できるようにする予定です。

今回、MSBuild と csproj プロジェクト形式を使用するように .NET Core を変更したことで、.NET Core の改善点を他の種類のプロジェクトに広げることも可能になりました。マイクロソフトでは特に他の種類の .NET プロジェクトについても、csproj 形式でのパッケージ参照に標準化しようと考えています。

ここからは、サポート対象の 4 つのエクスペリエンスそれぞれにおける .NET Core のサポートについて説明します。

Visual Studio 2017 RC

Visual Studio 2017 RC には、新しい .NET Core Tools のサポートが「Preview」ワークロードとして含まれています。Visual Studio 2015 のエクスペリエンスと比較して、以下の点が改善されています。

  • プロジェクト間参照が機能するようになりました。
  • プロジェクト参照と NuGet 参照が共に csproj で同様に宣言されます。
  • プロジェクトを開いている間に、csproj プロジェクト ファイルを手動で編集できます。

インストール

Visual Studio 2017 は Visual Studio のサイトからインストールできます。

Visual Studio 2017 RC に .NET Core Tools をインストールするには、下図のように、[Web and Cloud] ワークロードの下にある [.NET Core and Docker (Preview)] を選択します。なお、Visual Studio のインストール プロセス全体が変更されています。その詳細については、Visual Studio 2017 RC に関するブログ記事をご覧ください。

.NET Core workload

プロジェクトの新規作成

.NET Core のプロジェクト テンプレートは、Visual Studio の [.NET Core] プロジェクト ノードから利用できます。馴染みのある一連のプロジェクトが表示されます。

.NET Core templates

プロジェクト間参照

.NET Standard プロジェクトを、.NET Framework、Xamarin、UWP の各プロジェクトから参照できるようになりました。下図は、1 つの .NET Standard ライブラリを 2 つのアプリ プロジェクトで利用しています。 project to project references

NuGet パッケージ参照の管理

馴染みのある NuGet パッケージ マネージャーで NuGet パッケージ参照を管理できます。下図では、プロジェクトに Newtonsoft.Json パッケージが追加されています。

パッケージ参照は csproj プロジェクト ファイルに追加されます。プロジェクト ファイルを詳しく調べる必要はありませんが、必要ならプロジェクト ファイルを編集してパッケージ参照を追加または削除することも可能です。Visual Studio のソリューション エクスプローラーには変更内容が適切に反映されます。

csproj ファイルの編集

プロジェクトを開いている間に、IntelliSense を使用して csproj ファイルを編集できるようになりました。マイクロソフトでは、このような操作を日常的に行うのはごく一部の開発者だけだと考えていますが、それでもこれは重要な改善点といえます。また、NuGet 参照とプロジェクト参照の類似性を表示できる便利な機能もあります。

Editing csproj files

動的なプロジェクト システム

新しい csproj 形式のプロジェクトには、既定ですべてのソース ファイルが追加されます。.cs ファイルをいちいち指定する必要はありません。実際にこの動作を確認するには、Visual Studio の外部からプロジェクト ディレクトリに .cs ファイルを追加します。1 秒以内に、この .cs ファイルがソリューション エクスプローラーに追加されるはずです。

プロジェクト ファイルの内容を最小限に抑えると、読みやすさをはじめとする多くのメリットが得られます。カテゴリ全体にわたる変更や、従来それに伴って発生していたマージ競合が減るため、ソース管理にも有効です。

project.json プロジェクトを開き、アップグレードする

Visual Studio 2017 で project.json ベースの xproj プロジェクトを開くと、そのプロジェクトを csproj にアップグレードするように促すメッセージが表示されます。下図がそのメッセージです。この移行は一方向のみであり、ソース管理機能やバックアップを利用する以外に、project.json に戻す方法はありません。

.NET Core migration

Visual Studio for Mac

Visual Studio for Mac は Visual Studio ファミリに新しく加わった製品であり、Mac でのクロス プラットフォームのモバイルおよびクラウド開発に特化しています。この製品では、.NET Core および Xamarin プロジェクトがサポートされます。実際、Visual Studio for Mac は Xamarin Studio を発展させたものです。

Visual Studio for Mac は、Visual Studio 2017 RC に関して上述した内容によく似た .NET Core 開発の実現を目的としています。マイクロソフトでは、.NET Core Tools、Visual Studio for Mac、Visual Studio 2017 の来年のリリースが近づく中で、引き続き両方のエクスペリエンスを向上させてまいります。

インストール

Visual Studio for Mac は Visual Studio のサイト (英語) からインストールできます。.NET Core および ASP.NET Core プロジェクトがサポートされています。

プロジェクトの新規作成

.NET Core のプロジェクト テンプレートは、Visual Studio の [.NET Core] プロジェクト ノードから利用できます。馴染みのある一連のプロジェクトが表示されます。

.NET Core templates

下図は、新しい ASP.NET Core プロジェクトの例です。

ASP.NET Core New Project

その他のエクスペリエンス

Visual Studio for Mac では、xproj の移行はまだサポートされていません。この機能は、リリースまでに追加される予定です。

Visual Studio for Mac では、プロジェクトが読み込まれている間の csproj ファイルの編集が既にサポートされています。csproj ファイルを開くには、プロジェクト ファイルを右クリックし、[Tools]、[Edit File] の順に選択します。

Visual Studio Code

Visual Studio Code の C# 拡張機能も、新しい .NET Core Tools リリースをサポートするように更新されました。現時点では、プロジェクトのビルドとデバッグをサポートしています。拡張機能のコマンド (コマンド パレット内) はまだ更新されていません。

インストール

VS Code は visualstudio.com (英語) からインストールできます。.NET Core のサポートは、C# 拡張機能をインストールすることで追加できます。インストールするには、[Extensions] タブを使用するか、C# ファイルを開いたときにメッセージが表示されるのを待ちます。

.NET Core プロジェクトのデバッグ

csproj の .NET Core プロジェクトをビルドおよびデバッグできます。

VS Code Debugging アプリケーションをデバッグする際、VS Code によって launch.json と task.json が作成されます。launch.json はアプリケーションを設定するたびに更新する必要があります。例として launch.json gist を作成しましたのでご確認ください。

.NET Core CLI Tools

.NET Core CLI Tools (英語) も更新されています。(Visual Studio と同様に) MSBuild ベースとなり、csproj プロジェクト ファイルを使用するようになりました。以前に project.json ファイルの処理に使用されていたロジックはすべて削除されました。CLI ツールは (実装の観点からすると) はるかにシンプルになり、MSBuild に大きく重心を移していますが、その有用性や必要性は変わっていません。

マイクロソフトが CLI ツールを更新するためのプロジェクトを立ち上げたとき、CLI ツールの存在意義を考慮する必要がありました。特に、MSBuild 自体が独自のコマンド ライン構文、エコシステム、歴史を持つコマンドライン ツールであるためです。その結果、シンプルかつ直観的なツールを提供することで、.NET Core (およびその他の .NET プラットフォーム) の導入を容易にし、MSBuild ベースのツールと MSBuild ベースではないツールの両方に対応した統合インターフェイスを利用できるようにすることが重要だという結論に達しました。将来のリリースで .NET Core Tools の拡張性に重点が移るにつれて、このビジョンの価値が高まっていくことでしょう。

インストール

新しい .NET Core Tools をインストールするには、.NET Core SDK の Preview 3 (英語) をインストールします。この SDK には .NET Core 1.0 が付属しています。また、別途インストールできる .NET Core 1.1 と共に使用することも可能です。

VS の外部で project.json ベースの開発を行っている場合は、MSI/PKG ではなく zip ファイルからインストールすることを推奨します。

複数バージョンの共存

新しい SDK をインストールすると、dotnet コマンドの既定の動作が変わります。つまり、MSBuild を使用し、project.json ではなく csproj プロジェクトを処理するようになります。同様に、dotnet new を実行すると csproj プロジェクト ファイルが作成されます。

プロジェクト単位で以前の project.json ベースのツールを使用し続けるには、プロジェクト ディレクトリ内に global.json ファイルを作成し、このファイルに “sdk” プロパティを追加します。次の例は、project.json ベースのツールを dotnet で強制的に使用するようにするための global.json です。

テンプレート

dotnet new コマンドを使用すると、新しいプロジェクトを作成できます。このコマンドは引き続き、-t 引数によってプロジェクトの複数の種類をサポートします (例: dotnet new -t lib)。サポートされるすべてのテンプレートは次のとおりです。

  • console
  • web
  • lib
  • xunittest

マイクロソフトでは、今後一連のテンプレートを拡張していくと共に、コミュニティの皆様がテンプレートを拡張しやすいようにする予定です。具体的には、dotnet new で完全なサンプルを取得できるようにしたいと考えています。

project.json プロジェクトのアップグレード

dotnet migrate コマンドを使用すると、project.json プロジェクトを csproj 形式に移行できます。またこのコマンドは、project.json ファイル内に存在するプロジェクト間参照も自動的に移行します。詳細については、dotnet migrate コマンドのドキュメント (英語) を参照してください。

以下は、project.json から csproj に移行した後に得られる既定のプロジェクト ファイルの例です。マイクロソフトでは引き続き csproj 形式を簡素化し、そのサイズを減らすための手段を探っているところです。

他の種類のプロジェクトについては、既存の .NET csproj ファイルには GUID とファイル参照が含まれています。これらは .NET Core csproj プロジェクト ファイルから (意図的に) 省かれています。

プロジェクト参照の追加

csproj にプロジェクト参照を追加するには、<ItemGroup> 要素の内側に <ProjectReference> 要素を配置します。以下はその例です。

 <ItemGroup>
  <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" />
</ItemGroup>

この操作の後、dotnet restore を実行して「アセット ファイル」(project.lock.json ファイルの代替となるファイル) を生成する必要もあります。

NuGet 参照の追加

マイクロソフトでは、csproj の全体的なエクスペリエンスに対してもう 1 つの改良を行いました。それが、NuGet パッケージの情報を csproj ファイルに組み込む機能です。これは、新しい <PackageReference> 要素を使用して行います。以下はその例です。

 <PackageReference Include="Newtonsoft.Json">
  <Version>9.0.1</Version>
</PackageReference>

.NET Core 1.1 を使用するようにプロジェクトをアップグレード

dotnet new コマンドを実行すると、.NET Core 1.0 を使用するプロジェクトが作成されます。下記の例のように、.NET Core 1.1 を使用するようにプロジェクト ファイルを更新することもできます。

上記のプロジェクト ファイルは、以下の 2 点が更新されています。

  • ターゲット フレームワークを netcoreapp1.0 から netcoreapp1.1 へと更新
  • Microsoft.NETCore.App のバージョンを ‘1.0.1’ から ‘1.1.0’ へと更新

運用環境のアプリへの対応

マイクロソフトは 6 月に、.NET Core 1.0 と、project.json ベースの .NET Core Tools をリリースしました。開発者の多くがアプリをビルドする PC 上や、運用環境でのサーバー/クラウド上でこのリリースを日常的に利用していることと思います。このたびリリースした .NET Core 1.1 も、同じようにご利用いただけます。

ただし、今回の .NET Core Tools のリリースはアルファ版とされており、運用環境での使用は推奨されていません。運用環境での利用には、Visual Studio 2015 を含め、既存の project.json ベースの .NET Core Tools (Preview 2) を使用することが推奨されます。

新しい MSBuild ベースの .NET Core Tools をリリース時には、プロジェクトを Visual Studio 2017 および Visual Studio for Mac で開いて、すばやく移行できるようになる予定です。

現時点では、サンプル プロジェクトまたはソース管理を行っているプロジェクトを使用して、今回リリースした Tools のアルファ リリースや Visual Studio 2017 RC の .NET Core Tools の「Preview」ワークロードをお試しください。

まとめ

ぜひ新しい .NET Core Tools リリースをお試しいただき、ご意見をお寄せください。新しい csproj/MSBuild のサポートは、Visual Studio 2017 RC、Visual Studio for Mac、Visual Studio Code、コマンド ラインでお試しいただけます。Windows、macOS、Linux における .NET Core 開発のための優れた手段をご活用ください。

この記事をまとめると、最も大きな変更点は以下のようになります。

  • .NET Core の csproj のサポートがアルファ リリースとして利用可能になりました。
  • .NET Core が Visual Studio 2017 RC および Visual Studio for Mac に組み込まれました。Visual Studio Code には、C# 拡張機能を通じて追加できます。
  • .NET Core Tools のベースとなるテクノロジが、他の .NET プロジェクトと同じものになりました。

project.json と csproj についてご意見をお寄せくださった皆様には、改めてお礼を申し上げます。引き続き皆様のご意見をお待ちしておりますので、新しいリリースをぜひお試しください。