.NET Conf in Tokyo 2019 に参加してきました #dotnetconf
2019-10-28
azblob://2022/11/11/eyecatch/2019-10-28-dotnetconf-in-tokyo-2019-000.jpg

みなさんこんにちは、C# をちょこちょこ書いてる和田です。今回は .NET Conf in Tokyo 2019 のイベントレポートです。

#dotnetconf #とは

Microsoft 米国本社 .NET Base 開発チームのDirectorである Steve Carroll 氏の来日・登壇が決定!
長らくPreviewだった.NET Core 3.0は .NET Conf 2019 で GAになりました。
.NET Core 3.0のLaunchを記念して、東京でもローカルイベントを実施することになりました!
.NETやUnity界隈の Microsoft 社員、Microsoft MVPの方々をスピーカーに招いて豪華なメンバーでお送りします。

.NET Conf in Tokyo 2019

祝 .NET Core 3.0 GA!ということで、東京で開催されたローカルイベントだそうです。Microsoft のセミナールームを2部屋使い、Unity 関係のセッションと .NET 技術全般のセッションが並行して行われました。

Keynote - What’s New in .NET Core 3.0 and Visual Studio 2019 for .NET developers

Microsoft 米国本社 .NET Base 開発チーム Director の Steve Carroll さんより、 9月にリリースされた .NET Core 3.0 と Visual Studio 2019 v16.3 以降の機能について直々に紹介していただきました。

自己紹介以外すべて英語のセッションで、英語力~~~って感じで部分部分を聞き取るぐらいしかできませんでしたが、特に Visual Studio の方は知らない便利機能が多くてビビりました。リファクタリングメニューに"Add null checks for all parameters" があるとか .editorconfig ファイルをGUIの設定ツールで生成できるとか。EditorConfigについて、Twitterで参加者が「EditorConfigを使うのはいいんだけど、設定ファイルを不必要に肥大化させないようにしないといけないね」という議論をしていたのが印象的でした。

それにしても、C# 8.0 ばっかり追いかけてないで開発ツールの進化も気にしとかないと活用しきれなくてもったいないですね。ただ僕はまだ駆け出しなので既存の機能すら知らないやつが多くて活用しきれてるなどとは口が裂けても言えません。はい。技術も英語も頑張って勉強する必要がありそうです。

1st Session - Clean Architecture for Unity

最初は Unity Track で もんりぃ先生( @monry ) の Clean Architecture for Unity を聴いてきました。「Clean Architecture for Unity」、チームではCAFU(かふー)って呼んでるらしいです。かわいいですね。

レポートの初っ端から .NET Core 3.0 も C# 8.0 も全く関係ないセッションですが許してください。今ちょうど Clean Architecture の本を読んでいたところなので Clean Architecture には何も考えずにすぐ飛びついてしまうのです。Unity とか何もわからないのに。とりあえず Clean Architecture は面白い本なのでみんな読んでね。(ダイレクトマーケティング)

セッションの構成としては、前半が Clean Architecture の概要、後半が Unity で Clean Architecture を実現するにはという感じでした。バイトで高専の同級生な門下君がレポートした VSUCJP の「世界一分かりやすい Clean Architecture」でも語られていましたが、Clean Architecture ってあくまで設計の指針であって、具体的な実装にはあまり触れてないんですよね。もんりぃ先生はざっくりと 、

  • 依存の向きは外から内のみ
  • 制御の流れは依存と切り離して考える

という2つの方針とSOLID原則に従っていれば、自ずと Clean な Architecture に近づいていくだろうと語っていました(意訳)。これには僕も同意で、親の顔よりよく見る図は Clean Architecture のすべてであり実装方法の指示だと思って厳密に従おうとすると逆に窮屈になる気がしています。そもそもこの図、Robert Martin 氏のブログ(注:リンク先は日本語訳です)で実装の一例として紹介されているものなので、厳密に従わなきゃいけないというのもおかしな話なんですよね。ちなみに僕はVSUCJPで指摘されるまで例示だって気付いていませんでした。

そして後半、本題の Clean Architecture for Unity ですが、正直 Unity には疎いため完全に理解できたかといえばわからない感じです(もんりぃ先生ごめんなさい……)。詳しいところはスライドを見ていただくとして、個人的に気になったのは Clean Architecture の文脈から外れるクラスを配置する Application レイヤをどうやって荒らさないように保っているのかという点ですね。チーム内で工夫している部分とかあるんでしょうか?

こちらのセッションは Unity Learning Materials で動画が公開される予定らしいので、興味のある方はチェックしてみてください。

2nd Session - .NET Core 3.0 + Windows 10 で WPF 開発

CAFU のセッションが終わり、.NET Track に移動してきました。次のセッションは、Kazuki Ota (@okazuki) さんより最新のWPF事情についてでした。

.NET Core 3.0 でようやく .NET Core で WPF がサポートされ、デスクトップアプリ開発でもモダンなプラットフォームが使えるようになってきたらしいです。デスクトップアプリを開発している方にとっては、新規言語機能などのアップデートにも追従していけるということで一安心という感じなんでしょうか。

3rd Session - Inside FastEnum

VSUCJP の「今日からできる!簡単 .NET 高速化 Tips」でもお話されていた、じんぐるさん(@xin9le) のセッションです。FastEnum とは、じんぐるさんが .NET Core 3.0 の Enum 実装が遅すぎたために作った(自称)世界一速い列挙型だそう。今回は、その FastEnum を支える技術についてご紹介いただきました。

FastEnum の速度の秘密は、ほとんどが Static Type Caching の恩恵らしいです。これは Generics な static class のコンストラクタが T 型ごとに確実に1回づつ呼ばれる仕様を利用した実装なのですが、こんなアイデアを思いつけるのが凄いと思います。じんぐるさんの高速化 Tips セッションは(正直ニッチすぎて業務では使い所がなかなか無いのですが)勉強になるし楽しいです。

4th Session - C# 8.0 非同期ストリーム

そして最後のセッションは、 ++C++; // 未確認飛行C でおなじみの岩永さん(@ufcpp)による「C# 8.0 非同期ストリーム」でした。前回VSUCJPの Nullable 参照型の時もそうでしたが、一つの機能に対する情報量が非常に多いです。とても勉強になります。

さて、C# 8.0 で追加された非同期ストリームは、await と yield を混在して記述できるようにして複数のデータを非同期に返し、await foreach で複数のデータを非同期に受け取るという機能です。デモで、これまた .NET Core 3.0 でサポートされた gRPC を使った非同期ストリームの例を紹介していただきました。await foreach によって、複数データを同期的に受け取る場合よりも可読性が上がった印象です。シンプルなのは良いこと。

終わりに

どのセッションも非常に勉強になりました。個人的にはじんぐるさんのセッションが一番好きだったりします。これ書き終えたら狂気に満ちた世界をちょっと覗いてみようかな……という気持ちです。怖いもの見たさ。

最後はプレゼントタイムで貰ったストローの写真でお別れです。それではごきげんよう。