ASP.NET
"NOW" and "NEXT"
OITEC 第19回勉強会
2014/07/19
きよくら ならみ
自己紹介
• きよくら ならみ
–@kiyokura
–kiyokura.hateblo.jp
• 岡山生まれ岡山育ちの
ソフトウェアエンジニア
• NET系の開発やWebアプリ開発
– Microsoft MVP for ASP.NET/IIS
諸注意と免責事項
• 私個人による調査と見解であり所属
する組織を代表するものではありま
せん
• 万が一、本セッションの内容の誤り
に起因する何らかの損害が発生した
場合においても、私は一切の責任を
負うことができません
ご了承ください
アジェンダ
• “Web Forms”から“One ASP.NET”へ
• OWINとは
• 来るべき ”vNext”
“Web Forms”から“One ASP.NET”へ
現在のASP.NETの姿
ASP.NETとは
• .NET Frameworkを基盤とした
Webアプリケーションの
プラットホーム
ASP.NETのフレームワーク
• MSが提供するフレームワーク
–ASP.NET MVC
–ASP.NET Web Forms
–ASP.NET Web Pages
–ASP.NET SPA
–ASP.NET Web API
–ASP.NET SignalR
• これらすべてが ”ASP.NET” です
ASP.NET Web Forms
• ASP.NET登場時からある一番の古株
– 2002年に登場
– 現在の最新バージョンは
「Web Forms 4.5.1」
• 当初は「ASP.NET=コレ」
– そもそもWeb Formsという名前は
後述の「ASP.NET MVC」が出てきてから
区別のために呼ばれ始めた
ASP.NET Web Forms
ASP.NET Web Forms
• Webアプリ”らしくない”開発
–IDEによる"ポトペタ開発"
–コントロールのドラッグ&ドロップ
–JavaScriptを1行も書くことなくAjaxを実
現
• Web特有の事情を抽象化
–ViewStateとPostback
ASP.NET MVC
• その名の通り「MVC アーキテク
チャ」
–2009年にリリース
–当初はアドオンとして登場
–現在の最新版は「MVC 5.x」
ASP.NET MVC
Controller
View Model
ASP.NET MVC
• フレームワークとしての機能
– スキャフォールディング
– 設定より規約
– 割とRuby on Railsにインスパイア
• Viewはエンジンを選択可能
– Razor / ASPX の他、 Hamlなどオープンソース等々
• モデルについては自由
– 基本的に「これを使え」というは縛り無し
• 状況に合わせてテクノロジやアーキテクチャを選択す
ればよい、というスタンス
ASP.NET Web Pages
• ASP.NET中で最もシンプル
–2011年に最初のバージョンが登場
–MVCの既定ビューエンジン
「Razorビューエンジン」
をページフロント方式で使えるように
した感じ
ASP.NET Web Pages
• HTMLにコードを埋め込む方式
– Classic ASPやPHP、JSPに近い
• Razor構文
– @を使って、HTML中にコードを埋め込む
– コードには、C#とVB.NETが利用可能
• C#とVB.NETの機能はフルに利用可能
• 事前のコンパイルが可能
– サーバ上で直接編集も可能
ASP.NET Web Pages
ASP.NET Web API
• HTTPサービスを構築するためのもの
–2012年8月リリース
ASP.NET Web API
• RESTful
– REST
• Representational State Transfer
– HTTPの動詞とAPIのメソッドを対応させる
• POST / GET / PUT / DELETE
• 汎用的な出力形式
– JOSN
– xml
• OData対応
ASP.NET SignalR
• リアルタイムWeb通信を実現
–2013年2月に1.0リリース
ASP.NET SignalR
• リアルタイムWeb
– Webによる双方向通信
– WebSocket対応
• 状況に合わせてフォールバック
– 自動的に最善の手段を採用
• WebSocket
• Server Sent Events
• Forever Frame
• Ajax long polling
ASP.NET SignalR
• クライアント側にもライブラリを提
供
–JavaScript
–.NET
–iOS
–Android
• 類似技術:Socket.IO
ASP.NET SPA
• Single Page Application
–2012年に登場
• VS2012 Update2より
• 単一ページ構成のAjaxアプリケー
ション
–JavaScriptの
クライアントサイドライブラリを利用
ASP.NET SPA
クライアント サイド
HTMLページ
サーバ サイド
Webサービス
(Web API 等)
ページ返却
(MVC or 静的ページ等)
HTMLを
一枚返す
JavaScript
(クライアントサイド
MVCフレームワーク)
• ビジネスロジック
• 画面遷移
データ
ASP.NET SPA
• 多様なJavaScriptフレームワークに対応
– Knockout.js
– Backbone.js
– AngularJS
– DurandalJS
– EmberJS
• 各種テンプレートをダウンロード可能
– http://www.asp.net/single-page-
application/overview/templates
ASP.NETの歴史
• 初めて登場したのは2002年
• 2014年の現在まで、
かなりの速度で進化してきた
2002~2003年 ASP.NETの登場
• 2002年、ASP.NET 1.0
–.NET Framework 1.0
–Visual Studio .NET
• 2003年、ASP.NET 1.1
–.NET Framework 1.1
–Visual Studio 2003
1.1は1.1のバグフィックス&安定版的な
2005~2008年 Web Formsの完成へ
• 2005年、ASP.NET 2.0
– .NET Framework 2.0
– Visual Studio 2005
– アドオン:Ajax Extensions
Web Formはこの時点でほぼほぼ完成
• 2007年、ASP.NET 3.5
– .NET Framework 3.5
– Visual Studio 2008
– Ajax Extensionsの内包
ASP.NETそのものより、
LINQやC#の新しい構文などがインパクト大
2009~2012年 進撃のMVC
• 2009年03月、MVC 1.0
• 2010年03月、MVC 2.0
• 2010年04月、ASP.NET 4.0
– VS2010, .NET 4.0
– Web Forms 4.0
• 2011年01月、MVC 3.0, Web Pages 1.0
• 2012年08月、MVC 4.0, Web API 1.0, Web Pages 2
– VS2012, .NET 4.5
– Web Forms 4.5
 MVCが怒涛の勢いで進化
 Web APIとWeb Pagesも登場
2013~2014年 SignalRの登場とMVC 5
• 2013年02月、SignalR 1.0
• 2013年08月、SignalR 2.0
• 2013年10月、MVC 5, Web API 2,
Web Pages 3
– VS2013, .NET 4.5.1
Web Forms 4.5.1
• 2014年01月、MVC 5.1, Web API 2.1,
Web Pages 3.1
SignalRが登場
MVCの進化も止まらない
大体の歴史感
• VS2005時点でWeb Formsは概ね完成
–最近は大きな進歩はない
• 2009年に誕生したMVCは怒涛の勢い
で進化
–MVC 3 で大まかに固まって
–MVC 5.x まで堅実な進化
• Web APIやSignalRも着実に進歩中
One ASP.NET
• 数あるASP.NETのフレームワーク
• プラガブルに利用できるように
One ASP.NET
ASP.NET
Web
Forms
Web
Pages
MVC
Web
API
SignalR
Single Page Apps
Sites Services
Visual Studio 2013
キーポイント
• NuGet
–NuGetによってライブラリをプラガブル
に
–各フレームワークを構成するライブラ
リをNuGetで柔軟かつ整合性のとれた管
理を実現
より柔軟に
ASP.NET
Web
Forms
Web
Pages
MVC
Web
API
SignalR
Single Page Apps
Sites Services
YOU! YOU!
とはいえ…
• 何を使えばいい?
• 特に画面があるやつ
–Service系は特徴がハッキリしてるので
• あくまで私見ですが…
私の思う、選択のポイント
• MVCが最初の選択肢
– 何を選んでいいかわからないならコレ
• ライトな目的ならWeb Pagesを検討
– 3-4画面程度のちょっとしたアプリ
– Webアプリ自体の勉強目的
• Web Formsの選択は慎重に
– 幾つか要件が当てはまるなら採用して良い
• 要員にWeb Forms経験者
• 商用コンポーネントの利用
• 通信のオーバーヘッドの許容…等
– 例えばオンプレのエンプラアプリを商用コンポーネントを
バンバン使って経験者が開発するとかならまだまだアリ
その他外せないポイント
• クライアントサイドテクノロジー
–jQueryをはじめとしたOSSの採用
–TypeScriptとの親和性
• ツールの充実
–Visual Studioの機能
–Web Essentials等の便利機能
OWINとは
次へつながるキーテクノロジー?
Open Web Interface for .NET
• Webアプリケーション と Webサー
バーを接続する インタフェースの規
格
オープンな”仕様”
• http://owin.org/
• コミュニティプロジェクト
アプリとサーバ間の接続を抽象化
• WebアプリとWebサーバの結合を疎
に
–移植性の向上
–多様なコンポーネント開発
• インスパイア元
–Ruby- Rack
–Python - WSGI
–Perl- PSGI
OWINの仕様が決めていること
• アプリとサーバの間の接合方式
–インタフェースの仕様
–データ構造は二つ
• IDictionary<string, object>
• Func<IDictionary<string, object>, Task>
App
Server
ここ!
OWINがASP.NETにもたらすもの
• IISへの依存から卒業
–Selfhost
–IIS以外のWebサーバ
• プラガブルなコンポーネント開発
–コンポーネントもIIS非依存
アプリ
IIS selfhost
アプリ
Katanaプロジェクト
• マイクロソフトによるOWINの実装
–OWIN自体はあくまで"規格“
–リファレンス実装としてのkatana
• katanaの概要
–https://katanaproject.codeplex.com/
–http://msdn.microsoft.com/ja-
jp/magazine/dn451439.aspx
Katanaのアーキテクチャ
Application
Middleware
Server
Host
Microsoft.Owin.*
• Katanaにって実装されているアセン
ブリ
–例:Microsoft.Owin.Host.SystemWeb
• OWINをSystem.Web(≒ 現在のASP.NET)
で使うためのライブラリ
• ASP.NET Identity等で既に利用
OWINは既に使われている
• OWINの実装、katanaのプロダクトは
既に使われている
–ASP.NET Identity
–SignalR 2.0
Helios
• OWINをIISにホストするためのライブ
ラリ
–Microsoft.Owin.Host.IIS
–System.Webに依存しないラッパー
• 2014.07.15現在、まだα版
–Microsoft.Owin.Host.IIS 1.0.0-alpha1
ここまでのまとめ
• ”OWIN” とは
ASP.NETを次のステップへといざなう
オープン規格
• "Katana Project“
マイクロソフトによるOWINの実装
• OWINはVS2013世代で既に利用され
始めている
来るべき ”vNext”
次のクラウドの時代へ
注意
※ここから先はアルファのお話。
※現時点ですぐに
“使える”という類の話しではない
ASP.NET vNext
• ASP.NETの次バージョン
• 2014年5月、
TechEd North America 2014で発表
オフィシャルな情報
• http://www.asp.net/vnext
–ただし正式リリース後はコンテンツは
変わると思う(次世代バージョンのことな
ので)
特徴をピックアップ
• ASP.NET MVC 6, Entity Framework 7,
SignalR 3
• クラウドに最適化
• IISへの依存を解消
• DI (Dependency Injection)
• 破壊的な変更
• オープンソース
ASP.NET MVC 6, Entity Framework 7 ,
SignalR 3
• MVC 6はMVC, Web API , Web Pages
を含む
–名前空間やアセンブリを整理し統合
• Web FormsはvNextで
バージョンアップしない
–Web Forms 4.5.xの実行はサポート
クラウド最適化
• side-by-sideでのデプロイ
– GACに依存しない
– ランタイムの事前インストール不要
• ランタイムごと配置
• Core CLR
• 事前のコンパイルも不要
– Roslynによる実行時コンパイル
– サーバー上にソースファイルのまま配置
IISへの依存を解消
• セルフホスト可能
• k runtime
• IISへはHeliosを使ってホスト
• mono上でも動作
macやLinux上で動作
DI (Dependency Injection)
• DIのフレームワークレベルでのサ
ポート
–http://blogs.msdn.com/b/webdev/archiv
e/2014/06/17/dependency-injection-in-
asp-net-vnext.aspx
• NinjectやUnity DI等のコンテナも
利用可能
破壊的な変更
• プロジェクトファイルの形式の変更
–プロジェクトファイルが「kproj」
–設定ファイルがjson形式
• System.Webの消失
–既存のSystem.Webに依存したコードは
動かない
オープンソース
• Githubにてホスト
–https://github.com/aspnet
デモ
• Monaco上でvNextのアプリを編集
自分で触って試せます
• Visual Studio “14” CTP 2
–ダウンロード可能
–Azure VMのギャラリーに
設定済みイメージ
CTPというのを理解して触って下さい
安定動作は期待しない
パフォーマンスどういういう段階でも
ない
ここまでのまとめ
• ASP.NET はvNextへ
• vNextはよりクラウドを意識
• 破壊的な変更もある
• 乞うご期待!
本日のまとめ
たぶんまとまりきらない
本日の話題
• “One ASP.NET”という現在
• キーテクノロジー”OWIN”
• vNextはすぐそこまで来ている
是非このビデオを見てください
• 5月に開催されたde:codeのビデオ
–この 10 年をキャッチアップ! .NET 開発
者のための技術選択と「いま」
• http://channel9.msdn.com/Events/de-
code/2014/TL-001
–Web アプリケーション パターンの進化
~ One ASP.NET の今とこれから ~
• http://channel9.msdn.com/Events/de-
code/2014/TL-001
ご清聴ありがとうございました

ASP.NET "NOW" and "NEXT"