本文へスキップ
ウェブエンジニア問題集
第2章

C#の開発環境構築 — .NET SDKのインストールからdotnet runまで

約9分
この章の目次開く

C#を書き始めるのに必要なものは、実質ひとつだけです。.NET SDK を入れれば、コンパイラもビルドツールも実行環境もまとめて手に入ります。

この章では、SDKのインストールから最初のプロジェクトを動かすところまでを行い、あわせて生成されるファイルの意味を確認します。

学習者学習者

Node.jsのときは「Node本体を入れればnpmも付いてくる」感じでしたが、C#も同じですか?

先生先生

かなり近いよ。.NET SDKを入れると dotnet コマンドが使えるようになって、作成・ビルド・実行・テスト・パッケージ追加まで全部これ1つでできる。

SDKとランタイムはどちらを入れるのか

ダウンロードページには「SDK」と「ランタイム」の2種類が並んでいます。開発するなら迷わずSDKです。

種類含まれるもの用途
.NET SDKコンパイラ・dotnet CLI・ランタイムC#を書く人が入れるもの
.NET ランタイム実行に必要な部分のみビルド済みアプリを動かすサーバー向け
開発マシンにはSDKを入れます。ランタイムはSDKに含まれているので、別途入れる必要はありません。

インストールする

OSごとに手順が違いますが、いずれも.NETのダウンロードページからLTS版を選ぶのが基本です。パッケージマネージャーを使うなら次のようになります。

# Windows
winget install Microsoft.DotNet.SDK.8
 
# macOS
brew install --cask dotnet-sdk
 
# Ubuntu / Debian
sudo apt-get install -y dotnet-sdk-8.0
bash

インストールできたら、必ずバージョンを確認します。

dotnet --version
# 8.0.404
 
dotnet --list-sdks
# 8.0.404 [/usr/local/share/dotnet/sdk]
bash

エディタを選ぶ

エディタ対応OS向いている人
Visual StudioWindows機能の多さを重視する人。GUIデザイナーも使える
Visual Studio CodeWindows / macOS / Linux軽量に始めたい人。拡張機能でC#に対応
JetBrains RiderWindows / macOS / LinuxIntelliJ系に慣れている人(有償)

VS Codeを使う場合は、拡張機能の C# Dev Kit を入れると、補完・デバッグ・テスト実行が揃います。これを入れないとIntelliSenseがほとんど効かないため、最初に入れておいてください。

環境を整えて進むイメージ
環境構築でつまずくと学習が止まるので、ここは確実に通しておきます

最初のプロジェクトを作る

C#では、単体の .cs ファイルを直接実行するのではなく、プロジェクト単位で扱うのが基本です。

dotnet new console -o HelloApp
cd HelloApp
bash

構文: dotnet new <テンプレート名> [-o 出力先] [-f フレームワーク]

引数・オプション渡せるもの説明
テンプレート名console / classlib / web / webapi / xunit など作りたいプロジェクトの種類
-o(--output)ディレクトリ名生成先。省略するとカレントディレクトリに作られる
-f(--framework)net8.0 など対象の.NETバージョン。省略時は既定のSDKバージョン

戻り値: なし(指定ディレクトリにプロジェクト一式が生成される)

利用できるテンプレートの一覧は dotnet new list で確認できます。

生成されるファイル

HelloApp/
├── HelloApp.csproj   ← プロジェクト設定
├── Program.cs        ← エントリポイント
└── obj/              ← ビルドの中間生成物

Program.cs の中身は1行だけです。

Console.WriteLine("Hello, World!");
csharp

HelloApp.csproj はプロジェクトの設定ファイルで、npmの package.json にあたります。

<Project Sdk="Microsoft.NET.Sdk">
 
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
 
</Project>
xml
設定意味
OutputType実行可能ファイルか、ライブラリか
TargetFrameworkどの.NETバージョン向けにビルドするか
ImplicitUsingsusing System; などの頻出usingを自動で補う
Nullablenull許容参照型の警告を有効にする

Nullable については C#のnull安全 で詳しく扱います。

実行する

dotnet run
# Hello, World!
bash

dotnet コマンドのうち、開発中によく使うものを整理します。

コマンド何をするか使う場面
dotnet runビルドして実行する開発中の動作確認
dotnet buildビルドのみ行うコンパイルエラーの確認
dotnet watch変更を検知して自動で再実行試行錯誤しながら書くとき
dotnet testテストを実行するテストプロジェクトがある場合
dotnet publish配布用の成果物を出力するデプロイ時
dotnet add packageNuGetパッケージを追加するライブラリ導入時

書きながら試すときは dotnet watch が便利です。ファイルを保存するたびに再ビルドと再実行が走ります。

dotnet watch run
bash

複数プロジェクトをまとめるソリューション

実務では、Web APIとテストプロジェクトのように複数のプロジェクトを1つのアプリとして扱います。それをまとめる単位がソリューションです。

dotnet new sln -n MyApp
dotnet sln add HelloApp/HelloApp.csproj
bash

学習中は1プロジェクトで十分ですが、エディタで「プロジェクトが認識されない」と言われたときは、ソリューションに追加できているかを確認してください。

よくあるハマりどころ

手元のSDKとcsprojのバージョンが合っていない

TargetFramework に net8.0 と書かれているのに、手元のSDKが net6.0 しか入っていないとビルドできません。dotnet --list-sdks で入っているバージョンを確認します。

チームで揃えたい場合は、リポジトリのルートに global.json を置いてSDKバージョンを固定できます。

{
  "sdk": {
    "version": "8.0.404",
    "rollForward": "latestFeature"
  }
}
json

プロジェクトの外で dotnet run している

dotnet run は、カレントディレクトリのプロジェクトを探して実行します。.csproj があるディレクトリに移動してから実行してください。

学習者学習者

「プロジェクトファイルが見つかりません」というエラーが出たときは、だいたいこれですか?

そのケースがほとんどです。ソリューション直下で実行した場合は、dotnet run --project HelloApp のようにプロジェクトを明示すると動きます。

obj や bin をコミットしてしまう

obj/ と bin/ はビルドの生成物なので、.gitignore に入れます。dotnet new gitignore を実行すると、.NET向けの .gitignore が生成されます。

ちゃんと使うためのポイント

  • 開発マシンに入れるのはSDK。ランタイムはSDKに含まれる
  • プロジェクトは dotnet new console -o 名前 で作る
  • dotnet run はビルドと実行をまとめて行う。試行錯誤には dotnet watch
  • .csproj はプロジェクト設定ファイル。TargetFramework と Nullable は最初に目を通す
  • VS Codeで書くなら C# Dev Kit を入れる
  • チームで揃えるときは global.json でSDKバージョンを固定する

環境が整ったら、次の章では変数と型を扱います。C#の学習で最初に効いてくる「値型と参照型の違い」を、ここで押さえます。

参考リンク