投稿者: .NET チーム 投稿日: 2014 年 11 月 12 日 7:37 AM
本日は .NET にとって転機となる素晴らしい日です。マイクロソフトはこのたび .NET 2015 プレビュー版をリリースしました。現在 .NET をご利用いただいている 10 億超のユーザーの皆様に対する強いコミットメントを胸に、新たな旅立ちを迎えます。
本日の Connect(); (英語) イベントで Scott Guthrie (英語) と S. ‘Soma’ Somesegar (英語) が発表したとおり、.NET は新たな時代に突入しました。オープン ソース化を基本原則として、.NET アプリケーションが複数のオペレーティング システムで実行可能になるほか、.NET 2015 プレビュー版の一部として .NET Core 5 が提供されました。.NET Core 5 は完全なオー��ン ソース スタックで、複数のオペレーティング システムで実行できます。さらに、.NET Core 5 を .NET Foundation に提供し、コミュニティとのオープンなコラボレーションを通じて既存の .NET オープン ソース コミュニティ、中でも Mono コミュニティとの強い関係を構築していくことになりました。この記事では、Connect(); (英語) イベントで発表された以下の .NET のオープン ソース化とクロス プラットフォーム対応の詳細についてご紹介します。
.NET Core 5 は ASP.NET 5 用に最適化された小型ランタイムです。現在は Windows でのみ実行可能ですが、今後は Linux や Mac にも対応する予定であるため、マイクロソフトがサポートする ASP.NET 5 開発とデプロイメントに使用可能なオペレーティングシステムの選択肢が増えることになります。また、Azure が Linux と Windows の両方の仮想マシンで ASP.NET 5 をサポートし、要件に応じて自由に選択できるようになります。
既に発表内容をご存知で、すぐにでも最新のソフトウェアをダウンロードしたいという方や、マイクロソフトのオープンソース プロジェクトについてより詳しく知りたい方は、以下のリンクをご利用ください。
本リリースでは、今後数十年にわたって皆様に活用される .NET の基礎を築くために、多大な投資を行いました。マイクロソフトではこのリリース セットを「.NET 2015 プレビュー」と呼び、「2015」という名が付く一括リリースのもとで包括的なエクスペリエンスを提供すると共に、.NET テクノロジ ファミリーを統合しました。これにより、個々のリリースの説明をまとめてできるようにもなりました。
ここからは、以下のトピックについて詳しく取り上げていきたいと思います。
.NET オープン ソース
マイクロソフトはこれまでにも、ASP.NET (英語)、Roslyn (英語)、NuGet (英語)、Entity Framework (英語)、Azure (英語) といったさまざまな .NET 開発者向け製品をオープン ソース化してきました。今回、これに新たに .NET Core (英語) と .NET Framework リファレンス ソース (英語) が加わりました。
これから .NET Core のすべてをオープンにしていきますが、その手始めとして今回いくつかのライブラリを公開しました。数か月のうちに corefx (英語) リポジトリがいっぱいになり、coreclr リポジトリが登場すると考えられます。最新情報は、随時この .NET ブログでお知らせしていく予定です。
今回の一連の動きによって、社内では「もう後戻りできない」といったジョークが飛び交っていました。これは、今までマイクロソフト社内のインフラストラクチャで行ってきた .NET Core の開発が、今後は GitHub でしかできなくなってしまうという意味です。もちろん、私たちはそれを実現するために今取り組んでいるのであり、.NET エンジニアが他のエンジニアと同じツールを使用して開発できるようにしたいのです。コードのレビューにはプル リクエスト (PR) を、バグの追跡には GitHub Issues を、アイデアの投稿とディスカッションには .NET Foundation フォーラムを使用するつもりです。
マイクロソフトでは長年にわたって .NET Framework リファレンス ソース (英語) を提供していますが、GitHub での BCL リファレンス ソースの公開 (英語) は MIT ライセンスのもとで行います。
.NET Framework リファレンス ソースは大規模な優れた .NET ライブラリ コード ソースであり、.NET Core と Mono の向上に役立ちます。.NET リファレンス ソースについてはオープン ソース ライセンスを使用しますが、そのコードベースに対する PR には対応しません。このコードベースは非常に大規模で熟慮されたものであるため、互換性の制約に関するコンテキストや知識を十分に持たなければ更新するのは困難です。私たちは、.NET Core は、コミュニティによって取り組まれるのが最適なプロジェクトであると考えています。
.NET とオープン ソースに関する重要な質問とその回答を Q&A 形式でまとめましたので以下をご覧ください。この他にもご質問がある場合は、コメント欄にご記入いただけると幸いです。
.NET Core でマイクロソフトが使用しているオープン ソース ライセンスは何ですか。
MIT (英語) です。
MIT ライセンスのソフトウェアの特長と制約を教えてください。
MIT ライセンス (英語) で配布されたソフトウェアは「制限なし」で使用できることが規定されています。
コードはどこで入手できますか。
.NET Core (英語) のソース コードは .NET Foundation (英語) 内の GitHub から入手できます。その他のマイクロソフトの .NET オープン ソース プロジェクトは、dotnet の home リポジトリ (英語) にあります。
.NET チームは PR を受け付けていますか。
はい、受け付けています。.NET Core プロジェクトへの参加については、こちらのガイダンス (英語) を参照してください。
なぜすべてのコードを公開していないのですか。
.NET オープン ソースがコミットする重要な点の 1 つは、開発者のだれもがコードを作成し、テストし、実行できるようにするという点です。これを実現するためには、まずマイクロソフトにおいてエンジニアリングシステムが適切にセットアップされていることを確認する必要があります。
.NET Core を .NET Foundation に提供したとのことですが、そのことによってマイクロソフトのサポート体制に変化が生じますか。
.NET Foundation への .NET Core の提供は、マイクロソフトのオープンソースへのコミットメントの表明であり、これによってお客様とマイクロソフトの関係が変わることはありません。簡単に言えば、ソース コード リポジトリの場所を公共の場所に移して、自由なオープンソース ライセンスを導入しただけということであり、.NET はこれまでと同様、マイクロソフトがフルサポートします。
このオープン ソース プロジェクトは Mono プロジェクトにとってどんな意義がありますか。
マイクロソフトは Mono プロジェクトとの協力体制を強め、Mono 開発者に対して、.NET Core ソースの Mono への適用 (およびその逆の Mono ソースの .NET Core への適用) を推奨します。
.NET Foundation
マイクロソフトは今年、.NET エコシステム全体のさらなる革新を目指して .NET Foundation の発足 (英語) を発表しました。.NET Foundation はいくつかのプロジェクトと共にスタートしましたが、発足以来プロジェクトの数は増え続けています。今回、.NET Foundation に以下の新しいプロジェクト(英語) が加わりました。
.NET Core の追加は .NET Foundation にとって大きな転機といえます。これによって .NET Core と .NET Core 上で実行可能なその他すべてのプロジェクトが統合され、オープン ソース開発のための完全なスタックが実現します。他のプログラミングプラットフォームと同様に、.NET にも完全なオープン ソース スタックが誕生することになります。
また、.NET Foundation にフォーラムが開設され、.NET Core プロジェクト チームと Mono プロジェクト チームの両方にとって魅力的な議論の場となっています。今後このフォーラムで、設計や実行、戦略についての議論が活発に行われることが期待されます。Linux の .NET サポートに詳しい Miguel de Icaza 氏 (英語) による投稿もあるかもしれません。
.NET Core 5
.NET Core 5 が「クラウドに最適化された」 .NET として初めて発表 (英語) されたのは、4 月に開催された TechEd North America でのことでした。名称は、以前のものから、.NET Framework のコア機能を実装していること、またサイズを大幅に小さくしたことを考慮して「.NET Core」に変更しました。
.NET Core の特長は、デプロイメント、オープン ソース、クロスプラットフォームの 3 つです。.NET Core においてマイクロソフトが実現したかったのは、「どこにいても」使用でき、「いつでも」アップグレードできる、新しい .NET の提供です。.NET Core は、オンプレミス、Microsoft Azure、その他のクラウド プロバイダーでも使用でき、Windows、Linux、Mac のいずれにも対応しています。ビジネス ニーズに応じて、マシンで実行している他のアプリとは別にアプリを (.NET Core 自体も含めて) アップグレードできます。また、.NET Core に新しいシナリオや機能を追加する場合は、変更内容を GitHub の .NET Core (英語) に提供します。
.NET Core は .NET Framework ファミリーの一員といっても過言ではありません。たとえば、SIMD (英語) や Immutable Collections (英語) の NuGet パッケージは、設計上 .NET Framework と .NET Core のいずれにも対応しています。.NET Core がターゲットの場合も、開発作業はほとんど同じです。.NET Core には優れた特長がありますが、.NET Framework の進化版ととらえて問題ありません。そうした理由から、.NET Core のバージョン番号には、.NET Framework の最新バージョンである 4.6 の次にあたるバージョン 5 が割り当てられました。
ASP.NET 5 は .NET Core を採用した最初のワークロードで、.NET Framework と .NET Core のいずれでも実行可能です。ASP.NET 5 の最大の利点は、同じマシン上にある複数のバージョンの .NET Core 5 で実行できることです。たとえば、Web サイト A と Web サイト B を同じマシン上の 2 種類のバージョンの .NET Core で実行できるということです。もちろん、同じバージョンの .NET Core で実行することもでき、どちらを選ぶのも自由です。フットプリントが小さい .NET Core 固有のパフォーマンス上の利点もありますが、ASP.NET 5 のパフォーマンス上の利点の多くは .NET Framework と .NET Core のいずれにも適用されます。
.NET Core は大きくわけると 2 つのコンポーネントで構成されています。1 つは、.NET Framework CLR と同じコードベースから構築された小さなランタイムです。この .NET コア ランタイムには同じ GC と JIT (RyuJIT、英語) が含まれますが、アプリケーション ドメインやコード アクセス セキュリティなどの機能はありません。このランタイムは NuGet 経由で ASP.NET 5 コア パッケージの一部として提供されます。
もう 1 つのコンポーネントは、基本クラス ライブラリです。基本クラスライブラリのコードは .NET Framework クラス ライブラリのものと大部分は同じですが、小さなライブラリ セットを公開できるようにファクタリング (依存関係の解消) されています。基本クラス ライブラリは、System.*NuGet パッケージ (英語) として NuGet.org で提供されます。
GC や JIT、基本クラス ライブラリなどのコア コンポーネントを更新する際には、.NET Framework と .NET Core の両方にもこれらの強化点を実装する予定です。これらのコンポーネントのユース ケースは共に同じで、定期的な機能強化が必要な点も同様です。.NET Core NuGet ライブラリも同じで、最新バージョンの .NET Framework と .NET コア ランタイムで実行可能です。
.NET Framework 4.6
.NET Framework 4.6 は次期バージョンの .NET Framework です。重要な新機能や機能強化が含まれるなど大きな変化を遂げていることが明確に伝わるように、これまでの .NET Framework 4.5.3 から今回のプレビュー版にバージョンアップしました。このプレビュー版では、.NET Framework や Visual Studio のバージョン情報で「4.5.3」と表示される場合がありますのでご注意ください。これについては今後のリリースで更新する予定です。
.NET Framework 4.6 プレビュー版には優れた機能が多数用意されており、今日からでもすぐに使用を開始していただけます。新しい WPF 機能や RyuJIT のほか、Visual Studio の生産性機能をぜひご活用ください。
WPF の機能強化とロードマップ
WPF チームは本日 WPF プラットフォームのロードマップ (英語) を発表しました。そちらの記事では、今後の WPF リリースの投資領域や、.NET Framework 4.6 および Visual Studio 2015 の WPF プラットフォームの機能強化の進捗状況について説明しています。
今回のリリースにおける WPF の主な機能強化は以下のとおりです。
また、WPF チームはお客様からご報告いただいた問題点の修正も行いました。WPF に関する質問や WPF チームへのお問い合わせは、こちらのブログ記事 (英語) のコメント欄にご記入をお願いします。
Windows フォームの高 DPI
Windows フォームの高 DPI のサポートが更新され、さらに多くのコントロールが追加されました。高 DPI のコントロールのサポートは、.NET Framework 4.5.2 (英語) で初めて追加されました。
今回は新たに機能が拡張され、DataGridView、ComboBox、ToolStripComboBox、ToolStripMenuItem、Cursor、DomainUpDown、NumericUpDown、DataGridViewComboBoxColumn、DataGridViewColumn、ToolStripSplitButton の型でもサポートされるようになりました。
これはオプトイン機能であり、機能を有効にするには、アプリケーション構成ファイル (app.config) で EnableWindowsFormsHighDpiAutoResizing 要素を true に設定します。
<appSettings>
<add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
</appSettings>
次世代 JIT コンパイラ RyuJIT
このリリースには RyuJIT の新バージョンである 64 ビットの JIT コンパイラが含まれており、64 ビットのプロセスで既定で有効になります。
新しい JIT コンパイラへの移行をできるだけ透明化することを目指していますが、互換性の問題が存在する可能性があることも認識しています。お客様のアプリケーションでの RyuJIT の動作が望ましいものではない場合は、RyuJIT を無効化 (英語) して、代わりに JIT を使用し、問題の原因が RyuJIT なのかどうかを確認してください。RyuJIT 関連の問題が発生した場合は、こちらまでお知らせください。
CLR のパフォーマンス向上
アセンブリ ローダーが、対応する NGEN イメージをロードした後、IL アセンブリをアンロードして、メモリをより効率的に活用できるようになりました。これは、大規模な 32 ビット アプリ (Visual Studio など) の仮想メモリに大きなメリットがあるほか、物理メモリの消費も節減されます。
DateTime の変換と Unix 時間からの変換のサポート
DateTime の変換と Unix 時間からの変換をサポートする新しいメソッドが追加されました。これはたとえば、時間の値を JavaScript クライアントと .NET サーバーの間で変換する際に必要になります。DateTimeOffset に追加された API は以下のとおりです。
タスクを返すメソッドを ASP.NET モデル バインディングでサポート
以前はタスクを返す ASP.NET モデル バインディング メソッドはサポートされておらず、実行時に例外がスローされていました。.NET Framework 4.6 では、これらのメソッドを持つアプリケーションがデプロイされた場合に正しく実行されるようになりました。
マネージ EventSource インストルメンテーションのチャネル サポート
.NET EventSource インストルメンテーションを使用して、マシン上に作成された既存の ETW セッションに加えて、重要な管理メッセージや操作メッセージをイベント ログに記録できるようになりました。
.NET 言語の革新
今回のリリースには、C# 言語および Visual Basic 言語の新機能がいくつか含まれています。スケルトンコードの使用やコードが散乱するのを抑えるための機能や、宣言型プログラミングの使用を促進するための機能があり、2 つの言語の距離がさらに縮まります。最終リリース版では、主に以下の機能が両方の言語で使用できるようになる予定です。詳細については、こちらの C# チーム ブログ記事 (英語) やこちらの VB チーム ブログ記事 (英語) を参照してください。
Visual Studio の .NET 向け機能強化
Visual Studio チームは .NET にいくつかの重要な機能強化を行いました。最も大きな更新は、技術的なものではなく、製品の提供方法の変更です。
Visual Studio Community
Visual Studio Community は学生やオープンソース開発者、個人開発者向けの新しい無料版 Visual Studio です。Pro によく似ており、Xamarin や Resharper などの Visual Studio プラグインをサポートしています。Visual Studio Community の全容は、こちらの Visual Studio ブログ (英語) でご紹介しています。
パフォーマンス上のヒントを提供する PerfTips
高パフォーマンスなアプリケーションを作成するのは容易なことではありません。.NET にはスレッドや非同期などのさまざまな優れた機能が備わっており、マイクロソフトのチームが一丸となって .NET のパフォーマンス向上に取り組み続けていますが、一筋縄ではいきません。そうした中、Visual Studio チームはコードのパフォーマンス特性の検証 (英語) とパフォーマンス上のボトルネックの特定に役立つすばらしい機能を開発しました。PerfTips を使用すると、アプリケーションをデバッグしながらパフォーマンス上のボトルネックをすばやく簡単に確認することができます。
直観的なブレークポイントの設定
.NET 開発者ならだれもが、よりスマートなブレークポイントを設定したいと考えています。新しいブレークポイントは直観的に設定することが可能で、ブレークポイン���の動作変更もずっと容易になっています。詳細については、こちらの Visual Studio ブログ記事 (英語) を参照してください。
自動実装プロパティへのブレークポイントの設定
自動実装プロパティは非常に便利な機能で、長年使用されてきましたが、これまでデバッガーはサポートしていませんでした。Visual Studio 2015 では、自動実装プロパティにブレークポイントを設定して、ステップ スルーできます (下を参照)。
デバッガー ウィンドウでラムダをサポート
ユーザーのご要望 (英語) に応えて、デバッガー ウィンドウでラムダを使用できるようにしました。ラムダ式および新しい Roslyn の言語機能をサポートするためには、C# と Visual Basic の式エバリュエーターを一から作り直す必要がありましたが、その甲斐があったことは下の例を見ればおわかりいただけると思います。今後はさまざなデバッガーウィンドウでラムダをチェックすることができます。
Core IDE と編集機能の機能強化
C# および Visual Basic の Core IDE と編集機能は、.NET コンパイラ プラットフォーム ("Roslyn") の新機能に刷新されました。操作方法に特に変更はありませんが、細かい点が多数改良されています。
Introduce local (説明変数) の例:
Inline temporary variable (インライン一時変数) の例:
ASP.NET 5
ASP.NET 5 (英語) は .NET の最新の Web スタックであり、MVC、Web API、Web Pages が MVC 6 という単一の API に統一されます。ASP.NET 5 アプリは Visual Studio 2015 プレビュー版で作成できます。コマンドラインを使用したアプローチもより実行しやすくなっています。ASP.NET home リポジトリ (英語) をチェックして、Windows、Linux、Mac のアプリを作成できます。
ASP.NET 5 の特長は多数ありますが、主なものは以下のとおりです。
マイクロソフトでは、Visual Studio 2015 CTP のリリースのたびに ASP.NET 5 の開発者向けエクスペリエンスを更新してきました。詳細については、Visual Studio プレビュー版の ASP.NET 機能について紹介したこちらのブログ記事 (英語) を参照してください。この記事では重要な点だけご紹介します。
まず、ASP.NET 5 は「1 つの ASP.NET」 プロジェクトに統合されました。
また、ASP.NET 5 は、.NET Framework と .NET Core の両方での実行をサポートします。さらに、IntelliSense 機能が拡張され、BCL API の差異の情報が提供されるようになりました。.NET Core はデプロイメント面でのメリットを考慮して、意図的にサイズが小さくなっています。
Bower と NPM の依存関係ノード
ASP.NET プロジェクトで、Bower と NPM がソリューションエクスプローラーの新しい依存関係ノードとして統合されました。コンテキスト メニュー コマンドでパッケージのアンインストールを選択すると、対応する JSON ファイルから自動的にパッケージが削除されます。
Entity Framework
Entity Framework 6.x
このリリースには EF6.1.2-beta1 のランタイムとツールが含まれます。EF6.1.2 はバグ修正がメインです。EF6.1.2 で修正したバグの一覧は、CodePlex サイト (英語) でご確認いただけます。
Entity Framework 6.1.2 ランタイムはこのリリースの随所に用意されています。
· この Entity Framework ランタイムは、インストールされていないプロジェクトで Entity Framework Tools を使用して新しいモデルを作成するとインストールされます。
· この Entity Framework ランタイムは新しい ASP.NET プロジェクトにプレインストールされています (選択するプロジェクト テンプレートによる)。
Entity Framework 7
Entity Framework 7 は軽量かつ拡張可能で、新しいプラットフォームやデータストアを利用できます。Entity Framework 7 の詳細については、こちらのブログ記事 (英語) を参照してください。Entity Framework 7 の早期プレビュー版の使用を開始するには、こちらのページ (英語) で詳細をご確認ください。
このリリースには Entity Framework 7 ランタイムの早期プレビュー版が含まれます (新しい ASP.NET 5 プロジェクトにインストールされています)。このバージョンでは基本的な機能を実装していますが、機能にはいくつかの制限があります。早期プレビュー版の目的は、どのようなユーザーエクスペリエンスを設計しているかをユーザーに知らせることにあります。そのため、既定のプロジェクト テンプレートのコードから逸脱するとすぐに制約が生じますのでご留意ください。
NuGet パッケージ マネージャー
NuGet パッケージ マネージャーは外観がツール ウィンドウ風に変更され、各プロジェクトやソリューションで表示できるようになりました。複数のプロジェクトで NuGet パッケージ マネージャーのウィンドウを同時に開くことができます。この変更は NuGet パッケージ マネージャーを使用するすべてのプロジェクトに適用されます。デザインもより洗練されたものに生まれ変わりました。
まとめ
ご覧いただいたとおり、.NET 2015 プレビュー版と Visual Studio 2015 プレビュー版には、日々の開発作業を支援する新しい機能強化が数多く搭載されています。.NET Framework 4.6 は Windows デスクトップ、サーバー、クラウド アプリの開発への対応を見据えた更新版となっています。また、WPF、RyuJIT、ASP.NET 5 の更新も、多くの開発者の皆様にとって有意義なものになっています。
さらに今回は、.NET Core 5 のオープンソース化とクロスプラットフォーム対応も発表されました。これにより、今までに実現できなかった新たなシナリオが可能になると同時に、コミュニティとの関係もより緊密なものになると考えられます。その例が .NET Foundation への .NET Core 5 の提供であり、.NET Foundation (英語) と共に、コミュニティおよびマイクロソフトの数々のプロジェクトが成長する姿を目にできることを楽しみにしています。
いつものお願いではありますが、マイクロソフトでは皆様のフィードバックをお待ちしています。新しいリリース製品、および .NET Core 5 のオープン ソース化とクロス プラットフォーム対応に関する皆様のご意見やご感想をぜひお寄せください。