変数名の決め方（リーダブルコード参照）

## はじめに
**この記事はリーダブルコード（ダスティン・ボズウェル著、オライリージャパン）を主に参照して作成しております。**


## 変数名決定の大前提
 コーディングにおいて分かりやすく・メンテナンスしやすい変数名の決め方 が重要になる
 1,変数名を見ただけで、**何を表しているのか分かること**  
 2,チーム開発でも**統一しやすいルール**を適用する

## 変数名決定の基本的なルール
**1. 変数名は「意味が分かる」ようにする（val / data などの曖昧な名前は基本的にNG)**
**2. ブール値は isAdmin, hasPermission, canEdit のように is / has / can を使う**
**3. リストは複数形（users）、辞書型は Map（userMap）にする**
**4. 数値を表す変数には count / total / max を含める（userCount)**
**5. フラグの名前は should / enable / disable を使う（shouldNotify)**
**6. 定数は UPPER_CASE_SNAKE_CASE にする（MAX_UPLOAD_SIZE)**
**7. 命名の一貫性を保つ（チーム内でスタイルガイドを決めると良い）**




## 1. 変数名は意味を持たせる
```php:例
 NG例→（意味が分かりにくい例)
  $user = get();  // 何を取得するのか分からない
  $val = 100;  // val って何？

 模範例→（意味を持たせる）
  $user = getCurrentUser();  // 現在のユーザーを取得することが明確
  $maxUploadSize = 100;  // アップロードの最大サイズを表している

```
 **🌟ここをチェック→関数名と組み合わせて「何をする変数なのか」をはっきりと明確にさせる**
## 2. 具体的な単語を使う(抽象的なものはNG)
```php:例
NG例→（抽象的すぎる）
　$data = getData();  // どんなデータか分からない
 
　模範例→（具体的にする）
　 $users = getAllUsers();  // ユーザーを取得することが分かる
```
**🌟ここをチェック→「data」「value」「flag」などの曖昧な表現の名前は避ける**

## 3. ブール値は「真偽が分かる名前」にする
```php:例
  NG例→（意味が曖昧）
  $admin = true;  // これは「管理者のデータ」なのか「管理者かどうか」なのか？

 　模範例→（is/has/can で始める）
 　 $isAdmin = true;  // ユーザーが管理者かどうか
 　 $hasPermission = false;  // 権限を持っているかどうか
　  $canEdit = true;  // 編集可能かどうか
```
**🌟ここをチェック→ブール値（true / false）は is / has / can で始めると分かりやすいので推奨する**


## 4. 配列・リストの変数名は複数形にする
```php:例
   NG例→（単数形だと配列と分からない）
    $user = getUsers();
   
   模範例→（複数形にする）
     $users = getUsers();  // `users` なら「複数のユーザー」を扱うことが分かる
```
**🌟ここをチェック→リストや配列を示す変数名は s をつけて複数形にする！**

## 5. 数値を表す変数には count / total / max を使う
```php:例
 NG例→（数値と分からない）
　$users = 100;  // 配列なのか、ユーザー数なのか分からない

 模範例→（数値と分かるようにする）
　$userCount = 100;  // ユーザーの合計数
　$maxUploadSize = 5000;  // アップロードの最大サイズ（KB単位）
```
🌟ここをチェック→ 数値を示す変数には count / total / max などを使用する

## 6. 定数は UPPER_CASE_SNAKE_CASE にする
```php:例
 NG例→（小文字だと変数と区別しにくい）
  $maxsize = 5000;
  
 模範例→（定数は大文字 & アンダースコア区切り）
  define('MAX_UPLOAD_SIZE', 5000);
  const DEFAULT_PAGE_SIZE = 20;
```
🌟ここをチェック→ 定数は UPPER_CASE_SNAKE_CASE にすると一目で定数と分かる！

## 7. コレクションや辞書型は map / list / assoc でできる限り示す
```php:
NG例→型が分からない
 $items = getItemList();

模範例→型を意識する
 $userList = getUserList();  // ユーザーのリスト
 $userMap = getUserMap();  // キーがユーザーIDの連想配列
```
🌟ここをチェック→リストや辞書型を扱う変数には List や Map を付けると理解しやすくなる

## 8. フラグの名前は should / enable / disable を使う
```php:
NG例→何を意味しているか分からない
 $flag = true;

模範例→(意図を明確にする）
 $shouldNotify = true;  // 通知を送るかどうか
 $enableCache = false;  // キャッシュを有効にするかどうか
```
🌟ここをチェック→動作を制御するフラグには should / enable / disable を使うと理解しやすい

## 9. 一貫性を持たせる
```php:
 NG例→（同じ意味の変数なのに名前の付け方がバラバラ）
  $max_users = 100;
  $totalUserCount = 100;
  userLimit = 100;
  
 模範例→（命名規則を統一する）
   $maxUsers = 100;
   $totalUsers = 100;
```
🌟ここをチェック→ チームで変数名のスタイルを統一すると可読性が向上するので推奨
## 10. 省略しすぎない（ただし短く）
```php:
 NG例→（略しすぎて意味不明）
  $u = getUser();
  $t = getTime();
  
 模範例→（短くても意味が分かるように）
  $user = getUser();
  $timestamp = getTimestamp();
 ``` 
🌟 ここをチェック→省略しすぎると逆に読みにくくなるので、適切な長さにする事を意識する

## 11. よく使う変数名のパターン
```:
【用途】	        【変数名の例】	【説明】
現在のユーザー	$currentUser	ログイン中のユーザー
ユーザー一覧	    $users	        ユーザーのリスト
投稿の件数	    $postCount	    投稿数
最大値	        $maxUploadSize	アップロードの最大サイズ
設定情報	        $config	        設定データの配列
データキャッシュ	$cacheEnabled	キャッシュが有効かどうか
フォームデータ	$formData	　　 フォームからの入力値
通知を送るか	    $shouldNotify	通知を送るかどうか
権限チェック	    $hasPermission	ユーザーが権限を持っているか
```

## 12. 参考文献
**ダスティン・ボズウェル(著)  リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック  オライリージャパン 初版**