このページの本文へ

.NET Core / .NET Framework / Xamarin / Monoの関係を整理する

2016年04月28日 10時00分更新

文● 鈴木淳也(Junya Suzuki)、編集●ハイサイ比嘉

  • この記事をはてなブックマークに追加
  • 本文印刷

なぜ「.NET Core」が必要なのか?

 .NETは便利なアーキテクチャではあるものの、作成されたアプリケーションの配布で大きな問題を抱えていた。コアとなる中間言語(IL)で記述されたアプリケーションそのものはいいとして、その実行にあたっては「ランタイム」と「ライブラリ」を必要としている。.NET Frameworkは現在2.0から始まり、3.0、3.5、4.0、4.5(4.6)と異なるバージョンごとに階層化されたライブラリのスタックで構成されており、もし.NET Frameworkで記述されたアプリケーションが実行される場合、必要なライブラリがシステム側に揃っている必要がある。

 すべてのアプリケーションが必ずしもすべてのライブラリを必要としているわけではないが、この「ランタイム+ライブラリ」の再配布の問題は“Windows以外のプラットフォーム”でのアプリケーション実行で大きな問題となる。例えばモバイルデバイスへのアプリケーション配布にあたって、長大なライブラリをつけた再配布パッケージを丸ごと用意しておくのはナンセンスだ。

 そこで2014年12月に登場したのが「.NET Core」だ。前出のように、Windows PC以外のモバイルデバイスへのアプリ配布においては、ILだけでなくランタイムやライブラリも含めた完全な実行可能パッケージとして提供を行なうのが一般的だ。

 ただしフルの.NET Frameworkではサイズ的にも実行環境的にも重すぎるため、必要な部分のみを残してパッケージングする必要がある。このように.NET Frameworkから「コア」となる部分のみを抽出し、ランタイムやライブラリの再配布なしでパッケージとしてコンパクトに配信が可能な仕組みを提供するのが「.NET Core」となる(.NET Foundationなどを参照してほしい)。

 .NET Coreに関してもうひとつ注目したいのが「.NET Native」と呼ばれる仕組みで、一般には中間言語で記述されている.NETのアプリケーションを、ライブラリ内の必要なファイルとランタイムをマージする形でコンパイルし、そのプラットフォーム上で直接実行可能なネイティブアプリケーションへと変換してしまう。本来、.NETはJIT(Just In Time)方式のコンパイラを採用しており、実行段階でネイティブコードへと変換され、メモリ上へと落とし込まれていく。一方で、.NET NativeではAOT(Ahead Of Time)方式のコンパイラを採用し、JITで発生する変換時のペナルティを低減しつつ、よりコンパクトで高速に実行可能なコードを生成できる。

.NET Coreのメリット

 .NET Coreのメリットは大きくふたつある。ひとつは、Windows PC以外のデバイスやプラットフォームへのアプリケーションの配布を想定したシナリオに向いていることで、これは「クロスプラットフォーム開発」に向いているといえる。これはWindows 10共通の実行環境である「Universal Windows Platform」(UWP)でも同様で、配布パッケージとしては.NET Coreの利用を想定していたようだ。ふたつ目は、ネイティブコードへのAOT変換が行なわれることで、従来の.NETの実行環境と比較しても高速実行が可能な点で、特に「マイクロサーバ」といった特定用途特化型のサーバ上で大量のアプリケーションを実行したり、あるいは大量のリクエストを処理する用途に向いている。いずれにせよ、.NETの活用シーンを広げるのが「.NET Core」ということになる。

「.NET Core」における3つの特徴

カテゴリートップへ

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン