Xamarin
.NETFramework
.NETCore
.NETStandard

.NET XXXの違いについて、ざっくりまとめてみた。

前々から疑問に思っていた.NET XXXの違いについて調べてみました。
すでに、まとめは色々な方がされていますが、それでも理解できなかったことがあったので、
それを踏まえて、ざっくりとまとめます。

関係性

DotNet.png

.NET Framework:

Windows環境向けのフレームワーク。

.NET Core:

様々なOS上(Windows, Linux, macOS)で動作するアプリケーション開発用のフレームワーク。
主にサーバーアプリ/コンソールアプリとして使われる。

Xamarin

様々なOS上(Linux, macOS, Andoriod, iOS)で動作するアプリケーション開発用のフレームワーク。
モバイル環境上にも対応している。

.NET Standard

仕様。各.NET実装(.NET Framework, .NET Core, Xamarin)での共通で使用できるAPIをまとめたもの。
各.NET実装(.NET Framework/.NET Core/Xamarin)のベースライブラリ(Base Class Library/Core Library/Mono Class Library)の共通部分をまとめたもの。
.NET Standardプロジェクトで作成したDLLは、どの.NET実装環境下でも使用できる。

.NET Core と Xamarin との違い

どちらもクロスプラットフォーム開発を目的とした.NET実装。
違いとして、守備範囲(対応するOS)が異なり、Xamarinのほうが守備範囲が広い。
また、以下の文章を見ると、処理性能では.NET Coreに軍配が上がるよう。(本当に?)

体的には、異なるデバイス(プラットフォーム)への対応を前提としたアプリ開発の場合、
開発手段としては 「Xamarin」を用いる。開発した.NETアプリケーションを特定用途でより高速実行したい、
あるいはASP.NETのようなサーバ側のアプリケーションとして高速実行に期待したい場合には「.NET Core」といった形に、「水平展開」と「高速実行」で両者を使い分ける形になる。
http://ascii.jp/elem/000/001/156/1156721/index-3.html

また、Visual Studioのデフォルトプロジェクトテンプレートだけを見ると、
.NET Core=サーバーApp/コンソール向け、Xamarin=モバイル/macOS向け ともとれます。
(そう見せているのは、Microsoftの戦略なのだろうか。)

理解不足な点

上記引用文中の、

開発した.NETアプリケーションを特定用途でより高速実行したい、

について正しい理解が得れていません。。。そんなに性能面で異なるのか疑問です。
実際に、それぞれの環境で作成してみるとまた理解が深まるのかもしれません。

参考資料
-https://msdn.microsoft.com/ja-jp/magazine/mt842506.aspx
-http://www.atmarkit.co.jp/ait/articles/1707/28/news033.html
-https://www.infoq.com/jp/news/2017/10/dotnet-core-standard-difference
-http://ascii.jp/elem/000/001/156/1156721/