C#初心者でもわかる！ASP.NET Core Minimal APIのメリット・使い方・テスト方法を徹底解説

**＜本記事のターゲット層＞**
- C#／ASP.NET Coreの初学者
  - 「Controllerを使ったAPI開発は難しそう」と感じている人
  - Minimal APIの全体像を短時間で理解したい人
- バックエンドエンジニアで.NET未経験の方
  - Java/SpringやNode.jsからC#に興味を持ち始めたエンジニア
- 個人開発・小規模チームの開発者
  - プロトタイプやマイクロサービスを素早く作りたい人
- .NET 9 での最新開発手法をキャッチアップしたい開発者
  - 従来のMVCからの乗り換えを検討している人

# はじめに

C#やASP.NET CoreでWeb APIを開発する際、これまで多くの人が`Controller`ベースの構成を使ってきました。しかし.NET 6以降、よりシンプルにAPIを作成できる**Minimal API**という新しい選択肢が登場しました。

本記事では、初心者向けに「Minimal APIとは何か？」「何が便利なのか？」「どう使うのか？」「どうやってテストするのか？」を、実例を交えながらわかりやすく解説します。

---

# Minimal APIとは？

**Minimal API**は、ASP.NET Coreで導入された**最小構成のWeb APIフレームワーク**です。コントローラーやルーティング属性を使わず、**`Program.cs`だけで完結するコード構成**が特徴です。

```csharp
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/hello", () => "Hello, World!");

app.Run();
````

この数行で、ブラウザから`/hello`にアクセスすると「Hello, World!」と表示されます。

---

# Minimal APIのメリット

## ✅ コードが少ない・読みやすい

* 従来のAPIよりも**コード量が圧倒的に少なく、シンプル**
* `Startup.cs`や`Controller`が不要で、**学習コストが低い**

## ✅ パフォーマンスが高い

* ASP.NET Coreのパイプラインに**直接アクセス**しているため、**余計なオーバーヘッドが少ない**
* 軽量なマイクロサービスやIoTバックエンドに最適

## ✅ .NET 9でさらに機能が強化

* **OpenAPI (Swagger)** との統合
* **バリデーションや認証**の対応も進化

---

# Minimal APIのデメリット

## ❌ 大規模開発には不向きな場合も

* コントローラーやサービス層の分離がないと**スパゲッティコード**になりがち
* 明確なレイヤー構造を求めるチームには不向き

## ❌ IDEの補助機能が弱いことがある

* ルーティングの属性や明示的なクラスが少ないため、**IntelliSenseの恩恵が減る**ことも

---

# Minimal APIの使い方（ステップバイステップ）

## 1. Visual Studioでプロジェクト作成

* 「ASP.NET Core 空のWeb API」テンプレートを選択
* .NET 9以上を選ぶ（.NET 6以降でも可）

## 2. `Program.cs`の編集

```csharp
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// GET
app.MapGet("/todos", () => new[] {
    new Todo(1, "牛乳を買う", true),
    new Todo(2, "記事を書く", false)
});

// POST
app.MapPost("/todos", (Todo todo) => {
    // 実際はDBなどに保存する処理を書く
    return Results.Created($"/todos/{todo.Id}", todo);
});

app.Run();

record Todo(int Id, string Title, bool IsDone);
```

### 🔍 解説

* `MapGet`, `MapPost`などでエンドポイントを定義
* `record`型でデータモデルを定義（C# 9以降）

---

# Minimal APIのテスト方法（xUnit + WebApplicationFactory）

Minimal APIも従来と同様にユニットテスト可能です。

## 1. テストプロジェクト作成

* 「xUnit Test Project」を追加
* `Microsoft.AspNetCore.Mvc.Testing`パッケージを追加

```bash
dotnet add package Microsoft.AspNetCore.Mvc.Testing
```

## 2. テストコードを書く

```csharp
public class TodoApiTests : IClassFixture<WebApplicationFactory<Program>>
{
    private readonly HttpClient _client;

    public TodoApiTests(WebApplicationFactory<Program> factory)
    {
        _client = factory.CreateClient();
    }

    [Fact]
    public async Task GetTodos_ReturnsSampleTodos()
    {
        var response = await _client.GetAsync("/todos");
        response.EnsureSuccessStatusCode();

        var body = await response.Content.ReadAsStringAsync();
        Assert.Contains("牛乳を買う", body);
    }
}
```

### ✅ ポイント

* `WebApplicationFactory`を使うと、**Minimal APIでも統合テストが簡単**
* HTTPクライアントを使って実際のAPI呼び出しをテスト可能

---

# まとめ

Minimal APIは、**軽量・高速・簡単**という特徴を持ち、C#初心者にとってもとっつきやすい技術です。

| 項目     | 内容                                     |
| ------ | -------------------------------------- |
| 対象者    | 小規模API、マイクロサービス、プロトタイピング               |
| 適していない | 大規模エンタープライズ開発、MVC構造が必要な場合              |
| テスト対応  | `xUnit` + `WebApplicationFactory`で対応可能 |

.NET 9時代のAPI開発では、**まずMinimal APIを試してみる**のがおすすめです！

---

# 関連リンク

* [Minimal API チュートリアル（公式）](https://learn.microsoft.com/ja-jp/aspnet/core/tutorials/min-web-api?view=aspnetcore-9.0)
* [Minimal API のテスト（公式）](https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/minimal-apis/test-min-api?view=aspnetcore-9.0)
* [ASP.NET Core Minimal APIs ドキュメント](https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/minimal-apis/overview?view=aspnetcore-9.0)

---

# おわりに

Minimal APIをマスターすれば、C#×Web開発がもっと楽しくなります！
ぜひ自分のプロジェクトで試してみてください。

---

この記事が参考になったら、いいね・シェア・コメントよろしくお願いします！🎉