- Published on
モダン .NET 2026 完全ガイド - .NET 9 · C# 13 · F# 9 · ASP.NET Core · Blazor United · MAUI · Aspire · EF Core 9 徹底解説
- Authors

- Name
- Youngju Kim
- @fjvbn20031
プロローグ — 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
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@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 ページ。
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.MainPage">
<VerticalStackLayout Padding="20" Spacing="10">
<Label Text="Hello, MAUI!" FontSize="32" />
<Button Text="Click me" Clicked="OnClicked" />
<Label x:Name="CounterLabel" Text="0" />
</VerticalStackLayout>
</ContentPage>
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 で作っている。
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="HelloAvalonia.MainWindow"
Title="HelloAvalonia">
<StackPanel Margin="20">
<TextBlock Text="Hello from Avalonia!" FontSize="24" />
<Button Content="Click me" Click="OnClick" />
</StackPanel>
</Window>
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 による中央集権バージョン管理:
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Serilog" Version="4.0.0" />
<PackageVersion Include="Dapper" Version="3.0.0" />
</ItemGroup>
</Project>
各プロジェクトはバージョンなしで 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 /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/
— 完 —