ef-core について
Entity Framework Core のコードを作成・レビューする開発者向けのガイダンスです。データ設計、クエリ、パフォーマンス、マイグレーション、セキュリティ、テストを扱います。
主な機能
- 01DbContext とエンティティ設計の指針
- 02クエリとパフォーマンスの推奨事項
- 03マイグレーションと変更追跡の実践
- 04セキュリティとテストの指針
活用シーン
- 01EF Core コードの改善点のレビュー
- 02データモデル、クエリ、マイグレーションの計画
- 03データベースアクセスとテスト方法の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ github/ awesome-copilot --skill ef-coreインストール後、Claude Code で/ef-coreを入力して読み込まれたか確認します。
詳細
Entity Framework Core のベストプラクティス
あなたの目標は、Entity Framework Core を扱う際にベストプラクティスに従えるよう、私を支援することです。
データコンテキストの設計
- DbContext クラスは焦点を絞り、まとまりを持たせる
- 構成オプションにはコンストラクターインジェクションを使用する
- fluent API の構成には OnModelCreating をオーバーライドする
- IEntityTypeConfiguration を使ってエンティティ構成を分離する
- コンソールアプリやテストでは DbContextFactory パターンの使用を検討する
エンティティの設計
- 意味のある主キーを使用する(自然キーと代理キーを検討する)
- 適切なリレーションシップを実装する(一対一、一対多、多対多)
- 制約と検証にはデータアノテーションまたは fluent API を使用する
- 適切なナビゲーションプロパティを実装する
- 値オブジェクトには所有エンティティ型の使用を検討する
パフォーマンス
- 読み取り専用のクエリには AsNoTracking() を使用する
- 大量の結果セットには Skip() と Take() でページネーションを実装する
- 必要に応じて Include() を使って関連エンティティを一括読み込みする
- 必要なフィールドのみを取得する射影(Select)を検討する
- 頻繁に実行されるクエリにはコンパイル済みクエリを使用する
- 関連データを適切にインクルードして N+1 クエリ問題を回避する
マイグレーション
- 小さく焦点を絞ったマイグレーションを作成する
- マイグレーションには説明的な名前を付ける
- 本番環境に適用する前にマイグレーションの SQL スクリプトを検証する
- デプロイにはマイグレーションバンドルの使用を検討する
- 適切な場合にはマイグレーションを通じてデータシードを追加する
クエリ
- IQueryable を賢く使用し、クエリがいつ実行されるかを理解する
- 生の SQL よりも厳密に型指定された LINQ クエリを優先する
- 適切なクエリ演算子(Where、OrderBy、GroupBy)を使用する
- 複雑な操作にはデータベース関数を検討する
- 再利用可能なクエリには仕様パターンを実装する
変更の追跡と保存
- 適切な変更追跡戦略を使用する
- SaveChanges() の呼び出しをバッチ化する
- マルチユーザーシナリオには同時実行制御を実装する
- 複数の操作にはトランザクションの使用を検討する
- 適切な DbContext の有効期間を使用する(Web アプリではスコープ付き)
セキュリティ
- パラメーター化されたクエリを使用して SQL インジェクションを回避する
- 適切なデータアクセス権限を実装する
- 生の SQL クエリには注意する
- 機密情報にはデータ暗号化を検討する
- マイグレーションを使ってデータベースユーザーの権限を管理する
テスト
- 単体テストにはインメモリデータベースプロバイダーを使用する
- 統合テストには SQLite を使った別個のテストコンテキストを作成する
- 純粋な単体テストには DbContext と DbSet をモックする
- マイグレーションは分離された環境でテストする
- モデルの変更にはスナップショットテストを検討する
私の EF Core コードをレビューする際は、問題を特定し、これらのベストプラクティスに従った改善を提案してください。
コメント
Markdown 対応