.NET Framework 4.5/4.5.1概観連載:Visual Studio 2013対応フレームワーク「.NET 4.5.1」解説(2/3 ページ)

» 2013年10月18日 17時04分 公開
[かわさきしんじ,]

.NET Framework 4.5/4.5.1

 昨年の夏から秋にかけてWin 8がリリースされると同時に、.NET Frameworkのバージョンも4から4.5へと進化した。そして、今秋のWindows 8.1(以下、Win 8.1)のリリースとともに、そのバージョンは4.5.1となる。

 Windowsストア・アプリ開発のサポートは.NET Framework 4.5/4.5.1(以下、ver4.5、ver4.5.1)の大きな特徴といえるが、それ以外にも多くの面で機能が拡張されている。以下ではこれらを概観していこう。

ver4.5

 ver4.5は.NET Framework 4(以下、ver4)を置き換える形でインストールされる*1。CLRのバージョンは4.5であり、ver4のCLR 4とは異なる。ver4を置き換える形でインストールされるため、CLR 4とCLR 4.5は共存しないが、CLR 4を対象としたアプリのほとんどはCLR 4.5でも動作する。

*1 Windows TIPSの「.NET Frameworkのバージョンを整理する」やMSDNの「.NET Framework のバージョンおよび依存関係」も参照されたい。


 ver4.5の新機能としては主に以下のようなものが挙げられる。すでにご存じの方も多いだろう。

分野 説明
Windowsストア・アプリ用.NET Windowsストア・アプリを開発するための.NET Frameworkのサブセット
ポータブル・クラス・ライブラリ .NET Frameworkをサポートする各種プラットフォーム(Windowsストア・アプリ、Windows Phone、デスクトップ・アプリなど)で移植性のあるライブラリを開発する
並列コンピューティング async(Async)/await(Await)によるタスクベースの非同期処理、TPL/PLINQのパフォーマンス向上など
ASP.NET 4.5 ASP.NET MVC 4、ASP.NET Webページ2、WebフォームのHTML5対応、モデル・バインディング、ASP.NET Web APIなど
ネットワーク HTTPサービスアクセス/WebSocketsサポートなど
WPF リボンコントール/データ・バインディングの実行遅延/非UIスレッドが所有するコレクションへのアクセス/async、await、Task<T>のサポートなど
WCF シンプルな構成ファイル/構成ファイルの編集におけるIntelliSenseサポート/ビルド時のWCF構成の検証など
WF ステートマシン・ワークフローのサポート/使いやすくなったワークフロー・デザイナなど
ver4.5の新機能(抜粋)

○Windowsストア・アプリ用.NET

 ver4.5における一番大きな変化がこれだ。先に述べた「新たな形態のアプリ」をサポートするべく、マイクロソフトはWinRTという、これまでとは異なるアプリ実行環境/フレームワークを提供している。

 WinRTはCOMをベースとしたテクノロジであり、Windowsのコアサービスに対するラッパーとなっている。また、WinRT自体はOS(CPU)にネイティブなもので、C++からは直接、.NET言語からはCLR、JavaScriptからはIEのJavaScriptエンジンを介してWinRTへ(そして、WinRTを経由してWindowsのコアサービスへ)アクセスする。

WinRTのアーキテクチャ WinRTのアーキテクチャ

 WinRTはネイティブなフレームワークであり、各開発言語とは「言語プロジェクション」と呼ばれる機能を介してやりとりをする。言語プロジェクションではWinRTが公開する型が各開発言語で使用可能な型へ変換される(なお、.NET言語やJavaScriptで使えるWinRTの型情報は.winmdファイル(=Windows Metadata)に格納されている)。

 WinRTを.NET言語から利用し、ストア・アプリを開発するためのフレームワークが「Windowsストア・アプリ用.NET」(.NET for Windows store apps)であり、.NET Frameworkのサブセット(System名前空間)とWinRTが提供する要素(Windows名前空間)で構成される。

 なお、Windowsストア・アプリ開発については、「WinRT/Metro TIPS」および、Win 8.1をベースとした連載「Windowsストア・アプリ開発入門」で詳しく取り上げているので是非ご覧いただきたい。

 WinRT/Metro TIPSではポータブル・クラス・ライブラリについても触れているのでそちらも参照してほしい。

○並列コンピューティング

 ver4では、タスク並列ライブラリ(TPL)、PLINQ、同時実行コレクションクラス、同期プリミティブなど、並列コンピューティングをサポートするためのテクノロジが導入された。ver4.5ではこれらのパフォーマンスが大きく改善される

 また、C#とVBにおいてasync/await(Async/Await)キーワードがサポートされ、非同期コードを従来よりも明快に記述できるようになっている。

 非同期処理については連載記事の『C# 5.0&VB 11.0新機能「async/await非同期メソッド」入門』を参照されたい。

○ASP.NET 4.5

 ASP.NET 4.5では、そのコア機能、ASP.NET Webフォームなどに対して機能が追加され、ASP.NET MVCのバージョンも4となった。MVC 4向けにVisual Studio 2012(およびその2012.2 Update)では利用可能なプロジェクト・テンプレート(例えば「ASP.NET Web API」や「シングル ページ アプリケーション」など)が大幅に追加され、さまざまな種類のWebアプリ/Webサービスの開発がサポートされるようになった。

 また、ASP.NETという基盤の上にASP.NET MVC、Webページ、Webフォーム、シングル・ページ・アプリケーション(SPA)、Web API、SignalRなどのテクノロジを集約し、それらを自由に組み合わせて、Webアプリ/Webサービスを開発する「One ASP.NET」という構想が提唱されている。ver4.5.1ではフレームワークレベルでこれが正式にサポートされることになった。

 なお、ASP.NET 4.5の新機能に関しては本フォーラムの特集記事「Visual Studio 2012の新機能とASP.NET 4.5のコア機能」「ASP.NET Webフォームの新機能」「ASP.NET MVCの新機能」を参照されたい。

 また、ASP.NET Web APIについては「連載:ASP.NET Web API 入門」を参照してほしい。

○ネットワーク

 軽量でRESTfulなWebサービスの開発/利用に使える各種クラスが、System.Net.Http/System.Net.Http.Headers名前空間で提供されるようになった。また、サーバとクライアント間での軽量な双方向通信を行うためのWebSocketsプロトコルがSystem.Net.WebSockets名前空間でサポートされた。

○WPF/WCF/WF

 WPFでは、リボン・コントロールがようやく組み込まれた。また、UI仮想化時のパフォーマンスが向上したほか、非UIスレッドが所有するコレクションへのアクセスが可能になった(コレクションの作成をバックグラウンドで行い、任意の時点でUIスレッド側から表示目的でこれにアクセスするといったことが可能になる)。ほかにも、データ・バインディング時にデータ・ソースを更新する際に遅延を指定できるようになった。例えば、ユーザーによるUI更新が頻繁に行われた際にデータ・ソース更新を一定期間遅延することで、負荷を軽減できる。このほかにも静的プロパティへのデータ・バインディング時にその変更を通知できるようになるなどの機能が追加されている。

 WCFでは概して、WCFアプリの開発/メンテナンス時の煩雑さを軽減するような改良が加えられている。また、WCFでもWebSocketsがサポートされるようになった。

 WFでは、ver4.0.1で登場したステートマシン・ワークフローの作成が正式に取り込まれた。これは開始状態から複数の状態を介して終了状態へと遷移するようなワークフローを記述するために使える。また、ワークフロー・デザイナがより使いやすくなり、ワークフローのアウトライン表示、ワークフロー内で使用する式への(VB式に加えて)C#式の記述、ワークフロー・デザイナでの検索などが可能になっている。

○そのほかの新機能

 このほかにも.NET Frameworkのコア機能も拡張/追加されているし(2Gbytesを超える配列のサポート、マルチコアJIT、ZIP圧縮の効率改善など)、MEF(Managed Extensibility Framework)でもジェネリック型のサポートなどが行われている。

ver4.5.1の新機能

 ver4.5.1の新機能の概要を以下の表にまとめる。ざっくりと見る限りは、ver4.5と比べると小規模なアップデートだといえるだろう。だが、これらは主に開発者の声に応えながら、「開発生産性」「アプリケーション性能」「継続的イノベーション」の3つに焦点を絞った改善となっている。

分野 説明
コア機能 NuGetでの新機能の継続的なリリース(Out of Band Release)/アセンブリのバインディングの自動的なリダイレクト/ASP.NETアプリのサスペンドと高速復帰/マルチコアJITの効率改善/.NET Framework更新後のアプリ起動のパフォーマンス改善など
Visual Studioのデバッグ関連機能 メソッドの戻り値を[自動変数]ウィンドウで確認可能(戻り値が変数に保存されない場合に便利)/64bitアプリのエディット・コンティニュー/非同期処理対応スタック・トレースなど
ASP.NET One ASP.NET/ASP.NET Scaffolding/ASP.NET MVC 5/Web API 2/SignalR/Identity/Entity Framework 6など
ver4.5.1の新機能(抜粋)

○コア機能

 コア機能の新機能で特徴的なのは、.NET Framework自体は通常、数年間隔で新バージョンがリリースされる一方で、新機能がNuGetで継続的にリリースされるようになる点だ。これをマイクロソフトは「Out of Band Release」(確立されたルートとは異なるルートでリリースといった意味)と呼んでいる。これにより、最新機能がフレームワークの更新を待たずに常に入手可能となる。

 アプリを構成するコンポーネントがあるアセンブリの複数バージョンに依存している場合、「アセンブリのバインディングの自動的なリダイレクト」により自動的に、そのアセンブリの最新バージョンにバインディングがリダイレクトされるようになった。

 ASP.NETでは、Windows Server 2012 R2が提供するアイドル・ワーカー・プロセスのページ・アウト機能を使用して、アイドル状態のASP.NETアプリをサスペンドし、ディスクにページ・アウトできるようになった。これにより、アクティブなプロセスにより多くのCPUとメモリを割り当てたり、より多くのプロセスをホストしたりできる。サスペンド状態となったASP.NETアプリ・プロセスには以前の状態が保存されているので、そのアプリを新規に起動するよりも、高速に復帰できる。これにより応答性の高いASP.NETアプリを1台のサーバでより多くホストできるようになる。

 このほかにもver4.5で導入されたマルチコアJIT(=マルチコア環境で並列にJust-In-Timeコンパイルを実行する機能)による性能改善などが行われている。

○デバッグ関連機能

 ver4.5.1およびVisual Studio 2013(以下、VS 2013)では、デバッグ機能がかなり強化されている。1つには、メソッドの戻り値を[自動変数]ウィンドウで確認できるようになったことが挙げられる。

[自動変数]ウィンドウでのメソッドの戻り値の確認 [自動変数]ウィンドウでのメソッドの戻り値の確認
「this.DefaultViewModel["test"]」にfooメソッドの戻り値をセットしようとしている。fooメソッドは「return n * 100」の評価結果をそのまま戻り値としている。[自動変数]ウィンドウの上から2行目にある矢印の行がこの戻り値を示している。「result = n * 100; return result;」のようなことをせずともメソッドの戻り値を確認できるようになった。

 また、async/awaitキーワードの組み合わせは、非同期処理コードを分かりやすく書けるようにしてくれたが、そのデバッグでは呼び出し履歴が非常に見にくいものとなっていた。VS 2013では、インフラストラクチャ・コードは「外部コード」としてまとめられ、非同期処理の流れを把握しやすくなった。さらに、64bitアプリでエディット・コンティニューが行えるようになったことは多くの開発者にとっては朗報だろう。

○ASP.NET

 上でも述べたとおり、ASP.NETの世界では現在「One ASP.NET」というビジョンの下にさまざまなテクノロジが集約され、それらを組み合わせてWebアプリやWebサービスを構築できるようになっている。One ASP.NETの世界では、これらのテクノロジが横断的かつ密接に関連している。

 例えば、任意のASP.NETプロジェクトでスキャフォールディングによるコードの自動生成が可能となっているし、ASP.NETプロジェクトの新規作成時には使用するテクノロジ/認証の構成などをウィザードで簡単に行えるようになっている。ASP.NET Webフォームに簡単にASP.NET MVCプロジェクトを追加できるし、ユーザー・プロファイルを管理するためにASP.NET Identityを任意のプロジェクトで利用できるといった具合だ。

 ASP.NET Web API 2では属性ベースのルーティング(=ルート・テーブルを使わずに、アクションに属性を付加することで、そのアクションがどんなURLを介して呼び出されるかを指定)や、OAuth 2.0サポート、ODataサポートの改善、CORS(Cross Origin Request Sharing: 異なるドメイン間でXMLHttpRequestを実行するための機構)のサポートなどの機能拡張が行われている。

 SignalRもバージョンが2.0となり、OWIN*2を完全な基盤とするようになった。2.0ではクロスドメイン通信のサポート、iOS/Androidサポート、ポータブルな.NETクライアント、SignalRアプリのセルフ・ホスト用パッケージの提供などが行われている。

*2 Open Web Interface for .NET(OWIN): .NETサーバとWebアプリ間のインターフェイスを抽象化し、これらを分離するためのオープンな仕様。これによりWebアプリがサーバ独立となり、IISでもカスタム・プロセスでもホストできるようになる。


 SignalRについては「ASP.NET SignalRを知る」「ASP.NET SignalRの高度な機能」を、Web APIについては「ASP.NET Web APIの全体像をつかむ」を参照してほしい。

 .NET Frameworkの新機能についてはここまでとして、次にこれからの.NETアプリがどうなるのかについてちょっと考えてみよう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。