Skip to content

필사 모드: モダン .NET 2026 完全ガイド - .NET 9 · C# 13 · F# 9 · ASP.NET Core · Blazor United · MAUI · Aspire · EF Core 9 徹底解説

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

プロローグ — 2026年、.NET はもう「Windows の Java」ではない

2010年代までの .NET の見られ方はシンプルだった。**「Windows Server に IIS を入れて C# を書く Microsoft スタック」**。行き先は「Java のライセンスを買えない所」ではなく「Windows でショッピングモールを動かす所」だった。

2026年にはその絵が完全に違う。

- **クロスプラットフォームが既定** — Linux・macOS・iOS・Android・WebAssembly・組み込みまで、同じコードが動く。

- **AOT がメインストリーム** — `dotnet publish -p:PublishAot=true` 一行で 8MB のシングルバイナリが出る。

- **無料・オープンソース** — .NET 自体が MIT ライセンスで GitHub 上で開発されている。

- **クラウドの一級市民** — AWS Lambda・Google Cloud Run・Azure App Service のすべてで第一級サポート。

.NET 9 は 2024年11月に STS(Standard Term Support、18 か月)として出て、.NET 10 が 2025年11月に LTS(Long Term Support、36 か月)として出た。2026年5月現在、新規プロジェクトはほぼすべて .NET 10 に落ち着き、.NET 9 は移行中のプロジェクトの中間点という位置づけだ。

本稿は2026年の .NET スタックを端から端まで整理する。ランタイム・言語・Web・UI・データ・分散・ゲーム・テストまで、そして「どこで何のライブラリを使うか」を決めるマトリクスまで。

第1章 · .NET ランタイム — STS と LTS のサイクル

.NET は2年周期で LTS を出す。偶数年が LTS、奇数年が STS。

- **.NET 6**(2021年11月、LTS) — 2024年11月 EOL

- **.NET 7**(2022年11月、STS) — 2024年5月 EOL

- **.NET 8**(2023年11月、LTS) — 2026年11月 EOL

- **.NET 9**(2024年11月、STS) — 2026年5月 EOL

- **.NET 10**(2025年11月、LTS) — 2028年11月 EOL

2026年5月で .NET 9 のサポートが終わった。新規プロジェクトは .NET 10 で始めるのが正解。.NET 8 LTS は11月まで生き残る。

現在のSDKを確認

dotnet --list-sdks

.NET 10 のインストール(macOS Homebrew)

brew install --cask dotnet-sdk

global.json で特定バージョンを固定

cat > global.json <<EOF

{

"sdk": {

"version": "10.0.100",

"rollForward": "latestFeature"

}

}

EOF

新規プロジェクト

dotnet new console -n HelloWorld

cd HelloWorld

dotnet run

ランタイムの核となるキーワードは3つ。

- **CoreCLR** — JIT コンパイラ、メインのランタイム。ARM64・x64・Apple Silicon で一級市民。

- **Mono** — WebAssembly・iOS・Android で使われる軽量ランタイム。

- **NativeAOT** — 事前コンパイル、JIT なしで単一ネイティブバイナリ。.NET 10 で ASP.NET Core を完全サポート。

覚える一行:**「.NET 10 が2028年まで生き残る LTS、.NET 9 が2026年5月で終わる STS」**

第2章 · C# 13 — params コレクション・lock オブジェクト・partial メンバー

.NET 9 と一緒に出た C# 13 が日常のコードを変えた。大きな3つ:

**params コレクション** — `params` パラメータが配列だけを受けるのをやめた。`IEnumerable`・`Span`・`ReadOnlySpan`・任意のコレクション型を受ける。

// C# 12 まで — params object[] のみ

void Log(params object[] args) { }

// C# 13 — params ReadOnlySpan<object>

void Log(params ReadOnlySpan<object> args)

{

foreach (var arg in args)

Console.WriteLine(arg);

}

// 呼び出し時に配列の確保がない。Span はスタック割り当て。

Log("hello", 42, DateTime.Now);

**lock オブジェクト** — `lock` キーワードが新しい `System.Threading.Lock` 型を受ける。従来の `lock(obj)` より約 30% 速く、誤った使い方をコンパイラが捕まえる。

using System.Threading;

public class Counter

{

private readonly Lock _lock = new();

private int _count;

public void Increment()

{

lock (_lock)

{

_count++;

}

}

}

**partial プロパティとインデクサ** — メソッドだけだった `partial` がプロパティ・インデクサにも拡張された。ソースジェネレータがさらに強くなる。

public partial class ViewModel

{

public partial string Name { get; set; }

}

// 別ファイルでソースジェネレータが実装を提供

public partial class ViewModel

{

private string _name = "";

public partial string Name

{

get => _name;

set { _name = value; OnPropertyChanged(); }

}

}

**エスケープシーケンス** — `\e` が ESC 文字(0x1B)として追加された。ANSI カラーコードを書くときが綺麗になる。

Console.WriteLine("\e[31mRed text\e[0m");

C# 14 は .NET 10 と一緒に出た。新キーワード `field`(自動プロパティのバッキングフィールド参照)、partial コンストラクタ、拡張メンバー(extension everything)が大きな3つ。

第3章 · F# 9 / F# 10 — 関数型・AI フレンドリー・実用主義

F# は Microsoft の ML 系関数型言語。.NET 上で OCaml に近い文法で書く。

2026年の F# は2つの理由で再注目されている。

- **AI コード生成と相性が良い** — F# は式ベースなので LLM が短く正しいコードを出しやすい。

- **データ処理・金融** — Jet・Bank of America、そして日本のいくつかの金融機関で実用例がある。

F# 9 のハイライト:コンピュテーション式の改善、null 性解析、診断メッセージの整理。F# 10 は .NET 10 と一緒に出た。

最小の F# 例 — フィボナッチ。

let rec fib n =

match n with

| 0 | 1 -> n

| _ -> fib (n - 1) + fib (n - 2)

[0..10]

|> List.map fib

|> List.iter (printfn "%d")

レコードと判別共用体(discriminated union)は F# の核。

type Shape =

| Circle of radius: float

| Rectangle of width: float * height: float

| Triangle of a: float * b: float * c: float

let area shape =

match shape with

| Circle r -> System.Math.PI * r * r

| Rectangle (w, h) -> w * h

| Triangle (a, b, c) ->

let s = (a + b + c) / 2.0

sqrt (s * (s - a) * (s - b) * (s - c))

printfn "%f" (area (Circle 5.0))

F# は `dotnet fsi` で REPL になる。Jupyter でも `.NET Interactive` カーネルとして動く。

第4章 · VB.NET — メンテナンスモード、まだ死んでいない

Visual Basic .NET は Microsoft の公式発表どおり「メンテナンスモード」だ。新しい言語機能は入らないが、.NET ランタイム上で動き続ける。

- Windows フォーム・WPF・コンソールアプリは依然として VB.NET で作れる。

- C# の新機能(レコード、`init` セッター、拡張パターンマッチ)は VB.NET には入らない。

- 既存のコードベースは引き続きコンパイル・実行され、セキュリティアップデートも受ける。

2026年に新規プロジェクトを VB.NET で始める理由はほぼない。だが20年前の ASP.NET Web Forms システムが VB.NET なら、移行コストはそのまま残っている。

第5章 · ASP.NET Core 10 — Minimal API、Native AOT

ASP.NET Core は .NET の上の Web フレームワーク。.NET 6 以降の標準パターンは2つ:

- **Minimal API** — Express のように 1 ファイルにルートを並べる。

- **MVC / Razor Pages** — フルスタック、コントローラ・ビュー・モデル。

最小の Minimal API。

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

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

app.MapGet("/hello/{name}", (string name) => $"Hello, {name}!");

app.MapPost("/items", (Item item) => Results.Created($"/items/{item.Id}", item));

app.Run();

record Item(int Id, string Name);

ASP.NET Core 10 の Native AOT サポートが大きな変化だ。コールドスタートは 100ms 以下、メモリは半分、シングルバイナリは 10MB。

dotnet publish -c Release -p:PublishAot=true

bin/Release/net10.0/<rid>/publish/MyApi (シングルバイナリ)

AOT の制約は明確だ。リフレクション・動的コード・`Expression.Compile()` は使えない。代わりにソースジェネレータがコンパイル時にコードを生成する。`System.Text.Json` もソースジェネレータ経由で使う。

[JsonSerializable(typeof(User))]

public partial class AppJsonContext : JsonSerializerContext { }

// AOT フレンドリーなシリアライズ

var json = JsonSerializer.Serialize(user, AppJsonContext.Default.User);

第6章 · Blazor United — Server・WASM・SSR を一度に

Blazor は C# で SPA を書くフレームワーク。2026年のコアモードは3つ、そしてそれらを混ぜる「United」パターン。

- **Server** — UI イベントを SignalR でサーバへ送り、DOM の差分だけクライアントへ返す。初回描画が速い、常時接続が必要。

- **WebAssembly** — C# コードを WASM にコンパイルしてブラウザ内で直接実行。オフライン可、初回ダウンロードが大きい。

- **SSR(Static Server Rendering)** — サーバが HTML だけをレンダリング、インタラクティブなし。SEO・ランディングページ向け。

.NET 8 からこの3つをページ単位で 1 プロジェクト内で混ぜられるようになった。

@page "/counter"

@rendermode InteractiveServer

@code {

private int currentCount = 0;

private void IncrementCount() => currentCount++;

}

`@rendermode` を `InteractiveServer`・`InteractiveWebAssembly`・`InteractiveAuto` に切り替えると、同じコンポーネントが別の環境で動く。`InteractiveAuto` は最初は Server で始め、WASM バンドルが読み込まれたら自動でクライアント側に切り替える。

要点:

- **コンポーネントモデル** — React・Vue に近いコンポーネント、ただし C# で。

- **JS Interop** — 必要なときだけ `IJSRuntime` で JS を呼ぶ。

- **AOT WASM** — `<RunAOTCompilation>true</RunAOTCompilation>` で WASM AOT、性能はおおむね2倍。

第7章 · .NET MAUI 9 — iOS・Android・macOS・Windows を一度に

MAUI(Multi-platform App UI)は Xamarin.Forms の後継だ。2026年5月時点で Xamarin.Forms は正式に EOL(2024年5月)済み、新規モバイルプロジェクトはすべて MAUI。

dotnet new maui -n MyApp

cd MyApp

iOS

dotnet build -t:Run -f net10.0-ios

Android

dotnet build -t:Run -f net10.0-android

macOS

dotnet build -t:Run -f net10.0-maccatalyst

Windows

dotnet build -t:Run -f net10.0-windows10.0.19041.0

最小の XAML ページ。

xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

x:Class="MyApp.MainPage">

public partial class MainPage : ContentPage

{

int count = 0;

public MainPage() { InitializeComponent(); }

void OnClicked(object sender, EventArgs e)

{

count++;

CounterLabel.Text = count.ToString();

}

}

MAUI 9 のハイライト:

- **ネイティブコントロール** — 各プラットフォームの本物のネイティブウィジェットを使う。iOS は UIKit、Android は Material。

- **Hot Reload** — XAML と C# の両方が Hot Reload 対応。

- **MVU** — Comet スタイルの MVU(Model-View-Update)パターンも試験中。

弱点は正直に認めるべきだ。iOS・Android ともに一級だが、React Native・Flutter ほどのコミュニティ生態系はない。日本・韓国の社内アプリ・既存 Xamarin の移行が主戦場だ。

第8章 · Avalonia 11 · Uno Platform 5 — コミュニティの代替案

Microsoft が作っていない .NET UI フレームワークが2つ、2026年でも強い。

**Avalonia 11** — Linux・macOS・Windows・iOS・Android・WebAssembly で動く XAML ベース UI。JetBrains Rider は UI の一部を Avalonia で作っている。

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

x:Class="HelloAvalonia.MainWindow"

Title="HelloAvalonia">

**Uno Platform 5** — WinUI 3 XAML をあらゆるプラットフォームで再利用。WebAssembly・Skia レンダリングまで対応。Windows 中心の開発者が一度書いて複数 OS に展開したいときに選ぶ。

MAUI とこの2つの違い:

- **MAUI** — Microsoft 公式、ネイティブコントロール、Android・iOS・Windows・macOS のみ。

- **Avalonia** — コミュニティ、独自レンダリング(Skia)、Linux 一級、デスクトップに強い。

- **Uno** — コミュニティ、WinUI XAML 互換、WebAssembly に強い。

第9章 · .NET Aspire 9 — 分散アプリのオーケストレーション

Aspire は .NET 8 と一緒に出た分散アプリのフレームワークだ。「複数のサービスを 1 つのソリューションにまとめ、1 つのコマンドで立ち上げ、1 つのダッシュボードで見る」が核。

// AppHost/Program.cs

var builder = DistributedApplication.CreateBuilder(args);

var redis = builder.AddRedis("cache");

var postgres = builder.AddPostgres("db").AddDatabase("appdb");

var api = builder.AddProject<Projects.MyApi>("api")

.WithReference(redis)

.WithReference(postgres);

builder.AddProject<Projects.MyWeb>("web")

.WithReference(api);

builder.Build().Run();

dotnet run --project AppHost

ブラウザで https://localhost:17000 — Aspire Dashboard

Aspire Dashboard で見えるもの:

- **サービス一覧** — 各プロセスの状態・ログ・環境変数。

- **トレース** — OpenTelemetry ベースの分散トレース。

- **メトリクス** — メモリ・CPU・リクエスト数。

- **ログ集約** — すべてのサービスログを 1 か所で検索。

Aspire 9 の新機能:統合モジュール強化(Azure Service Bus・Postgres・MongoDB・Kafka)、GitHub Codespaces サポート、デプロイ用マニフェスト(Helm・Bicep)の自動生成。

覚える一行:**「docker-compose がコンテナの docker-compose なら、Aspire は .NET サービスの docker-compose」**

第10章 · Entity Framework Core 9 — JSON・コンパイル済みモデル

EF Core は .NET 界隈の標準 ORM だ。9.0 の大きな変化:

- **JSON 列の強化** — Postgres・SQL Server の JSON 列を LINQ で直接クエリ。

- **コンパイル済みモデル** — 起動時のモデルメタデータ生成をコンパイル時に前倒し。

- **HierarchyId** — SQL Server の階層型を LINQ で。

- **Cosmos DB の改善** — 部分更新、階層パーティションキー。

public class Blog

{

public int Id { get; set; }

public string Name { get; set; } = "";

public BlogMetadata Metadata { get; set; } = new();

}

public class BlogMetadata

{

public string Author { get; set; } = "";

public List<string> Tags { get; set; } = new();

}

public class BloggingContext : DbContext

{

public DbSet<Blog> Blogs => Set<Blog>();

protected override void OnModelCreating(ModelBuilder modelBuilder)

{

modelBuilder.Entity<Blog>().OwnsOne(b => b.Metadata, b => b.ToJson());

}

}

// JSON 内のフィールドを LINQ でクエリ

var blogs = await db.Blogs

.Where(b => b.Metadata.Tags.Contains("dotnet"))

.ToListAsync();

マイグレーションは `dotnet ef migrations add` / `dotnet ef database update` で管理する。

dotnet tool install --global dotnet-ef

dotnet ef migrations add InitialCreate

dotnet ef database update

第11章 · Dapper 3 · Marten — 軽量代替

EF Core がフル ORM なら、Dapper はマイクロ ORM。SQL を直接書き、結果のマッピングだけを自動化する。

using Dapper;

using Npgsql;

await using var conn = new NpgsqlConnection(connStr);

var users = await conn.QueryAsync<User>(

"SELECT id, name FROM users WHERE active = @active",

new { active = true });

foreach (var u in users)

Console.WriteLine($"{u.Id}: {u.Name}");

使うとき:ホットパスのクエリ、複雑な SQL、EF の抽象が邪魔なとき。

**Marten** — Postgres をドキュメント DB + イベントストアとして使う。CQRS・イベントソーシングに強い。

var store = DocumentStore.For(opts =>

{

opts.Connection(connStr);

opts.Events.AddEventType(typeof(OrderPlaced));

});

await using var session = store.LightweightSession();

session.Events.Append(orderId, new OrderPlaced(orderId, items));

await session.SaveChangesAsync();

使うとき:すでに Postgres がある環境、イベントソーシングが必要なドメイン。

第12章 · MediatR 13 — CQRS パターン

MediatR は in-process のメディエータパターンライブラリ。ハンドラ・通知・パイプライン挙動をきれいに分離する。

public record GetUserById(int Id) : IRequest<User>;

public class GetUserByIdHandler : IRequestHandler<GetUserById, User>

{

private readonly AppDbContext _db;

public GetUserByIdHandler(AppDbContext db) { _db = db; }

public async Task<User> Handle(GetUserById req, CancellationToken ct)

{

return await _db.Users.FindAsync(new object[] { req.Id }, ct)

?? throw new KeyNotFoundException();

}

}

// コントローラ

public class UsersController(IMediator mediator) : ControllerBase

{

[HttpGet("{id}")]

public Task<User> Get(int id) => mediator.Send(new GetUserById(id));

}

2024年末、作者(Jimmy Bogard)が MediatR を商用化すると発表し、コミュニティの一部がフォークを作った(例:`Brighter`・`Mediator.SourceGenerator`)。そのため2026年の新規プロジェクトでは、MediatR を使うかソースジェネレータベースの代替を使うかを決める必要がある。

第13章 · Orleans 9 — 仮想アクター、グレインベースの分散

Orleans は Microsoft Research が作った分散アクターフレームワーク。**仮想アクター**(virtual actor)モデルが核:グレイン(grain)は ID で識別され、配置はランタイムが管理する。

public interface IUserGrain : IGrainWithIntegerKey

{

Task<string> GetNameAsync();

Task SetNameAsync(string name);

}

public class UserGrain : Grain, IUserGrain

{

private string _name = "";

public Task<string> GetNameAsync() => Task.FromResult(_name);

public Task SetNameAsync(string name) { _name = name; return Task.CompletedTask; }

}

// クライアント

var user = client.GetGrain<IUserGrain>(123);

await user.SetNameAsync("Alice");

var name = await user.GetNameAsync();

使うとき:ゲームバックエンド(Halo・Forza・Gears of War が Orleans)、IoT、チャット、リアルタイムマルチプレイ。

代替:**Akka.NET 1.5** — Akka の .NET ポート、明示的なアクターモデル、永続化・クラスタリング対応。

第14章 · SignalR · gRPC — リアルタイム通信

**SignalR** — 双方向リアルタイム通信。WebSocket・Server-Sent Events・ロングポーリングを自動でネゴシエート。

public class ChatHub : Hub

{

public async Task SendMessage(string user, string message)

{

await Clients.All.SendAsync("ReceiveMessage", user, message);

}

}

// Program.cs

builder.Services.AddSignalR();

app.MapHub<ChatHub>("/chathub");

クライアントは JS・.NET・Java・Python とすべてある。

**gRPC for .NET** — protobuf ベースの RPC。マイクロサービス間通信・多言語環境に強い。

service Greeter {

rpc SayHello (HelloRequest) returns (HelloReply);

}

message HelloRequest { string name = 1; }

message HelloReply { string message = 1; }

public class GreeterService : Greeter.GreeterBase

{

public override Task<HelloReply> SayHello(HelloRequest req, ServerCallContext ctx)

{

return Task.FromResult(new HelloReply { Message = $"Hello {req.Name}" });

}

}

使うとき:マイクロサービス内部通信、多言語クライアント、ストリーミング RPC。

第15章 · ロギング・可観測性 — Serilog 4、OpenTelemetry

デフォルトは `Microsoft.Extensions.Logging`。カテゴリ・フィルタ・スコープが標準装備。

public class OrderService(ILogger<OrderService> logger)

{

public void Process(Order order)

{

logger.LogInformation("Processing order {OrderId} for {Amount}",

order.Id, order.Amount);

}

}

構造化ログ・ファイル・Elasticsearch シンクが必要なら **Serilog 4**。

Log.Logger = new LoggerConfiguration()

.MinimumLevel.Information()

.WriteTo.Console()

.WriteTo.File("logs/app-.txt", rollingInterval: RollingInterval.Day)

.WriteTo.Seq("http://localhost:5341")

.CreateLogger();

Log.Information("User {UserId} logged in from {IP}", userId, ip);

**OpenTelemetry** — トレース・メトリクス・ログのベンダー中立標準。.NET で第一級サポート。

builder.Services.AddOpenTelemetry()

.WithTracing(t => t

.AddAspNetCoreInstrumentation()

.AddHttpClientInstrumentation()

.AddOtlpExporter())

.WithMetrics(m => m

.AddAspNetCoreInstrumentation()

.AddRuntimeInstrumentation()

.AddOtlpExporter());

Aspire Dashboard は OpenTelemetry を受けて可視化する。Jaeger・Grafana・Datadog も同じプロトコル。

第16章 · テスト — xUnit 3、NUnit 4、MSTest 3

3つの主要テストフレームワーク、そしてその上のモッキングライブラリ群。

**xUnit 3** — もっとも人気の選択。2025年に v3 が出た。非同期に優しく、属性がきれい。

public class CalculatorTests

{

[Fact]

public void Add_TwoNumbers_ReturnsSum()

{

var sut = new Calculator();

Assert.Equal(5, sut.Add(2, 3));

}

[Theory]

[InlineData(1, 1, 2)]

[InlineData(2, 3, 5)]

[InlineData(-1, 1, 0)]

public void Add_Various_ReturnsExpected(int a, int b, int expected)

{

var sut = new Calculator();

Assert.Equal(expected, sut.Add(a, b));

}

}

**NUnit 4** — JUnit スタイル。属性セットが豊富。

**MSTest 3** — Microsoft 公式、Visual Studio との統合がもっとも深い。

モッキングライブラリ:

- **Moq 4.20** — もっとも人気だが、2023年の SponsorLink 騒動で一部利用者が離れた。

- **NSubstitute 5** — API がきれい、Moq の代替として人気上昇中。

- **FakeItEasy 8** — foggy object スタイル、Java の Mockito に似ている。

// NSubstitute

var repo = Substitute.For<IUserRepository>();

repo.FindById(1).Returns(new User(1, "Alice"));

var sut = new UserService(repo);

var user = sut.GetUser(1);

repo.Received(1).FindById(1);

**BenchmarkDotNet 0.14** — 性能マイクロベンチマークの標準。

[MemoryDiagnoser]

public class StringBenchmarks

{

[Benchmark]

public string ConcatStrings()

{

var s = "";

for (var i = 0; i < 100; i++) s += i;

return s;

}

[Benchmark]

public string StringBuilder()

{

var sb = new StringBuilder();

for (var i = 0; i < 100; i++) sb.Append(i);

return sb.ToString();

}

}

BenchmarkRunner.Run<StringBenchmarks>();

第17章 · 開発体験 — dotnet watch・Hot Reload・Polyglot Notebooks

`dotnet watch` はファイル変更を検知して自動でリビルドと再起動を行う。

dotnet watch run

Program.cs を編集 → 自動再起動

Razor ページを編集 → Hot Reload(再起動なしで反映)

ASP.NET Core・Blazor・MAUI のすべてが Hot Reload に対応。C# メソッド本体の変更・XAML・CSS・Razor マークアップは再起動なしで反映、シグネチャの変更は再起動が必要。

**Polyglot Notebooks** — Jupyter スタイルの .NET ノートブック。C#・F#・PowerShell・SQL を 1 つのノートブックで混ぜる。

dotnet tool install -g Microsoft.dotnet-interactive

dotnet interactive jupyter install

VS Code 拡張(Polyglot Notebooks)で `.ipynb` や `.dib` ファイルを開く。データ探索・ドキュメント・教材に強い。

// .NET ノートブックのセル

#r "nuget: System.Text.Json"

using System.Text.Json;

var json = """{"name": "Alice", "age": 30}""";

var doc = JsonDocument.Parse(json);

display(doc.RootElement);

第18章 · ビルドシステム — dotnet CLI、MSBuild、NUKE、FAKE、Cake

既定のビルドシステムは `dotnet` CLI と MSBuild。多くのプロジェクトはこれで十分。

dotnet new sln -n MySolution

dotnet new classlib -n MyLibrary

dotnet sln add MyLibrary

dotnet build

dotnet test

dotnet pack

dotnet nuget push -s nuget.org -k <api-key>

CI/CD パイプラインが複雑になったら次の3つから選ぶ:

- **NUKE** — ビルドスクリプトを C# で書く。型安全、IDE 補完、デバッグ可能。

- **Cake** — `.cake` スクリプトファイル、C# ライクな DSL。

- **FAKE** — F# のビルドシステム、関数型 DSL。

NUKE の例 — `_build/Build.cs`。

class Build : NukeBuild

{

public static int Main() => Execute<Build>(x => x.Compile);

Target Clean => _ => _

.Executes(() => Directory.Delete("bin", true));

Target Compile => _ => _

.DependsOn(Clean)

.Executes(() => DotNetTasks.DotNetBuild(s => s

.SetConfiguration("Release")));

Target Test => _ => _

.DependsOn(Compile)

.Executes(() => DotNetTasks.DotNetTest(s => s

.SetConfiguration("Release")

.EnableNoBuild()));

}

./build.sh test

または

nuke test

第19章 · NuGet 6.12 — パッケージ管理

NuGet は .NET にとっての npm・pip・Maven にあたる。

パッケージ追加

dotnet add package Serilog --version 4.0.0

更新

dotnet add package Serilog

削除

dotnet remove package Serilog

復元

dotnet restore

`Directory.Packages.props` による中央集権バージョン管理:

各プロジェクトはバージョンなしで `PackageReference` だけを書く。大きなソリューションでのバージョンドリフトを防ぐ。

`global.json` が SDK バージョン、`Directory.Packages.props` がパッケージバージョン。両方ともモノレポで標準。

第20章 · ゲーム開発 — Unity 6、Godot、Stride

**Unity 6**(2024年末リリース、2026年安定) — ゲームエンジン市場シェア1位。C# 13 まで対応。URP(Universal Render Pipeline)・HDRP(High Definition)・DOTS(Data-Oriented Tech Stack)が核。

using UnityEngine;

public class PlayerController : MonoBehaviour

{

[SerializeField] float speed = 5f;

Rigidbody rb;

void Start() { rb = GetComponent<Rigidbody>(); }

void Update()

{

var h = Input.GetAxis("Horizontal");

var v = Input.GetAxis("Vertical");

rb.linearVelocity = new Vector3(h, 0, v) * speed;

}

}

2023年の価格政策騒動以後、Unity は方針を撤回したが信頼は一度崩れた。2026年でもメジャーインディ・モバイルでは Unity が圧倒的だが、新規プロジェクトで Godot・Unreal へ移る流れもある。

**Godot 4(C#)** — オープンソースのゲームエンジン。GDScript が主力だが C# バインディングも安定。モバイル・インディで人気上昇中。

**Stride 4** — 純粋な .NET のゲームエンジン。すべてを C# で書く。コミュニティは小さいが .NET 開発者には馴染みやすいワークフロー。

第21章 · デスクトップレガシー — WPF・WinForms

WPF(Windows Presentation Foundation)と WinForms は2026年でも「レガシー」ではない。どちらも .NET 10 を対象に更新が出続け、Windows エンタープライズデスクトップの標準だ。

// WinForms

public partial class MainForm : Form

{

public MainForm()

{

InitializeComponent();

var btn = new Button { Text = "Click me", Location = new Point(20, 20) };

btn.Click += (s, e) => MessageBox.Show("Hello!");

Controls.Add(btn);

}

}

WPF は XAML・MVVM・強力なデータバインディング。日本・韓国のエンタープライズ社内ツールの相当部分が WPF。

**WinUI 3** — Windows 11 時代の新 UI フレームワーク。Windows App SDK でパッケージ化。MAUI Windows も内部的に WinUI 3 を使う。

選択マトリクス:

- **新規 Windows 専用アプリ** → WinUI 3 + Windows App SDK

- **既存 WPF コードベースの保守** → WPF のまま

- **Windows + 他 OS** → MAUI または Avalonia

- **シンプルな社内ツール** → WinForms(今でも速くてシンプル)

第22章 · クラウドデプロイ — Azure・AWS・GCP

.NET はどのクラウドでも一級市民。

**Azure App Service** — もっとも自然な選択。新しい .NET のリリースがまずここに来る。

az webapp up --name myapp --runtime "DOTNETCORE:10.0"

**AWS Lambda** — .NET 10 ランタイムをサポート。コールドスタートは AOT で 100ms 以下。

public class Function

{

public async Task<APIGatewayHttpApiV2ProxyResponse> Handle(

APIGatewayHttpApiV2ProxyRequest req, ILambdaContext ctx)

{

return new APIGatewayHttpApiV2ProxyResponse

{

StatusCode = 200,

Body = $"Hello from {req.RequestContext.Http.Path}"

};

}

}

デプロイは `dotnet lambda deploy-function` または SAM・CDK。

**Google Cloud Run** — コンテナベース。`Dockerfile` 1 つで終わる。

FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base

WORKDIR /app

EXPOSE 8080

FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build

COPY . /src

WORKDIR /src

RUN dotnet publish -c Release -o /app/publish

FROM base AS final

COPY --from=build /app/publish .

ENTRYPOINT ["dotnet", "MyApi.dll"]

**Aspire** がこの3つのマニフェストを自動生成する。`dotnet run --project AppHost --publisher manifest` 1 回で K8s YAML・Bicep・Cloud Run マニフェストが出る。

第23章 · Roslyn アナライザ・ソースジェネレータ

Roslyn は C#・VB.NET のコンパイラ。コードをツリーとして見せ、ツリーを変換する API を提供する。

**アナライザ(Analyzer)** — ビルド時にコードを検査し警告・エラーを出す。`StyleCop.Analyzers`・`Microsoft.CodeAnalysis.NetAnalyzers` が代表例。

dotnet add package Microsoft.CodeAnalysis.NetAnalyzers

ビルド時に数百のルールが自動適用される。`.editorconfig` の `dotnet_diagnostic.CA1822.severity = error` といった行で個別調整する。

**ソースジェネレータ(Source Generator)** — コンパイル時にコードを生成する。AOT フレンドリーで、リフレクションの代替。

代表例:

- **System.Text.Json** — `JsonSerializerContext` ソースジェネレータで JSON シリアライズコードを生成。

- **MapperGen / Mapperly** — DTO マッピングコードを自動生成。

- **Mediator.SourceGenerator** — MediatR をソースジェネレータで置き換え。

- **regex generator** — `[GeneratedRegex(...)]` 属性で正規表現マッチャーを生成。

public partial class EmailValidator

{

[GeneratedRegex(@"^[^@]+@[^@]+\.[^@]+$")]

private static partial Regex EmailRegex();

public bool IsValid(string s) => EmailRegex().IsMatch(s);

}

ビルド時にコンパイラが `EmailRegex()` の本体を生成。実行時の正規表現コンパイルコストがない。

第24章 · 日本・韓国の .NET コミュニティ

**日本**

- **.NETラボ勉強会** — 東京で毎月開催される大きな .NET ミートアップ。

- **Microsoft Tokyo Build** — Azure と .NET を統合したイベント。

- **MS Tech Summit Japan** — 年 1 回の大型イベント。

- **Qiita .NET タグ** — 日本語の .NET 記事がもっとも集まる場所。

**韓国**

- **.NET デブコミュニティコリア** — Facebook・Discord。

- **マイクロソフト韓国** — Build Korea、AI Day など年に 5〜6 回のイベント。

- **.NETDev Korea カンファレンス** — コミュニティ主導。

- **Hanbit Media・Insight Press** が C#・.NET 書籍を継続的に出している。

英語圏のリソース:

- **dot.net** — 公式サイト。

- **Microsoft Learn** — 無料チュートリアル。

- **Stack Overflow / .NET タグ** — 依然として Q&A の一次窓口。

- **r/dotnet、r/csharp** — 活発な Reddit サブ。

- **Nick Chapsas、Tim Corey、Scott Hanselman** — YouTube チャンネル。

エピローグ — 2026年の .NET 選択マトリクス

10年前は「.NET = Windows + IIS + Visual Studio」が答えだったが、2026年は答えが枝分かれする。

選択の基準を3行で。

- **新規 Web API** → ASP.NET Core 10 + Minimal API + AOT。可能なら Aspire で束ねる。

- **新規モバイルアプリ** → MAUI 9。Xamarin は EOL、新コードをそこに書く理由はない。

- **新規フルスタック SPA** → Blazor United(Server + WASM + SSR)。JS 生態系の方が馴染みがあれば ASP.NET Core + React。

- **データ処理・金融ドメイン** → F# 9/10。関数型が最適。

- **分散システム** → Orleans 9 または Akka.NET。メッセージベースの分散。

- **ゲーム** → Unity 6(シェア)、Godot 4(オープンソース)、Stride(純粋 .NET)。

- **Windows デスクトップ** → WinUI 3(新規)、WPF(既存維持)、WinForms(シンプルなツール)。

ランタイムの核。

- **.NET 10 LTS** — 2025年11月リリース、2028年11月までサポート。新規プロジェクトの既定。

- **.NET 9 STS** — 2026年5月 EOL。移行中のプロジェクト。

- **.NET 8 LTS** — 2026年11月 EOL。保守的な運用環境。

覚える一行:**「.NET はもう Windows の Java ではない。2026年の .NET はクロスプラットフォーム・AOT・クラウド一級市民のフルスタックランタイムだ」**

ツールは毎年変わるが核は変わらない。**型・強力なライブラリ・フルスタック統合** — それが30年前に Visual Studio が約束したことであり、2026年の .NET が依然として守っていることだ。

References

- **.NET 公式サイト** — https://dot.net/

- **Microsoft Learn .NET** — https://learn.microsoft.com/dotnet/

- **.NET 10 announcement** — https://devblogs.microsoft.com/dotnet/announcing-dotnet-10/

- **.NET 9 announcement** — https://devblogs.microsoft.com/dotnet/announcing-dotnet-9/

- **C# 13 features** — https://learn.microsoft.com/dotnet/csharp/whats-new/csharp-13

- **C# language design** — https://github.com/dotnet/csharplang

- **F# language design** — https://github.com/fsharp/fslang-design

- **ASP.NET Core docs** — https://learn.microsoft.com/aspnet/core/

- **Blazor docs** — https://learn.microsoft.com/aspnet/core/blazor/

- **.NET MAUI** — https://learn.microsoft.com/dotnet/maui/

- **.NET Aspire** — https://learn.microsoft.com/dotnet/aspire/

- **Entity Framework Core** — https://learn.microsoft.com/ef/core/

- **Orleans** — https://learn.microsoft.com/dotnet/orleans/

- **Avalonia UI** — https://avaloniaui.net/

- **Uno Platform** — https://platform.uno/

- **Unity** — https://unity.com/

- **Godot** — https://godotengine.org/

- **Stride engine** — https://www.stride3d.net/

- **xUnit** — https://xunit.net/

- **NuGet** — https://www.nuget.org/

- **BenchmarkDotNet** — https://benchmarkdotnet.org/

- **.NET runtime repo** — https://github.com/dotnet/runtime

- **.NET デブコミュニティコリア** — https://www.facebook.com/groups/dotnetdev/

- **.NETラボ勉強会** — https://dotnetlab.connpass.com/

— 完 —

현재 단락 (1/580)

2010年代までの .NET の見られ方はシンプルだった。**「Windows Server に IIS を入れて C# を書く Microsoft スタック」**。行き先は「Java のライセンスを...

작성 글자: 0원문 글자: 21,533작성 단락: 0/580