C# での開発において、ただ動くコードを書くことと、読みやすく保守性の高いコードを書くことは別物です。この記事では、チーム開発や長期運用を見据えた C# のベストプラクティスを「命名規則」「コメントの書き方」「例外処理」の3つの観点から紹介します。
命名規則(Naming Conventions)
命名はコードの可読性と保守性に大きく関わる重要な要素です。
1. パスカルケースとキャメルケースを正しく使う
- クラス・インターフェース・メソッド名: PascalCase(先頭大文字)
- ローカル変数・引数: camelCase(先頭小文字)
public class UserService
{
public void RegisterUser(string userName) { }
}
2. 意味のある名前を使う
a
,b
,x1
など意味のない名前は避ける- 何を表す変数・関数なのかが明確に分かるように
// 悪い例
int d = 10;
// 良い例
int maxRetryCount = 10;
3. インターフェース名には “I” を付ける
public interface ILogger { }
コメントの書き方
1. コードの「なぜ」を書く
- 何をしているかよりも、なぜその処理が必要かを書く
// タイムゾーンをUTCに変換することで日時の比較を一貫させる
var utcTime = localTime.ToUniversalTime();
2. 無意味なコメントは書かない
// for文を実行する(←意味がない)
for (int i = 0; i < 10; i++) { }
3. ドキュメンテーションコメントを活用する
- メソッドやクラスには XML コメントを
/// <summary>
/// 指定したユーザーIDの情報を取得します。
/// </summary>
public User GetUserById(int id) { }
例外処理のベストプラクティス
1. キャッチして何もしないのはNG
try
{
DoSomething();
}
catch (Exception)
{
// 何もせずに黙殺 → デバッグ困難になる
}
2. 具体的な例外型をキャッチする
- 予期しうる例外ごとにハンドリングを分ける
try
{
File.ReadAllText("config.json");
}
catch (FileNotFoundException ex)
{
logger.LogError("設定ファイルが見つかりません: " + ex.Message);
}
3. 例外の再スローは throw 単体で行う
catch (Exception ex)
{
// NG: スタックトレースが失われる
// throw ex;
// OK:
throw;
}
まとめ
ベストプラクティスを守ることは、将来の自分や他の開発者がコードを読みやすくする最大の投資です。命名、コメント、例外処理という基本的な部分を丁寧に扱うことで、バグの早期発見やメンテナンス性の向上に大きく貢献できます。
チームでルールを統一し、日々のコーディングでも意識して取り入れていきましょう。