TL;DR
- C# は Unicode 識別子をサポートしており、漢字・ひらがな・カタカナの変数名・メソッド名は言語仕様として合法
- 「日本語コメント + 英語変数名」は「英語だけでは読めないコードを、英語の命名で誤魔化している」状態とも言える
- 日本語変数名を使うとコメントが減り、WHATではなくWHYだけをコメントに書ける構成になる
- 適用判断の基準は「誰が読むか」と「どのドメインか」
環境
| 項目 | バージョン・詳細 |
|---|---|
| OS | Windows 11 |
| Visual Studio | 2022 (17.x) |
| .NET | .NET 8 |
| 対象領域 | 社内業務アプリ(WinForms) |
「日本語コメント + 英語変数名」の非対称
業務系のコードでよく見るパターン:
// 基本給を取得する
decimal basicSalary = GetBasicSalary();
// 残業時間を取得する
int overtimeHours = GetOvertimeHours();
// 残業係数(法定割増率: 1.25倍)
decimal overtimeRate = 1.25m;
// 残業手当を計算する(基本給 ÷ 月間所定労働時間 × 残業時間 × 残業係数)
decimal overtimeAllowance = basicSalary / 160m * overtimeHours * overtimeRate;
コメントを全部削除するとこうなる:
decimal basicSalary = GetBasicSalary();
int overtimeHours = GetOvertimeHours();
decimal overtimeRate = 1.25m;
decimal overtimeAllowance = basicSalary / 160m * overtimeHours * overtimeRate;
日本語を知らないエンジニアには読めない。つまりこのコードはすでに「英語だけで意味が伝わらない」状態になっている。日本語コメントに依存している時点で、変数名の英語縛りには実質的な意味がなくなっている。
日本語変数名バージョン
decimal 基本給 = GetBasicSalary();
int 残業時間 = GetOvertimeHours();
decimal 残業係数 = 1.25m; // 労働基準法37条の法定割増率(月60時間以下の時間外労働)
decimal 残業手当 = 基本給 / 160m * 残業時間 * 残業係数;
変わったこと:
- WHATを説明するコメント3行が消えた
- コードが8行→4行になった
- 残ったコメントは「なぜ1.25なのか」というWHYの説明のみ
コメントの密度が下がって、残ったコメントの情報価値が上がる。
C# での日本語識別子の仕様
C# の識別子は Unicode Standard に基づいており、Lu / Ll / Lt / Lm / Lo / Nl カテゴリの文字が使える。CJK 統合漢字・ひらがな・カタカナは Lo(Letter, Other)に分類されるため、合法な識別子として扱われる。
// すべて有効な C# コード
public class 給与計算
{
public decimal 基本給 { get; set; }
public decimal 残業係数 { get; set; } = 1.25m;
public int 残業時間 { get; set; }
public decimal 通勤手当 { get; set; }
public decimal 残業手当を計算する()
=> 基本給 / 160m * 残業時間 * 残業係数;
public decimal 支給合計を計算する()
=> 基本給 + 残業手当を計算する() + 通勤手当;
}
Visual Studio 2022(17.x)でインテリセンス補完・Rename リファクタリング・Find All References すべて正常動作する。
使い分けの判断基準
| 状況 | 推奨 | 理由 |
|---|---|---|
| 社内業務ツール(日本語チーム) | 日本語でもOK | 仕様書との1対1対応が読みやすさに直結 |
| OSS・NuGet公開ライブラリ | 英語 | 国際的な読者を想定する必要がある |
| 英語圏メンバーがいるチーム | 英語 | チームの共通言語を優先する |
| フレームワーク規約に従う必要がある箇所 | 英語 | 規約との一貫性を優先する |
「英語コメントを一切書かず、日本語コメントだけで補完している」状況なら、日本語変数名を検討する価値がある。
ハマりどころ・注意点
ReSharper の命名規則警告
ReSharper を導入している場合、デフォルトの PascalCase 命名規則チェックで警告が出る場合がある。ReSharper > Options > Code Editing > C# > Naming Style で設定を調整するか、ファイル単位で // ReSharper disable InconsistentNaming を使う。
namespace と公開型名は英語推奨
リフレクション・DI コンテナ・シリアライザーで型名を文字列参照する場面では日本語型名が問題になりやすい。クラス内部(プロパティ・メソッド・ローカル変数)だけ日本語にして、namespace と外部公開クラス名は英語にとどめるのが実用上の落とし所。
namespace SalaryCalculation // namespace は英語
{
public class SalaryCalculator // 外部公開型名は英語
{
public decimal 基本給 { get; set; } // 内部メンバーは日本語OK
public decimal 残業手当を計算する() { ... }
}
}
git diff の視認性
日本語テキストの変更は diff で判読しにくい。git diff --word-diff を使うか、レビューは GitHub の unified diff で行うと多少改善する。
まとめ
- 「日本語コメント + 英語変数名」は「英語だけでは読めないコードに英語を混ぜている」状態であり、一貫性がない
- 日本語変数名にすることでWHATのコメントが不要になり、WHYだけをコメントに書ける構成になる
- C# の言語仕様は日本語識別子を合法として扱い、Visual Studio でのツールサポートも問題ない
-
namespaceや外部公開型名は英語に限定し、クラス内部に日本語を閉じ込めるのが実用的な境界線
概要や実際の開発体験を含めた記事はこちら → 日本語コメントは平気で書くのに、日本語変数名は書かない — C# 命名規則の「当たり前」を疑ってみた