Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

ASP.NET vNextの全貌

NSStudy で発表した「ASP.NET vNext」についての説明資料です。

  • Loggen Sie sich ein, um Kommentare anzuzeigen.

ASP.NET vNextの全貌

  1. 1. ASP.NET vNextの全貌 2014.08.08 NsStudy #3 Atsuo AOKI http://www.nextscape.net
  2. 2. このセッションでお伝えしたいこと  Microsoft の Web開発技術であるASP.NET  このASP.NETが大きく進化しようとしています  2015年に登場するといわれるASP.NET vNext(次のバージョン)について紹介します  とくにK Projectについて紹介します
  3. 3. 自己紹介  青木淳夫  神戸生まれ  ネクストスケープという会社にいます  技術者募集中です。  Microsoft MVP for ASP.NET/IIS (2006~)  Sitecore MVP (2011~)  たまに執筆してます(InfoQ/@IT/CodeZine/マイコミなど)  http://d.hatena.ne.jp/aoki1210/  @aoki1210
  4. 4. Microsoft Web技術の歴史 1. PHPライクな、Active Server Pagesが元  <% Response.Write(“こんにちは") %> 2. WinFormエンジニア向けASP.NETが登場  <asp:Label id=“Label1” /> 3. Webエンジニア向けASP.NET MVC登場  @ViewBag.Message 約6年に1回大規模なアップデートが・・  2014年~2015年 ASP.NET vNext登場予定  次はどうなるのでしょうか・・・? 年 名前 関連技術 1996 ASP1.0 IIS3.0同梱(VBScript) 1997 ASP2.0 IIS4.0同梱 2000 ASP3.0 IIS5.0同梱 2002 ASP.NET1.0 VS.NET同梱(C#/VB.NET) 2003 ASP.NET1.1 VS2003同梱 2005 ASP.NET2.0 VS2005同梱 2007 ASP.NET3.5 VS2008同梱 MS AJAX 2009 MVC1.0 VS2008に追加 2010 MVC2.0 VS2010同梱 jQuery 2011 MVC3.0 VS2010に追加 NuGet Web Pages(Razor) 2012 ASP.NET4.5 VS2012同梱 2012 MVC4.0 VS2012同梱 Web API / SignalR 2013 MVC5.0 VS2013同梱 One ASP.NET 2014-5 vNext/MVC6 VS 14 同梱
  5. 5. ASP.NET vNextの特徴 公式ブログによれば、以下がvNextの特徴(訳 適当)  クラウド最適化:Cloud-Optimized  サイドバイサイド:Side by side support  開発者のウキウキ体験:Enhanced developer experience  WebサイトとWebサービスでのシングルプログラミングモデル:A single programming model for building Web sites and services  モジュラースタック:Modular Stack  DI(IoC)コンテナ内包: Dependency Injection  コンフィグ:Configuration  オープンソース:Open Source  クロスプラットフォーム:Cross-platform support
  6. 6. 説明はすごそうだけどイメージがわきにくい.. →VS14のCTPで変更点を見ていきましょう
  7. 7. [変更点1] ASP.NETなのにクラスやコンソールプロジェクトがある [変更点2] 生成されるプロジェクトの拡張子が「*.kproj」 「プロジェクトの新規作成」ウィンドウ Webアプリケーションはわかるけど「クラスライブラ リ」と「コンソールアプリ」がある!? C#のアプリケーションなのに、拡張子 が「*.Csproj」ではなく、「*.kprj」と なっている
  8. 8. [変更点3] 依存ファイルの取得が標準で自動解決 Project.jsonファイル(必要なDLLとバー ジョンの定義)に従って 依存DLLを自動的にpakagesフォルダにダ ウンロードして設定してくれる (これまでのNugetでも似たようなことは できたが、Visual Studio14のデフォルト動 作として、自動化されている) vNext Webアプリを作ったときの初回動作
  9. 9. F5でビルド実行(これまで通りIIS Expressで動作) ビルド実行したら IIS Expressで普通に動く (これまで通り)
  10. 10. [変更点4] IISに依存しない実行が可能に IIS Expressは起動していな いけどMVCアプリが動作し ている。 プロジェクトフォルダで コマンドプロンプトから 「k web」と入力 http://localhost:5000 project.jsonファイルに以下の記載があるので「k web」コマンドでWebサーバー を起動できる。 "commands": { "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000" } ※このセルフホストの詳細はhttps://github.com/aspnet/Hosting 参照
  11. 11. [変更点5] Binフォルダにアセンブリがない  binフォルダが空っぽ!? ビルドされていないわけではなく、 RoslynがC#のコードを動的にビルドして、 アセンブリをメモリ上で展開してくれてい るため、動作する。 そもそも、コンパイルしなくて良い。 1つのcsファイルをちょっと変えた時にも 全ビルドされないので開発が早く、楽にな りそう。 Azure WebSiteやVS Online(monaco)を 組み合わせた時にもCIサーバーやアップ ロードのことを考えなくて良いので便利そ う。
  12. 12. [変更点6] System.WebからMicrosoft.AspNet名前空間へ [変更点7] Web.config/Global.asax/pakage.configがない System.WebというIISに依存する部分がなくなり、 Microsoft.AspNet名前空間を使用 今後は、System.Web名前空間の「HttpContext / HttpRequest / HttpResponse」ではなく、 Microsoft.AspNet.Http 名前空間の 同名クラスを 使用。 従来の継承できない(sealed)クラスではなく、抽象 (abstract)クラスへ変更されている。 具象クラスはMicrosoft.AspNet.PipelineCore名前 空間の「DefaultHttpConetxt / DefaultHttpRequest /DefaultHttpResponse」が 担う。 初期設定では、 .NET Framework4.5.1を使用 Web.configが無くなっている。 アプリ情報は「project.json」で、接続文字列は 「config.json」で管理 (IIS依存アプリではWeb.configは使える) Global.asaxも無くなり、これまでの Package.configの設定はproject.jsonへ。
  13. 13. [変更点8]プロジェクト設定で.NET Core Framworkを選択可能 .NET4.5.1をターゲットフレームワークと して使用しなくて良い!? 代わりに 「.NET Core Framework 4.5」を 使える。 .NET4.5.1をコンパクトにしたもの。
  14. 14. [変更点9] K1.0(.NET Core Framework4.5)の登場 「Kバージョン1.0」に変わった。動作を見 る限り .NET Core Framework4 .5= 「K1.0」 の模様。 また先ほどの.NET4.5の参照時と違って、 • Microsoft.Csharp • Mscorelib • System • System.Core の表示が無くなっている。これにより参照設 定の表示が「Project.json」に書いている内 容と完全に同じに。 ちなみに、Kは、Katanaプロジェクトの略称 とのこと。 http://msdn.microsoft.com/ja-jp/magazine/dn451439.aspx
  15. 15. Core45(K1.0)の時も実行結果は同じに見えるけど・・・ 'iisexpress.exe' (CoreCLR: DefaultDomain): Loaded 'C:Usersaoki.krepackagesKRE-svrc50-x86.1.0.0-alpha2binmscorlib.dll'. Cannot find or open the PDB file. 'iisexpress.exe' (CoreCLR: klr.core45.managed): Loaded 'C:Usersaoki.krepackagesKRE-svrc50-x86.1.0.0- alpha2binklr.core45.managed.dll'. Cannot find or open the PDB file. 'iisexpress.exe' (CoreCLR: klr.core45.managed): Loaded 'C:Usersaoki.krepackagesKRE-svrc50-x86.1.0.0-alpha2binSystem.Runtime.dll'. Module was built without symbols. 'iisexpress.exe' (CoreCLR: klr.core45.managed): Loaded 'C:Usersaoki.krepackagesKRE-svrc50-x86.1.0.0- alpha2binSystem.Runtime.Extensions.dll'. Module was built without symbols. 'iisexpress.exe' (CoreCLR: klr.core45.managed): Loaded 'C:Usersaoki.krepackagesKRE-svrc50-x86.1.0.0- alpha2binSystem.Threading.Tasks.dll'. Module was built without symbols. ブラウザに表示される画面は全く同じ だけど、デバッグログが少し違う .NET Frameworkの主要アセンブリを GAC(C:WindowsMicrosoft.NETassembly) ではなく、ログインユーザーの KRE(.krepackagesKRE-svrc50-x86.1.0.0- alpha2bin)というフォルダから読みこんでいる。
  16. 16. [変更点10] Kを動かすKREの登場 KREフォルダには • api-ms-win-core-com-l1-1-0.dll • K.Cmd • klr.core45.dll • System.dll 等々 .NETアプリを動かすものがたくさん 入っている(ファイルサイズ30Mくらい。 けっこう軽量。)
  17. 17. [変更点11] プロジェクトのPackagesフォルダにSystemのアセンブリも  Project.jsonに書かれたアセンブリがNuGetでPackaesフォルダに取得さ れている。これまでと違って、 .NET Framwork側(System.*など)の依 存アセンブリファイルも配置される。
  18. 18. (おまけ)Nugetが取得するPackagesフォルダの中(抜粋)  ├─packages │ ├─EntityFramework.7.0.0-alpha2 │ │ │ EntityFramework.7.0.0-alpha2.nupkg │ │ │ EntityFramework.nuspec │ │ │ │ │ ├─lib │ │ │ ├─K10 │ │ │ │ EntityFramework.dll │ │ │ │ EntityFramework.xml │ │ │ │ │ │ │ ├─net45 │ │ │ │ EntityFramework.dll │ │ │ │ EntityFramework.xml │ │ │ │ │ │ │ └─portable-net451+win81 │ │ │ EntityFramework.dll │ │ │ EntityFramework.xml │ │ │ ├─packages │ ├─Microsoft.AspNet.Mvc.6.0.0-alpha2 │ │ │ Microsoft.AspNet.Mvc.6.0.0-alpha2.nupkg │ │ │ Microsoft.AspNet.Mvc.nuspec │ │ │ │ │ ├─lib │ │ │ ├─K10 │ │ │ │ Microsoft.AspNet.Mvc.dll │ │ │ │ Microsoft.AspNet.Mvc.xml │ │ │ │ │ │ │ └─net45 │ │ │ Microsoft.AspNet.Mvc.dll │ │ │ Microsoft.AspNet.Mvc.xml │ │ │ │ │ │ ├─Microsoft.CSharp.4.0.0.0 │ │ │ Microsoft.CSharp.4.0.0.0.nupkg │ │ │ Microsoft.CSharp.nuspec │ │ │ │ │ └─lib │ │ ├─contract │ │ │ Microsoft.CSharp.dll │ │ │ │ │ └─k10 │ │ Microsoft.CSharp.dll ├─packages │ ├─System.Console.4.0.0.0 │ │ │ System.Console.4.0.0.0.nupkg │ │ │ System.Console.nuspec │ │ │ │ │ └─lib │ │ ├─contract │ │ │ System.Console.dll │ │ │ │ │ └─k10 │ │ System.Console.dll │ │ │ ├─System.Data.Common.1.0.0-alpha2 │ │ │ System.Data.Common.1.0.0-alpha2.nupkg │ │ │ System.Data.Common.nuspec │ │ │ │ │ ├─lib │ │ │ ├─K10 │ │ │ │ System.Data.Common.dll │ │ │ │ System.Data.Common.xml │ │ │ │ │ │ │ ├─net451 │ │ │ │ System.Data.Common.dll │ │ │ │ System.Data.Common.xml │ │ │ │ │ │ │ └─portable-net451+win81+wpa81 │ │ │ System.Data.Common.dll │ │ │ System.Data.Common.xml │ │ │ Packagesの中のLibフォルダの区分例 ・net45(net451) - .NET Framwork4.5用 ・k10(K10) - Core Framework用 ・portable-net451+win81(portable-net451+win81+wpa81) – ポータブルクラスライブラリ用 ・conract -.NET Framworkにて提供されているDLL? (KREフォルダとPackagesフォルダは、Kpmがいい感じでコントロールしてくれる?)
  19. 19. [変更点12]最新ソースはGitHubで公開 https://github.com/aspnet/Home にて公開 以下のようなサブプロジェクトにて開発中。 ~バグ報告、プルリクエストも可能~ Home -トップ BugTracker - サンプル Caching - キャッシュ Coherence - パッケージグラフ Configuration - 設定 DataCommon - データ DataCommon.SQLite - SQLite DataProtection - データセキュリティ DependencyInjection - DIコンテナ Diagnostics - 診断 EntityFramework - 永続化 Entropy - 実験的な障害尺度 FileSystem - ファイルシステム homebrew-k -k版パッケージ管理 Hosting - セルフホスティング HttpAbstractions - Http抽象化 Identity - メンバシップ KestrelHttpServer – libuvの非同期ホスティング Kruntime - Kランタイム kvm - Kバージョンマネージャ Logging - ログ出力 MusicStore - ショッピングサンプル Mvc - ASP.NET MVC Options - POCOによるオプション設定 Razor - Razorビュー Routing - リクエストルーティング Security - セキュリティ SignalR-Client-Java - SignalR Javaクライアント Signalr-Client-JS - SignalR JavaScriptクラアイント SignalR-Client-Net - SignalR .NETクライアント SignalR-Server - SignalRサーバー StaticFiles - 静的ファイル表示 Testing - テスト基盤(KRunner) WebSocketAbstractions - WebSocket抽象化 WebSockets - WebSocket実装 xunit - ユニットテストフレームワーク Universe - 全スタック
  20. 20. ちょっと見ただけでも変更が結構ありました.. →なんでこんな変更をしているのか、 vNextのコンセプトをあらためて確認してみましょう
  21. 21. ASP.NET vNextのポイントをざっくり確認  これまで  Windows/.NET/IIS前提 IIS Windows  これから  ASP.NETアプリは、オープンに、 必要なところを組み合わせて使う インストールされた.NET ASP.NET 自分のアプリケーション IIS / セルフホスト/ コンソールとか Windows/Mac/Linuxとか インストールされた.NET / .NET Core ASP.NET (スリムに) 自分のアプリケーション Kで実現
  22. 22. 前のページを説明している図を2つ(引用) InfoQの記事 「http://www.infoq.com/news/2014/05/ASP.NET-vNext」よ り。 Core CLRでクラウド最適化。 ASP.NET vNext GITHUBのページ。 https://github.com/aspnet/Home/wiki/KRuntime-structure
  23. 23. さらに理解したい方はMicrosoft井上さんのスライドを ~ Cloud First から Cloud Optimized へ ~ .NET on Cloud が描くモダナイゼーション http://www.slideshare.net/chack411/cloud-first- cloud-optimized-net-on-cloud
  24. 24. コンセプトはともかく、Kがよくわからない.. →K関連のコマンドを叩いてみましょう
  25. 25. Kの主要コマンド・環境  KVMコマンド  Kバージョンマネージャー。KREのインストールと使用するバージョンを選択できる。(Node.jsのnvmのよう なもの。)  KRE(KRuntime)  Kランタイムエンジン。vNextアプリケーションを起動するために使われる。KLR/KPM/Kコマンドが含まれ る(JavaのJREみたいなもの)  KLRコマンド  Kのランゲッジランタイム。CLRを呼び出す薄いレイヤ。vNextアプリケーションの呼び出し元となる本体。 (Javaのjavaコマンドみたいなものだが、直接呼び出すことはなさそう)  KPMコマンド  Kパッケージマネージャ。 project.jsonという依存関係を記述するファイルの内容に従って、DLLをWebから とってきます。(Node.jsのnpmのようなもの)  Kコマンド  vNextアプリケーションをビルドしたり起動したりするコマンド。KRLが起動する。
  26. 26. KVM入れてみよう  以下のコマンドを実行するだけ  C:WINDOWSsystem32>@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/aspnet/Home/master/k vminstall.ps1'))“  本体はここに https://github.com/aspnet/Home  必要な環境  (現時点では)Windows7以上、Core CLRを使う場合はWindows8以上。.NET 4.5.1  OSX/Linuxは、Mono 3.4.1 以上(bash か zsh と curlが必要)
  27. 27. Demo
  28. 28. KVMの中身  KVMをインストールすると、KVMコマンドが使えるようになります  KVMの本体は次の2ファイルです。  KRE_HOMEがセットされます。  C:Program FilesKRE ; %USERPROFILE%.kre 今は、Program Files下には入らず、個人のフォルダ配下にkvm環境が用意されます。
  29. 29. KVMコマンドでKLRをインストール  kvmコマンドのinstallオプションで、任意のKRLをインストールできます  コマンドプロンプト例 「kvm install 0.1-alpha-build-0446 -x64 」  installオプションの構文  kvm install バージョン –x64か-x86 -svr50か-svrc50  ちなみに、有効なバージョンの調べ方はよくわからず.. 実行例 > kvm install 0.1-alpha-build-0446 Downloading KRE-svr50-x86.0.1-alpha-build-0446 from https://www.myget.org/F/aspnetvnext/api/v2 Unpacking to C:Usersaoki.krepackagestemp Installing to C:Usersaoki.krepackagesKRE-svr50-x86.0.1-alpha-build-0446 Adding C:Usersaoki.krepackagesKRE-svr50-x86.0.1-alpha-build-0446bin to process PATH ※kvmコマンドの本体はパワーシェルなので、事前に、管理者のPowerShellで 「Set-ExecutionPolicy RemoteSigned 」コマンドを実行しておいてください
  30. 30. KVMコマンドでインストールされるもの  Kコマンド  KLRコマンド  KPMコマンド  ライブラリ群
  31. 31. kvm updateコマンドで最新KREを取得 実行例 > kvm upgrade Determining latest version Downloading KRE-svr50-x86.1.0.0-alpha3-10220 from https://www.myget.org/F/aspnetvnext/api/v2 Unpacking to C:Usersaoki.krepackagestemp Installing to C:Usersaoki.krepackagesKRE-svr50-x86.1.0.0-alpha3-10220 Adding C:Usersaoki.krepackagesKRE-svr50-x86.1.0.0-alpha3-10220bin to process PATH Adding C:Usersaoki.krepackagesKRE-svr50-x86.1.0.0-alpha3-10220bin to user PATHSetting alias 'default' to 'KRE-svr50-x86.1.0.0-alpha3-10220'  kvm upgrade  kvmコマンドのupgradeオプションで、最新バージョンを取得できる。 上書きされるわけではなく、あたらしいバージョンがダウンロードされ、 KRE_HOMEに設定される。 MyGetは、野良NuGetサービスのようなも のだが、Microsoftも使っているお墨付き。 オープンソースや小規模案件では無償で利 用できる。 お金を払えばプライベートNuGetサーバー を立てられる。依存性管理を行うアプリ開 発を行う場合には利用してみるとよさそう
  32. 32. .NET Core Frameworkをインストールするには  kvm install 0.1-alpha-build-0446 -svrc50  -svrc50とcを入れると、.NET Core Frameworkとなる -svr50では、通常の.NET Framework版となる  アップグレードは同じ  kvm upgrade -svrc50
  33. 33. KREのバージョンを確認して変更  kvm listコマンド  インストールされたKREを確認  kvm useコマンド  使用するKのバージョンを選択  *印の場所で確認  この設定は、 .krealiasdefault.txt に残る模様  特定バージョンを削除  手動でフォルダ削除?
  34. 34. Kコマンド  KコマンドでKアプリを起動します。(裏でklr.exeが呼び出される模様)  通常は、project.json がある場所で「k run」と実行  Project.jsonでCommand定義しておけば、 「k web」「k Kestrel」などの独自コマンドも実行可能
  35. 35. KPMコマンド  Kパッケージマネージャ。  project.jsonという依存関係を記述するファイルの内容に従って、 DLLをWebからとってくる。(Node.jsのnpmのようなもの)  Project.jsonがある場所で、「kpm restore」とたたきます。 必要なパッケージファイルを取得してきてくれます。
  36. 36. KLRコマンド  KLR.exe  Kのランゲッジランタイム。CLRを呼び出す薄いレイヤ。 vNextアプリケーションの呼び出し元となる本体。  意図的にコマンドを叩くことはない気がします。 Windowsのプロセスを見ていると、こっそりと起動しています。 たとえばVisual Studio 14 CTPと一緒にKLRも動作していました。
  37. 37. vNextのサンプル群 1. Home https://github.com/aspnet/Home/tree/master/samples シンプルな3つ(Console/Web/Mvc)のサンプル  これらのソースをGitもしくはダウンロードしてきて、project.jsonがあるフォルダで、 k runやk webコマンドを実行すれば動作します。 2. BugTracker https://github.com/aspnet/BugTracker バグトラッキングのサンプルです。 3. MusicStore https://github.com/aspnet/MusicStore vNext版だけではなく、現MVC版、SPA版あります。 上記ページの手順に従って実行できます。 SQL Server2014のlocaldbが必要です
  38. 38. (最後におまけ)MVC6.0の変更点について  WebAPIやWebPageのコアがMicrosoft.ASPNET.*で共通化  DI機能が組み込まれました。  Controllerを継承しなくてもよくなりました(POCOコントローラ に、Injectionして使う)  Startup.csで、モジュール的な感じで、機能やサービスを追加でき ます。  サンプルはこちら  https://github.com/aspnet/Home/tree/master/samples/HelloMvc
  39. 39. 参考資料  chack411さん  http://www.slideshare.net/chack411/cloud-first-cloud-optimized-net-on-cloud http://blogs.msdn.com/b/chack/  Shiba-yanさん  http://shiba-yan.hatenablog.jp/  Miso-soup3さん  http://miso-soup3.hateblo.jp/ http://www.slideshare.net/miso_desu/owin-34791501  Udagawaさん  http://d.hatena.ne.jp/udagawa/20140601  Qiitaの方々  http://qiita.com/wilfrem/items/09ec5a4666182d76e2a2 (LinuxでvNext)  http://qiita.com/kyasbal_1994/items/1018ca164c3fe85ad84d (ドキュメント意訳)
  40. 40. 次回予告
  41. 41. http://bit.ly/NSStudy4 ライターになりませんか? - NSStudy #4 - Do you wanna be a writer? - 2014/9/26(金) 19:30~ @IT, BuildInsider でおなじみの一色さんが テクニカル・ライティングのすべてを語る!! 史上最大の規模でおおくりする

×