C#の変数名ルール完全ガイド|命名規則・使えない名前・実例を初心者向けに解説

はじめに

C#でプログラムを書くとき、ほぼ必ず登場するのが「変数」です。そして、変数を使うたびに必要になるのが「変数名」です。

変数名は、単にコンパイルを通すための名前ではありません。値の意味を伝え、コードを読みやすくし、あとから修正しやすくするための重要な要素です。

たとえば、次の2つのコードを比べてみましょう。

C#
int x = 1200;
C#
int monthlyFee = 1200;

どちらもC#としては正しいコードですが、後者のほうが「月額料金を表している値」だと分かりやすくなります。

この記事では、C#の変数名ルール、使えない名前、命名規則、実務で読みやすい名前を付けるコツまで、初心者向けに分かりやすく解説します。

1. C#の変数名とは?初心者が最初に押さえる基礎

1-1. 変数名は「値に付ける名前」でありコードの読みやすさを左右する

変数名とは、プログラム内で扱う値に付ける名前です。

C#
int age = 25;
string userName = "Taro";
bool isActive = true;

この例では、ageuserNameisActiveが変数名です。

変数名が分かりやすいと、コードを読んだ人が「この値は何を表しているのか」をすぐに理解できます。逆に、意味の分からない変数名を付けると、コードを読むたびに中身を確認しなければならず、保守しにくいコードになります。

C#
int a = 25;
string b = "Taro";
bool c = true;

このような名前でもコンパイルはできますが、何を表しているのか分かりにくくなります。

C#の変数名では、「動くこと」だけでなく「読んで意味が分かること」が大切です。

1-2. C#では変数名も「識別子」の一種として扱われる

C#では、変数名、クラス名、メソッド名、プロパティ名など、プログラム内の要素に付ける名前をまとめて「識別子」と呼びます。

たとえば、次のコードには複数の識別子があります。

C#
class User
{
string userName;

void PrintName()
{
Console.WriteLine(userName);
}
}

この中では、UseruserNamePrintNameなどが識別子です。

変数名は識別子の一種なので、C#の識別子ルールに従う必要があります。つまり、使える文字、使えない文字、予約語の扱いなどにルールがあります。

1-3. 変数名・フィールド名・プロパティ名・定数名の違い

C#では、値に名前を付ける場面がいくつかあります。初心者のうちは、変数名、フィールド名、プロパティ名、定数名の違いが分かりにくいかもしれません。

ローカル変数は、メソッドの中で一時的に使う値です。

C#
void Calculate()
{
int totalPrice = 1000;
}

フィールドは、クラスの中に保持する値です。

C#
class User
{
private string _name;
}

プロパティは、外部から値を取得・設定するためのメンバーです。

C#
class User
{
public string Name { get; set; }
}

定数は、あとから変更しない固定値です。

C#
const int MaxLoginAttempts = 5;

どれも「名前を付ける」という点では似ていますが、C#ではそれぞれに推奨される命名規則があります。

1-4. コンパイルできる名前と読みやすい名前は別物

C#では、ルール上は使えるけれど、実務では避けたほうがよい変数名があります。

C#
int x1 = 100;
int data = 200;
int temp = 300;

これらはコンパイルできます。しかし、何の値なのかが曖昧です。

一方で、次のような名前なら意味が分かりやすくなります。

C#
int itemCount = 100;
int totalAmount = 200;
int temporaryScore = 300;

C#の変数名を考えるときは、まず「文法的に正しいか」を確認し、そのうえで「他人が読んでも分かりやすいか」を意識しましょう。

2. C#の変数名で必ず守るべき基本ルール

2-1. 変数名の先頭に使える文字:英字・Unicode文字・アンダースコア

C#の変数名は、先頭に英字、Unicode文字、アンダースコアを使えます。

C#
int count = 10;
int _count = 20;
string userName = "Taro";

一般的には、英字で始める変数名がよく使われます。

C#
int totalPrice = 1000;
string customerName = "Yamada";

アンダースコアで始まる名前も使えますが、C#では主にprivateフィールド名で使われることが多いです。

C#
private int _totalCount;

ローカル変数では、特別な理由がない限り、英字で始めるcamelCaseが分かりやすいでしょう。

2-2. 変数名の途中に使える文字:英字・数字・アンダースコアなど

変数名の2文字目以降には、英字、数字、アンダースコアなどを使えます。

C#
int user1 = 1;
int user2Count = 2;
int item_count = 3;

ただし、C#ではローカル変数にitem_countのようなsnake_caseを使うより、itemCountのようなcamelCaseを使うことが一般的です。

C#
int itemCount = 3;

数字は途中であれば使えますが、名前の意味が分かりにくくならないように注意しましょう。

C#
int addressLine1 = 1;
int addressLine2 = 2;

このように、住所の1行目・2行目など、数字に意味がある場合は問題ありません。

2-3. 数字から始まる変数名は使えない

C#の変数名は数字から始めることができません。

C#
int 1stUser = 1; // エラー
int 2count = 2; // エラー

数字で始まる名前は、C#の文法上、識別子として認められません。

正しく書くなら、次のように英字から始めます。

C#
int firstUser = 1;
int count2 = 2;

「1番目」を表したい場合でも、1stUserではなくfirstUserfirstUserIdのように書くとよいでしょう。

2-4. スペースやハイフン、記号を含む変数名は使えない

C#の変数名には、スペースやハイフン、演算子として使われる記号などを含めることはできません。

C#
int user name = 1;   // エラー
int user-name = 2; // エラー
int total@price = 3; // エラー

スペースを入れたい場合は、単語の区切りを大文字で表すcamelCaseを使います。

C#
int userName = 1;
int totalPrice = 2;

C#では、変数名にハイフンを使うと引き算として解釈される可能性があります。そのため、user-nameのような名前は使えません。

2-5. 大文字と小文字は別の名前として区別される

C#では、大文字と小文字が区別されます。

C#
int count = 10;
int Count = 20;

この2つは別の名前として扱われます。

ただし、同じ意味の値に対して大文字・小文字だけが違う名前を使うと、非常に紛らわしくなります。

C#
int price = 1000;
int Price = 2000;

このような書き方は、コードを読む人を混乱させます。

C#では、ローカル変数はprice、プロパティはPriceのように、役割によって命名規則を使い分けるのが一般的です。

2-6. 日本語の変数名は使えるが実務では注意が必要

C#では、日本語の変数名を使うこともできます。

C#
int 年齢 = 25;
string 名前 = "田中";

これは文法上は有効です。

ただし、実務では英語の変数名が使われることが多いです。理由は、チーム開発、外部ライブラリ、ドキュメント、エラーメッセージ、海外メンバーとの協業などで英語のほうが扱いやすい場面が多いためです。

学習目的や小さな個人用プログラムであれば日本語の変数名を使っても問題ありません。しかし、実務や公開するコードでは、基本的に英語の変数名を使うことをおすすめします。

3. C#の変数名に使えない名前・エラーになる例

3-1. int・class・ifなどの予約語はそのまま変数名にできない

C#には、言語仕様で特別な意味を持つ予約語があります。たとえば、intclassifforreturnなどです。

これらは、そのまま変数名として使うことはできません。

C#
int int = 10;     // エラー
string class = "A"; // エラー
bool if = true; // エラー

予約語はC#の文法を構成するために使われるため、変数名として使うとコンパイラが正しく解釈できなくなります。

次のように、意味のある別の名前にしましょう。

C#
int number = 10;
string className = "A";
bool isConditionMatched = true;

3-2. @を付ければ予約語も識別子として使えるが基本は避ける

C#では、予約語の前に@を付けることで、識別子として使うことができます。

C#
int @class = 10;
string @if = "condition";

このような名前は「エスケープされた識別子」として扱われます。

ただし、通常の変数名として予約語を使うのはおすすめできません。コードが読みにくくなるからです。

@classと書くより、次のように意味のある名前を付けたほうが自然です。

C#
int classId = 10;
string conditionText = "condition";

@を使う場面は、外部システムやJSONなどで予約語と同じ名前を扱わなければならない場合などに限るのがよいでしょう。

3-3. 先頭が数字の変数名がエラーになる例

数字から始まる変数名は使えません。

C#
int 1count = 10;

このコードはエラーになります。

正しくは次のように書きます。

C#
int count1 = 10;

また、順位や順番を表す場合は、数字をそのまま先頭に置くのではなく、英単語を使うと読みやすくなります。

C#
int firstRank = 1;
int secondScore = 80;

3-4. 記号や空白を含む変数名がエラーになる例

変数名に空白や記号を含めるとエラーになります。

C#
int user age = 20;
int total-price = 1000;
int item.count = 5;

C#では、空白は区切りとして扱われ、ハイフンは演算子として扱われます。また、ドットはメンバーアクセスに使われます。

正しくは次のように書きます。

C#
int userAge = 20;
int totalPrice = 1000;
int itemCount = 5;

単語をつなげるときは、ローカル変数ではcamelCaseを使うのが基本です。

3-5. 同じスコープ内で同じ変数名を使うとエラーになる

C#では、同じスコープ内で同じ変数名を重複して宣言することはできません。

C#
void Sample()
{
int count = 10;
int count = 20; // エラー
}

同じメソッド内で同じ名前を再度宣言しているため、エラーになります。

値を変更したい場合は、再宣言せずに代入します。

C#
void Sample()
{
int count = 10;
count = 20;
}

また、内側のスコープでも、外側のローカル変数と紛らわしい名前を使うとエラーや混乱の原因になります。

C#
void Sample()
{
int count = 10;

if (count > 0)
{
int count = 20; // エラー
}
}

変数の有効範囲を意識して、同じ名前を使い回さないようにしましょう。

3-6. 初心者がよく見る変数名関連のコンパイルエラー

初心者が変数名でよく見るエラーには、次のようなものがあります。

まず、宣言していない変数名を使った場合です。

C#
Console.WriteLine(userName);

userNameを宣言していない場合、現在のコンテキストに存在しないというエラーになります。

正しくは、先に変数を宣言します。

C#
string userName = "Taro";
Console.WriteLine(userName);

次に、大文字・小文字を間違えた場合です。

C#
string userName = "Taro";
Console.WriteLine(username); // エラー

C#ではuserNameusernameは別の名前です。

また、予約語を変数名にした場合や、数字から始まる名前を付けた場合もエラーになります。

C#
int class = 1;  // エラー
int 1value = 2; // エラー

変数名関連のエラーが出たときは、スペル、大文字・小文字、宣言位置、予約語、使用できない文字を確認しましょう。

4. C#で推奨される変数名の命名規則

4-1. ローカル変数と引数はcamelCaseで書く

C#では、メソッド内で使うローカル変数や、メソッドの引数にはcamelCaseを使うのが一般的です。

camelCaseとは、最初の単語を小文字で始め、2つ目以降の単語の先頭を大文字にする書き方です。

C#
int totalPrice = 1000;
string userName = "Taro";
bool isActive = true;

メソッドの引数も同じです。

C#
void PrintUserName(string userName)
{
Console.WriteLine(userName);
}

camelCaseを使うことで、ローカル変数や引数であることが分かりやすくなります。

4-2. privateフィールドは_camelCaseがよく使われる

C#では、privateフィールドにアンダースコア始まりのcamelCaseを使う書き方がよく見られます。

C#
class UserService
{
private readonly string _connectionString;
private int _retryCount;
}

_connectionString_retryCountのように書くことで、クラス内のフィールドであることが分かりやすくなります。

ただし、すべてのプロジェクトで必ずこのルールが使われるわけではありません。チームやプロジェクトの規約によっては、アンダースコアを使わない場合もあります。

重要なのは、プロジェクト内で書き方を統一することです。

4-3. publicなメンバーやプロパティはPascalCaseで書く

C#では、publicなメンバー、プロパティ、メソッド、クラス名などにはPascalCaseを使うのが一般的です。

PascalCaseとは、すべての単語の先頭を大文字にする書き方です。

C#
public string UserName { get; set; }
public int TotalPrice { get; set; }

public void PrintUserName()
{
Console.WriteLine(UserName);
}

ローカル変数はuserName、プロパティはUserNameのように使い分けます。

C#
string userName = "Taro";
UserName = userName;

大文字・小文字の違いだけに頼りすぎると読みにくくなる場合もありますが、C#の一般的な命名規則として覚えておきましょう。

4-4. 定数はPascalCaseまたはプロジェクト規約に合わせる

C#の定数は、PascalCaseで書かれることが多いです。

C#
const int MaxRetryCount = 3;
const string DefaultUserName = "Guest";

他の言語では、定数をすべて大文字のスネークケースで書くことがあります。

C#
const int MAX_RETRY_COUNT = 3;

しかし、C#ではMaxRetryCountのようなPascalCaseがよく使われます。

ただし、既存プロジェクトで別のルールが決まっている場合は、その規約に合わせることが大切です。

4-5. snake_caseやハンガリアン記法はC#では基本的に避ける

C#では、ローカル変数にsnake_caseを使うことは一般的ではありません。

C#
int total_price = 1000; // C#ではあまり一般的ではない

通常はcamelCaseを使います。

C#
int totalPrice = 1000;

また、ハンガリアン記法もC#では基本的に避けられます。ハンガリアン記法とは、変数名に型情報を付ける書き方です。

C#
string strName = "Taro";
int intCount = 10;
bool bActive = true;

C#では型が明確に分かるため、変数名に型を含める必要はあまりありません。

C#
string name = "Taro";
int count = 10;
bool isActive = true;

型名よりも、値の意味や役割を表す名前を付けましょう。

4-6. Microsoftの命名ガイドラインと実務での考え方

C#の命名では、Microsoftの.NET向け命名ガイドラインがよく参考にされます。

基本的には、次のような考え方を押さえておくとよいでしょう。

ローカル変数や引数はcamelCaseにします。

C#
int itemCount = 10;
string userName = "Taro";

クラス名、メソッド名、プロパティ名、publicメンバーはPascalCaseにします。

C#
public class UserService
{
public string UserName { get; set; }

public void SaveUser()
{
}
}

privateフィールドは、プロジェクトの規約に応じて_camelCaseを使います。

C#
private readonly UserRepository _userRepository;

実務では、公式ガイドラインだけでなく、チームの既存コードに合わせることも重要です。すでにあるコードと違う書き方を混ぜると、全体の統一感がなくなります。

5. 読みやすいC#変数名を付けるコツ

5-1. 何を表す値なのか一目で分かる名前にする

読みやすい変数名の基本は、「その値が何を表しているのか」が一目で分かることです。

C#
int count = 10;

countだけでも数を表していることは分かりますが、何の数なのかは分かりません。

C#
int userCount = 10;
int itemCount = 10;
int retryCount = 10;

このように、何を数えているのかを名前に含めると分かりやすくなります。

金額ならprice、合計ならtotalAmount、ユーザー名ならuserNameのように、値の意味を具体的に表しましょう。

5-2. a・b・tmpなど意味が曖昧な名前を避ける

abdatatmpのような名前は、意味が曖昧になりやすいです。

C#
int a = 1000;
int b = 200;
int tmp = a + b;

このコードだけでは、何を計算しているのか分かりません。

次のように書くと、意味が伝わりやすくなります。

C#
int itemPrice = 1000;
int shippingFee = 200;
int totalPrice = itemPrice + shippingFee;

一時的な値であっても、なるべく役割が分かる名前を付けましょう。

ただし、短い範囲のループ変数など、慣習的にijが分かりやすい場面もあります。

5-3. 型名ではなく役割や目的を表す名前にする

変数名には、型そのものではなく、役割や目的を表す名前を付けるのが基本です。

悪い例です。

C#
string text = "Taro";
int number = 25;
List<string> list = new List<string>();

型は分かりますが、何の文字列、何の数値、何のリストなのかが分かりません。

良い例です。

C#
string userName = "Taro";
int userAge = 25;
List<string> userNames = new List<string>();

C#では、エディタやIDEで型を確認しやすいため、変数名に型情報を入れるより、値の意味を表すことを優先しましょう。

5-4. bool型はis・has・canなどで真偽が分かる名前にする

bool型の変数名は、trueまたはfalseの意味が分かる名前にすると読みやすくなります。

よく使われる接頭辞には、ishascanshouldなどがあります。

C#
bool isActive = true;
bool hasPermission = false;
bool canEdit = true;
bool shouldRetry = false;

このように書くと、if文でも自然に読めます。

C#
if (isActive)
{
Console.WriteLine("有効なユーザーです");
}

if (hasPermission)
{
Console.WriteLine("権限があります");
}

逆に、次のような名前は意味が曖昧です。

C#
bool active = true;
bool permission = false;

bool型では、「何がtrueならどういう状態なのか」が分かる名前を意識しましょう。

5-5. コレクションは複数形やListを使って中身が分かる名前にする

配列やListなど、複数の値を持つ変数には、複数形を使うと分かりやすくなります。

C#
List<string> users = new List<string>();
string[] userNames = new string[10];

usersと書けばユーザーの集まり、userNamesと書けばユーザー名の集まりだと分かります。

一方で、次のような名前は曖昧です。

C#
List<string> list = new List<string>();
string[] array = new string[10];

型は分かりますが、中身が分かりません。

Dictionaryの場合は、キーと値の関係が分かる名前にすると便利です。

C#
Dictionary<int, string> userNameById = new Dictionary<int, string>();
Dictionary<string, decimal> priceByProductCode = new Dictionary<string, decimal>();

ByIdByProductCodeのように書くと、何をキーにして値を取得するのかが分かりやすくなります。

5-6. 略語を使いすぎず、チームで意味が伝わる名前にする

変数名が長すぎるのを避けるために略語を使いたくなることがあります。

C#
int usrCnt = 10;
string addr = "Tokyo";

しかし、略しすぎると意味が伝わりにくくなります。

C#
int userCount = 10;
string address = "Tokyo";

一般的に広く使われている略語であれば問題ありません。

C#
int id = 1;
string url = "https://example.com";

ただし、チーム内でしか通じない略語や、意味が複数考えられる略語は避けたほうがよいです。

変数名は、自分だけでなく、将来コードを読む人に向けて付けるものです。

6. C#の変数名の良い例・悪い例

6-1. 数値を扱う変数名の例

数値を扱う変数名では、何の数値なのかを明確にします。

悪い例です。

C#
int n = 10;
int value = 1000;
int num = 3;

良い例です。

C#
int userCount = 10;
int totalPrice = 1000;
int retryCount = 3;

金額ならprice、合計ならtotal、回数ならcount、最大値ならmaxなど、意味が分かる単語を使いましょう。

C#
int maxRetryCount = 3;
int remainingDays = 7;
decimal taxRate = 0.1m;

6-2. 文字列を扱う変数名の例

文字列では、どのようなテキストなのかを名前に含めます。

悪い例です。

C#
string text = "Taro";
string str = "Tokyo";
string value = "test@example.com";

良い例です。

C#
string userName = "Taro";
string address = "Tokyo";
string emailAddress = "test@example.com";

表示用の文言であればmessage、入力値であればinput、ファイルパスであればfilePathのように、用途に合わせて名前を付けます。

C#
string errorMessage = "入力内容が正しくありません";
string inputText = Console.ReadLine();
string filePath = "data.txt";

6-3. bool型を扱う変数名の例

bool型では、trueまたはfalseの状態が分かる名前を付けます。

悪い例です。

C#
bool flag = true;
bool check = false;
bool status = true;

良い例です。

C#
bool isLoggedIn = true;
bool hasError = false;
bool canDelete = true;

if文で読んだときに自然な英語になるかを確認すると、分かりやすい名前を付けやすくなります。

C#
if (isLoggedIn)
{
Console.WriteLine("ログイン済みです");
}

if (canDelete)
{
Console.WriteLine("削除できます");
}

flagは便利に見えますが、何を示すフラグなのか分かりにくいため、具体的な名前にしましょう。

6-4. 配列・List・Dictionaryを扱う変数名の例

配列やListでは、中身を表す複数形の名前がよく使われます。

C#
string[] userNames = { "Taro", "Hanako" };
List<int> scores = new List<int>();
List<Product> products = new List<Product>();

悪い例です。

C#
string[] array = { "Taro", "Hanako" };
List<int> list = new List<int>();

これでは中身が分かりません。

Dictionaryでは、キーと値の対応関係を名前に含めると分かりやすくなります。

C#
Dictionary<int, User> userById = new Dictionary<int, User>();
Dictionary<string, Product> productByCode = new Dictionary<string, Product>();

複数の値を扱う変数では、「何の集まりか」「どのように取り出すのか」が分かる名前を意識しましょう。

6-5. ループ変数にi・jを使ってよい場面

ループ変数では、ijを使っても問題ない場面があります。

C#
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}

短いfor文で、単純なインデックスを表す場合はiで十分です。

二重ループではijが使われることもあります。

C#
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
Console.WriteLine($"{i}, {j}");
}
}

ただし、ループ内の処理が長い場合や、インデックスに特別な意味がある場合は、具体的な名前を付けたほうが読みやすくなります。

C#
for (int userIndex = 0; userIndex < users.Count; userIndex++)
{
Console.WriteLine(users[userIndex]);
}

ijは短い範囲で意味が明確な場合に使い、複雑な処理では具体的な名前を選びましょう。

6-6. 悪い変数名を読みやすく改善するBefore/After

悪い変数名を改善すると、コードの意味が分かりやすくなります。

Beforeです。

C#
int a = 1000;
int b = 200;
int c = a + b;

Afterです。

C#
int itemPrice = 1000;
int shippingFee = 200;
int totalPrice = itemPrice + shippingFee;

Beforeです。

C#
bool flag = user.Age >= 20;

Afterです。

C#
bool isAdult = user.Age >= 20;

Beforeです。

C#
List<string> list = GetUsers();

Afterです。

C#
List<string> userNames = GetUserNames();

変数名を改善すると、コメントを書かなくてもコードの意味が伝わりやすくなります。読みやすいコードを書くためには、処理内容だけでなく名前にも注意を払いましょう。

7. 変数名を付けるときによくある疑問

7-1. C#の変数名は英語にすべき?

実務では、C#の変数名は英語にするのが一般的です。

理由は、C#や.NETの標準ライブラリが英語で設計されているためです。英語のクラス名、メソッド名、プロパティ名と組み合わせたときに、英語の変数名のほうが自然に読めます。

C#
string userName = Console.ReadLine();
int itemCount = products.Count;

また、チーム開発やOSS、海外ドキュメントとの相性もよくなります。

ただし、英語が苦手な場合でも、難しい単語を使う必要はありません。userNametotalPriceisActiveのような基本的な単語から使えば十分です。

7-2. 変数名に日本語を使っても問題ない?

C#では、日本語の変数名を使うこと自体は可能です。

C#
int 合計金額 = 1200;
string 顧客名 = "山田";

学習用コードや個人の小さなプログラムでは、日本語のほうが理解しやすい場合もあります。

しかし、実務では英語の変数名を使うことが多いです。日本語の変数名は、入力環境、文字化け、チーム内の規約、外部ツールとの相性などで問題になる可能性があります。

そのため、初心者の学習段階では日本語で考えてもかまいませんが、実務を意識するなら英語の変数名に慣れておくのがおすすめです。

7-3. camelCaseとPascalCaseはどう使い分ける?

C#では、camelCaseとPascalCaseを場面によって使い分けます。

camelCaseは、最初の単語を小文字で始める書き方です。

C#
int totalPrice;
string userName;

主にローカル変数やメソッドの引数に使います。

PascalCaseは、すべての単語の先頭を大文字にする書き方です。

C#
public string UserName { get; set; }
public void SaveUser()
{
}

主にクラス名、メソッド名、プロパティ名、publicメンバーなどに使います。

簡単にまとめると、メソッド内の一時的な変数はcamelCase、外部から見える名前はPascalCaseと覚えるとよいでしょう。

7-4. アンダースコアはいつ使ってよい?

C#では、アンダースコアは主にprivateフィールドで使われます。

C#
private readonly UserRepository _userRepository;
private int _retryCount;

この書き方により、ローカル変数や引数とフィールドを区別しやすくなります。

C#
public UserService(UserRepository userRepository)
{
_userRepository = userRepository;
}

一方、ローカル変数ではアンダースコアを使わず、camelCaseにすることが一般的です。

C#
int totalPrice = 1000;

ただし、プロジェクトによって規約が異なるため、既存コードに合わせることが重要です。

7-5. 長い変数名と短い変数名はどちらがよい?

変数名は、短ければよいわけでも、長ければよいわけでもありません。

重要なのは、必要な意味が過不足なく伝わることです。

短すぎる例です。

C#
int c = 10;

何の数なのか分かりません。

長すぎる例です。

C#
int theNumberOfUsersWhoRegisteredTodayInThisApplication = 10;

意味は分かりますが、長すぎて読みにくくなります。

適切な例です。

C#
int todayRegisteredUserCount = 10;

変数のスコープが短く、すぐ近くで意味が分かる場合は短めでも問題ありません。逆に、広い範囲で使われる変数や重要な値には、具体的な名前を付けましょう。

7-6. varを使うときの変数名はどう決める?

C#では、型推論を使ってvarで変数を宣言できます。

C#
var userName = "Taro";
var userCount = 10;

varを使うと型名を書かないため、変数名から意味が分かることがより重要になります。

悪い例です。

C#
var data = GetData();
var result = Process();

これだけでは、何のデータで、何の結果なのか分かりません。

良い例です。

C#
var users = GetUsers();
var totalPrice = CalculateTotalPrice();

右辺を見れば型や意味が明確な場合は、varを使っても読みやすくなります。

C#
var user = new User();
var products = new List<Product>();

varを使うときほど、変数名には具体的な意味を持たせましょう。

8. チーム開発で変数名を統一する方法

8-1. 命名規則をチーム内で明文化する

チーム開発では、変数名の付け方をメンバーごとに変えてしまうと、コード全体に統一感がなくなります。

そのため、命名規則を明文化しておくことが大切です。

たとえば、次のようなルールを決めます。

C#
// ローカル変数・引数
int totalPrice;

// privateフィールド
private int _totalCount;

// プロパティ
public string UserName { get; set; }

// 定数
const int MaxRetryCount = 3;

ルールをドキュメントにまとめておくと、新しいメンバーが参加したときにも迷いにくくなります。

8-2. 既存コードの書き方に合わせる

命名規則で大切なのは、正しさだけではなく統一感です。

たとえば、既存コードでprivateフィールドに_camelCaseを使っているなら、新しく書くコードでも同じ書き方に合わせます。

C#
private readonly UserRepository _userRepository;
private readonly MailService _mailService;

一部だけ違う書き方を混ぜると、コードの見た目がばらばらになります。

C#
private readonly UserRepository _userRepository;
private readonly MailService mailService;

どちらの書き方が絶対に正しいというより、プロジェクト内で一貫していることが重要です。

8-3. Visual StudioやEditorConfigで命名ルールをチェックする

C#では、Visual StudioやEditorConfigを使って命名ルールをチェックできます。

EditorConfigを使うと、インデント、改行、命名規則などをプロジェクト単位で統一しやすくなります。

たとえば、privateフィールドはアンダースコア始まりにする、publicメンバーはPascalCaseにする、といったルールを設定できます。

手作業で命名を確認するだけでは、どうしても見落としが発生します。ツールで自動的にチェックできるようにしておくと、チーム全体で品質を保ちやすくなります。

8-4. コードレビューで変数名を確認するポイント

コードレビューでは、処理内容だけでなく変数名も確認しましょう。

確認したいポイントは、次のような点です。

変数名から値の意味が分かるか。

C#
int totalPrice = itemPrice + shippingFee;

bool型の名前がtrueの意味を表しているか。

C#
bool hasPermission = user.Role == "Admin";

型名だけの名前になっていないか。

C#
List<string> userNames = new List<string>();

略語が分かりにくくないか。

C#
int registeredUserCount = 10;

レビューで変数名を指摘するときは、「この名前は悪い」と言うのではなく、「この値は何を表しているかが分かる名前にすると読みやすくなりそうです」のように、意図を伝えるとよいでしょう。

8-5. 命名に迷ったときの判断基準

変数名に迷ったときは、次の基準で考えると決めやすくなります。

まず、その値が何を表しているかを言葉にします。

たとえば、「ログイン中のユーザーのID」なら、次のような名前が考えられます。

C#
int loggedInUserId;
int currentUserId;

次に、その変数が使われる範囲を考えます。短い範囲でしか使わないなら少し短めでも問題ありませんが、広い範囲で使うなら具体的な名前にします。

また、同じような値が複数ある場合は、違いが分かる名前にします。

C#
int currentUserId;
int selectedUserId;
int createdByUserId;

命名に迷ったら、「半年後の自分が読んでも意味が分かるか」「チームメンバーが初見で理解できるか」を基準にしましょう。

まとめ

C#の変数名は、プログラム内の値に付ける名前です。文法上のルールを守るだけでなく、コードを読む人に意味が伝わる名前を付けることが重要です。

C#の変数名では、数字から始めることはできず、空白やハイフンなどの記号も使えません。また、intclassifなどの予約語はそのまま変数名にできません。大文字と小文字は区別されるため、スペルミスにも注意が必要です。

命名規則としては、ローカル変数や引数にはcamelCase、publicなプロパティやメソッドにはPascalCase、privateフィールドには_camelCaseがよく使われます。ただし、最終的にはプロジェクトやチームの規約に合わせることが大切です。

読みやすい変数名を付けるには、abtmpdataのような曖昧な名前を避け、userNametotalPriceisActiveuserCountのように、値の意味や役割が分かる名前を選びましょう。

変数名は小さな要素に見えますが、コードの読みやすさや保守性に大きく影響します。C#を学び始めた段階から、分かりやすい変数名を意識して書くことで、実務でも通用するきれいなコードに近づけます。