--- description: 'C#アプリケーション構築のガイドライン' applyTo: '**/*.cs' --- # C# 開発 ## C# 指示書 - 常に最新バージョンのC#、現在はC# 13の機能を使用してください。 - 各関数に明確で簡潔なコメントを記述してください。 ## 一般的な指示書 - コード変更をレビューする際は、高信頼性の提案のみを行ってください。 - なぜ特定の設計決定が行われたかのコメントを含む、良い保守性のあるプラクティスでコードを記述してください。 - エッジケースを処理し、明確な例外処理を記述してください。 - ライブラリや外部依存関係については、コメントでその使用法と目的に言及してください。 ## 命名規則 - コンポーネント名、メソッド名、パブリックメンバーにはPascalCaseに従ってください。 - プライベートフィールドとローカル変数にはcamelCaseを使用してください。 - インターフェース名には「I」を前置してください(例:IUserService)。 ## フォーマット - `.editorconfig`で定義されたコードフォーマットスタイルを適用してください。 - ファイルスコープ名前空間宣言と単一行using指示句を優先してください。 - 任意のコードブロックの開始中括弧の前に改行を挿入してください(例:`if`、`for`、`while`、`foreach`、`using`、`try`等の後)。 - メソッドの最終return文は独立した行にあることを確保してください。 - 可能な限りパターンマッチングとswitch式を使用してください。 - メンバー名を参照する際は文字列リテラルの代わりに`nameof`を使用してください。 - 任意のパブリックAPIにXMLドキュメントコメントを作成することを確保してください。該当する場合は、コメントに``と``ドキュメントを含めてください。 ## プロジェクトセットアップと構造 - 適切なテンプレートで新しい.NETプロジェクトを作成する方法をユーザーにガイドしてください。 - プロジェクト構造の理解を築くため、生成された各ファイルとフォルダの目的を説明してください。 - 機能フォルダまたはドメイン駆動設計の原則を使用してコードを整理する方法を実演してください。 - モデル、サービス、データアクセス層での適切な関心の分離を示してください。 - 環境固有設定を含むASP.NET Core 9のProgram.csと設定システムを説明してください。 ## Null許容参照型 - 変数を非null許容として宣言し、エントリーポイントで`null`をチェックしてください。 - `== null`や`!= null`の代わりに常に`is null`や`is not null`を使用してください。 - C#のnullアノテーションを信頼し、型システムが値がnullになり得ないと言う場合はnullチェックを追加しないでください。 ## データアクセスパターン - Entity Framework Coreを使用してデータアクセス層の実装をガイドしてください。 - 開発と本番での異なるオプション(SQL Server、SQLite、In-Memory)を説明してください。 - リポジトリパターンの実装とその利点がある場合を実演してください。 - データベースマイグレーションとデータシーディングの実装方法を示してください。 - 一般的なパフォーマンス問題を避ける効率的なクエリパターンを説明してください。 ## 認証と認可 - JWTベアラートークンを使用した認証の実装をユーザーにガイドしてください。 - ASP.NET Coreに関連するOAuth 2.0とOpenID Connectの概念を説明してください。 - ロールベースとポリシーベース認可の実装方法を示してください。 - Microsoft Entra ID(旧Azure AD)との統合を実演してください。 - コントローラーベースとMinimal APIの両方で一貫してセキュリティを確保する方法を説明してください。 ## バリデーションとエラーハンドリング - データアノテーションとFluentValidationを使用したモデルバリデーションの実装をガイドしてください。 - バリデーションパイプラインとバリデーション応答をカスタマイズする方法を説明してください。 - ミドルウェアを使用したグローバル例外処理戦略を実演してください。 - API全体で一貫したエラー応答を作成する方法を示してください。 - 標準化されたエラー応答のためのプロブレム詳細(RFC 7807)実装を説明してください。 ## APIバージョニングとドキュメント - APIバージョニング戦略の実装と説明をユーザーにガイドしてください。 - 適切なドキュメントでSwagger/OpenAPI実装を実演してください。 - エンドポイント、パラメータ、応答、認証をドキュメント化する方法を示してください。 - コントローラーベースとMinimal APIの両方でのバージョニングを説明してください。 - コンシューマーを支援する意味のあるAPIドキュメントの作成をユーザーにガイドしてください。 ## ログとモニタリング - Serilogやその他のプロバイダーを使用した構造化ログの実装をガイドしてください。 - ログレベルとそれぞれを使用する時期を説明してください。 - テレメトリ収集のためのApplication Insightsとの統合を実演してください。 - リクエスト追跡のためのカスタムテレメトリと相関IDの実装方法を示してください。 - APIパフォーマンス、エラー、使用パターンの監視方法を説明してください。 ## テスト - アプリケーションの重要なパスに対するテストケースを常に含めてください。 - 単体テストの作成をユーザーにガイドしてください。 - 「Act」、「Arrange」、「Assert」のコメントは出力しないでください。 - テストメソッド名と大文字小文字の使い分けで近くのファイルの既存スタイルをコピーしてください。 - APIエンドポイントの統合テストアプローチを説明してください。 - 効果的なテストのための依存関係をモックする方法を実演してください。 - 認証と認可ロジックをテストする方法を示してください。 - API開発に適用されるテスト駆動開発の原則を説明してください。 ## パフォーマンス最適化 - キャッシュ戦略(インメモリ、分散、応答キャッシュ)の実装をユーザーにガイドしてください。 - 非同期プログラミングパターンとAPIパフォーマンスにとってなぜ重要かを説明してください。 - 大きなデータセットのページネーション、フィルタリング、ソートを実演してください。 - 圧縮やその他のパフォーマンス最適化の実装方法を示してください。 - APIパフォーマンスの測定とベンチマーク方法を説明してください。 ## デプロイメントとDevOps - .NETの組み込みコンテナサポート(`dotnet publish --os linux --arch x64 -p:PublishProfile=DefaultContainer`)を使用してAPIをコンテナ化する方法をユーザーにガイドしてください。 - 手動Dockerfile作成と.NETのコンテナ公開機能の違いを説明してください。 - .NETアプリケーションのCI/CDパイプラインを説明してください。 - Azure App Service、Azure Container Apps、またはその他のホスティングオプションへのデプロイメントを実演してください。 - ヘルスチェックと準備プローブの実装方法を示してください。 - 異なるデプロイメント段階の環境固有設定を説明してください。