.NET CoreDev Basics/Keyword

.NET Coreは、Windows、Mac OS X、Linux上で動作する軽量/モジュール性などの特徴を持ったオープンソースなアプリ開発プラットフォームだ。

» 2016年07月01日 05時00分 公開
[かわさきしんじInsider.NET編集部]
「Dev Basics/Keyword」のインデックス

連載目次

.NET Coreとは

 .NET Coreは、Windows、Mac OS X(以下、OS X)、Linux上で動作するオープンソースなアプリ開発プラットフォームだ。従来の.NET Frameworkを基に軽量化、クロスプラットフォーム対応、モジュール構造化などを施した、新たな.NET実装といえる。

 .NET Coreの特徴としては以下のようなことが挙げられる。

  • クロスプラットフォーム: 前述の通り、Windows、OS X、Linuxで動作し、サポートするCPUもx64、x86に加えて(x86はWindowsのみ)、ARM64/ARM32についての作業が進んでいる
  • .NET Framework/Xamarin(Mono)との互換性: 全ての.NET実装が満たすべきAPI仕様として.NET Standard Libraryが定められていて、.NET Coreの基本ライブラリ(CoreFX)はこれに準拠している(後述)
  • モジュール性: .NET Coreではアプリで必要となる機能(アセンブリ)だけを個別にプロジェクトに組み込んで利用できる
  • オープンソース: .NET Coreはマイクロソフトによってサポートされ、オープンソースな形で開発が行われている。オープンソース化したことで、開発者からの多くのフィードバックが得られ、開発の速度、プラットフォーム間での互換性維持などの面で多くのポジティブな影響がもたらされている

 .NET Coreは従来の.NET Frameworkのサブセットに相当する。.NET Frameworkをオープンソース化/クロスプラットフォーム化するために、Windows依存の部分を排除しながら、モジュール化を推し進め、.NET Frameworkの「コア」となる機能を再実装したものだといえる。この他にも軽量であること、アプリに同梱して配布され、サイドバイサイドでのインストールが可能といった特徴がある。

 .NET Coreは以下のもので構成される。

  • CoreCLR: .NET Coreのランタイム
  • CoreFX: .NET Core用の基本ライブラリ
  • 各種ツールセット: コマンドラインツール、コンパイラ(プロジェクトネーム「Roslyn」)など

 ASP.NET Coreなどのフレームワークは、これらの上に位置することになる。

3つの.NET実装

 .NET実装としては.NET FrameworkとMono、そして.NET Coreが存在する。それぞれの実装の上にはWindows Forms/Xamarin.iOS/UWPなど、実装固有のライブラリ/フレームワークが位置する。これらの関係を図にすると以下のようになる。

.NET Framework/.NET Core/Xamarin .NET Framework/.NET Core/Xamarin
画像はde:code 2016における井上章氏のセッション「.NET Core/ASP.NET Core が実現するクロスプラットフォーム .NET の今と未来」より。

 上の図の「ベースライブラリ」の部分は別々のものとなっているが、将来的には.NET Standard Libraryによる基本ライブラリの共通化が進められることで、.NET実装間で共通する部分についての互換性が提供される(今でも互換性は十分に高いと思われる)。

 なお、前述の通り、.NET Standard Libraryは全ての.NET実装が実装すべきAPIを統一的に定めたもので、「次世代のPCL(Portable Class Library)」と考えることもできる。例えば、.NET Core 1.0と.NET Framework 4.6.3は.NET Standard Library 1.6をサポートしている。そして、これをターゲットとしたPCLを作成すれば、それは.NET Core 1.0と.NET Framework 4.6.3で互換性があるPCLになる。

.NET Coreでできること

 現在のところ、.NET Coreを使用して開発可能なアプリの種類としては以下のものがある。

  • コンソールアプリ
  • ASP.NET Coreアプリ
  • UWPアプリ(Windowsのみ)

 .NET Coreの最大の特徴の1つであるクロスプラットフォーム性を考慮すると、現時点での.NET CoreはWindows/OS X/LinuxでC#を使ってWebアプリを開発するためのプラットフォームであるといえる。なお、ASP.NET Coreアプリの開発は従来の.NET Frameworkを使っても行えることには注意しておこう。加えて.NET Core上で動作するWindows固有のフレームワーク/プラットフォームとしてUWPがある。

dotnetコマンド

 .NET Coreではプロジェクトの新規作成、既存プロジェクトの復元、プロジェクトのビルド、実行、パッケージ化などを行うコマンドラインツールとしてdotnetコマンドが提供されている。例えば、新規にプロジェクトを開始してからアプリを実行するまでには以下のコマンドを実行する(これによりコンソールアプリが新規に作成される)。これはOS X上で実行した例だ(強調表示しているのが入力したコマンド)。

$ dotnet new
Created new C# project in /Users/<user_name>/work/devbasics/netcore.
$ dotnet restore
log  : Restoring packages for /Users/<user_name>/work/devbasics/netcore/project.json...
log  : Writing lock file to disk. Path: /Users/<user_name>/work/devbasics/netcore/project.lock.json
log  : /Users/<user_name>/work/devbasics/netcore/project.json
log  : Restore completed in 2804ms.
$ dotnet build
Project netcore (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
Compiling netcore for .NETCoreApp,Version=v1.0

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:02.7456019


$ dotnet run
Project netcore (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Hello World!


.NET Coreで動作するコンソールアプリの新規作成と実行

 dotnetコマンドに対して、実際に行う処理をコマンドとして渡すと、それに応じてプロジェクトの新規作成などが行われる。これらのコマンドについて簡単に紹介しておこう。

  • dotnet newコマンド: プロジェクトの新規作成。「--type」オプションまたは「-t」オプションに続いてアプリの種類を指定可能(指定可能なのはConsole/Web/Lib/xunittest)
  • dotnet restoreコマンド: プロジェクトの構造を復元する。必要なアセンブリがあればそれをNuGet(マイクロソフトが提供するパッケージ管理ツール)を利用して取得する
  • dotnet buildコマンド: プロジェクトをビルドする
  • dotnet runコマンド: ビルドしたアプリを実行する(ビルドしていない場合にはビルドが行われる)

 dotnet newコマンドを使う以外にも、npmを介して配布されているYeomanと.NET Core用のコードジェネレータであるgenerator-aspnetなどを組み合わせても、ソースコードのスキャフォールディングが可能だ。generator-aspnetではより細かなプロジェクト構成の指定が可能だ。


 .NET Coreは、Windows/OS X/Linux上で動作するオープンソースなアプリ開発プラットフォームだ。現状ではASP.NET Coreがその主要なターゲットとなるが、これからの進化と広まりに期待しよう。

参考資料


「Dev Basics/Keyword」のインデックス

Dev Basics/Keyword

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。