2016年12月5日月曜日

[C#].Net Standard? .Net Core? pcl? UWP? what??一体何なの?

  • 最近のマイクロソフトの開発言語周りの動向がよくわからない
一言でいえばコレです。


この混沌とした状況をWindows8.1から歴史を見て読み解いていきたいと思います。

  • 歴史

UWP誕生について
  デスクトップアプリはレガシーとされつつWindows8.1とWinRTに分裂してそれぞれが別路線を辿ったのかと思いきやユーザー不評の意見を受けてWindows10になっていきなりUWPとして統合された。
UWPはWinRTの後継でありながらXBOXやWindowsMobileやデスクトップ、タブレット全部1つのアプリケーションで動くものを作ろうというとても壮大な野望の元に生まれました。しかし出来たてホヤホヤかつ昔から使っていた.Net Frameworkはレガシー扱いにされ、再実装されることになった。
また、完全にデスクトップアプリになるかといえばそうではなくて、デスクトップ上でウィンドウで表示されるよう裏でエミュレーターみたいなものが動いて実現しているようです。

まとめ①
 従来デスクトップアプリ→現在も健在
 Win8.1専用アプリ+WinRTアプリ→UWP


Xamarin買収

 2016年2月頃に事件がおきました。MicrosoftによるXamarin買収。
もともとXamarinはMonoプロジェクトの1つでLinux上で.Net frameworkを動かそうとオープンソースで実装されたフレームワークである。それをAndroidやiPhoneでも動かせれるように個々のプラットフォームに対応したのがこのXamarinである。もちろん無料でも使える状態だったのだがバイナリ作成する容量がとても小さかったため、有料のを使わないとできない状況でしたので個人向けではありませんでした。が、しかしマイクロソフトによって買収され無料枠を撤廃しました。
これでC#を使えばWin10、Android、iOSどのプラットフォームで動くようになりました。


よく考えてみるとUWPの目的とXamarinってかぶっていない?って気づくと思います。

もちろんかぶってます。

まとめ②
 UWPのターゲットプラットフォーム:Win10、WinMobile、XBOX
 Xamarinのターゲットプラットフォーム:UWP、Android、iOS
 Monoのターゲットプラットフォーム:Win、Linux、macOS


混沌とした状況に陥る

 とても重要なので全体の流れを一度まとめてみる。

 デスクトップアプリから始まり、Win8.1でタブレット、スマホ最適化の流れが入り込んでポストデスクトップの流れが起き始める。
Win10になってWinRTは実質終了、APIはUWPとして新生する。
マイクロソフトはXamarinを買収して全てのプラットフォームに対応する。

デスクトップアプリとスマホ・タブレット関係、クラウド(WEBアプリ)、Android/iOSプラットフォームの断片化が始まる。
こんな状況こそまさにリーダー不在でプロジェクトが進んでいったかのような.Netファミリーですが、
匙を投げてオープンソース化されました。Roslynという名で開発がスタートしてMono/XamarinにもMSのコードが流入され安定化が増すというプラスの面がでてきました。
(VSユーザは気づいていると思いますが、コンパイルや統合環境の起動がやたらと遅くなりストレスMAX)
さらにWinRT系のAPIはTaskとAsync/Await、IO周りのAPIリニューアルなど古参ユーザーを蹴落とすかのような改悪があったりなかったり、、言いたいことはあるけどね。。


これもう手に負えないわー。そうだ、統合しよう!っていう流れになり生まれたのが.Net Core 1.0と.Net Standardです。

前者の.Net Core 1.0はASP向けとプラットフォーム(Win/Linux/macOS)で動くようにしたもので、
.Net Standardはデスクトップもモバイルもクラウドも全部共通のフレームワークを使おうねと定義されたもの。いわばヘキサゴナル方式の考えで最小限のインターフェイスを定義されていて特化した処理はそれぞれのプラットフォームプロジェクトで書いてね!というものである。

まとめ③
デスクトップ
 UWP = Win10/WinMobile/XBOX
 .Net Core = クラウド向け Win/Linux/macOS(主にASPかコンソールの2択)
 .Net Standard=断片化した.Netファミリーの共通プラットフォーム。
 pcl= .Net portableと呼ばれている。pclを後継が.Net Standardにあたる。


今後の動向

 それぞれの単語が出揃いました。
では何を覚えればいいの?ってところですが、

一言でいえば、

  .Net Standard を使おう!

です。


2016年現在、バージョンが1.0~1.6まであるのですが、1.5からはまともに動かない状況ですので
VisualStudio2017 Update1になるまではバージョン1.4を使っておくと面倒なくていいと思います。


余談ですが、共通プロジェクト作成のコツはどこにも依存しないタダの処理の集まりであると後腐れなくうまくいきます。



コメントを投稿

Androider