dotnetConf 関西2017に参加してきました
- はじめに
- .NETの今と未来~デバイス&クラウドネイティブを目指して
- Visual Studio拡張とRoslynとDotNet.exeなどいろいろ
- .NET Standard入門
- Introducing Fluent Design System あるいは Metro の先を紡ぐ手がかり
- LT
- その他
- おわりに
はじめに
10/14に日本マイクロソフト関西支店で行われた、dotnetConf関西 2017に参加してきました。
4セッション + LT大会で、バラエティ豊かな内容を聴くことができました。
聴き逃しや勘違いなどもあるかとは思いますが、聴きながら書き留めたメモを中心に書き残しておきます。
(修正などはご指摘いただければ対応します)
またスライドは後から公開されたものがあればリンクを追加する予定です。
会場到着🤓 #dotnetConf pic.twitter.com/BUWSBoil16
— Optional<🍅> 増井将則 (@masanori_msl) 2017年10月14日
.NETの今と未来~デバイス&クラウドネイティブを目指して
dotnetConfについてや、セッションのタイトル通り15年前!に登場した.NETが今どう変わっているか、今後どのように進んでいくか、
ということが紹介されました。
2017/10/22更新
dotnetConf関西2017のものに差し替えました
www.slideshare.net
ここからメモ
dotnetConfについて
dotnetConfはオンラインが中心。ただし今回のようにローカルイベントも世界各地で行われている。
Twitterでの盛り上がりはマイクロソフト本社にも伝わる。そのためどんどんツイートしてほしいとのこと。
マイクロソフト社の活動としてはAzureがメインになってきている。
ただし.NETは.NETで変わらず活動していく。
.NET Framework、.NET Core
Windows上で動作する .NET Framework (現行ver.4.7)と、
マルチプラットフォームで動作する .NET Core (現行ver.2.0。ベースの一部はMono)。
これらは今後も統合されるようなものではなく、それぞれ進化していく。
ただし.NET Frameworkの資産を .NET Core、 Xamarin でも活用できるように、
共通化( .NET Standard ?)も進めていく。
実装は C# がメインであり、最初に実装されはするが、 VB.net 、 F# もしっかりサポートしていく( .NET Framework、 .NET Core 共に)
Xamarin
Xamarinには2種類の作り方がある。
- Xamarin Native -> UI部分はそれぞれのプラットフォームに合わせて作り、共通処理をひとまとめ
- Xamarin Forms -> UI部分から共通。ただしプラットフォームによって制限もあり?
Xamarin Live Player を使うと、 Visual Studio と iOS デバイスをペアリング -> Visual Studio で Xamarin.iOS のデバッグが可能。
ただし XCode でビルドした状態と全く同じ、というわけではないので最終出力する部分は Mac 、 XCode が必要。
.NET Standard
.NET Standard は、 .NET Framework 、 .NET Core 、 Xamarin で共通で利用できるコード。
ver.2.0で2万以上のコードが共通化された。
利用方法としては、共通化させたいコードを .NET Standard ライブラリとして切り出す -> ライブラリとして使用可能
( Nuget パッケージも同時作成)
Container + Docker
現在はCloud上にあらかじめ用意されている機能・サービスを活用していく Cloud Native が中心になってきた。
App service on Linux & Web App for Containers
今までベース部分のOSはWindowsだったが、Linux を使うものが登場した(App service on Linux)。
コンテナでランタイムを実装する -> コンテナさえ動くようにすれば、どこでも動かすことができるように
Write-once, Run-anywhere
Containerを使う上で必要なファイルも Visual Studio で生成・編集できるように。
Visual Studio 2017 では Docker を利用する機能が内包されている。
通常のビルドと同じような操作で Docker のビルドをすることができる。
Serverless
Azure Functions -> AWS の Lambda のような、Serverless を実現する機能。
Functions は Visual Studio で、 .NET 、 C# を使って開発可能。
動作するのはユーザーからトリガーを引くための操作が行われた場合。
ローカルで動かしている.NETコードを基本そのままクラウドに上げることができる
↓
よりモダナイズされた環境での開発・サービス提供を
ここまで
感想
.NET って本当に幅広いんだなぁ(こなみかん)
お話の中で特に気になったのは .NET Standard と Azure でした。
.Net Standard は、例えば自分の普段の作業では Unity と UWP で処理を共通化させる、といったことができそうです。
また、処理を共通化させることができる、という意味ではネイティブだけでなく、 Xamarin にも取り組んでみようかなぁ。
あと Azure はそれ自体も気になるところですし、 Functions も C# で書くのであれば、
AWS Lambda よりも情報を集めやすそうな気がします。
( AWS Lambda では C# がメインの言語ではないため、
他の言語の情報を変換する必要があると思うので)
お試し枠もあるようなので、こちらも近いうちに触ってみたいと思います。
Visual Studio拡張とRoslynとDotNet.exeなどいろいろ
Visual Studio の拡張機能を作成した時にハマったあれこれが紹介されました。
2017/10/22更新
dotnetConf関西2017のものに差し替えました
www.slideshare.net
ここからメモ
拡張:Extensibility -> VSIXプロジェクト
下位互換性をもたせたい場合も、最新(Max ver)のVSで作成する
右クリックでメニューを追加したい場合、Custom Commandを追加し、実装する
ファイル名がすべてCommand名と共通のものになるため、全体に関連するファイルなどはリネームしたほうが良い
例)
- RClickCommandPackage.vsct -> ExTest.vsct
- RClickCommandPackage.cs -> ExTestPackage.cs
ドッキングウィンドウの追加は Custom Command Window?を使う
VS2017でしか使えないパッケージが含まれていてVS2015で使った瞬間クラッシュした
↑
↓
VS2015で作るとVS2017にはインストールできない
関数の型を調べるためにリフレクションを使おうとすると、VSがdllを開きっぱなしにしてしまい、
ビルド時?にエラー(Warning?)が出るので拡張を作る上では問題がある
ここまで
感想
Visual Studio を使って Visual Studio の拡張機能を作成する、というのはまだツラいところがあるのだなぁ
(最新版の Visual Studio が出るたびにビルドし直す必要があったり、プロジェクトのテンプレートにゴミが入っていてエラーになったり)
というのが正直な感想ではあります(´・ω・`)
VS2017でしか使えないライブラリが含まれていてVS2015で使った瞬間クラッシュした(Nugetを使って該当ライブラリを削除)
— Optional<🍅> 増井将則 (@masanori_msl) 2017年10月14日
↑
↓
VS2015で作るとVS2017にはインストールできない
(´・ω・`)#dotnetConf #dotnetkansai
ただ、ここも今後改善されてはくるのだろうと思いますし、
やっぱり自分の使い方に合わせて機能を追加していけるのは良いと思うので、自分としても挑戦はしてみたいなぁ、とも思いました。
また、紹介されていた拡張機能も試してみたいところ。
.NET Standard入門
最初のセッションでも紹介された、 .NET Standard についてガッツリ紹介されました。
ここからメモ
.NET Standard は、 .NET Framework 、 .NET Core 、 Xamarin のどれかだけにべったり依存したものではない。
一般的には可能な限り最小バージョンの .NET Standardを使うのが推奨される。
最適なバージョンは Visual Studio 側で静的に見てくれるわけではないため、
バージョン指定 -> コンパイル -> エラーが出たらバージョンを上げる
という作業を繰り返す必要がある。
実際にはライブラリを作るときに.NET standardが利用される。
- Shared library - Assemblyを共有しない。共有プロジェクト(ソースコードレベルの共有)
- PCL - 今はあまり使われていない
- .NET Standard - Assemblyを共有
今後は .NET Standard を使うことが推奨される?
PCL は .NET Standardの各バージョンと互換性がある。
足りないものはNugetでとってきて解決する。
Visual Studio 2017 Update4 からは .NET Standard2.0 のインストールをしなくても使える、らしい。
dnSpyでデコンパイル
(dnSpyについてはこの辺が参考になりそう?)
https://qiita.com/NetSeed/items/54fbf30cb21c77c05c41
dllでは型が定義されているのではなく、 TypeForwardedTo でアトリビュートで指定されているだけ
同じString型でも、 Windows 、 Android などターゲットに応じて全く別のクラスを参照している
(違いは.NET Coreが吸収する)
最終的には .NET Core の Library を参照するわけだが、そこまでの過程はプラットフォームごとに異なっている。
Nuget Package を参照したクラス?ライブラリを参照した Console App を実行するとエラーでクラッシュする ↓ 実行時に必要なライブラリもファイルを移動しないため
ValueTuple は .NET Framework4.7 から使用できる。 ただし、4.6の場合も .NET Standard で定義してそれを読み込むと.NET Framework からでも使用できる。
ただし、dllファイルを大量に引き連れてきてしまうので注意。
ここまで
感想
自分の実力的に理解しきれなかったところがたくさんあった、
というのが正直なところですが、公開された資料やお話の中にあったキーワードを元に、
中身を追いかけていこうと思います。
また、ググった感じでは Unity で .NET Standard のライブラリを作る、利用する、といった情報は少ないようですが、
こちらも試したいところ。
Introducing Fluent Design System あるいは Metro の先を紡ぐ手がかり
スキューモーフィズムから Metro (Modern UI)を経て、
Hololens などの Mixed Reality などにも対応する、
Fluent Design について紹介されました。
2017/10/22更新
スライドのリンクを追加しました
www.slideshare.net
ここからメモ
スキューモーフィズム -> Metro -> UWP(PCやスマホだけでなく、ラズパイやHololens)にも対応
Hololensの登場により、UIが画面の外に出てくるようになった
Fluent Design * Project Neon Fall Creates Updateで利用可能 * Light、Depth、Motion、Material、Scaleの5つの要素 * コンテンツが繋がっていくデザイン * 3D時代のWindowsのためのデザインシステム * フラットでもなく、スキューモーフィズムでもない、物質の本質を表現する
XamlでAcrylicBrush要素を使うことでアクリルブラシが使用可能に (アクリル板のように半透明になるイメージ)
Lightはマウスカーソルを光源?としてボタンなどにライトを当てることができる
MR Design Lab: UIサンプル
色遣いも決まりがある。
半透明とはいえ、Vista時代のものとは意味が異なっている
ここまで
感想
Fluent Design については、一番普段の仕事に近いのに全く知らなかったため、
早くキャッチアップせねば、という気持ちです(;´Д`)
最近(というほどでもないけど)登場したデザインとしては他に Material Design がありますが、
テイストなどは異なるものの、紙や光など自然界にあるものを表現する、
という部分に共通点があるのかな、などとぼんやり思いました。
LT
本編も濃ければLTも濃い。
あまり書き留めることはできませんでしたが、どれも聴きどころ満載な感じでしたw
ここからメモ
XAML条件分岐
今までは XAML の中で条件分岐を表現するのは難しかった
現在は Conditional XAML を使うことで、条件分岐が使えるようになった。
が、制限はあり、C#でifを書くようには使えないっぽい
Xamarin
Xamarin NativeでもMVVMCrossなどを使うことでDataBindingが使える
Azure Machine LearningでCNNを使って二次元の顔判定
Azure Machine LearningではGUIで機械学習ができる
学習に24時間以上かけられない、という制限がある
その他
なお懇親会にも参加させてもらいましたが、
持ち前のコミュ障を発揮してあまりお話することができずorz
ま、まぁこの辺は次回リベンジということで。
あとお話を聴いているだけでも楽しかった、ということは付け加えておきます。
おわりに
実は .NET 関連の勉強会は初めての参加でしたが、
参加されている方や雰囲気もどことなく違っていて新鮮でした。
.NET Standard や Azure など、気になる情報もたくさん得られたので、
時間はかかるかもですが一つずつ試してみようと思います。
スタッフの皆様、参加された皆様、会場やWifiなどを提供いただいたマイクロソフト様、ありがとうございました!
最後に...
Write once run anywhereは滅びんよ、何度でも甦るさ。それが人々の夢だからだ!
— Optional<🍅> 増井将則 (@masanori_msl) 2017年10月14日