Visual Studio 2019 Launch Event in Tokyo. に行ってきました。 #VS2019

connpass.com

お仕事はもっぱらC#で.NETなのにあまりそっち方面のイベントに参加したことがないことに気付いたりしたので申し込みました。

 大人の事情でお仕事に使っているのはまだ2017ですが、軽くなったとかAIによる入力補完とか楽しそうな情報が流れてましたよね:)

 品川はさっぱり縁がないですね…;

Visual Studio 2019 GA ! ~ 最新情報 & これからの開発スタイル @chack411

タイトル通り、VS2019でサポートされるこれからの開発で利用される機能についてのセッションでした。

最近DockerのWindowsコンテナがマイブームなので、AKSで一部のコンテナだけ(?)自分の開発環境のものを使って他は共有するテスト環境のコンテナを利用できる機能みたいなのが気になりました。

関わっているプロジェクトのDockerfileを勝手に書いたりしていて本番運用できるかどうか考えてみたときに、AWSだとWindowsコンテナが自前で頑張るみたいな感じだったので早々に見切りをつけてしまったのだけれどAzureならうまくできるのだろうか。(そもそもコンテナで運用するほどの規模じゃなさそうという話はあるけれど、半分趣味でやっている。)

 

www.slideshare.net

.NET Frameworkのプロジェクトを.NET Coreにマイグレーションする勘所を実際にやってみて説明していただけるという内容でした。プロダクトコードを使ってデモしていただけるのは具体的にイメージがつくのでとてもありがたいですね🙏🏻

「.NETのメインはもうCoreに移ってる」とのこと。バージョンアップもまずはCoreに入っていくし、複数バージョンが同居できるし、ランタイムごと配布できる。

確かにポータビリティがあるというだけで充分に魅力的ですよね:) 顧客の.NET Frameworkバージョンに縛られていつまでも古いバージョンを使い続けなければいけない苦しみ…肌で感じております…:(

CoreのプロジェクトからFrameworkのプロジェクトを参照していてもビルドできて実行も可能とのこと。ただしFrameworkにあってCoreに無いAPIは普通にあるので実行時に落ちる可能性がある。実際にそのようなAPIが呼ばれるコードパスを通らないと発覚しないので、できればやらない方がいい。

もちろんやらない方がいいに決まっているわけですが、現実的には全てのプロジェクト/ライブラリを同時に置き換えるのが難しいことはあるわけで、そういうところは現実に寄せて実行可能としている姿勢は.NET系の文化としてあるのかなと勝手に思ってます。そういう守るところは守りつつ現実的な妥協(?)もやっていくバランスがとっても良いと感じてます:)

実際にCoreへマイグレーションするのにどれぐらい修正が必要なのかは.NET Portability Analyzerを使うとわかるとのこと。サードパーティ製のライブラリはサードパーティに対応をおまかせするしかないとのこと、そらそうだ。

ところでお話の中でオススメだと言及されていたSimple Injectorが気になるので後日触ってみたい。

 

www.slideshare.net

先述の通り最近DockerのWindowsコンテナがマイブームなので注目だったのですが、知識が足りずにあまり咀嚼できませんでした;

docker-compose/Service Fabric/k8sあたりのオーケストレーション(?)周りはまだ全然触れていないので、個人的な今後の課題ですね。

C# 8.0 Preview in Visual Studio 2019 (16.0) @ufcpp

C#といえば」の岩永さんのセッションでした。C#erの例に漏れず、私も大変お世話になっております🙇🏻‍♂️ブログでも紹介されているC#8.0の新機能についてわかりやすく解説されていました:)

NRT(Nullable Reference Types null許容参照型)はオプションによって有効/無効を切り替えられるとはいえ、原則として後方互換を破壊しないというC#の原則を破ってでも入れたい修正とのこと。(オプションで切り替えるのは構文が分岐するということで複雑性が増すので、それも原則としては避けていたらしい。)

確かに今まで遭遇したことがない機能追加ですよね。とはいえ確かにnullを排除するのはモダンな言語では避けて通れないお話だと思います。私も正式リリースの暁にはチャレンジしたいです:)

とはいえnull許容なライブラリを使った瞬間に許容/非許容が混ざるので、混在するのは前提でnullチェックなどはしていかないといけないとのこと。もともとnullありきで設計されている以上、そこは仕方ないですよね。

インターフェイスのデフォルト実装はランタイムの変更が必要になる機能ということで、これは.NET Framework 2.0(2005年)以来のことだそうです。メジャーバージョンアップにふさわしい機能追加ですね:)

他にもswitch式やそれと組み合わせられるパターンマッチング、null合体代入など嬉しい機能が目白押しですね:) 大人の事情でValueTupleとデコンストラクタすらまともに使えていないですが、正式リリースが楽しみです:)

 じゃんけん大会でステッカーなどもらってお開きとなりました:) MacBook Proにステッカー貼りまくり野郎なのですが、いい加減に空きスペースがなくなってきたのでアップルロゴを隠す形で貼りました;

C#の新機能の話はやっぱりテンションが上りますね^^; 思えばオライリーさんのC#本を読んで触り始めてからずっと好きな言語です。なんというか、カチッとしてるけれども現実に折り合いをつけられる柔軟性を持っているというか…。モダンな機能もどんどん取り込まれますし、Coreの登場で間口も広がりましたしね:)

今後もC#でお仕事を続けていきたいです:) なので自分から環境を変えていこうと改めて思いました。

運営に関わられた皆さん、ありがとうございました🙏🏻