4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

日本語コメントを書くなら日本語変数名でいいのでは — C# 命名規則の非対称を整理する tags:

4
Posted at

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# 命名規則の「当たり前」を疑ってみた

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?