umegusa's blog

備忘録

dotNetConf 2015 Japan with JXUGに参加してきました!

3/19 - 3/20にusでdotNetConf 2015の日本版が先日マイクロソフト社で行われたので遊びに行ってみました。
dotnetConf - The .NET Community Virtual Conference
そのレポートとかメモとか。(めっちゃ長くなっちゃった・・)
参加したのはこちら。atnd.org

Opening

.NETの全体像についてと今日のカンファレンスのアジェンダとか。
.NETFramework 4.6, .NET Core 5の話はもちろん、C# 6, Roslynについて、クロスプラットフォーム対応についての概要についてこのセッションでお話いただきました。
.NET Core5は、すべてがコンポーネント化され、Nugetからインストールできるようになるみたいです。
また、オープンソースとして、github上にすべてのソースコードが公開されています。
github上で討論なども積極的に行われているみたいですよ。
ちなみに隣の部屋ではXamarinのお話も・・・そっちもちょっと聞きたかった感はありましたね!


ASP.NET 5 (MVC, Web API, Web Pages, SignalR)

ASP.NET 5のWebFrameworkについてのセッションです。
ASP.NET 5はまだプレビュー版で今回の内容は変更される可能性があるということです。
.NET Framework 4.6 + .NET Core = ASP.NET 5
ということらしいです。

Visual Studio 2015

3月にbeta3がリリースされました。(もうすぐbeta4になるらしい?
もともとProject kという名目で走っていたプロジェクトらしく、プロジェクトファイルなども
.csproj -> .kproj
また、コマンドラインから実行する際も "k サブコマンド" というような形になっていましたが
.kproj -> .xproj
などxという文字に変わりました。
kコマンドはDNX(後述)という名前に変わっていたり、kという文字がxに変わっていたり、
この辺はまだ全然変わる可能性があるみたいです。

DNはdotnet、Xはクロスプラットフォームという意味があり、いたるところにxという名前がちらほら見えるのがうかがえました。

Web Framework

MVC, Web Pages WebAPIを含めてMVC6ということらしいです。
また、MVC6は.NET Framework 4.6にも対応するとのことです。
.NET Core 5の上ではSignal R3というフレームワークも対応しするみたいです。

VS2015によるデモ

プロジェクト構成など。
今まで.csprojファイルなどで設定していたファイルはjsonのファイルによって設定できるようになるみたいです。
参照設定も設定できるjsonがあり、そこに設定を記述するとgithub上のソースコードをそのままソリューションエクスプローラーに乗せてくれるみたいです。
そして、独自実装して拡張したものを読み込むのもよし、デバッグしてプルリクエスト生成するもよし、ということです。
オープンソースの恩恵を結構受けられるような、また、それを便利にできるような機能が提供されているように思えました。
ソリューションがあるエクスプローラーの中にファイルを置くと自動的に同期されるような細かいところでの動きの違いみたいなのもありました。

ASP.NET 5のプロジェクトファイルには、構成するファイルのパスはなく、存在するファイルはソリューションにリアルタイムに反映されるらしく、
ソリューションファイル内のhtmlファイルなどは、そのまま読み込むことはできず、
wwwrootという場所に格納することで表示できるようになります。
プロジェクトに表示されているwwwrootの中に配置することでWebページとして表示できるので
動的/静的ファイルで完全に住み分けができる、というお話でした。

今まではSystem.Webに依存していたのでMVC6は各ミドルウェアに乗せられるともお話しておりました。
一つのソリューションに複数のアプリケーションを乗せて各設定が可能、みたいな感じなんでしょうか?

MVC6, WebForms

MVC6は先ほどお話した通り、Web Pages/ Web aPI/ MVC統一したものです。
Routingの話などもあり、HTTP Methodの制限がRoutingからなくなったみたいで、
HTTP Method, URLとかは属性ベースで記述するように変更されたみたいです。
ActionResult 戻り値はIActionResult型でViewだけでなくJson, PartialView, StatusCodeなどいろいろ返せるようです。
ViewComponentsという機能を使ったサンプルがデモとしてあげられました。
こちらにデモで使用されたサンプルアプリケーションを貼っておきます。www.asp.net

WebFormsは.NWET Framework4.6に対応するらしく、Roslynがデフォルトで組み込まれる、ということでした。

.NET Core 5 & ASP.NET 5 Open Source

1時間で全部話すのは無理ってことで、今回のセッションでは.NET CoreとDNX(.NET Execution Environmet)についてのお話。

ほぼスライド通りのお話だったのでとりあえず気になった点だけ。
.NET Coreも.NETFrameworkもNuGetベースになるということ、
BLCもCoreCLRもNuGetベースになるということ。
大体NuGetを使えば環境が整えられるみたいです。

.NET Coreは.NET FrameworkCLR部分をOSS化したものです(CoreCLR)。
最近はやりのRyuJITやCGの実装も含み、OSS化したことで他のプラットフォーム環境でも動かすことができます。
Visual SudioをインストールしなくてもC#の開発が進められるのでいろいろはかどりそうですね!

ただし開発状況はWindows x64環境のみらしく、
動きはするけど保障はしない、というステータスです。
デモではCoreCLRをMacで動かしてC#を動かしていました。
ここでDNXの登場です。
DNXは.NETの実行コマンドでNuGetのパッケージ取得とか実行とかいろいろできるみたいです。

Windowsは.NEt 4.6 + CoreCLR、 LinuxOS XはMono + CoreCLR
その上にDNX(.NET Execution Environment)
その上にASP.NET 5と.NET Core 5がのっかる
というレイヤー構造みたいですすよ。

MacではHomebrewでインストールできるみたいなので試してみてはいかがでしょう!
スライドとかは最後にまとめてはります。

C# 6

ufcpp.netの中の人のお話。
こちらもスライドありました。

C#6.0はRoslynの開発の間潜伏していて最近発表されたみたいです。
同時にC# 7.0の提案も始まっていて、VS2015でC#6.0がリリースされます!

.NET Framework2.0でもC# 6.0は動いていて、一つだけ.NET 4.5が求められるFormattableStringというクラスのみ使えないですが問題なく使えるみたいですよ。

C# 6.0の新機能はサンプルコードも載っていてとても分かりやすかったです。
getter-onlyとかnameof演算子とかオブジェクト初期化子でプロパティ混ぜられたりとかとても夢広がりました。
今よりもかなりコードを減らせそうな気はしていて、
デモでは無駄なコードをかなり削減できた、というお話をいただけました。

今回言語的な変更はあまり大きなものはなく、
C# 7.0に繋がる機能拡張、という面が大きいようでした。
あとRoslyn化したことでその恩恵をかなり受けられるみたいです!
ちなみにC# 6.0のテーマは Just-do-it!

Roslyn

最後はRoslynについて!プレゼンでStanding Ovationが起こるくらい盛り上がりました!w
Roslynとは.NET Compiler Platformのことで、こちらもオープンソースで公開されています。

既存のコンパイラC++で書かれているのですが、RoslynはC#で実装しなおしたコンパイラで、インラインコンパイラらしいです。
コンパイル時に生成される内部解析結果にアクセスできたり、開発環境に組み込んで拡張したりできる夢広がりんぐなコンパイラでした。
.NET Framework4.5以上という条件ですが、VS2013でRoslynは使用できるとのことで、こちらもNuGetで取得できます。

デモでは既存のコンパイルとRoslynによるコンパイル複数回コンパイルした実行速度の比較などがありました。
Roslynによる実行は既存の約2~3倍ほどで、インラインコンパイラに夢を感じました。
もう一つのデモはASTでRoslynを組み込み、実行してみるというもの。

プレゼン自体も盛り上がっていてとても楽しかったです!w

終わりに

最後のほうちょっと疲れて内容の密度に誤差ありますが、
スライドも公開されているので他の記事やTogetterの情報とか見ながら追いかけてもらえればなーと思ったり。

ただし、全て開発中というステータスでこれから変更はまだまだ追いかけなければならないステータス、ということも忘れないようにしなければ!という感じですね。

とはいえ、とても夢広がるお話が伺えてとても有意義な時間をすごさせて頂きました!
仕事とかで使ってる人は今すぐ導入というのは難しいですが、
クロスプラットフォーム化など新しい試みにチャレンジしていて環境の変化を楽しんでいけてこそ、だと思います!

関連情報

dotNET関係

ASP.NET | The ASP.NET Site
ASP.NETのページ。
ASP.NET vNext | The ASP.NET Site
ASP.NET 5。
ASP.NET 5 Community Standup - YouTube
ASP.NET 5に関する議論内容をyoutube上に公開しているみたいです。
dotnetConf 2015 | Channel 9
USフォーラム。

github

.NET Foundation
.NETのオープンソース一覧。

ASP.NET MVC / Web API / Web Pages - Home
aspnet/Mvc · GitHub
MVC
aspnet · GitHub
SignalR-3関係のリポジトリ
Core部分はSignalR-Server。

aspnet/dnx · GitHub
DNX。
dotnet/coreclr · GitHub
CoreCLR。colneしてビルドすればOS X環境でも動きます。
Developer Guide · dotnet/coreclr Wiki · GitHub
CoreCLRの開発状況。

dotnet/roslyn · GitHub
Roslyn。
Roslyn Overview · dotnet/roslyn Wiki · GitHub
Roslynのドキュメント。

スライド

.NET Core と DNX は本当に未来なのか
.NET CoreとDNX

Deep Dive C# 6.0
Deep Dive C# 6.0

Platon.io
Roslyn

サンプル集

View components and Inject in ASP.NET MVC 6 | The ASP.NET Site
MVC6のサンプルアプリケーション。(TODOアプリ)
ufcpp/UfcppSample · GitHub
C# 6.0で使用されたサンプル。
takepara/MvcVpl · GitHub
Roslynセッションでのデモ。