Try .NET Core

.NET Coreを動かした、試した記録を書き残します。

.NET技術の対象、関係性を整理する

Microsoftはここ数年、.NET技術の対象プラットフォームを意欲的に拡大しています。
XamarinでAndroid, iOSなどのモバイルOSを、.NET CoreでLinuxサーバプラットフォームを取り込み、なりふり構わず邁進しています。

また、拡大した対象の開発技術のほとんどを無償で使うことができ、従来からの C#er / VBer には嬉しい限りです。

しかしながら、変革速度があまりに速いため、どの技術が何に対応するのか、いまひとつわかりにくい状態になっています。

そこで今回は、主要フォーマットごとの対象や特徴、関係性を整理してみます。

.NET Framework

従来のいわゆる「ドットネット」といえば、こちら。
f:id:try_dot_net_core:20161219222233j:plain

対象プラットフォームは、Windowsだけです。
クラスライブラリとして参照可能なフォーマットは、.NET Framework / .NET Standard / Portable Class Library(PCL) の3種類です。
SI業界にはお馴染みですね。

歴史が長いため実績も情報も多く、サードパーティライブラリが充実しています。

以下のフォーマットは、この.NET Frameworkのサブセットを基本としています。


.NET Core

本ブログのテーマ、.NET Coreです。
f:id:try_dot_net_core:20161219222106j:plain

Windows / Linux / macOS の3つのプラットフォームで動作します。
クラスライブラリとして参照可能なフォーマットは、.NET Core / .NET Standard の2種類だけです。

.NET Frameworkのうち主要部分の多くが移植されており、Windowsプログラマにとっては敷居が低くなっています。
Windows.FormsWPFなどのUI関連機能はオミットされており、Webアプリケーション / API などのサーバサイドがターゲットになりそうです。

今回紹介する中では最後発のフォーマットになるため、まだ日本語情報が少なく、外部ライブラリの対応も現在進行中といったところです。


Xamarin.Forms

Microsoftが先だって買収したXamarinの中でも、最も意欲的なフォーマットです。
f:id:try_dot_net_core:20161219222140j:plain

Android / iOS / Windows Phone / Windowsストアアプリ など、広いプラットフォームを対象としています。
クラスライブラリとして参照可能なフォーマットは、主にPortable Class Library(PCL) の1つだけです。
しかし、中枢となるXamarin.Formsプロジェクトを.NET Stadardフォーマットに変換することで、.NET Standardフォーマットのライブラリも参照可能になっています。

対象が広い上にUIを制御下に置くため、機能的には各プラットフォームの最小公倍数的な実装になっています。

厳密にはXamarin.Formsが直接プラットフォームの上で動くわけではなく、各プラットフォーム向けのサブプロジェクトを経由して実行されます。
実質的にPortable Class Library(PCL) (もしくは.NET Standard) として動作しており、.NET Frameworkサブセットとしては最小限の機能に制限され、開発難易度が高くなっています。

参考:
.NET Standard Library with Xamarin Forms - Xamarin Help
GitHub - adamped/XamarinForms.NetStandard: Sample application showing .NET Standard with Xamarin Forms


Xamarin.Android

Xamarinの中で、Androidを対象としたフォーマットです。
f:id:try_dot_net_core:20161219222205j:plain

対象プラットフォームはAndroidのみ。
しかし参照可能なクラスライブラリフォーマットは多く、.NET Standard / Portable Class Library(PCL) / Xamarin.Android / .NET Framework の4種類です。
ただし.NET Frameworkの全機能が使えるわけではなく、バイナリ参照の際はビルドが通っても実行時に落ちることがあり、注意が必要です。

.NET Frameworkサブセットとしては、Portable Class Library(PCL)より広い範囲の機能が用意されています。
中身はAndroid SDKのラッパーなので、C# で実装するというよりは、Android-JavaC# に翻訳するように書き進めることになります。

Xamarin.iOS

Xamarinの中で、iOSを対象としたフォーマットです。
f:id:try_dot_net_core:20161219222221j:plain

当然ながら対象プラットフォームはiOSだけです。
Xamarin.Androidと同様に多くのクラスライブラリフォーマットが参照可能で、.NET Standard / Portable Class Library(PCL) / Xamarin.iOS / .NET Framework の4種類です。
注意点も同じく、.NET Frameworkのサブセットであることを意識する必要があります。

こちらも中身はiOS SDKのラッパーにつき、Objective-C や Swift を C# に置き換えるような実装になります。
Windowsでも開発が可能ですが、ビルドの際に必ずmacOSが必要になります。


Portable Class Library(PCL) / .NET Standard

これら2つは、クラスライブラリ専用のフォーマットです。

Portable Class Library(PCL)はモバイル開発でのクロスプラットフォーム機能集約を目的とした、.NET Frameworkの小さなサブセットです。

その後.NET Coreの策定により対象プラットフォームが拡大したため、PCLの後継規格として.NET Standardが作られました。
こちらもサブセットとしての基本機能範囲は小さいものの、Microsoft公式のNuGetパッケージが多く提供されており、PCLよりも難易度が下がっています。
今後最もツブシが効きそうなのは、この.NET Standardでしょうか。