5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

de:code 2019 [DT07] .NET とクラウド ネイティブ ~ 本格化するクラウド移行とそのアーキテクチャ(前編)

Last updated at Posted at 2019-06-06

Microsoft de:code 2019に参加した内容を紹介します。
もし間違いなどあれば、ご指摘いただけますと助かります。

前後編に分かれたセッションでしたが、とりあえず、前編について記載します。

2019年6月17日 後編を記載しました。

[DT07].NET とクラウド ネイティブ ~ 本格化するクラウド移行とそのアーキテクチャ / 2019年5月30日

TL;DR(要約)

  • 新規アプリケーションは、.NET Core 3(2019年11月リリース.NET Core 3.1 )を使い、クラウドネイティブなアプリケーションを意識してほしい。様々なプラットフォームをサポートした統一プラットフォームである。Win Forms・WPF(Windows限定)も含まれる。
  • .NET Framework は、4.8が最終バージョンとなる。既存アプリケーションは無理に移行する必要はない。
  • .NET 5(2020年11月リリース)には、ASP.NET Web Forms、WCF、WFなどが含まれない。ASP.NET Web Formsについては、代替としてBlazorを利用することで、Javaスクリプトをほとんど記載しないスタイルを同様に行うことができる。

リソース

セッショントピック(前編 & 後編)

image.png

.NET の人もクラウドネイティブの世界を考えよう

これからは、.NETを扱う人たちにも、クラウドネイティブな考え方で進めることを考えてほしい。.NETでは、すべてのアプリのための統一プラットフォームとして動作し、クラウドで扱いやすいように準備されている。

アプリケーションをどのようにクラウド対応アプリとしていくかが大事だが、そのための環境がすべてのプラットフォームに対して用意されているのが.NETである。

(所感)実際他のセッションでも話がありましたが、サーバーの管理費用(セキュリティ、アラート、スケーリング)なども考えると、ほとんどの企業ではオンプレよりもクラウドで管理した方が費用が安い時代に入ってきていると感じます。なにより、たぶんそちらの方が楽しいのではないかと。

.NET Core 3について

.NET Coreはコミュニティベースで開発が進んでいる。

すべてのアプリケーションのための統一プラットフォームであり、作成したアプリケーションをコンテナで簡単に動かせるので、Linuxでも簡単に動作する。

今では、.NETの世界でAIも動く(ML.NET)
https://docs.microsoft.com/ja-jp/dotnet/machine-learning/index
https://docs.microsoft.com/ja-jp/dotnet/machine-learning/tutorials/

.NET Core 3 Preview 5

image.png

image.png

.NET Core 3.0でキャッチアップされている機能としては、Windowsのデスクトップアプリケーション対応となる(WPF and Win Forms)。こちらはすでに開発が進められていて、プレビュー版でも動作する。

.NET Core 3時代のフレームワークとしては、.NET Framework、.NET Core、Xamarinが存在する。

この中で画面上のロゴでも示されているように、NET CoreはLinuxでも動作する。注意すべき点としては、Windowsロゴが記載している機能は、.NET CoreでもWinodwsでしか動かない。
逆に言えば、それ以外の機能は、対応するすべてのプラットフォームで動作するということ

フレームワーク 機能 対応プラットフォーム
.NET Framework すべて Windows
.NET Core Win Forms, UWP, WPF Windows
.NET Core ASP.NET Core, Console Windows, Linux, Mac
Xamarin すべて Windows(UWP), iOS, Max(OS X), Android

WinFormsとWPF

image.png

WinForms, UWPが将来的にどうなるかは現時点では不明だが、しばらくはWindowsのみの対応となっている。

Win FormsとWPFを.Net Coreに入れるメリット

  • 他のアプリケーションとの分離性(.Net Coreで採用される自己完結型の配布)
  • 新しいAPIを使用できる
  • あたらしいSDKベースのcsprojシステムの利用
    • 実際csprojの中身がかなりシンプルになっている
  • パフォーマンス向上の恩恵が受けられる
  • 今後、Unitiyも.NET Core 3.0ベースになっていく
  • 開発の活発化
    • すべてがオープンソースとなっているので、プルリクエストもどんどん出てきて、開発が活発に行われている状況

デモ

デモ:XAMLのデザイナーが動作している

XAMLのデザイナーも.NET Coreで使えるようになっているデモが行われました。このなかで、Taget Frameworkを見ると、確かにnetcoreapp3.0となっていることが示されました。

また、Intellicodeについて、XAMLエディタを見てみると、こちらでもIntellicodeが働いていることが確認できました。

デモ:.NET Core 3は自己完結型の配布が可能である

.NET Core 3では、自己完結型の配布が可能(現在も形式によっては可能)であることがデモされました。

  1. publish(配布)
  2. フォルダを選択
  3. 編集
  4. ターゲットフレームワークを選択
  5. 配置モードとして、自己完結を選び、winxx86等を選ぶ

必要なものをすべてまとめてくれるので、.Net Coreがインストールされていなくても動作する。

方式 コマンド 結果 特徴
通常 dotnet puglish -c rerease -t win10-x64 -o out1 出力フォルダに必要ンファイルが大量に出力される 起動が少し早い。
シングルファイル dotnet puglish -c rerease -t win10-x64 -o out2 /p:publishsinglefile=true 1つのEXeとしてくれる 今は画面からは選べない。初回展開が行われるため、起動は少し遅い

.NET のオープンソース化について

image.png

転換点としては、2012年にScott Hanselmanが発信したメッセージ「もっとオープンになるし楽しいものになるよ」というのが契機となる。

image.png

ASP.NET Core 2.2のホスティングモデルについて

image.png

よく質問をもらうことが多いが、WebサーバーとしてKetrelが動き、その後ろで.NET Coreが動作する。

アウトプロセスホスティングモデル

image.png

直接Kestralでも構わないが、実運用では、Kestralの前に、IIS、nginx、apactheを前に立てることが多いだろう。また、KestrelはWindows認証に対応していないので、そういう時はIIS HTTPを使用することになる。

インプロセスホスティングモデル

image.png

2.1以前は、IISを使うときもアウトプロセスという前提だったが、Windows前提であれば、IISでインプロセスで動かすこともできる。当然、インプロセスのほうがパフォーマンスがよい

.NET Core 3.0全体について

img

.NET Core 3.0から、Blazorが新しく追加される。Blazorは、.NET Coreのみがベースとなっている。

Blazorとは

img

Web Assemblyをベースとした技術

Web Assemblyという技術がある。これ自体は以前からある技術であり、モダンなブラウザであれば、すべてのブラウザ、OSで動作する。

特徴としては、dll等が直接動くので、C#が直接動作するということになる。つまり、C#で動くので、JavaScriptを書く必要もない。Web開発で、フロント周りを開発する中で、Javascriptを書く必要がないので開発速度の向上につながる

デモサイト ※解説は後述

2種類のホスティングモデル

img

開発自体は、Razor構文(@~)で記述する。ブラウザの開発ツールを使用すると、dll等が普通にダウンロードされて動作していることが確認できる。C#のコードが完全にクライアントサイドで動作することになる。

モデル 動作
クライアントサイド dllがダウンロードされる
メリットは、作り方次第ではオフラインでも使用できる。Web APIを使用している場合にはその考慮が必要
サーバーサイド dllがダウンロードされない
websocket(signalR)を通じて通信される。つまり、signalRを通じてバイナリ通信が行われることになる
HTTPのリクエストは発生しない
メリットは、デバッグできる

コンポーネント化について

PageがRazor Pageとなるので、完全にコンポーネント化されている。つまり

<FetchData />

とするだけで簡単にコンポーネント化したページFetchDataを利用できる。

先に利用できるようになるのは、サーバーサイド

今後ロードマップとして、先に正式に使用できるようになるのはサーバーサイドとなる。

gRPCの採用

gRPCはGoogleをベースとしてリモートプロシージャーベースのリモートコールとなる。規約ベースで、サーバー側とクライアント側で通信できる。HTTPを介してリモートプロシージャーで通信できる。

実装としては、HTTP2ベースでバイナリでシリアライズされて通信する。

.NET Core 3.0は、フルスタックのWeb 開発環境となる

img

フルスタックのWeb開発というものが.NETでできる。完全にJavaScriptなしというかというとそういうことではないが、C#ベースとした開発ができる。

ML.NET

img

ここで、感情分析のデータを使用したML.NETのデモが行われた。

デモサイト
http://13.82.135.138/

学習用のデータを開いた。機械学習では、通常は自分でアルゴリズムを決めていないといけないが、AUTO-MLを使用すると、最適となるアルゴリズムを自動的に選んでくれる.NET C#でMLモデルが作成されるので、それを自分のアプリの中で使用することが可能である。

キーノートで使用していたアプリケーションは、Blazorで作っていて、感情分析は、自分で作った機械学習モデルを作成し、サーバーサイドでML.NETで使用している、

AIはあたり前の時代

今後は、C#を使って、AIを当たり前のように使っていきましょう。C#のまま、.NETを使っていくことができる。しかもGUIベースで簡単に!

.NET中心で一貫した開発を簡単に

img

.NET 中心で開発からリリースまで(CI/CD)、環境構築(Azure Kubernetes Services(AKS))まで、一貫した開発を行っていくことができる

.NET 5

img

次のロードマップとして、Build 2019で.NET 5が発表された。

.NET Core 3.1 の vNext = .NET 5となる。

今までの.NET Core + Xamarinのアプリケーションモデルを含む

サポートされるのは今までの.NET Core + Xamarinのアプリケーションモデルとなる。つまり、XamarinやMonoの優れた点を取り込むことで、.NET 5はすべての.NETアプリケーションをサポートすることになる。
(.NET Frameworkは4.8で保守フェーズとなる。)

分かれていたライブラリが統合

基本ライブラリ(BCL)として.NET Coreで利用されているCoreFXをMonoからも利用できるように対応することで、ランタイムとその上で動作するアプリケーションを、実行環境に合わせて任意に組み合わせて利用できるようになる。.NET Standardで作成する。

補足

  • BCL + .NET Standard
  • JIT(実行時コンパイラ)とネイティブの実行モデル
  • Java(Android)とSwift(iOS)の相互運用性を含む

.NET 5に含まれないアプリケーションモデル!(廃止されるもの)

  • ASP.NET Web Forms
    • 代替は、Blazor(ASP.NET MVC)。JavaScriptを書かないというコンセプトは同じ。移行ガイドが提供される。
  • WCF
    • 代替は、gRPC for WCF Server and remoting。移行ガイドが提供される。
  • WF
    • 代替は、Open source core workflow for Windows

.NET Frameworkの今後

img

4.8が最終メジャーバージョンとなる。サポートライフサイクルポリシーに変更はないので、OSがサポートされる間は、サポートされる。
(Ask The Speakerで確認したところ、3.5も同様のライフサイクルポリシーということでした)

.NET Core、.NET 5については、新規案件での開発ととらえていただければよく、既存案件で無理に移行する必要はない。
ただし、これから作成するアプリケーションについては、クラウドネイティブなアプリケーションを意識する必要がある

(所感)その後のセッションも踏まえて考えると、クラウドに親和性が高く機能性が高いアプリケーションを、効率よく開発していくには、.NET Core 3.0、.NET 5を採用することが大事だと感じました。

今後のスケジュール

img

LTS(Long Time Support)について明確に示されている。

(所感)2019年7月の.NET Core 3.0 RC で開発しつつ、2019年11月の.NET Core 3.1を正式採用として新規開発を始めていくのが良いのではないかと感じました。

.NET 5 はすべてのアプリケーションのための統一プラットフォーム

img

.NET は、デスクトップ、Web、モバイル、IoT、Aiまですべてのアプリケーションを統一して扱えるための生産性が高いプラットフォームである

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?