de:code 2018に参加してきましたのでその結果をまとめています。
内容の間違い、誤字脱字等はご了承ください。正確なところは、本家のサイトを参照いただければと思います。
タイトル等
タイトル
de:code 2018 [AD14] .NET Everywhere ~ .NET が創る Mobile & Cloud Native プラットフォームの未来
演者
井上 章さん 日本マイクロソフト株式会社
日時
2018/05/22 17:10-18:00
概要
現状の.NETの状況がどのようになっているのか、どのようにどの技術を使用していけばよいのか、についてのセッションとなる。
実例
モバイルで動作しているアプリケーション。予約、サービスが動いており、ホテル、従業員、スタッフが使用している。
使用するデバイスは、Android、iOS、PCまで様々となる。
この中で、アプリ開発のチャレンジが出てくる。
- 画面サイズ、レイアウトが多様な中でどのように作っていくか。
- 様々なデバイス(スマートスピーカー、ホロレンズ)でアプリケーションを動かしてほしい
- AIを使用してほしい!
- どうしろと?
Microsoft .NETの歴史を振り返ってみよう
去年で15周年となる。2002年のコマーシャルでは、ワインの流通業者と売る側で.NETが動いていてダイレクトにつながることができる、というCMとなっていた。
.NETの基本構成
基本としてWindows上でしか使うことができないというものだったが、クラウドを使用する上でもっと変わらなければならない。
2012年にScott Hanselmanが「ASP.NETがオープンソースになり、もっと楽しいものになる(意訳)」と言っているが、これが現実のものとなってきている。
現在の.NET Coreに生かされているのが2014年のOne ASP.NET構想(KATANA Project)となる。
現在(2018)年の状況
.NET Framework
Windows上で動作する。
.NET Core
Windows、Mac、Linux上で動作する。ただし、GUI(UWP)については、Windows上でしか動かない。
Xamarin
Windows、iOS、Android、Mac上で動作する。
.NET Standard
.NET Standardは、各フレームワーク間の共通ライブラリの実装に使用する。
.NET 開発者の増加
アクティブな開発者が、昨年(2017年)に100万人以上増加している。ここで大事なのは、アクティブということである。最近の開発ツールと同様に、Visual Studioはテレメトリ情報を取得しているので、インストール数ではなく、実際にアクティブな開発者ということである。
またGitHubへの登録状況を見ても増加状況にあり、すごく盛り上がっている状況である。
.NET の各言語の対応状況
VB.NET開発者としては、.NET Coreも出てきた状況で、VB.NETはどういう状況にあるのか、ということが気になるところだと思う。
下に示すように.NET Coreでも各言語(C#, VB.NET, F#)の対応は進んできており、C#しかサポートされなくなる、ということはないので安心してほしい。
Xamarin
画面デザインの共有
画面デザインを共有したいなら、Xamarin Native Formsで画面を共有する。画面を共有するなら、最近主に使われている手法である。
Xamarinのコンパイルとパフォーマンス
iOSは事前コンパイル、Androidは実行時コンパイルとなる。どちらの場合も、Nativeで動作する形となるため、高いパフォーマンスを発揮できる
Build 2018で発表されたアップデート
- Xamarin.FomrsがアップデートでCSSに対応する
- 共通のライブラリとして、Xamarin.Essencialsが利用できる
- Android Emulator for Hyper-V 対応が出てきている。速度が早いのが特徴
Xamarin.Forms on the Web
XamarinのコードをWeb Assemblyとしてコンパイルすることで、ブラウザ上で動作させることができる
.NET Frameworkの統一化
.NET Framework、.NET Core、Xamarinで、コードライブラリの共有化を行いたい、という要望、方向性がある
.NET Standard
考え方としては、HTML5と同じ。すでに仕様はできており、できている仕様に対して、各Frameworkが実装していくという考え方となる。
基本的に、各Frameworkが実装するというのは、既に述べられた通りだが、Type Fowarding(型の転送)については、共通DLLを経由して行うことになる。
デモ
Xamarin.Formsと.NET Framework、同じプログラムをそれぞれで作成し、共有コードは.NET Standardで共有しているというデモが行われた。
ソースは、GitHubのリポジトリで公開するかも、とのこと。
また、iOSの実機で、顔認証で特定の人しか使えないアプリケーション、画像認識して、ラーメンを判定するアプリケーションのデモが行われた。
.NET Core 2.1(RC)
RC版だが、既に製品で使える状態。パフォーマンスは、SDKでもランタイムも改善している。ランタイムだけではなく、SDKも改善しているということで、開発時の効率改善も見込まれる。
実装予定の機能一覧
ラズパイもサポートしている。実装としては、ラズパイ上のDockerコンテナで動くので、ラズパイ上で動作する.NET Coreベースのアプリケーションを作ることができる
デモ
Signal Rを使うと、リアルタイムのWebサービスを作ることができる
Blazor
Browser + Razor = Blazor
すべてのブラウザーで動作させることができ、Reactiveなどを知らなくても、.NETでクライアント側のWeb UIをビルドすることができる。
Web Assemblyとなるため、ブラウザにプラグインなどは不要である。
クライアントとC#でのコードの共有、C#の強く型付けされた開発、.NETの安定性と一貫性を受けた開発が実現できる。
デモ
ポイントとして、WebアプリケーションにDLLが配布されていることをChromeの開発者ツールで確認した。
読み込み速度が重くなるのでは?という疑問については、最近はJSも大きくなってきていることを考えると、誤差範囲になるのでは、と想定しているとのこと。
実行はクライアントのOSのNativeで動作するので速度的にも有利になる。実装としては、コンパイルされてブラウザー側で動いている形になる。
.NET Core 3.0
今年度後半にはPreview版が出てくる。
Desktop Packs
Desktop Packsが実装される。
Desktop Packsを追加することで、Windows OSの.NET Core上でWPFのアプリケーションが動くことになる。
デスクトップアプリケーションで、なぜ.NET Coreが必要となるのか
- side by sideで実行されるため、環境依存が少ない。
- .NET Framework ライブラリのグローバル参照 or ローカル参照を選択することができる。これはコンパイル時に選択することになる。
- 最新のAPIは、.NET Coreに先に実装されるため、.NET Coreを使用することで、最新機能を利用しやすくなる
新規アプリケーションでの選択肢
前項の利点を考えると、デスクトップアプリケーションの新しいプロジェクトでの選択肢として、.NET Coreを考慮に入れたほうが良い。
.Net And Machine Learning
.NETで機械学習を行うには、今回開発されていくことが発表となったML.NETを使用することになる。
独自の学習モデルを作成することができる。そして、分析してその結果を出す。.NET のアプリケーションの中で、機械学習を使用できるようになる。
ML.NET 0.1 (Preview)
.NET Core 3.0のころには、1.0に近いものが出てくると考えられている。
.NETのモダナイズ
.NETアプリケーションがどのようにモダナイズ(近代化)されてきたか?
まずはRehost
クラウドや仮想マシンが、オンプレミス以外の選択肢となった。しかし、これではまだまだモダナイズとはいかない。
コンテナへの対応
Windows Containerとしてクラウドで動かすこともできるようになった。
Minimal Code Changeであり、アーキテクチャの変更も少ないということが大事である。
クラウドネイティブ
落ちないアプリケーションを実現するために、必要になる。
Dockerなので、.NETCoreにしないといけないのか?そんなことはない。.NET Frameworkのままでよい。
.NET Coreにしておけば、共通のDocker Containerを共通のDeploy単位とすることができる
.NET Everywhere
すべてのアプリのための統一プラットフォームとして、.NETを利用することができる。
Xamarin、.NET Coreなど、開発をする際に、複数を選択して開発することができる。
これから、さらに.NETは盛り上がっていく。