dotnet について
.NET バックエンド開発向けのガイドスキルです。C#、ASP.NET Core、Entity Framework Core を用いた設計、API、データアクセス、セキュリティ、テスト、ドキュメントを扱います。
主な機能
- 01慣用的な C# と Clean Architecture
- 02REST API の設計とバージョン管理
- 03Entity Framework Core のクエリ手法
- 04依存性注入とキャッシュ
- 05認証、認可、テスト
活用シーン
- 01.NET バックエンドのプロジェクト構成
- 02REST API の設計とバージョン管理
- 03Entity Framework Core のデータアクセス最適化
- 04認証と統合テストの追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill dotnetインストール後、Claude Code で/dotnetを入力して読み込まれたか確認します。
詳細
.NET 開発ガイドライン
C#、ASP.NET Core、Entity Framework Core、および最新の .NET プラクティスに関する深い知識を持つ、.NET バックエンド開発のエキスパートです。
コードスタイルと構成
- 簡潔で慣用的な C# コードを、正確な例とともに記述します
- .NET の規約とベストプラクティスに従います
- 適切なカプセル化を備えたオブジェクト指向プログラミングを使用します
- コレクション操作には LINQ を優先します
- クリーンアーキテクチャの原則に従ってコードを構成します
プロジェクト構成
src/
Domain/ # Entities, value objects, domain logic
Application/ # Use cases, DTOs, interfaces
Infrastructure/ # Data access, external services
WebApi/ # Controllers, middleware, configuration
tests/
UnitTests/
IntegrationTests/
RESTful API 設計
- 適切な HTTP メソッド(GET、POST、PUT、PATCH、DELETE)を使用します
- 適切なステータスコードを返します
- リソースのエンドポイントには複数形の名詞を使用します
- コレクションには適切なページネーションを実装します
- フィルタリングと並べ替えにはクエリパラメーターを使用します
- API をバージョン管理します(URL パスまたはヘッダー)
[ApiController]
[Route("api/v1/[controller]")]
public class UsersController : ControllerBase
{
[HttpGet]
public async Task<ActionResult<IEnumerable<UserDto>>> GetUsers([FromQuery] PaginationParams pagination)
[HttpGet("{id}")]
public async Task<ActionResult<UserDto>> GetUser(int id)
[HttpPost]
public async Task<ActionResult<UserDto>> CreateUser(CreateUserDto dto)
}
Async/Await パターン
- I/O バウンドのすべての操作で
async/awaitを使用します - 非同期メソッドの末尾には
Asyncを付けます - 非同期コードをブロックしないでください(
.Resultと.Wait()は避けます) - キャンセルをサポートするために
CancellationTokenを使用します - 頻繁に呼び出されるメソッドでは
ValueTaskを優先します
Entity Framework Core
構成
- エンティティの構成には Fluent API を使用します
- リレーションシップを明示的に構成します
- スキーマ変更にはマイグレーションを使用します
- Nullable 参照型を有効にします
ベストプラクティス
- 読み取り専用クエリでは
AsNoTracking()を使用します - データアクセスにはリポジトリパターンを実装します
- Eager Loading には Include/ThenInclude を使用します
- N+1 クエリの問題を回避します
- クエリを最適化するためにプロジェクションを使用します
public async Task<IEnumerable<UserDto>> GetUsersAsync()
{
return await _context.Users
.AsNoTracking()
.Select(u => new UserDto
{
Id = u.Id,
Name = u.Name
})
.ToListAsync();
}
依存性注入
- コンストラクターインジェクションを使用します
Program.csでサービスを登録します- 適切なライフタイム(Scoped、Transient、Singleton)を使用します
- サービスの抽象化にはインターフェースを作成します
- 構成には Options パターンを使用します
builder.Services.AddScoped<IUserService, UserService>();
builder.Services.Configure<JwtSettings>(builder.Configuration.GetSection("Jwt"));
キャッシュ
- インメモリキャッシュには IMemoryCache を使用します
- 分散環境では IDistributedCache を使用します
- キャッシュ無効化戦略を実装します
- HTTP レスポンスにはレスポンスキャッシュを使用します
- 本番環境でのキャッシュには Redis を検討します
バリデーション
- 複雑なバリデーションには FluentValidation を使用します
- シンプルなバリデーションには Data Annotations を使用します
- リクエストパイプラインの早い段階で検証します
- 詳細なバリデーションエラーを返します
- モデル状態の検証を実装します
エラー処理
- グローバル例外処理ミドルウェアを使用します
- カスタム例外型を作成します
- 一貫性のあるエラーレスポンスを返します
- コンテキスト情報とともに例外をログに記録します
- 内部の詳細情報を公開しないでください
セキュリティ
認証
- API 認証には JWT トークンを使用します
- リフレッシュトークンのローテーションを実装します
- トークンを安全に保管します
- 適切な場合は ASP.NET Core Identity を使用します
認可
- ポリシーベースの認可を使用します
- リソースベースの認可を実装します
[Authorize]属性を適切に適用します- 細かな権限設定にはクレームを使用します
テスト
- xUnit で単体テストを記述します
- 依存関係のモックには Moq を使用します
- WebApplicationFactory で統合テストを記述します
- API エンドポイントをエンドツーエンドでテストします
- テストにはインメモリデータベースを使用します
ドキュメント
- API ドキュメントには Swagger/OpenAPI を使用します
- XML コメントですべてのエンドポイントを文書化します
- リクエストとレスポンスの例を含めます
- OpenAPI 仕様からクライアント SDK を生成します
コメント
Markdown 対応