$30 off During Our Annual Pro Sale. View Details »

Unity開発者に伝えたい.NETのこと

 Unity開発者に伝えたい.NETのこと

2019/07/20(土)にUnity Technologies Japan様開催された

「Unity++~ ショートセッション勉強会 presented by Unity部~」で発表した

「Unity開発者に伝えたい.NETのこと」の発表資料です

RyotaMurohoshi

July 20, 2019
Tweet

More Decks by RyotaMurohoshi

Other Decks in Technology

Transcript

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

    View Slide

  2. 昔のUnityとC#のこと

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. 嘘です!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. 「イントロダクション」

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  21. 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」が利用不可能になる予定

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  29. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  33. .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がすべてのプラットフォームで使えるわけではないと思う

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  42. 再掲

    View Slide

  43. .NET Standardとは?
    仕様・規格

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  61. .NET Standard

    View Slide

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

    View Slide

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

    View Slide

  64. .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向けみた
    いな感じでライブラリをつくれる

    View Slide

  65. 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向けのライブラリも使える!

    View Slide

  66. .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 実装でそのライブラリを使えなくなる

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide