1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker Desktop不要!WSL2 + Docker Engine + DevContainerでC#開発環境を作る【第3弾:C# + .NET 10編】

1
Last updated at Posted at 2026-04-17

はじめに

第1弾第2弾では、C++の開発環境をDevContainerで構築しました。

今回は同じ仕組みを使って C# + .NET 10 の開発環境を作ります。
.NET 10は2025年11月にリリースされたLTS(Long Term Support)版で、2028年まで3年間サポートされる現時点で最も安定した選択肢です。

この記事でできること

  • .NET 10のC#開発環境をDevContainerで構築する
  • クラスライブラリプロジェクトを作成する
  • xUnitでユニットテストを書いて実行する

シリーズ構成

内容
第1弾 環境構築 → Hello World(C++)
第2弾 CMake + vcpkg で本格C++プロジェクト
第3弾(本記事) C# + .NET 10 + xUnit

完成後のフォルダ構成

hello-csharp/
├── .devcontainer/
│   └── devcontainer.json
├── src/
│   └── MyLibrary/
│       ├── MyLibrary.csproj
│       └── Calculator.cs
├── tests/
│   └── MyLibrary.Tests/
│       ├── MyLibrary.Tests.csproj
│       └── CalculatorTests.cs
└── hello-csharp.sln

Step 1: devcontainer.jsonを作成する

.devcontainer/devcontainer.json を以下の内容で作成します。

{
  "name": "C# Development",
  "image": "mcr.microsoft.com/dotnet/sdk:10.0",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-dotnettools.csharp",
        "ms-dotnettools.csdevkit",
        "ms-dotnettools.vscode-dotnet-runtime"
      ],
      "settings": {
        "editor.formatOnSave": true
      }
    }
  },
  "postCreateCommand": "dotnet --version"
}

ポイント

  • mcr.microsoft.com/dotnet/sdk:10.0 はMicrosoft公式の.NET 10 SDKイメージです
  • ms-dotnettools.csdevkit はC# Dev Kitで、IntelliSenseやデバッグなどの快適な開発体験を提供します
  • postCreateCommand でコンテナ起動後に.NETのバージョンを確認します

Step 2: DevContainerを起動する

  1. VSCodeの左下のリモートメニュー(>< アイコン)をクリック
  2. コンテナーで再度開く を選択

起動完了後、ターミナルで.NETのバージョンを確認します。

dotnet --version

以下のように表示されれば成功です。

10.0.202

Step 3: プロジェクトを作成する

DevContainer内のターミナルで以下を実行します。

ソリューションの作成

dotnet new sln -n hello-csharp

クラスライブラリの作成

dotnet new classlib -n MyLibrary -f net10.0 -o src/MyLibrary

テストプロジェクトの作成

dotnet new xunit -n MyLibrary.Tests -f net10.0 -o tests/MyLibrary.Tests

ソリューションにプロジェクトを追加する

dotnet sln add src/MyLibrary/MyLibrary.csproj
dotnet sln add tests/MyLibrary.Tests/MyLibrary.Tests.csproj

テストプロジェクトからクラスライブラリを参照する

dotnet add tests/MyLibrary.Tests/MyLibrary.Tests.csproj \
    reference src/MyLibrary/MyLibrary.csproj

補足-o オプションで出力先フォルダを指定することで、プロジェクト名のサブフォルダが二重に作成されるのを防げます。


Step 4: ソースファイルを作成する

src/MyLibrary/Calculator.cs

自動生成された Class1.cs を削除して、Calculator.cs を作成します。

rm src/MyLibrary/Class1.cs
namespace MyLibrary;

/// <summary>
/// 基本的な四則演算を提供するクラス
/// </summary>
public class Calculator
{
    /// <summary>2つの値を加算します</summary>
    public double Add(double a, double b) => a + b;

    /// <summary>2つの値を減算します</summary>
    public double Subtract(double a, double b) => a - b;

    /// <summary>2つの値を乗算します</summary>
    public double Multiply(double a, double b) => a * b;

    /// <summary>2つの値を除算します</summary>
    /// <exception cref="DivideByZeroException">bが0の場合にスローします</exception>
    public double Divide(double a, double b)
    {
        if (b == 0)
            throw new DivideByZeroException("0で除算することはできません。");
        return a / b;
    }
}

tests/MyLibrary.Tests/CalculatorTests.cs

自動生成された UnitTest1.cs を削除して、CalculatorTests.cs を作成します。

rm tests/MyLibrary.Tests/UnitTest1.cs
using MyLibrary;

namespace MyLibrary.Tests;

public class CalculatorTests
{
    private readonly Calculator _calculator = new();

    [Fact]
    public void Add_正常系_正しい合計を返す()
    {
        // Arrange
        double a = 3, b = 4;

        // Act
        double result = _calculator.Add(a, b);

        // Assert
        Assert.Equal(7, result);
    }

    [Fact]
    public void Subtract_正常系_正しい差を返す()
    {
        double result = _calculator.Subtract(10, 3);
        Assert.Equal(7, result);
    }

    [Fact]
    public void Multiply_正常系_正しい積を返す()
    {
        double result = _calculator.Multiply(3, 4);
        Assert.Equal(12, result);
    }

    [Fact]
    public void Divide_正常系_正しい商を返す()
    {
        double result = _calculator.Divide(10, 2);
        Assert.Equal(5, result);
    }

    [Fact]
    public void Divide_ゼロ除算_例外をスロする()
    {
        // DivideByZeroExceptionがスローされることを確認
        Assert.Throws<DivideByZeroException>(() => _calculator.Divide(10, 0));
    }

    // Theory + InlineDataで複数パターンをまとめてテスト
    [Theory]
    [InlineData(1, 2, 3)]
    [InlineData(-1, -2, -3)]
    [InlineData(0, 0, 0)]
    [InlineData(1.5, 2.5, 4.0)]
    public void Add_複数パタ_正しい合計を返す(double a, double b, double expected)
    {
        double result = _calculator.Add(a, b);
        Assert.Equal(expected, result);
    }
}

xUnitのポイント

  • [Fact] — 単一のテストケース
  • [Theory] + [InlineData] — 複数のパターンをまとめてテスト(パラメータ化テスト)
  • テストメソッド名は日本語でもOKで、テスト結果の可読性が上がります

Step 5: ビルドしてテストを実行する

ビルド

dotnet build

テストの実行

dotnet test --logger "console;verbosity=normal"
  MyLibrary net10.0 succeeded (0.7s)
  MyLibrary.Tests net10.0 succeeded (0.6s)

[xUnit.net 00:00:00.18]   Discovering: MyLibrary.Tests
[xUnit.net 00:00:00.32]   Discovered:  MyLibrary.Tests
[xUnit.net 00:00:00.37]   Starting:    MyLibrary.Tests
[xUnit.net 00:00:00.45]   Finished:    MyLibrary.Tests

  Passed MyLibrary.Tests.CalculatorTests.Add_正常系_正しい合計を返す [16 ms]
  Passed MyLibrary.Tests.CalculatorTests.Subtract_正常系_正しい差を返す [< 1 ms]
  Passed MyLibrary.Tests.CalculatorTests.Divide_ゼロ除算_例外をスローする [< 1 ms]
  Passed MyLibrary.Tests.CalculatorTests.Divide_正常系_正しい商を返す [< 1 ms]
  Passed MyLibrary.Tests.CalculatorTests.Add_複数パターン_正しい合計を返す(a: -1, b: -2, expected: -3) [< 1 ms]
  Passed MyLibrary.Tests.CalculatorTests.Add_複数パターン_正しい合計を返す(a: 1, b: 2, expected: 3) [< 1 ms]
  Passed MyLibrary.Tests.CalculatorTests.Add_複数パターン_正しい合計を返す(a: 0, b: 0, expected: 0) [< 1 ms]
  Passed MyLibrary.Tests.CalculatorTests.Add_複数パターン_正しい合計を返す(a: 1.5, b: 2.5, expected: 4) [< 1 ms]
  Passed MyLibrary.Tests.CalculatorTests.Multiply_正常系_正しい積を返す [< 1 ms]

Test Run Successful.
Total tests: 9
     Passed: 9
 Total time: 1.4815 Seconds

Test summary: total: 9, failed: 0, succeeded: 9, skipped: 0, duration: 1.8s
Build succeeded in 5.1s

全9テストがPassedになれば完了です。


まとめ

項目 内容
.NETバージョン .NET 10(LTS・2028年までサポート)
テストフレームワーク xUnit
プロジェクト構成 クラスライブラリ + テストプロジェクト
ソリューション管理 .slnファイルで一元管理

C++編との比較

C++(第2弾) C#(本記事)
ビルドシステム CMake dotnet CLI
パッケージ管理 vcpkg NuGet(dotnet add package)
テスト Google Test xUnit
設定ファイル CMakeLists.txt .csproj / .sln

C#は dotnet コマンド一本でプロジェクト作成・ビルド・テスト・パッケージ管理が完結するため、C++と比べて環境構築のシンプルさが際立ちます。


参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?