de:code 2015 レポート day2 - DEV-006 / DEV-007

クロスワープの大鷲です。

前回に引き続き、de:code 2015 day2 のレポートをお届けします。

参加セッション

私が参加したセッションは以下の通りです。
本記事では、以下の 2 セッションのレポートをお届けします。

  • DEV-006 ASP.NET 5 Web 開発 ~ランタイム編~
  • DEV-007 ASP.NET 5 Web 開発 ~フレームワーク編~

資料はこちら DEV-006 DEV-007 で公開されています。
その他のセッション動画及びスライド資料も Channel9 で公開されています。
オープニング キーノートは Microsoft Virtual Academy のサイトで公開されています。

day 1

CODE ROOM TITLE
SNR-004 Room G デジタルテクノロジーが推進する、アプリケーション革新
SPL-001 Room C マイクロソフトが考える 5 年後を見据えた技術提言
CHK-002 Chalk Talk クラウドアプリケーションのアーキテクチャ設計を深める
CHK-003 Chalk Talk プログラミング パラダイムの知識を深める
CDP-008 Room C MS版Docker 誕生! Windows Server Containers とは?

day 2

CODE ROOM TITLE
ARC-001 Room A クラウド時代のデータアーキテクチャ
SNR-009 Room B フルスタックエンジニアとか無理!
比べてわかったAzure PaaSの勘所
DEV-019 Room F 徹底解説! プログラマーがおさえておくべき
Azure Active Directory のすべて
PBS-001 Room E ここまでできる! Office 365 API を活用したアプリ開発
~ Office 365 内のデータ活用~
DEV-006 Room A ASP.NET 5 Web 開発 ~ ランタイム編 ~
DEV-007 Room A ASP.NET 5 Web 開発 ~ フレームワーク編 ~
DEV-008 Room A 進化は止まらない! ADO.NET Entity Framework の今

DEV-006 ASP.NET 5 Web 開発 ~ランタイム編~

DEV-007 ASP.NET 5 Web 開発 ~フレームワーク編~

この 2 セッションは続きものなのでまとめてレポートします。
スピーカーは日本マイクロソフトの井上 章さん。
資料はこちら DEV-006 DEV-007 で公開されています。

内容的には以前書いた、dotNetConf 2015 参加レポート【前編】【後編】と重複する部分もあると思います。

フレームワーク編はどちらかと言うと IDE 編と言う方が適切ではないだろうかと思いました。
あまり ASP.NET 自体の新機能(dotNetConf で紹介された TagHelper 等)の話は無かった印象です。

オープンソースとマルチプラットフォーム

これまで Visual Studio は Windows アプリ、.NET アプリを作る環境という性格が強かったのですが、2015 からは明確に方針を転換し、すべてのエンジニアが、すべてのアプリケーションを作るのに使える環境を目指しています。
そのため、VS2015 をインストールする際にカスタム インストールを選択すると、以下のようなツール群がインストールされます(RC 版時点の情報です)。

  • Android NDK, SDK
  • Visual Studio Emulator for Android
  • Apache Ant
  • Git CLI
  • Google Chrome
  • Java SE Development Kit
  • Node.js
  • Core Tools for Xamarin
  • Core Tools for Apache Cordova

.NET Core 5 と ASP.NET 5 に加え、Roslyn や MSBuild といったツールも GitHub でソースが公開され、オープンに開発されています。
また、.NET 開発をしていく上でも、上記のようなオープンソース ツール、Microsoft 外のツールを積極的に活用していく方針を取っています。

https://dotnet.github.io/ で、GitHub における .NET 関連のオープンソースリポジトリを見ることができます。
セッション中で触れられていた数字より、現在では 1.5 倍ほどの規模になっているようですね。
また、Programming Language Popularity Chart というサイトで、プログラミング言語の人気度を見ることができますが、C# はかなり上位に位置しています。
匹敵するのは Java や PHP などがあり、JavaScript がその上を行っていますね。
概ね右肩上がりの傾向が見えますが、上の方にひとつぽつんと飛び出した言語は何かと言うと SQL です。
StackOverflow での質問は多いけれど GitHub でのコミットは際立って少ないという特徴が出ていますね。
おそらく、SQL という言語自体の特性と、LINQ 等のクエリ ジェネレーターを使うことが多いため、純粋な SQL としての行数にカウントされていないという点が理由かと思います。

2 つの .NET Framework と ASP.NET

.NET 2015 と呼ばれる世代では、.NET Framework が 2 つ存在します。
これまでの .NET Framework 4.5 の延長である Windows 専用の .NET Framework 4.6 と、Linux や Mac でも動作するクロスプラットフォームの .NET Core 5 です。
WPF や Windows Forms、ASP.NET Web Forms などは .NET Framework 4.6 だけで動作します。もちろん ASP.NET 5 も動きます。
一方の .NET Core 5 では、ASP.NET 5 と Universal Windows Apps が動きます。
.NET Core 5 はサーバーとクラウド環境に最適化された、クロスプラットフォームの軽量ランタイムで、.NET Framework 4.6 のサブセットになっています。
5 というバージョン番号が付いてはいますが、4.6 の上位互換ではなく、言わば「クロスプラットフォームの CLR Ver.1」です。

それら CLR の上でコア ライブラリである BCL(Base Class Libraries/4.6 用)や CoreFx(Core 5 用)が動きます。
さらにその上に乗る形で、どちらのプラットフォームでも ASP.NET 5 が動くようになっています。
ただし、ASP.NET 5 用のライブラリは 4.6 用と Core 5 用で別々に用意されています。開発者が用意する場合も別々に用意する必要があります。

ASP.NET 5 には ASP.NET MVC 6 が含まれますが、これはブランド名のようなもので、テクノロジーとしては MVC だけでなく、従来 Web API や Web Pages と呼ばれていたものを整理統合したものです。
そして、MVC6 と SignalR 3、Entity Framework 7 などをまとめて「ASP.NET 5」と呼びます。
一方、従来の延長としての ASP.NET 4.6 というのもあります。
これは MVC の統合などはされておらず、従来通りの構成になっているほか、Web Forms は 4.6 にのみ含まれます。
繰り返しになりますが、.NET Framework 4.6 上でも ASP.NET 5 は動きます。

わかりづらいので図にするとこんな感じでしょうか。
f:id:cw_owashi:20150722151210p:plain

7/21 に Visual Studio 2015 がリリースされましたが、残念ながら ASP.NET 5 はまだ正式版ではなく、現時点での最新バージョンは 6.0.0-beta5 となっています。
正式リリースは来年の予定とのことです。

DNX(.NET Execution Environment)

.NET アプリケーションをビルドし実行するための SDK とランタイムを含んだプラットフォームの名称です。
いくつかのツールも含まれ、その中には同名の dnx.exe というものもあるので、混同しないように注意が必要ですね。

dnx.exe
アプリケーションを実行するためのランタイム エントリポイント
dnu(.NET Development Utility)
DNX プロジェクトのビルド、パッケージング、発行など
dnvm(.NET Version Manager)
複数の DNX を管理し、使用するバージョンを切り替える

DNX を使ったデモがいくつか予定されていたようですが、当日のネットワーク環境が良くなかったことと、デモには悪魔が潜むということで、あまりうまく行きませんでした。

DNX プロジェクト

DNX アプリケーションを実行するために必要な情報が project.json というファイルにまとめられました。
このファイルには、以下のような情報が含まれます。

  • 使用するフレームワーク
  • 実行するためのコマンドライン
  • 参照設定
  • ビルドの設定

ASP.NET 5 は実行時に Roslyn でビルドするので、ビルドの設定も実行するための情報に含まれるんですね。
一方で、従来のプロジェクトファイルに含まれていた、ソースファイルの一覧などは含まれていません。
さらに、html や css 等の公開されるファイルは wwwroot というフォルダーに収められ、*.cs ファイルなどの非公開ファイルとは分けて管理されるようになりました。

project.json は手書きで編集する想定のようですが、インテリセンスが強力に効くので苦ではありません。
参照設定等では、ローカル ディスクにあるパッケージの他、nuget や bower のリポジトリの内容もサジェストしてくれます。
そして、project.json を上書きすると、それだけで参照設定が更新され(必要なパッケージはダウンロードされ)、*.cs 内でインテリセンスが効くようになります。
同様に bower の設定ファイルである bower.json を更新すると、それだけで裏で bower が実行されてパッケージがダウンロードされます。
ただし、bower のファイルは、この時点ではまだ wwwroot フォルダーに入っていませんので、そちらにコピーする作業が必要です。これには gulp 等を使います。

ホストサーバー

実行するためのサーバーも選ぶことができます。
これまでは System.Web.dll が担っていた HTTP 処理の基礎的な部分を誰が行うかという設定です。

Microsoft.AspNet.Loader.IIS (Helios)
IIS でホストされる。従来の IIS モジュールが使える。
Microsoft.AspNet.Server.WebListener
IIS には依存せず、http.sys 上で直接動く軽量サーバー。
Microsoft.AspNet.Server.Kestrel (Kestrel)
libuv というライブラリ ベースのクロスプラットフォームサーバー。

WebListener と Kestrel は独立したプロセス上で動きます。従来のセルフホスト型に近いでしょうか。
一方 Helios は IIS 上で動きます。そのため、project.json のサーバー設定には Helios は書かれません。

フロントエンド開発

ASP.NET 5 では Yeoman(よーまん)がサポートされます。
Yeoman とは、JS や CSS によるフロントエンド開発に必要なツールを一式セットにしたものです。
中核は yo という、プロジェクトテンプレートを作成するスキャフォールディング ツールで、その他に gulp や bower も含まれています。
yo 用の ASP.NET 5 プロジェクト ジェネレーターも提供されています。

VS2013 世代では jQuery や bootstrap といったパッケージも NuGet で配布されていましたが、2015 世代では、JavaScript や CSS といったフロントエンド用ライブラリは npm や bower、dll 形式で配布されるサーバー用ライブラリは NuGet というように役割が分かれます。

また、Visual Studio 上からの grunt や gulp の実行がサポートされます。VS2013 でもアドインでサポートされていましたが、標準機能になりました。
さらに、従来の「NuGet パッケージの復元」に相当するコマンドとして dnu restore コマンドが登場しますが、これは NuGet パッケージだけでなく、npm や bower の参照も復元してくれます。
gulp や bower については以前記事を書いていますので、よろしければご覧ください。

TypeScript

フロントエンド開発には JavaScript の代わりに TypeScript を使うことができます。

また、tsserver という新しいコマンドが追加されています。
これは TypeScript コンパイラーの構文解析機能を独立させたもので、TypeScript 版の Roslyn のようなものと言えるかもしれません。
Visual Studio Code や Sublime Text といったエディターをはじめ、今後様々な場面で使えるでしょう。

サーバーへの展開

Azure Web Apps(旧 WebSites)に対して配置してあるものを使ってデモが行われました。
プロジェクトの wwwroot フォルダーに入っていたファイルが、Azure 上でも wwwroot フォルダーにコピーされます。
また、wwwroot/web.config が自動的に作られます。このファイルには、使用するランタイムのバージョンなどが書かれています。
wwwroot と同じ階層にある approot フォルダーには、使用するライブラリや dnx のコンポーネント一式もコピーされています。
そのため、.NET Core の動作要件さえ満たしたマシンであれば、事前のセットアップなしに ASP.NET アプリケーションを動かすことが可能です。

Visual Studio から直接 Docker コンテナーに対してデプロイしたり、Docker 内で動いているアプリケーションをリモート デバッグすることもできます。
デバッグの模様はオープニング キーノートで見ることができますので、そちらをご覧ください。