Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
C#による.NET Core入門(1)

C#による.NET Core入門(1)

.NET Coreとは? 開発環境(SDKとVisual Studio Code)のインストール

2017年6月6日

クロスプラットフォームで開発できる.NET Coreの基礎から開発実践までが学べる入門連載スタート。初回は.NET Coreの歴史/立ち位置/特徴を紹介し、開発環境の準備方法を説明する。

レッドハット株式会社 田中 孝佳
  • このエントリーをはてなブックマークに追加

 .NET Coreがリリースされて約1年経ち、ようやくビルドツールも正式版としてリリースされるに至った。現状では.NET Coreの開発手法の紹介ではWindows上でVisual Studioを使う方法が多いが、本連載記事では、「Linuxを中心にクロスプラットフォームで開発できる.NET Core」という視点で、開発の方法を説明していきたい。

 初めて開発を始めるような開発者や今まで.NET FrameworkやC#を触ったことのないLinux環境での開発者にも、Linux環境を使った.NET CoreでのC#のプログラミングを体験してもらいたい。連載初回は、.NET Coreの歴史と概要の説明に加えて、開発環境の準備について説明したい。

<目次>

▲目次に戻る

.NET Coreとは

▲目次に戻る

.NET Coreの歴史

 Windows上でのみ動作する.NET Framework(=従来の.NET)は、2002年に最初に登場して以来、バージョンアップを重ねてきた。それに対し、Windows・Linux・macOSで動作するクロスプラットフォームな.NET Coreが発表されたのが、2014年11月12日のことである。このとき、今までWindowsのみをサポート対象としてきた.NETが、LinuxやmacOSもサポート対象としたことに加えて、最初からGitHubでオープンソースとして公開されたことにも驚きがあった。オープンソース化はASP.NETチームを中心にすでに進んでいる最中であり、Compiler as a Serviceとしての“Roslyn”プロジェクトもオープンソースとして開発が進んでいた最中の出来事でもあった。

 クロスプラットフォームを動作環境とすることに関しては、Monoプロジェクトという先人がいた。Monoプロジェクトは.NET Frameworkの互換環境をLinuxやmacOSを含めたスマートフォンOSにすることを目標としており、その中にはGUIフレームワークも含まれている。Monoプロジェクトは現在、Xamarin社が開発・サポートをしており、スマートフォン向けのクロスプラットフォーム開発環境であるXamarinブランドの製品を提供している。そのXamarin社が、2016年にMicrosoft社に買収されて今に至っている。

 このような背景がある中で発表された.NET Coreは、当面はサーバーサイドでの利用を想定して開発が進められていった。Monoが.NET Frameworkそのものと互換性のある環境(=WPFなどOS依存機能を除くほぼフルセットの機能提供)を目指していることに対し、.NET Coreは.NET Frameworkのサブセットとなる機能をクロスプラットフォームで提供することを目標としたわけである。そして、.NET Coreの発表から約1年後の2015年11月5日にRed Hat社がMicrosoft社と協力し、Red Hat Enterprise Linux上での.NETのサポートを発表した。これにより、商用Linux環境でも.NET Coreが公式サポートされることになった。

 そして2016年6月27日に最初の正式版である.NET Core 1.0が公開された。なお当初のリリースはやや変則的で、ランタイム(=実行環境)は正式版であったが、ビルドツール(=開発ツール)まわりは商用環境での利用可能なPreview版相当のリリースであった。2017年3月7日の.NET Core Tools 1.0のリリースをもって、ビルドツールも正式版となった。

 現在、.NET Core 2.0のPreview版が一般利用可能であるが、本連載は当面、.NET Core 1.1(詳細後述)を対象に説明を行う予定である。.NET Core 2.0が正式リリースされたタイミングで最新機能に関する説明を行いたい。

▲目次に戻る

.NET Framework/Xamarin/.NET Coreの関係

 このように現在では「.NET」と呼べる環境(.NETプラットフォーム。以下、.NET環境)がいくつもあるわけだが、どういうときにどれを使えばよいかが分からないと感じた人も少なくないだろう。そこで.NET環境の使い分けの参考となるよう、簡単に.NET Framework/Xamarin/.NET Coreで開発できるアプリケーションの種別(=モデル)をまとめてみよう。現在の.NET Core 1.xを基準にまとめたのが図1だ。

図1 .NET Framework/.NET Core/Xamarinが対象とするアプリケーションモデルの概念図

図の意味は、本文の箇条書き部分を参照してほしい。
「Windows Forms」は、開発環境のVisual Studio(日本語版)では「Windowsフォーム」と一部が日本語で表記されていることがある。
「Xamarin.Forms」は、PCL(Portable Class Library)としてロジックを記述できるのに加え、.NET Coreのドキュメントに対象として記述されているため、このように記述した。

  • .NET Framework: Windows上でのGUIアプリケーション(WPF、Windows Forms)や、IISに配置するWebアプリケーション/サービス(ASP.NET)、OfficeやVisual Studioの拡張(=アドインやエクステンション)といった、従来からのWindowsプラットフォーム環境向けアプリケーションの開発が対象となる。
  • Xamarin: スマートフォンを中心とした、クロスプラットフォーム環境向けのGUIアプリケーションの開発が対象となる。
  • .NET Core: サーバーサイドでの利用、つまりIISに依存しないWebアプリケーション/サービス(ASP.NET Core)や、GUIを持たないコンソールアプリケーションといった、クロスプラットフォーム環境向けの開発が対象の一つである。本連載でも、最初にコンソールアプリケーションで.NET Coreの開発方法について説明し、最後にASP.NET Coreを利用したWebアプリケーションの開発を簡単に説明する予定である。また、.NET Coreを利用する最新のUWP(Windows 10ファミリー向けのアプリケーション)の開発も対象である。

 さて、これらの.NET環境における開発ライブラリの中身には、プラットフォーム固有の部分もあるが、共通の部分も多い。そこで、共通部分を定義して、複数の.NET環境で再利用しやすくしたのが、.NET Standardという規格である。

 .NET Standardを参照して作成したライブラリは、その.NET Standardがサポートしている.NET環境で利用可能になる。例えば、netstandard1.6という基準を参照して作成したライブラリは、「.NET Core 1.0」「Mono 4.6」「Xamarin.iOS 10.0」「Xamarin Android 7.0」といった.NET環境で利用することができる。

 .NET Standardに関しては、ライブラリプロジェクトを作成する際と、.NET Core 2.0へのアップデートで.NET Standard 2.0が導入される際に説明する予定である。

▲目次に戻る

.NET Coreの特徴

 .NET Coreの特徴はいくつか挙げられるが、ここでは特に「クロスプラットフォーム」「オープンソース」「軽量」「フレキシブル」の4点について強調したい。

 まず、クロスプラットフォームについては前項で説明したように、Windows・Linux・macOSをサポートしていることを指している。

 .NET Coreでは、「ランタイム」「クラスライブラリ」をはじめとし、「ASP.NET Core」といったマイクロソフト提供の主要なフレームワーク、コンパイラープラットフォーム(Roslyn)、各種コマンドラインツールといったコンポーネントが、GitHub上にオープンソースとして提供されている。基本的にはほぼ全てのリポジトリに対してIssueという形での問題提起・バグ報告やPull Requestによる修正依頼を行うことができる*1。また、docs.microsoft.comで公開されている「.NET Core」「ASP.NET Core」「Entity Framework Core」といったドキュメントに関しても、GitHubでオープンソースとして公開されている。

  • *1 なお、Red Hat Enterprise Linux向けに提供されている.NET Coreのバイナリに関しては、Red Hat社が提供しており、こちらに対するバグ修正依頼はRed Hatが管理しているBugzillaに対して行うことになる。こちらもGitHub同様、アカウントを作成すれば誰でも問題報告や既知の問題にコメントすることができる。

 軽量という表現に関しては、アプリケーションを配置する際にアプリケーションが必要としないコンポーネントを含めなくてよいことを指している。アプリケーションで必要となるライブラリのみを含めて配置できるのに加えて、.NET Coreランタイムがインストールされていない環境にも、アプリケーションのライブラリと必要なランタイムを同梱して配置することができる。

 フレキシブルという表現は開発環境に関するものだ。.NET Coreの開発時に必要なコマンドは「CLI」(コマンドライン・インターフェース)として提供されており、サポートされているプラットフォームの全てで利用可能である。また、CLIが提供している機能はプラットフォームに依存しない形で利用できるため、多くのエディターが自由に.NET Coreの開発をサポートするための機能を実装できる。

▲目次に戻る

開発環境の準備

▲目次に戻る

開発環境の種類

 .NET Coreで開発するためには、最低限、.NET Core SDKをインストールすればよい。テキストファイルを編集でき、CLI経由で提供されている開発ツールを操作できればよいので、GUIも必要ではない。

 高機能なグラフィカル(GUI)エディターが必要な場合は、クロスプラットフォームで共通に利用可能なツール「Visual Studio Code」がお薦めだ。その他、OS固有で利用可能なツールとしては、WindowsでVisual Studio、macOSでVisual Studio for Mac、LinuxでJetBrainsのRiderがあり、さらにはIDEをWebアプリケーションとしてホストすることでブラウザーから操作できるEclipse Cheなどがある。

 本連載では、Visual Studio Codeの利用を前提に説明を行う。.NET Coreの開発自体はエディターやOSを問わずに行えるため、他のツールに興味がある読者は、適宜利用したいツールに置き換えて読み進めてほしい。Visual Studio Codeを前提とした理由は、第一に.NET Coreがサポートしている全てのプラットフォームで同じように利用できるツールであるためである。第二に、.NET Coreが登場した当初から多くのユーザーが開発ツールとして使い、多数のフィードバックを基にVisual Studio CodeおよびC#拡張の改善が行われているためである。

▲目次に戻る

開発環境の準備

 この説では本連載の次回以降で利用する環境を準備する。.NET Core SDKとVisual Studio Codeを利用するため、多くの環境に対応しているが、スクリーンショットやコマンドは筆者が利用しているCentOS 7.3で実行したものになる。OS固有の操作に関しては適宜公式のドキュメントを参照してほしい。また、Red Hat Enterprise LinuxでRed Hatから提供されている.NET Coreのパッケージを利用する場合、.NET Core 1.xの段階では他のディストリビューションやOSで.NET Coreを利用する場合と異なる点が多くなっているため、いったん本連載での説明の対象外とさせてほしい。

▲目次に戻る

.NET Core SDKのインストール

 まず、.NET Core SDKをインストールする。.NET Coreの公式ドキュメントの「Step-by-step instructions」の自分のOSのページ(英語)を参考にインストールしてほしい。

 WindowsでVisual Studio Codeを使う場合は、「Command line/other」の手順に従う。筆者が行った、CentOS 7.3の場合の手順は、リスト1のようになる(あくまで参考例である。インストール方法が改変される場合もあるので、必ず公式ドキュメントの手順を参照してほしい)。なおSDKのバイナリの展開先である、/opt/dotnetは変更可能であり、複数のバージョンのSDKをインストール先を変えてインストールし、パスを書き換えて利用できる。本連載では/opt/dotnetにインストールし、PATH環境変数に含まれていることを前提とする。

shell
$ sudo yum install libunwind libicu
$ curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=848821
$ sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet
$ sudo ln -s /opt/dotnet/dotnet /usr/local/bin
リスト1 CentOS 7.3での.NET Core SDK(最新安定バージョン)のインストール手順

 dotnetコマンドがPATH環境変数に含まれているかどうかは、LinuxおよびmacOSではwhichコマンド、Windowsではwhereコマンド(PowerShellから実行するときはwhere.exeコマンド)で確認できる。リスト2は筆者の環境での実行結果である。

shell
$ which dotnet
/usr/local/bin/dotnet
リスト2 whichコマンドでdotnetコマンドを確認する

 これで.NET Core SDKのインストールが完了した。

▲目次に戻る

■ .NET Coreのバージョン名について

 本節の内容は、開発環境での.NET Coreを構成する要素のバージョン管理というやや複雑な内容を説明している。いったん前節の手順で.NET Core SDKをインストールしていれば本節および次の節の内容は読み飛ばして「Visual Studio Codeのインストール」に移って差し支えない。また、その場合、今後.NET Core SDKのバージョンアップ(.NET Core 1.1.3以降)があった場合は、次節のリスト4のコマンドを実行して最新版に更新してもらうだけで問題ない。

 上記の手順に従い.NET Coreの公式ドキュメントどおりにインストールした場合、.NET Core SDKの最新安定バージョンがインストールされる。リスト1のスクリプトはURLのパーマリンクを含んでいるため、スクリプトをコピー&ペーストで実行する場合はより新しいバージョンがリリースされていないか注意してほしい。前述したように、本連載は当面、.NET Core 1.1(厳密には.NET CoreのRuntime 1.1.2 with SDK 1.0.4。以下、.NET Core 1.1.2)を対象に説明を行う予定である(本連載の手順や説明内容は、.NET Core 1.1のいずれかの安定バージョンをインストールしておけば、基本的に問題なく実行できるはずである。もしバージョンの差異により動作しない箇所があれば、その内容をページ下部の「お問い合わせ」などを通じてフィードバックしていただけるとうれしい。筆者のお薦めとしては常に最新の安定版をインストールした環境である)。

 「.NET Core 1.1.2」と表記した場合、この数値はRuntime(=ランタイム、実行エンジン)のバージョンを指す。だがRuntimeバージョンは、必ずしもSDKバージョンと一致しないので注意が必要だ。SDKインストーラーでは、当然ながら.NET Coreの「SDK」バージョン(例えば「.NET Core SDK 1.0.4」)が表示される。バージョン番号を参照する場合は、それが「Runtimeバージョンなのか、SDKバージョンなのか」に留意しないと、手違いや勘違いが起こりやすい状況である。

 代表的なRuntimeバージョンとSDKバージョンの組み合わせは、表1のようになっている。より詳しくは、公式の「core/download-archive.md at master · dotnet/core · GitHub」(英語)を参照してほしい。

製品名称 リリース日 Runtimeバージョン SDKバージョン
.NET Core 2.0 2017/05/10 2.0.0-Preview1 2.0.0-Preview1
.NET Core 1.1 2017/05/09 1.1.2 1.0.4
2017/04/13 1.1.1 1.0.3
2017/03/07 1.1.1 1.0.1
.NET Core 1.0 2017/05/09 1.0.5 1.0.4
2017/04/13 1.0.4 1.0.3
2017/03/07 1.0.4 1.0.1
2016/06/27 1.0 Preview 2 build 3121
表1 .NET Coreの、代表的なRuntimeバージョンとSDKバージョンの組み合わせ

 ちなみに、現在インストールされている.NET CoreのSDKバージョンを調べるにはdotnet --versionコマンドラインを実行すればよい。なお、dotnetコマンド単体で表示されるバージョンは「.NET Core Shared Framework Host」というdotnetコマンドそのものを構成するバージョンなので注意が必要だ。.NET Core Runtimeは.NET Core SDKをインストールしたタイミングでその時点の最新版が自動的にインストールされる。実際にどのRuntimeが実行時に利用されるかは、実行するバイナリの設定にも依存するため、次回以降で説明したい。

shell
……略……
# SDKバージョン
$ dotnet --version
1.0.4
リスト3 .NET CoreのRuntimeバージョンとSDKバージョンを調べる方法

▲目次に戻る

■ [旧バージョンをインストール済みの方のみ].NET Core SDKのアップデート

 .NET Core 1.1.2(with SDK 1.0.4)より古いバージョンをすでにインストール済みの方は、念のため、最新安定バージョンにアップグレードしてほしい。

 SDKのアップグレードの手順は、WindowsやUbuntu、Macなどでインストーラーを実行するタイプの場合、前述のインストール手順と全く同じで、新しいバージョンのインストーラーを実行すれば更新される。一方、CentOSなど圧縮ファイルを展開するタイプは、いったんインストール先のフォルダーを削除してから同じ手順を繰り返すのがよいだろう(新しいバージョンの圧縮ファイルに存在しなくなった古いファイルが上書きされずに残ってしまうためである)。

shell
$ sudo rm -rf /opt/dotnet
$ curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=848821
$ sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet
$ sudo ln -s /opt/dotnet/dotnet /usr/local/bin
リスト4 CentOS 7.3で、すでにインストールしている環境での.NET Core SDK(最新安定バージョン)の再インストール手順

【コラム】.NET Core SDK/Runtimeの任意バージョンへのインストール/アップグレードについて

 最新安定バージョンではなく、任意のバージョンをインストールもしくはアップグレードしたい場合は、

の表から、目的のSDKバージョンの行を見つけて、その行内にある[download]リンクをクリックし、対象バージョンのDownloadページ(英語)を開く。

 WindowsやmacOSやUbuntu(Linux)なら、Downloadページ内にある表の[SDK Installer]列にあるリンクをクリックしてSDKインストーラーをダウンロードし、実行する。

 CentOS 7.3(Linux)であれば、Downloadページの[SDK Binaries]列のリンクURLを取得し、リスト1のURL部分を置き換えたコマンドを実行すればよい。

 それ以外の詳細は、公式ドキュメントのSDKインストールの説明(英語)を参照してほしい。

 また、ほとんどのケースでアップグレードしなくても問題はないが、Runtimeも任意のバージョンにアップグレードしたい場合には、前述した手順で対象バージョンのDownloadページ(英語)を開き、WindowsやmacOSやUbuntu(Linux)なら、そのページ内にある表の[Runtime Installer]列のリンクをクリックしてRuntimeインストーラーをダウンロードし、実行すればよい。

 なお、[Runtime Installer]列の記載がない場合がある。これは、以前のリリースから、Runtimeバージョンが変わっていないためだ。例えば前掲の表1の「.NET Core 1.1」を見ると、[Runtimeバージョン]が「1.1.1」となっている行が2つあるのが分かる。このような場合には、一番古い[リリース日]の行のDownloadページからRuntimeインストーラーを入手する必要がある。

 それ以外の詳細は、公式ドキュメントのRuntimeインストールの説明(英語)を参照されたい。

▲目次に戻る

Visual Studio Codeのインストール

 続いてVisual Studio Codeをインストールする。Visual Studio CodeのDownloadページから、利用しているOSごとにダウンロードできる。また、Linuxの場合、yumコマンドやapt-getコマンド経由でのインストール方法も公開されている(参考:リスト5)。現時点での最新安定版は1.12.1であるが、適宜、最新安定版に更新していくことを前提としている。

shell
$ sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
$ sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
$ yum check-update
$ sudo yum install code
リスト5 CentOS 7.3にyumコマンド経由でVisual Studio Codeをインストールするコマンド

 インストールが完了すると、すでにcodeコマンドがPATH環境変数に含まれているため、このコマンドでVisual Studio Codeを起動できる。.NET CoreをC#で開発するのに必要な拡張機能を入れるために、codeコマンドもしくは好きな方法でVisual Studio Codeを起動してほしい。

 起動したら、左端のアクティビティバーにある[拡張機能]をクリックする。これにより表示された[拡張機能]サイドバーには、通常は何も入力しない状態でも「C#」という名前の拡張機能が表示されるはずだ。表示されない場合は、「C#」と入力して検索すると表示される。この拡張機能の[インストール]ボタンをクリックしてインストールしてほしい。インストールが完了すると、「ワークスペースをリロードするか」を確認されるので、リロードすれば拡張機能のインストールは完了である。

[インストール]ボタンをクリック

[インストール]ボタンをクリック

[再読み込む](リロード)ボタンをクリック

[再読み込む](リロード)ボタンをクリック

図2 「C#」拡張機能のインストール手順(Visual Studio Code)

Visual Studio Codeを開いて、C#拡張機能をインストールする。1をクリックして拡張機能を表示し、2に「C#」と入力して検索、3の拡張機能「C#」の[インストール]ボタンをクリックし、インストール完了後、4の[再読み込む]ボタンを押して完了。

 以上で、.NET CoreによるC#開発を、Visual Studio Code上で行うための準備ができた。

 .NET Core連載の初回は、.NET Coreの歴史と概要に加えて、多くの環境で利用できる開発ツールであるVisual Studio Codeを使った開発の準備を説明した。次回は、まず新規に.NET Coreプロジェクトを作成し、実行することに加え、公開されているライブラリを追加して利用する方法や、デバッグの方法を説明したい。

※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

C#による.NET Core入門(1)
1. 【現在、表示中】≫ .NET Coreとは? 開発環境(SDKとVisual Studio Code)のインストール

クロスプラットフォームで開発できる.NET Coreの基礎から開発実践までが学べる入門連載スタート。初回は.NET Coreの歴史/立ち位置/特徴を紹介し、開発環境の準備方法を説明する。

C#による.NET Core入門(1)
2. レッドハット版.NET Coreとマイクロソフト版.NET Coreの違い

.NET CoreのMicrosoft提供版とRed Hat提供版には違いがある。Red Hat Enterprise Linux上でのNET Core環境の構築方法を紹介したうえで、.NET Core 1.xと2.x以降での違いを示す。さらにOpenShiftでの.NET Coreの利用についても言及する。

C#による.NET Core入門(1)
3. .NET Coreでプロジェクトを作成して開発してみよう

クロスプラットフォームで開発できる.NET Coreの基礎から開発実践までが学べる入門連載。3回目は実際にプロジェクトを新規に作成して、Visual Studio Codeを使って開発するフローを説明する。

C#による.NET Core入門(1)
4. .NET Coreでコンソールアプリを配置する

クロスプラットフォームで開発できる.NET Coreの基礎から開発実践までが学べる入門連載。4回目は作成したコンソールアプリのプロジェクトをビルドして配置する手順を説明する。

C#による.NET Core入門(1)
5. .NET Standardなライブラリプロジェクトを作成して参照する

クロスプラットフォームで開発できる.NET Coreの基礎から開発実践までが学べる入門連載。5回目は.NET Standardなクラスライブラリなプロジェクトを作成し、別のコンソールプロジェクトから参照する方法を説明する。

サイトからのお知らせ

Twitterでつぶやこう!