Slide 1

Slide 1 text

Unity開発者に伝えたい.NETのこと ~2019 Summer~ @RyotaMurohoshi 2019/07/20(土) Unity++

Slide 2

Slide 2 text

昔のUnityとC#のこと

Slide 3

Slide 3 text

昔のUnityとC#のこと 「なんかiOSでクラッシュするからこれ禁止な」 「なんでasync/await使えないの!」 「新しいC#、使いたい!」

Slide 4

Slide 4 text

そんな時代もありました 懐かしいですね。でも今は違いますね!

Slide 5

Slide 5 text

Unityは進化している! 普通に最新のC#も使えるようになった!

Slide 6

Slide 6 text

今日はUnityで使えるようになった 新しい便利なC#の機能を紹介します!

Slide 7

Slide 7 text

嘘です!

Slide 8

Slide 8 text

C#の「言語機能」や「文法」の話はしませんが Unity開発者のみなさんに それに関係のある知見を共有させていただきます

Slide 9

Slide 9 text

Unity開発者に伝えたい.NETのこと ~2019 Summer~ @RyotaMurohoshi 2019/07/20(土) Unity++

Slide 10

Slide 10 text

• どうやったら新しいC#が使えるの? • .NETなんちゃらの設定どっち選べばいい? • .NETなんちゃらってたくさんあよね?何?

Slide 11

Slide 11 text

この25分のショートセッションでは、 みなさんが.NETのいろいろな要素を 理解して、整理できるようなお話をします

Slide 12

Slide 12 text

自己紹介 • @RyotaMurohoshi(むろほし) • Microsoft MVP • UniBook11、よろしくね!

Slide 13

Slide 13 text

C#の文法やLINQの投稿をします

Slide 14

Slide 14 text

.NET Standard向けのライブラリ ImportedLinq作りました! Unityでも使えるよ!使ってね!!! https://github.com/RyotaMurohoshi/ImportedLinq

Slide 15

Slide 15 text

「イントロダクション」 完

Slide 16

Slide 16 text

~知見1~ 工夫せずに最新のC#が新しいUnityで使えるよ!

Slide 17

Slide 17 text

長い間、Unityでは だいたいC# 4.0相当の言語機能 しか使えませんでした・・・

Slide 18

Slide 18 text

けれど今は違う! 最新C# 7.3の言語機能もばっちり使える!

Slide 19

Slide 19 text

Edit > Project Settings > Player Settingを開く Configurationセクションの「Scripting Runtime Version」を設定 「.NET 4.x Equivalent」を選択!これで最新C#!

Slide 20

Slide 20 text

これでC# 7.3の言語機能や .NETの新しいクラスライブラリが使えます!

Slide 21

Slide 21 text

2016年 春 Unityが.NET Foundationに参加 2017年 夏 Unity 2017.1リリース 「.NET 3.5 Equivalent」に加え「.NET 4.6 Equivalent」がExperimentalとして選べるように 2018年 初夏 Unity 2018.1リリース 「.NET 4.x Equivalent」がExperimentalでなく安定版に 2018年 冬 Unity 2018.3リリース 「.NET 4.x Equivalent」がデフォルトに、「.NET 3.5 Equivalent」は非推奨に 2019年中 Unity 2019のリリースサイクル中 「.NET 3.5 Equivalent」が利用不可能になる予定

Slide 22

Slide 22 text

Unity 2018.4 LTSを使っている人は ぜひ「.NET 4.x Equivalent」にして 新しいC#、そして.NETを使いましょう!

Slide 23

Slide 23 text

「最新のC#、Unityで使えるよ!」 完

Slide 24

Slide 24 text

次はこの画像中「API Compatibility Level」について

Slide 25

Slide 25 text

~知見2~ API Compatibility Level、どっちを選べばいいの?

Slide 26

Slide 26 text

Scripting Runtime Versionを変えると Api Compatibility Levelの選択肢も変わります

Slide 27

Slide 27 text

Api Compatibility Level これは何をどういう基準でえらべばいいんでしょ?

Slide 28

Slide 28 text

Scripting Runtime VersionとApi Compatility Levelの選択肢 .NET 3.5 Equivalent .NET 4.x Equivalent

Slide 29

Slide 29 text

Scripting Runtime VersionとApi Compatility Levelの選択肢 .NET 3.5 Equivalent .NET 4.x Equivalent .NET 2.0 .NET 2.0 Subset .NET 4.x .NET Standard 2.0

Slide 30

Slide 30 text

• .NET 4.x • .NET Standard 2.0 Api Compatibility Levelはどっちを選べばいいの? 何がどう変わる?

Slide 31

Slide 31 text

Api Compatibility Levelを変えると プロジェクトで参照する.NETのDLLが変わる!

Slide 32

Slide 32 text

.NET 4.xを選ぶ場合 • .NET Framework 4.xの APIすべてが提供されている • API として提供されているが、すべてのプラットフォームで 動くわけではない。 実行時にエラーになることも • ビルド成果物のサイズが⼤きくなる • これを選んだ時、.NET Standard 2.0 向けのライブラリも使える

Slide 33

Slide 33 text

.NET Standard 2.0を選ぶ場合 • .NET 4.xで提供されたAPIの内、こちらには無いAPIもある • ビルド成果物のサイズを小さくできる • 開発に.NET Standard 2.0向けのライブラリを使える 公式ブログより 「このプロファイルは、Unity が対応しているすべてのプラットフォームで機能するようになります。」 https://blogs.unity3d.com/jp/2018/03/28/updated-scripting-runtime-in-unity-2018-1-what-does-the-future-hold/ 機能する?すべてのAPIがすべてのプラットフォームで使えるわけではないと思う

Slide 34

Slide 34 text

比較表 .NET 4.x .NET Standard 2.0 提供されているAPIの数 比べると多い 比べると少ない ビルド成果物のサイズ 比べると大きい 比べると小さい .NET Standard 2.0 の外部ライブラリは? 使える 使える

Slide 35

Slide 35 text

「ビルド成果物のサイズ」は、 「画像などのアセットの寄与率が⼤きい場合がある」 「Code Strippingで使わないコードに対処できる」 ということも考慮に入れましょう

Slide 36

Slide 36 text

Api Compatibility Levelで.NET 4.xだと使えるけれど .NET Standard 2.0で使えないコードの例 System.Reflection.Emit Utf8JsonやMessagePack-Csharpで使われている

Slide 37

Slide 37 text

私の「Api Compatibility Level」のオススメは、 まず、.NET Standard 2.0にして .NET Standard 2.0で存在しないクラスが 必要になったら.NET 4.xに切り替える

Slide 38

Slide 38 text

「Api Compatibility Level、どっちを選べばいいの?」 完

Slide 39

Slide 39 text

.NET 2.0と.NET Standard 2.0、似てるけど別物 .NET Standard 2.0は古いわけじゃない じゃあ、.NET Standardって何だよ?って話をします

Slide 40

Slide 40 text

~知見3~ .NET Standardって何なの?

Slide 41

Slide 41 text

再掲 .NET Standard向けのライブラリ ImportedLinq作りました! Unityでも使えるよ!使ってね!!! https://github.com/RyotaMurohoshi/ImportedLinq

Slide 42

Slide 42 text

再掲

Slide 43

Slide 43 text

.NET Standardとは? 仕様・規格

Slide 44

Slide 44 text

.NET Standardとは? .NET Frameworkとか、.NET Coreとか、Monoとか、 “.NET 実装”のクラスライブラリが 提供すべきAPIの仕様・規格

Slide 45

Slide 45 text

「だから何だよ?意味わかんねぇよ!?」 「ん?何がうれしいの?」 そう思った方もいると思います

Slide 46

Slide 46 text

.NET Standardを理解するためのポイント • いくつかの.NET実装があること • .NET実装ごとに、クラスライブラリのAPIが違うこと

Slide 47

Slide 47 text

.NET実装はいくつかある • .NET Framework • .NET Core • Mono

Slide 48

Slide 48 text

.NET実装がもっているもの • メモリ管理、例外処理、スレッドの同期などの機能をもつランタイム • クラスライブラリ • 実装ごとに複数のアプリケーションフレームワーク • 開発ツール(⼀部の開発ツールは複数の実装間で共有)

Slide 49

Slide 49 text

.NET実装はいくつかある それぞれを簡単に紹介!

Slide 50

Slide 50 text

.NET Framework • オリジナルの.NET実装 • Windows専用 • 2002年正式リリース。長い歴史を持つ • フレームワークはサーバー用のものやWindowsデスクトップアプリ用など • ⼀部のコードのみが、reference source として公開されている

Slide 51

Slide 51 text

.NET Core • クロスプラットフォーム • オープンソース • 活発にアップデートが行われ、できることも、クラスライブラリもどんど ん増えている • 主にサーバーサイド(ASP.NET Core)で活躍している

Slide 52

Slide 52 text

Mono • 長い歴史を持つ(1.0が出たのが2004年!) • クロスプラットフォーム • オープンソース • Xamarinの基盤、モバイルアプリやデスクトップアプリの基盤 • UnityはUnity用にカスタマイズしたMonoを活用している

Slide 53

Slide 53 text

.NET実装はいくつかある • .NET Framework • .NET Core • Mono

Slide 54

Slide 54 text

.NET実装はいくつかある • .NET Framework • .NET Core • Mono • UWP • Xamarin.Mac • Xamarin.Android • Xamarin.iOS • Unity

Slide 55

Slide 55 text

いろいろな.NET実装向けに ライブラリをつくることを想像してみてください! .NETの実装がいろいろバラバラだったら 個別に対応するの、めんどくさくないですか?

Slide 56

Slide 56 text

.NET実装がもっているもの • メモリ管理、例外処理、スレッドの同期などの機能をもつランタイム • クラスライブラリ • 実装ごとに複数のアプリケーションフレームワーク • 開発ツール(⼀部の開発ツールは複数の実装間で共有)

Slide 57

Slide 57 text

ランタイムは規格化されている! ECMA 335

Slide 58

Slide 58 text

クラスライブラリにあるLINQメソッド「TakeLast」 .NET Coreには、2.0からある .NET Frameworkには、ない .NET実装のクラスライブラリごとにAPIが違う!

Slide 59

Slide 59 text

ライブラリ開発者として、 .NET実装ごとにクラスライブラリに 差分があるの⼤変!!!

Slide 60

Slide 60 text

「少なくともこのAPIは全部の.NET実装で使えるよ!」 そんな規格・仕様があると嬉しい!

Slide 61

Slide 61 text

.NET Standard

Slide 62

Slide 62 text

.NET Standardとは? “.NET 実装”のクラスライブラリが 提供すべきAPIの仕様・規格 実は.NET Standard以前に別の規格もあった : PCL

Slide 63

Slide 63 text

.NET Standard • 「.NET実装」が提供すべきAPIの⼀覧、仕様 • 仕様であり、APIの実態があるわけじゃない • ライブラリ開発者は.NET Standard向けにライブラリをつくれる • 実装すべきであって、必ず正しく実装されているわけじゃない • プラットフォーム的に、「それはできない」ってAPIもある

Slide 64

Slide 64 text

.NET Standard • .NET Standardはバージョンを持つ • バージョンアップごとにAPIが増えている • 1.0で7949個のAPI • 1.6で13501個のAPI • 2.0で32638個のAPI • 新しい.NET Standardのバージョン向けのライブラリだと、ライブラリ開 発にたくさんのAPIを使える • ライブラリ開発者は、.NET Standard 1.0向け、.NET Standard 2.0向けみた いな感じでライブラリをつくれる

Slide 65

Slide 65 text

Unity 2018.1とそれ以降は.NET Standard 2.0をサポートしている .NET Standard 2.0で定義されている32638個のAPIが使える そして.NET Standard 2.0向けのライブラリも使える! .NET Standard 1.0や.NET Standard 1.6向けのライブラリも使える!

Slide 66

Slide 66 text

.NET Standard 1.0向けライブラリ Unity 2018.1、.NET Core 1.0、.NET Framework 4.5、Mono 4.6以上などで使える .NET Standard 2.0向けライブラリ Unity 2018.1、.NET Core 2.0、.NET Framework 4.6.1、Mono 5.4以上などで使える ※.NET Frameworkは4.7.2以上がおすすめ ライブラリで.NET Standardのバージョンを上げると、 ライブラリ開発で使えるAPIは増えるけど 古いバージョンの.NET 実装でそのライブラリを使えなくなる

Slide 67

Slide 67 text

.NET Standardバージョン表 https://docs.microsoft.com/ja-jp/dotnet/standard/net-standard より

Slide 68

Slide 68 text

.NET Standardポイントおさらい .NET Standardは.NET実装が実装すべきAPIの仕様 Unityは、2018.1から.NET Standard 2.0をサポートしている Unity 2018でも.NET Standard 1.0や2.0向けのライブラリが使える!

Slide 69

Slide 69 text

.NET Standardって何なの? ここまで

Slide 70

Slide 70 text

おまけに これからの.NETの未来についてを簡単に

Slide 71

Slide 71 text

.NET Standard 次は.NET Standardのバージョンは2.1がリリース予定 .NET CoreのSpan、ValueTask、HashCodeなども追加 System.Reflection.Emitも⼤幅追加!

Slide 72

Slide 72 text

UnityとMono 次の.NET Standard 2.1はサポートする予定! しかし、今のところいつになるかはTBD(未定)

Slide 73

Slide 73 text

.NET Framework 4.8が最後のメジャーバージョン 次の.NET Standard 2.1はサポートしない ※セキュリティアップデートなどはまだまだこれからも続きます

Slide 74

Slide 74 text

.NET Core 3.0が2019年9月にリリースされる パフォーマンス改善にたくさんのAPIの追加 .NET Standard 2.1対応 .NET Frameworkでしか使えなかったWPFやWinFormsが、.NET Coreでも使えるように(ただしWindows限定)

Slide 75

Slide 75 text

.NET 5 2020年11月、.NET なんちゃらはまた⼤きな動きがありそうです 気になる人は MicrosoftのBlog「Introducing .NET 5」 https://devblogs.microsoft.com/dotnet/introducing-net-5/

Slide 76

Slide 76 text

おさらい • 新しいC#がUnityで使えること • それに関する.NETの設定のこと • .NET Standardと各種.NET実装のこと • これから先の.NETのこと

Slide 77

Slide 77 text

Unity開発者に伝えたい.NETのこと ~2019 Summer~ @RyotaMurohoshi 2019/07/20(土) Unity++