dotnet-core-expert について
.NET 8 と C# 12 のモダンな実践に重点を置く .NET Core 開発スキルです。クリーンアーキテクチャ、安全な API 実装、EF Core の利用を導き、ビルドとテストで検証します。
主な機能
- 01クリーンアーキテクチャのガイド
- 02モダンな .NET 8 と C# 12 のパターン
- 03Minimal API と OpenAPI のガイド
- 04EF Core と認証の資料
- 05ビルドと統合テストのワークフロー
活用シーン
- 01レイヤー化された .NET ソリューションの設計
- 02安全な API の実装
- 03EF Core によるデータアクセス構築
- 04ビルドとテストによるアプリの検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill dotnet-core-expertインストール後、Claude Code で/dotnet-core-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/authentication.mdclean-architecture.mdcloud-native.mdentity-framework.mdminimal-apis.md詳細
.NET Core エキスパート
コアワークフロー
- 要件を分析する — アーキテクチャパターン、データモデル、API 設計を特定します
- ソリューションを設計する — 適切に分離されたクリーンアーキテクチャのレイヤーを作成します
- 実装する — 最新の C# 機能を使用して高パフォーマンスなコードを記述し、
dotnet buildを実行してコンパイルを確認します。ビルドに失敗した場合は、エラーを確認して問題を修正し、先に進む前に再ビルドします - セキュリティを確保する — 認証、認可、セキュリティのベストプラクティスを追加します
- テストする — xUnit と統合テストを使用して包括的なテストを作成し、
dotnet testを実行してすべてのテストが成功することを確認します。テストに失敗した場合は、失敗の原因を診断して実装を修正し、続行する前に再実行します。curlまたは REST クライアントでエンドポイントを検証します
リファレンスガイド
状況に応じて詳細なガイダンスを読み込みます。
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| Minimal API | references/minimal-apis.md | エンドポイント、ルーティング、ミドルウェアを作成するとき |
| クリーンアーキテクチャ | references/clean-architecture.md | CQRS、MediatR、レイヤー、DI パターンを扱うとき |
| Entity Framework | references/entity-framework.md | DbContext、マイグレーション、リレーションシップを扱うとき |
| 認証 | references/authentication.md | JWT、Identity、認可ポリシーを扱うとき |
| クラウドネイティブ | references/cloud-native.md | Docker、ヘルスチェック、構成を扱うとき |
制約事項
必ず行うこと
- .NET 8 と C# 12 の機能を使用します
- nullable 参照型を有効にします:
.csprojで<Nullable>enable</Nullable>を指定します - すべての I/O 操作で async/await を使用します。例:
await dbContext.Users.ToListAsync() - 適切な依存性注入を実装します
- DTO には record 型を使用します。例:
public record UserDto(int Id, string Name); - クリーンアーキテクチャの原則に従います
WebApplicationFactory<Program>を使用して統合テストを作成します- OpenAPI/Swagger ドキュメントを構成します
絶対に行わないこと
- 同期 I/O 操作を使用する
- API レスポンスでエンティティを直接公開する
- 入力検証を省略する
- レガシーな .NET Framework のパターンを使用する
- アーキテクチャレイヤー間で関心事を混在させる
- 非推奨の EF Core パターンを使用する
コード例
Minimal API エンドポイント
// Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(Program).Assembly));
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
app.MapGet("/users/{id}", async (int id, ISender sender, CancellationToken ct) =>
{
var result = await sender.Send(new GetUserQuery(id), ct);
return result is null ? Results.NotFound() : Results.Ok(result);
})
.WithName("GetUser")
.Produces<UserDto>()
.ProducesProblem(404);
app.Run();
MediatR クエリハンドラー
// Application/Users/GetUserQuery.cs
public record GetUserQuery(int Id) : IRequest<UserDto?>;
public sealed class GetUserQueryHandler : IRequestHandler<GetUserQuery, UserDto?>
{
private readonly AppDbContext _db;
public GetUserQueryHandler(AppDbContext db) => _db = db;
public async Task<UserDto?> Handle(GetUserQuery request, CancellationToken ct) =>
await _db.Users
.AsNoTracking()
.Where(u => u.Id == request.Id)
.Select(u => new UserDto(u.Id, u.Name))
.FirstOrDefaultAsync(ct);
}
非同期クエリを使用する EF Core DbContext
// Infrastructure/AppDbContext.cs
public sealed class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options)
{
public DbSet<User> Users => Set<User>();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly);
}
}
// Usage in a service
public async Task<IReadOnlyList<UserDto>> GetAllAsync(CancellationToken ct) =>
await _db.Users
.AsNoTracking()
.Select(u => new UserDto(u.Id, u.Name))
.ToListAsync(ct);
Record 型を使用した DTO
public record UserDto(int Id, string Name);
public record CreateUserRequest(string Name, string Email);
出力テンプレート
.NET の機能を実装する際は、以下を提示します。
- プロジェクト構造(ソリューション/プロジェクトファイル)
- ドメインモデルと DTO
- API エンドポイントまたはサービスの実装
- 該当する場合はデータベースコンテキストとマイグレーション
- アーキテクチャ上の判断についての簡潔な説明
@jeffallan(Synergetic Solutions のプリンシパルコンサルタント)が管理しています
コメント
Markdown 対応