5.1 KiB
5.1 KiB
| description | applyTo |
|---|---|
| C# アプリケーション開発のためのコード作成規則 by @jgkim999 | **/*.cs |
C# コード作成規則
命名規則 (Naming Conventions)
一貫した命名規則はコードの可読性の核心です。Microsoftのガイドラインに従うことを推奨します。
| 要素 | 命名規則 | 例 |
|---|---|---|
| インターフェース | 接頭辞 'I' + PascalCase | IAsyncRepository, ILogger |
| パブリックメンバー | パスカルケース (PascalCase) | public int MaxCount;, public void GetData() |
| パラメーター、ローカル変数 | キャメルケース (camelCase) | int userCount, string customerName |
| プライベート/内部フィールド | アンダースコア(_) + キャメルケース | private string _connectionString; |
| 定数 (const) | パスカルケース (PascalCase) | public const int DefaultTimeout = 5000; |
| ジェネリック型パラメーター | 接頭辞 'T' + 説明的な名前 | TKey, TValue, TResult |
| 非同期メソッド | 'Async' 接尾辞 | GetUserAsync, DownloadFileAsync |
コードフォーマット及び可読性 (Formatting & Readability)
一貫したフォーマットはコードを視覚的に解析しやすくします。
| 項目 | 規則 | 説明 |
|---|---|---|
| インデント | 4つのスペースを使用 | タブの代わりに4つのスペースを使用します。csファイルは必ず4つのスペースを使用します。 |
| 括弧 | 常に中括弧 {} を使用 | 制御文(if, for, while等)が1行でも常に中括弧を使用します。 |
| 空行 | 論理的分離 | メソッド定義、プロパティ定義、論理的に分離されたコードブロック間に空行を追加します。 |
| 文の作成 | 1行に1つの文 | 1行には1つの文のみを記述します。 |
| var キーワード | 型が明確な場合のみ使用 | 変数の型を右側から明確に推論できる場合のみvarを使用します。 |
| 名前空間 | ファイルスコープ名前空間の使用 | C# 10以降では、ファイルスコープ名前空間を使用して不要なインデントを削減します。 |
| コメント | XML形式のコメント作成 | 作成したclassや関数には常にxml形式のコメントを記述します。 |
言語機能の使用 (Language Features)
最新のC#機能を活用してコードをより簡潔で効率的にしましょう。
| 機能 | 説明 | 例/参考 |
|---|---|---|
| 非同期プログラミング | I/Oバウンドタスクにasync/awaitを使用 | async Task<string> GetDataAsync() |
| ConfigureAwait | ライブラリコードでコンテキスト切り替えオーバーヘッドを削減 | await SomeMethodAsync().ConfigureAwait(false) |
| LINQ | コレクションデータのクエリと操作 | users.Where(u => u.IsActive).ToList() |
| 式ベースメンバー | 簡単なメソッド/プロパティを簡潔に表現 | public string Name => _name; |
| Nullable Reference Types | コンパイル時NullReferenceExceptionを防止 | #nullable enable |
| using 宣言 | IDisposableオブジェクトの簡潔な処理 | using var stream = new FileStream(...); |
パフォーマンス及び例外処理 (Performance & Exception Handling)
堅牢で高速なアプリケーションのためのガイドラインです。
例外処理
処理できる具体的な例外のみをcatchしてください。catch (Exception)のような一般的な例外をキャッチすることは避けるべきです。
例外はプログラムフロー制御のために使用しないでください。例外は予期しないエラー状況にのみ使用されるべきです。
パフォーマンス
文字列を反復的に連結する際は、+ 演算子の代わりにStringBuilderを使用してください。
Entity Framework Core使用時、読み取り専用クエリには .AsNoTracking() を使用してパフォーマンスを向上させてください。
不要なオブジェクト割り当てを避け、特にループ内では注意してください。
セキュリティ (Security)
安全なコードを作成するための基本原則です。
| セキュリティ領域 | 規則 | 説明 |
|---|---|---|
| 入力値検証 | 全ての外部データを検証 | 外部(ユーザー、API等)から入力される全てのデータは信頼せず、常に妥当性を検査してください。 |
| SQLインジェクション防止 | パラメーター化クエリの使用 | 常にパラメーター化クエリやEntity FrameworkのようなORMを使用してSQLインジェクション攻撃を防止してください。 |
| 機密データ保護 | 設定管理ツールの使用 | パスワード、接続文字列、APIキー等はソースコードにハードコードせず、Secret Manager、Azure Key Vault等を使用してください。 |
これらの規則をプロジェクトの .editorconfig ファイルとチームのコードレビュープロセスに統合して、継続的に高品質なコードを維持することを目標とするべきです。