• トップ
  • ニュース
  • 【.NET定期勉強会@Sansan完全レポート】第3回 OWINって何?Microsoft MVPに聞いてみよう!(その2)
勉強会

【.NET定期勉強会@Sansan完全レポート】第3回 OWINって何?Microsoft MVPに聞いてみよう!(その2)

【.NET定期勉強会@Sansan完全レポート】第3回 OWINって何?Microsoft MVPに聞いてみよう!(その1)から続きます

(開催:2014年5月16日、講師:矢後比呂加氏(Microsoft MVP for ASP.NET/IIS)、モデレータ:Sansan株式会社 渋木 宏明、会場:Sansan株式会社)

 

■OWINとKatanaが解決する課題

――OWINとは?

(矢後氏)OWINは、サーバとアプリケーションを抽象化するためのインターフェイスの仕様です。

ここでいうサーバとは、物理サーバではなく、HTTPを処理するサーバのことです。アプリケーションは、サーバから渡されたリクエストを処理してレスポンスを返します。

サーバは、リクエストの状態をキーと値のディクショナリで表します。たとえば、HTTPメソッドはGET、URLは~といった具合です。アプリケーションはそのキーと値を基にタスクを実装します。

OWINの仕様は、次のWebサイトで公開されています。

URL:http://owin.org/

 

――Katanaとは?

OWINはコミュニティベースのプロジェクトですが、KatanaはMicrosoftによるOWINの実装です。そのため、Microsoft OWINとも呼ばれます。具体的には、Webアプリケーションの構築や起動を行うためのコンポ―ネットのセットになります。

Katanaは、4つのレイヤに分けられます。

ホストは、プロセスやアプリケーションのサイクルを管理します。IISやセルフホストのコンソールアプリで立ち上げます。OwinHost.exeというKatanaのコンソールでも起動できます。

サーバはHTTPの操作を行う抽象的なサーバです。ASP.NETのSystem.Webをはじめ、HttpListener、NOwin、WebListener、Heliosなどのライブラリが含まれます。

ミドルウェアは、サーバから渡されるリクエストを処理するフレームワークです。ASP.NET Web API、ASP.NET SignalR、Nancyのほか、認証やロギングなどのコンポーネントを含みます。

アプリケーションは、開発者が書くであろうアプリケーション特有の実装コードのことです。

――Katanaの特長

(矢後氏)Katanaは、4つのレイヤに分けたことで移植性を確保しており、他のレイヤに影響することなく各レイヤで部品を交換して稼働できます。

また、モジュール化することで各コンポーネントがシンプルになり、ニーズに合わせて必要なものを組み合わせることができます。たとえば、SNS認証やActive Directory認証など複数の認証を組み合わせて利用することが可能です。これは、ミドルウェアを連結することで行います。

サーバの入れ替えが可能であるため、System.Webという古い時代のサーバを非同期ベースのサーバに置き換えることで、パフォーマンスの改善を見込めます。

――Katanaについてもう少し詳しく

(矢後氏)Katanaでは、ホストが全体を管理し、サーバがリクエストを受け取ってミドルウェアに渡します。

ミドルウェアは複数のコンポーネントとして連結できます。ミドルウェアは、次のミドルウェアに処理を流したり止めたりすることが可能です。

ミドルウェアの連結は、Startup.csというファイルで構成します。例として、ASP.NET MVC 5のデフォルトのプロジェクトテンプレートにはApp_StartフォルダにStartup.Auth.csというファイルがあり、ここに認証のミドルウェアをどのように構成するかを記述しています。

たとえば、最初にリクエストをCookie認証ミドルウェアに渡して、無効なリクエストであればそのままエラーのレスポンスを返し、有効なリクエストであればSNS認証やアプリケーションのミドルウェアに渡すといった構成が可能です。

このようなミドルウェアのパイプラインには、ASP.NET Web APIといったフレームワークもミドルウェアとして登録できます。

ただし、ASP.NET MVC はSystem.Webに依存しているので、ミドルウェアとしては登録できません。しかし、System.WebのHttpModuleがミドルウェアへと橋渡しを行うことによって、ASP.NET MVCで構成されたアプリケーションであってもミドルウェアを活用することができます。

――Katanaでできないこと

(矢後氏)Katanaではいろいろなサーバやホストを利用できます。しかし、ホストとしてIISを利用すると、System.Web以外のHttpListenerなどのサーバには対応できません。そのため、IISを選択すると、System.Webを選択せざるを得ないという課題が残ります。

■Project Heliosが解決する課題

 

――Project Heliosとは?

前半に述べた通り、古い時代に設計されたSystem.Webはさまざまな問題を抱えています。しかし、IISではSystem.Web以外を選択できません。そこで、IIS上でSystem.Webのパイプラインを通さずにOWINで構成されたアプリケーションを動かすために考えられたのがProject Heliosです。

Project HeliosはNuGetにより配布されています。

NuGetでMicrosoft.Owin.Host.IISをインストールし、プロジェクトにStartupを作成して配置すれば、IIS上でOWINで構成されたアプリケーションを動かすことができます。

――IISの利点とProject Heliosによる改善

(矢後氏)IISは優秀なホスティングシステムです。キャッシュ、ライフタイム管理、PowerShellによる柔軟な操作といった優秀な機能に加え、十数年動き続けてきた実績のあるセキュリティ対策もあります。

IISの利点とSystem.Webの脱却、双方を取り入れたのがProject Heliosです。HeliosではSystem.Webに比べ、スループットが2~3倍向上し、メモリ消費が90~96%削減されたという検証結果があります。

■ASP.NET vNextが解決する課題

――Project Heliosを使っても残る課題

(矢後氏)Project Heliosを使っても、課題がまだ残っています。ASP.NET MVCやWeb Formsは依然としてSystem.Webに依存しています。そして、機能が重複するフレームワークが複数存在しています。これらの課題を解決するのがASP.NET vNextです。

――ASP.NET vNextとは?

(矢後氏)ASP.NET vNextではSystem.Webからの完全な脱却が可能になります。アプリケーション側では、System.Web を使わないフレームワークが稼働します。ASP.NET MVCも新しく作成されます。サーバ側ではHeliosを使うことで、IIS上でもSystem.Webを回避できます。

また、フレームワークがさらに抽象化され、機能の統合が行われます。

たとえば、ASP.NET MVCとASP.NET Web APIのルーティング機能が統合されます。HTTP周りの操作や依存性の注入に関しても、これまではフレームワークごとにSystem.Webやそれ以外を使用したりとバラバラでしたが、統一され、同一のコンポーネントが代わりを担います。

■「OWINって何?」=「.NET Web開発の課題を解決するための最初のステップ」

(矢後氏)「Mobile First, Cloud First」時代では、スタートアップが遅いと周りに追いつけません。また、矢継ぎ早にリリースされるモバイルデバイス、MacやLinuxなど多様なプラットフォームに対応する必要があります。

ASP.NETで時代に合わせたWeb開発を行うには、古い時代のSystem.Webから脱却し、さまざまな課題を解決する必要がありました。

OWINとKatanaは、サーバとアプリケーションを疎結合にし、一枚岩のモデルを部品化して、NuGetパッケージにより迅速に修正し配布できるようにします。

Project Heliosによって、IISを使いながらもSystem.Webを回避できるようになります。

さらに、ASP.NET vNextは、ついにSystem.Webから完全に脱却し、全く新しいASP.NETとなります。

ここで今日のテーマ、「OWINって何?」に戻りましょう。

OWINを切り口として、Katanaが実装され、Project Heliosが生まれ、ASP.NET vNextが生まれます。つまり、OWINの導入は、十数年続くASP.NETにメスを入れた「.NET Web開発の課題を解決するための最初のステップ」であったと言えます。

(おわり)

■こちらで当日のスライドが公開されています■

OWIN って何? from miso- soup3

この後、OWINミドルウェアの動作、構築、設定、Project HeliosやASP.NET vNextの互換性、IISの今後やコミュニティの動向などについて質疑応答が行われ、交流会を含め盛会のうちに終了しました。

Sansanでは定期的に.NET勉強会を開催しております。ぜひご参加ください。

★ただいま参加受付中!

9月30日(火)19:30より

「Xamarin」って何? 〜Wエバンジェリストによる特濃「Xamarin」勉強会〜

詳細・参加申し込みはこちら>> http://connpass.com/event/8706/