改めて「”One ASP.NET” って何?」を書いてみる ASP.NET Advent Calendar 2 日目

うぁー、もう 12 月! Advent Calendar 始まってる!

という感じで、昨日まで One ASP.NET Advent Calendar 2013 の 12/2 担当にエントリーしていたことをすっかり忘れていた私でございます・・・

12 月 1 日 ~ 25 日まで、様々なテーマのもとで日めくりカレンダーのように毎日ブログ記事を書いていくイベントが Advent Calendar で、今年は昨年に増していろいろな Advent Calendar が始まっています。私は、昨年 に引き続き One ASP.NET Advent Calendar を中心に参加していこうと思っています。

One ASP.NET Advent Calendar 2013

※ まだ空きがあるので、ご興味ある方はぜひ!(私もあと一回くらいは登録しようかな)

さて、若干ネタに迷っているところもあるのですが、そもそも One ASP.NET って何?と思っている方もたくさんいらっしゃるかと思いますので、Visual Studio 2013 がリリースされた今、改めて “One ASP.NET” について書いてみたいと思います。

■ One ASP.NET ビジョン (構想)

2011 年 12 月に、弊社 Principal Program Manager の Scott Hanselman より「“One ASP.NET” Platform Vision」というドキュメントが社内向けにリリースされたのが始まりだったと思います。年が明けて 2012 年 2 月の彼のブログでも社外向けに “One ASP.NET” という言葉が使われるようになりました。

[2012/2/1]
One ASP.NET Sneak Peek: Elegant Web Forms and Snowballs in Hell

その後の 2/25 のブログの中でも次のような言葉 (※もとは MSDN Flash の中で書かれた文章) と共に言及されています。

[2012/2/25]
One ASP.NET - Making JSON Web APIs with ASP.NET MVC 4 Beta and ASP.NET Web API

“More and more of ASP.NET is open source, and we push hard every day to stay open and be open. We want to make ASP.NET more pluggable, more open, more fun. We've got big things planned - some that will surprise you.”

“ASP.NET はもっともっとオープンソースになるでしょう。私たちはオープン性を維持しもっとオープンになるように毎日一生懸命推進しています。私たちは、ASP.NET をもっとプラガブルで、もっとオープンで、もっと楽しいものにしたいと思っています。私たちはみなさんを驚かせるような大きな計画があります。”

そして、これらのブログや彼の技術セッションなどで頻繁に使われるようになったのが下記の図で、みなさんもどこかで目にされた方も多いかと思います。その後、この図にはいくつかのバージョンが存在するのですが、本質はこの初期のものからほとんど変わっていません。

image

ASP.NET MVC が登場するまでは、「ASP.NET = Web フォーム」の構図がほぼ成り立っていました。それが、Visual Studio 2008 リリース後に追加コンポーネントとして ASP.NET MVC (v.1) が使えるようになったことをきっかけに ASP.NET は大きく変革の時期を迎えます。特に ASP.NET 4.5 となった Visual Studio 2012 では、ASP.NET MVC 4 のプロジェクト テンプレートを選ぶことで、ASP.NET Web API やシングル ページ アプリケーションなどの様々なテンプレートが選べるようになり、多種多様な Web アプリケーションを ASP.NET をベースとして作成できるようになりました。ただ、その一方で、例えば ASP.NET Web API のプロジェクトを作りたい場合に「新しいプロジェクト」ダイアログで Web のテンプレートを表示させても、どのテンプレートを選べば Web API が作れるのかが分からないなど、ASP.NET のプロジェクト テンプレートが次から次へと拡張されていったことによる弊害も出てきていたことは確かでした。また、厳密には、ASP.NET Web API は ASP.NET MVC の一種ではなく、ASP.NET の上に MVC と同等レベルに存在すべきものでもあり、単にテンプレートの選び方だけでなくライブラリ構成の観点でも不整合が出てきてしまっていました。

また、Web API と Web フォームとを組み合わせたり、同じく Web API と ASP.NET MVC とを組み合わせて(これがシングル ページ アプリケーション テンプレートの構成)一つのアプリケーションを構成することも当然可能であるのに、Visual Studio 2012 までのプロジェクト テンプレートでは、そのような組み合わせがやりにくかった状況となっていました。

image
Visula Studio 2012 の「新しいプロジェクト」に表示される Web 関連テンプレート

image
ASP.NET MVC 4 テンプレート選択後に表示される選択肢

そこで、前述の Scott Hanselman の言葉にあるとおり、もっと様々なフレームワークを柔軟に組み合わせて (pluggable)、ASP.NET Web アプリケーションが作れるように、プロジェクト テンプレートやライブラリ、フレームワークまでを含めた ASP.NET 全体を見直そう、という動きが、つまり “One ASP.NET ビジョン (構想)” となるわけです。

■ Visual Studio 2013 で実現された One ASP.NET

先日リリースされた Visual Studio 2013 では、One ASP.NET のビジョンが初めて実装された製品となります。まず、「新しいプロジェクト」ダイアログの Web プロジェクト テンプレートで選択できるのは、既定で「ASP.NET Web アプリケーション」ひとつとなります。

image
Visual Studio 2013 の「新しいプロジェクト」に表示される Web 関連プロジェクト

※ オンラインから、サードパーティー製などの追加のテンプレートをインストールした場合は、ここに別のテンプレートが表示される場合もあります。

※ Web カテゴリのサブツリーとして表示される Visual Studio 2012 を選ぶことで、以前のテンプレートも選択可能です。

そして、「ASP.NET Web アプリケーション」テンプレートを選んだ次のダイアログで Web フォームや MVC, Web API などが同列で一覧表示され、ここからまずベースとなるテンプレートを選ぶことができるようになりました。加えて、追加したい機能をチェックボックスで簡単に選ぶことができ、これで例えば、ASP.NET MVC プロジェクトをベースに、Web フォームと Web API も同時に使うようなプロジェクトを簡単に作成することができるようになりました。

image
One ASP.NET ビジョンに従い、同じダイアログ内に表示される各種テンプレート

さらには、ここで各種認証も設定することが可能となっていて、その一つの「組織アカウント」認証を追加する方法を、Advent Calendar 1 日目にナオキさんが書いてくださっています(こちら)。

■ One ASP.NET を支える NuGet

One ASP.NET を実現するもうひとつの重要な存在となるのが NuGet です。”more pluggable, more open” の実現を支えているのが、NuGet パッケージ マネージャーを通してプロジェクトに追加される各種 NuGet パッケージ群です。ASP.NET 関連のコンポーネントだけでなく、各種オープンソースで作られているライブラリも NuGet パッケージとして公開されており、プロジェクトに簡単に追加して使っていくことができます。

既定以外のプロジェクトテンプレートも容易に Visual Studio 2013 に追加できるようになっていると同時に、各種ライブラリも柔軟に組み合わせることができ(下図の YOU! の部分) 、ASP.NET をコアとした多種多様な Web アプリケーション開発に対応できるように大きく進化しています。

image
さまざまな組み合わせ・拡張が可能な ASP.NET スタック

さらに、One ASP.NET で始まった pluggable (プラガブル) の動きが、ASP.NET だけではなく .NET Framework 全体にも広がりつつあり、現在では NuGet を通して配布される各種ライブラリのうち .NET 関連パッケージの参照ソース (フィード URL) が分けられ、NuGet ギャラリー上のさまざまなパッケージとは分けて参照できるようにもなってきています。

image
Visual Studio 2013 の「NuGet パッケージの管理」に表示される .NET 関連パッケージの参照

■ One ASP.NET をさらに加速する OWIN

“Pluggable” に加えて、Scott Hanselman のもう一つの言葉を借りると「レゴのように自由に組み合わせることができる」世界を目指す One ASP.NET に、本格的にもう一つ重要な要素が加わります。それが、OWIN (Open Web Interface for .NET) です。Pluggable をより進めるためには OWIN 統合がもうひとつの鍵となるでしょう。既に最新の Web API や SignalR は OWIN 対応されており、今後もこの動きは加速するのではないでしょうか。

image

OWIN に関しては、また別の機会にご紹介したいと思います。(今回の One ASP.NET Advent Calendar で、どなたかが OWIN に関して書いてくださることも期待してます!)

◆◆◆

このような形で、構想から製品への実装まで進んだ One ASP.NET ですが、もっともっとオープンになり、かつ幅広いアプリケーション形態に柔軟に対応できるように進化していくでしょう。

One ASP.NET ビジョンはまだまだ続きます!

という訳で、次は xin9le さん (鈴木孝明さん) ですね。よろしくお願いします!

■ 関連情報

■ 関連 Advent Calendar