しばやん雑記

Azure Serverless とメイドさんが大好きなフリーランスのプログラマーのブログ

.NET Conf 2020 Online - .NET 5 リリース記念パーティートーク フォローアップ

金曜の夜に .NET 5 のリリース記念と称して、.NET 好きメンバーを集めてアップデートや新機能について話をしました。考えていたタイムスケジュールが完全に崩壊してしまいましたが、2 時間で何とか収まりました。

スピーカーは綺麗に興味が異なっていたので、言い出しっぺかつ進行役の自分としても学びが多かったです。

最近はフォローアップばかり書いている気がしますが、自分が関わったイベントについては今後も頑張ってツイートまとめの作成とフォローアップを書いていきたいと思います。

書くにあたっては Twitter と YouTube から独断と偏見でいくつか拾ってきました。

元々は Facebook で適当に書いたのがきっかけでしたが、多くの方に喜んでいただけたようなので嬉しいです。また機会があればこういう形式で楽しく話したいと思っています。

使用したスライド

Speaker Deck にもアップロードしていますが、スライド中のリンクが全て失われてしまったので Azure Storage にアップロードしたものを iframe で張り付けておきます。

今回は初めてスライドの作成に Marp を使いました。何も考えなくてもいい感じのスライドが出来上がったので便利でした。Windows で書きましたが問題なく動きました。

Twitter まとめと YouTube アーカイブ、文字起こし

開催中のハッシュタグ付きツイートに関してはまとめています。日本語でフィルタリングしたので若干抜け漏れはあると思いますが、グローバルイベントなので仕方ない部分もあります。

配信のアーカイブも既に YouTube で見られるようになっているので、当日都合が悪くて見られなかった方や見るのを忘れてしまった方はこちらからどうぞ。

この若干の圧を感じるサムネはみつばたんに作ってもらいました。素材が少なくて苦労していました。

そして id:orangeclover さんが 2 時間のトークを文字起こししてくださったので、感謝と共に紹介しておきます。かなり喋っていたはずなので大変だったと思いますが、テキストで読むのはまた違って良かったです。

どこまで使えるのかは分からないですが Teams にも文字起こしの機能があるようなので、機会があれば試してみたいと思いました。個人的には字幕よりも記事として読む方が好みでした。

.NET ランタイムのサポートポリシー

.NET 5 はリリースされましたが、Build 2020 の時の発表にもあったように LTS は 1 年後の .NET 6 まで待つ必要があります。正直なところ 1 年毎にアップデートが決まっている状態で、LTS と Current はあまり意味を持たないのかもしれません。

サポートポリシーは松村さんが Qiita で都度アップデートされています。ありがたく参照させてもらいます。

基本的には 1 年毎に Current を追いかけていくのが最適な選択なのではないかと考えています。

GitHub Actions / Azure Pipelines での .NET 5 サポート

コメントがあったので拾ってきました。結論から言うと GitHub Actions と Azure Pipelines ではプレビューの時から .NET 5 を使うことは出来ていました。ただし正式版までは VM にインストールされません。

VM にインストールされているソフトウェアの情報は以下のリポジトリから入手できます。

しばらく前から GitHub Actions と Azure Pipelines はこのリポジトリで作成された Image が利用されているので、ここだけを確認しておけば問題ありません。

当然ながら高頻度で Image を作成して更新することは難しいので、新しい SDK がインストールされるのは時間がかかりますが、それぞれの Action / Task を使うことで実行時にインストールが可能です。

Image のアップデートによって CI が不安定になるのを避けるために、常に使用するバージョンを明示的に指定するようにしています。Node.js などでも同じことがいえるので注意が必要です。

Blazor WebAssenbly

本編では基本的に坂本さんに全てを任せる形でしたが多少補足しておきます。.NET 5 に置ける ASP.NET Core のアップデートは Blazor がメインだったので、リリースノートはしっかり確認しておいた方が良いです。

dll がそのまま落ちてくるのがあまり好きではなかったのですが、最近は Brotli での圧縮を行うのが定石のようですね。アセンブリは Application Cache に保存されるというのは知りませんでした。

ダウンロードサイズが飲めない場合は Blazor WebAssembly は諦めという話はありましたが、少し前からアセンブリの Lazy Loading にも対応しているようなので、改善していきそうです。

WinForms や WPF アプリと同様に IL Trimming を利用することで、不要なコードを削減してダウンロードサイズを減らせるようです。個人的には動作が壊れるのが心配なので様子見です。

YARP のベンチマーク

配信中は YARP のベンチマークが存在しないという話をしましたが、ASP.NET Core で共通のベンチマークに組み込まれていたので、以下の Power BI から YARP と他のメジャーなリバースプロキシとのパフォーマンス比較が出来るようになっていました。

14 ページ目にある Proxies が YARP のベンチマーク結果になっています。

f:id:shiba-yan:20201117225637p:plain

ベンチマーク結果から明らかにおかしい部分を削りましたが、まだ YARP は nginx より若干遅いようです。とは言え nginx は ARR の 2 倍以上早いので、プレビューにしては良い結果が出ているとも言えます。

Envoy や HAProxy とは大差を付けられていますが、素の HttpClient を使ったシンプルな Proxy は早いので、ルーティングや書き換え周りの最適化がまだ進んでいないようです。

MAUI / Uno Platform / WinUI など

紆余曲折あるクライアントアプリケーション開発については、今回の話を聞いた限りでは Uno Platform がかなり有望ではないかと感じました。MAUI を評価するには時期尚早ですが、若干の不安はあります。

Uno Platforrm は .NET 5 リリースとほぼ同時に対応を表明している点も評価が高いです。

そして配信中にも少し出たと思うのですが、WinUI 3.0 については元々来年リリースだったという話です。そして XAML Island は生きているらしいです。

この辺りは正直どうなるのか想像がつかないですが、正直なところ .NET Framework 4.8 の WinForms / WPF が長生きしそうだなと感じています。Project Reunion も若干心配です。

.NET の ARM64 対応

.NET Conf 2020 の前週に Apple Silicon の Mac が発表されて盛り上がっていましたが、現時点では .NET 6 でのサポートが予定されていました。TFM は osx-arm64 になるようです。

既に基本的な ARM64 のコードジェネレータなどは実装されているので、進捗はかなり良さそうです。

そして WPF の ARM64 対応は 21H1 となっているので、来年には .NET 5.0.1 とか 5.1 がリリースされるのかもしれません。バージョンの上げ方については続報を待ちたいです。

あまり関係ないですが、この Issue は Pro X を所有する人柱が集まっているので熱意が凄いです。

.NET 5 Early Access と Self-contained

最後は既に Self-contained を使って App Service に .NET 5 アプリケーションをデプロイしている場合について、軽く補足しておきます。.NET 5 Early Access に関しては以前書いたのでこちらを参照してください。

.NET 5 の Self-contained は実行に必要なライブラリなどを全て含んだ形になっているので、App Service の Runtime Stack を変更しても影響ありません。なので以下の手順で Early Access に変更すると安全です。

  1. .NET 5 Early Access を有効にする (この時点では Self-contained なアプリケーションが動作)
  2. Framework Dependent に切り替えて再デプロイ

Early Access が提供されるようになったので、Self-contained を使う場面はクライアントアプリケーションが多くなりそうです。App Service ではパッケージのサイズがパフォーマンスへ影響します。