.NET Conf in Tokyo 2019に参加してきた
これは2019/10/27(日)に行われた.NET Conf in Tokyo 2019に参加してきたメモと感想です。
今回はUnity系の方にのみいましたので.NET側の方の内容は最初のみです。
またイベント中のメモをベースとしているので誤りなどがあった場合は気づき次第修正します。
資料は後日アップロードされたら更新する予定です。
目次
- 目次
- イベントページ
- 内容(※敬称略)
- Opening .NET Conf 2019 in Tokyo Hiroyuki Mori (@hiroyuki_mori)
- What’s New in .NET Core 3.0 and Visual Studio 2019 for .NET developers Steve Carroll
- Clean Architecture for Unity Tetsuya Mori (@monry)
- MagicOnion〜C#でゲームサーバを開発しよう〜 torisoup (@toRisouP)
- Riderはいいぞ! Ryota Murohoshi (@RyotaMurohoshi)
- C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜 ユニティ・テクノロジーズ・ジャパン 安原祐二・名雪通
- その他
イベントページ
会場:日本マイクロソフト株式会社様 品川オフィス Seminar Room C+D, B ハッシュタグ:#dotnetconfunity #dotnetconf
内容(※敬称略)
Opening .NET Conf 2019 in Tokyo Hiroyuki Mori (@hiroyuki_mori)
資料:
なし
内容:
会場の説明、会の説明など
メモ:
なし
自分が参照したリンクたち:
なし
What’s New in .NET Core 3.0 and Visual Studio 2019 for .NET developers Steve Carroll
資料:
内容:
.NET Core3.0やVisual Studioについての新機能の説明とデモ
メモ:
・Visual Studio Live Shareを使ったライブコーディング大会は楽しそうだなと感じた
・英語なので細かな話を理解するまで至らなかったが、デモやスライドを見てなんとなく理解できた
・Blazorは今回初めて知ったが、JavaScriptの代わりにC#を使うというのはなかなか面白そうに感じた。
・Blazorがどこまでに萎えるかはもう少し見極めが必要
自分が参照したリンクたち:
dotnetconf2019/Technical/keynote at master · dotnet-presentations/dotnetconf2019 · GitHub
.NET Core 3.0 の新機能 | Microsoft Docs
Azure Kubernetes Service (AKS) | Microsoft Azure
ASP.NET Core の概要 | Microsoft Docs
Go で実装しながら gRPC を理解する - reboooot․net
ASP.NET Core Blazor の概要 | Microsoft Docs
Visual Studio 用 IntelliCode | Microsoft Docs
.NET 開発環境をインストールする - AWS SDK for .NET
Clean Architecture for Unity Tetsuya Mori (@monry)
資料:
内容:
Clean ArchitectureをUnityで適用するために考えることと導入した結果
メモ:
・CleanArchitectureとはざっくりとした指針は示されているが、仔細な定義はない
・押さえるべきポイントを抑えれば自ずとCleanなアーキテクチャになる
・保守性の高いソフトウェアを開発する上で基本となる考え方
→S=単一責任原則
クラスのになう責務は一つだけ/適切に名前つけすることで守りやすくする/FooManager,BarControllerは責務が広くなりがち
→O=開放閉鎖原則
拡張に開き、修正に閉じる
switch〜caseで分岐させたりする時に対象となり得る
→L=リスコフの置換原則
親クラスとこクラスは置換可能であるべき
→I=インタフェース分離原則
インタフェースを適切に分けることであるインタフェースが担う処理は基本的に狭くすることができる
→D=依存性逆転原則 大事
抽象に依存し、実装には依存させない
・言語ごとにDIフレームワークが存在する
・UnityだとZenjectが有名でZenjectはMonoBehaviourに対するinjectをおこなってくれる
・Zenjectの場合installerで実体の作り方・探し方のルールを定義することでcontextがよしなにインスタンスを生成してinjectする
・依存の向きは外から内のみ
・制御の流れは依存と切りはして考える
・導入メリット:疎結合、テスタビリティ、慣れると可読性が高い
・デメリット:interface/classが多い、要IDE、慣れるまで可読性が低い
・依存と制御は別物として考える
自分が参照したリンクたち:
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture - nuits.jp blog
開発者が知っておくべきSOLIDの原則 | POSTD
Goでクリーンアーキテクチャを試す | POSTD
MagicOnion〜C#でゲームサーバを開発しよう〜 torisoup (@toRisouP)
資料:
内容:
MagicOnionの導入メリットとデメリット
メモ:
・MagicOnionとはネット通信のためのフレームワーク
・C#+.NetCore/Unity
・gRPCが通信プロトコル
・MessagePack for C#
・最大の特徴は通信レイヤを意識せずサーバーコードを呼び出せる
・MagicOnionは環境構築が大変
・開発フローはよく考える必要がある。
・C#のgRPCClientはUnmanagedなのでChannnelのDisposeを忘れるとすぐリークする
・MagicOnionはコストが高いもののサーバーとクライアントでC#を使えるようになる点が大きなメリットとなる
自分が参照したリンクたち:
.NET での汎用ホスト | Microsoft Docs
gRPC / MagicOnion 入門 (1) - 概要 - xin9le.net
Agones ―― Kubernetes 上でのゲーム サーバー構築をサポートするオープンソース プロジェクトが始動 | Google Cloud Blog
Riderはいいぞ! Ryota Murohoshi (@RyotaMurohoshi)
資料:
内容:
Riderの便利な使い方とおすすめ機能
メモ:
・Riderは.NETのIDE
・RiderはReSharperなどでもお馴染みのJetBrainsの製品の一個
・C#のお馴染みの書き方を補正したい時にRiderなら改善ポイントを指摘してくれる
・基本的なハマりポイントをRiderが代わりにレビューしてくれるので作業者の負担が減るつまり、Rider = 赤ペン先生
・Code Inspectionsは色々な理由で指摘してくれ、そのレベルはエラー、警告、提案、ヒントとある
・Code Inspectionsはなぜそこが間違っているのかの理由も教えてくれ、間違えを発見したらほかのエラーも全て確認できる
・Solution全体を調査するように設定可能だが、assetを対象にしたくないといった場合一部を除外して検索することができる
・livetemplateは自作も可能
・これだけは覚えてショートカット
- Show Action List :Option+Enter or Alt+Enter
- Find Action:Ctrl+C+Enter
- SerchEverywhere:Shift+Shift
自分が参照したリンクたち:
Unity:JetBrains Rider の使い方(Mac編) | Unity+AssetStoreおすすめ情報
Rider の新機能 - 究極の進化を遂げた最強の .NET 開発環境
Using Rider under Windows without Visual Studio: prerequisites – JetBrains Rider Support
ReSharper: The Visual Studio Extension for .NET Developers by JetBrains
ReSharperのすすめ - Qiita
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
JetBrains IDEのLive Templateを使い倒す - 絵描きエンジニアの日常
Live Templateを使おう! - Qiita
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜 ユニティ・テクノロジーズ・ジャパン 安原祐二・名雪通
資料:
内容:
Burstコンパイラーとは一体何か
メモ:
・早いプログラムの選択肢は色々あるがC#で早いのがいいのでBurst Compilerを使う
・現実的に仕事でBurstConpilerを使っている人は少なそう(今現在では)
・C#→IL→機械語の順番で変換される
・IL2CPP
C#→IL→C++→機械語
このIL2CPPはWebGL/WebPlayerのために実装した
・現在も中心的な存在IL2CPPだがもっと早くしたい!!そこでBurst Compiler
・LLVMとは様々なプログラミング言語に対応可能な Compiler基盤
・IRとはLLVMが扱う中間言語 プラグラミング言語/CPUアーキテクチャから独立
・LLVMはIRを対象に最適化を行う
・C++ clang IR llvm IR objの順番で実行されLLVMでものすごい最適化をする
・IRは最適化前後の2種類がある
・C# IL IR IR objの順番で実行。(Burst CompilerはLLVMを内蔵している)
・SIMDを使う
・Burst CompilerはC#JobSystemでしか動かない
・デメリットとしてクラス・配列・文字列が使えない
・例外(try,catch,finally)処理ができないがthrowは使える
・DOTSはエディタ上では速度はあてにならない。一度ビルドして実行することが必要
・BurstのセーフティチェックはEditor向けとビルド向けで別になっている
・Burstの今後
機種間Deterministic
→違う機種でも計算結果を合わせる
→add, sub,mul,div,sqrtは保障されている
→Unity.Burst,Intrinsics
・IL2CPPは汎用性が高い代わりに大幅な高速化ができなかった
・BurstはDOTSと合わせて威力を発揮し制約を設けることでC++と同等の高速化
自分が参照したリンクたち:
LLVMを始めよう! 〜 LLVM IRの基礎はclangが教えてくれた・Brainf**kコンパイラを作ってみよう 〜 - プログラムモグモグ
LLVMでLLVM-IRを生成して眺める · GitHub
インテル® コンパイラーによる AVX 最適化入門: 第1回 AVX とは | iSUS
x86/x64 SIMD命令一覧表 (SSE~AVX2)
LLVM - オープンソースアプリケーションのアーキテクチャ (翻訳)
【Unity】構造体の配列(NativeArray)と参照渡し - テラシュールブログ
その他
・Riderは思っていた以上に良いものだった。
・トライアル期間で使ってみて確信したら購入したい。
・MagicOnion場所によっては導入の解説をされている場所もあるので試してみる
・CleanArchitecture周りはざっと理解を深めたい。
・Burst Compilerの詳細を今日確認できてすごいよかった。ブラックボックス感のあったものが透明になったしわかりやすかった
あとで見る
www.slideshare.net