SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

クラウド時代に最適化されるASP.NET vNextとは ~Visual Studio14(CTP4)とK Projectの紹介

  • X ポスト
  • このエントリーをはてなブックマークに追加

Project.jsonとは

 Kプロジェクトでは、プロジェクトの情報はProject.jsonに記載します。これまで、Web.config/Global.asax/pakage.config/*.csprojといった主要ファイルに記載していた情報は、Project.jsonに記述することになります。

生成されたProject.jsonの中身
{
    "webroot" : "wwwroot",
    "exclude": "wwwroot/**/*.*",
    "dependencies": {
        "EntityFramework.SqlServer": "7.0.0-alpha4",
        "Microsoft.AspNet.Mvc": "6.0.0-alpha4",
        "Microsoft.AspNet.Identity.SqlServer": "3.0.0-alpha4",
        "Microsoft.AspNet.Identity.Authentication": "3.0.0-alpha4",
        "Microsoft.AspNet.Security.Cookies": "1.0.0-alpha4",
        "Microsoft.AspNet.Server.IIS": "1.0.0-alpha4",
        "Microsoft.AspNet.Server.WebListener": "1.0.0-alpha4",
        "Microsoft.AspNet.StaticFiles": "1.0.0-alpha4",
        "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-alpha4",
        "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-alpha4"
    },
    "commands": {
        /* Change the port number when you are self hosting this application */
        "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
    },
    "frameworks": {
        "aspnet50" : { },
        "aspnetcore50" : { }
    }
}

 まず、依存するアセンブリの情報は「dependencies」セクションに記述します。例えば「Microsoft.AspNet.Mvc」のバージョン6.0.0-alpha4が必要と記述すれば、NuGetやMyGetからDLLと依存DLLをダウンロードしてくれます。MyGetはMicrosoftも利用している商用Nugetホスティングサービスです。OSSプロジェクトは無償で利用でき、開発中のvNextアセンブリもMyGetで配布されています)。Visual Studioでは、プロジェクトを開いた時やProject.jsonファイルの保存時に、必要なアセンブリの解決を行ってくれます。

 Project.jsonファイルには、依存アセンブリ情報(dependencies)以外にも、コマンド(commands)、ビルトイベント(script)、IISのルートフォルダ(webroot)等を設定できます。詳細は、Project.jsonの説明ページをご覧ください。

System.WebからMicrosoft.AspNet名前空間へ

 依存アセンブリ情報(dependencies)の中身を見ていると、Microsoft.AspNetという名前空間を使用していることがわかります。vNextアプリケーションでは、IISと強いつながりがあった機能を、System.Web名前空間からMicrosoft.AspNet名前空間へと移動しています。これにより、これまで使用してきたSystem.Web名前空間のHttpContext/HttpRequest/HttpResponseクラスは Microsoft.AspNet.Http名前空間の同名クラスに移動されています。従来の継承不可クラスから抽象クラスへ変更されているため、ユニットテストやモックが簡単になっています。これに伴い、具象クラスとして Microsoft.AspNet.PipelineCore名前空間のDefaultHttpConetxt/DefaultHttpRequest/DefaultHttpResponseクラスが提供されています。

 なお、System.*からMicrosoft.*に移動する効果として、.NET Frameworkよりも早いライフサイクルでASP.NETがバージョンアップされることも期待されています。

実行

 それでは、vNextアプリケーションを実行してみましょう。

vNextアプリケーションの実行結果と実行フォルダ(Binフォルダ)
vNextアプリケーションの実行結果と実行フォルダ(Binフォルダ)

RosylnによるASP.NETアプリケーションのビルド

 デバッグ実行(F5キー)するとブラウザにトップ画面が表示されます。ここでは、Binフォルダの配下にDLLファイルが生成されていないことに注目してください。従来はBinフォルダ配下にDLLファイルが生成されていました。これはRoslynという新しいコンパイラが、C#のファイルを動的にビルドしてメモリ上に展開しているためです。実行時にC#のコードがビルドされるため、デプロイ前にDLLを生成しておく必要がなく、サーバー側で簡単にC#のソースを変更できるようになりました。

 Visual Studioでの開発時も「デバッグなしで開始(Ctrl+F5キー)」にて起動すれば、IIS Express実行中にC#のコードを変更できるため、オンザフライでのホットデプロイ開発が可能となります。

ターゲットフレームワークをASP.NET Coreに変更

 vNextアプリケーションの特徴として、.NET Frameworkの設定で「ASP.NET 5.0(従来の.NET Framework)」だけではなく「ASP.NET Core5.0(新しい.NET Core Framework)」も選択できるようになりました。

プロジェクトのプロパティでASP.NET Core 5.0を選択
プロジェクトのプロパティで.NET Core Frameworkを選択

 デフォルトで設定されている「ASP.NET 5.0」は「CLR」や「DesktopCLR」と呼ばれるWindowsにインストールされている.NET Frameworkです。「ASP.NET Core 5.0」は「CoreCLR」と呼ばれる新しいクラウド向け.NET Frameworkサブセットです。

 ブラウザの表示は同じですが、IIS Expressのログを見ると、以下のように読み込んでいる物理ファイルが異なることがわかります。

DesktopCLR(.NET Framework)実行時ログ抜粋
(System.Runtime.dllをGACからロード)
'iisexpress.exe' (CLR v4.0.30319: Helios): Loaded 
  'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Runtime\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Runtime.dll'.

(EntityFramework.dllをKPMのaspnet50からロード)
'iisexpress.exe' (CLR v4.0.30319: Helios): Loaded
  'C:\Users\aoki\.kpm\packages\EntityFramework\7.0.0-alpha4\lib\aspnet50\EntityFramework.dll'.

CoreCLR(.NET Core Framework)実行時ログ抜粋
(System.Runtime.dllをKREからロード)
'iisexpress.exe' (CoreCLR: klr.core45.managed): Loaded 
  'C:\Users\aoki\.kre\packages\KRE-CoreCLR-x86.1.0.0-alpha4\bin\System.Runtime.dll'.

(EntityFramework.dllをKPMのaspnetcore50からロード)
'iisexpress.exe' (CoreCLR: klr.core45.managed): Loaded 
  'C:\Users\aoki\.kpm\packages\EntityFramework\7.0.0-alpha4\lib\aspnetcore50\EntityFramework.dll'.

 前者のDesktopCLRでは、.NET FrameworkのアセンブリをGAC(C:¥Windows¥Microsoft.NET¥assembly)から読みこんでいますが、後者のCoreCLRでは、ユーザーのKRE(C:¥Users¥<ユーザー名>¥kre¥packages)フォルダから読みこんでいます。KREフォルダはKプロジェクトの実行環境が格納されるフォルダです。

 このような仕組により、CoreCLRでは、サーバーに必要な.NET Frameworkをインストールしていなくても、ASP.NETアプリケーションを動かせるようになります。

次のページ
Kプロジェクトのまとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 青木 淳夫(アオキ アツオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8209 2014/10/24 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング