はじめに
この記事はリーダブルコード(ダスティン・ボズウェル著、オライリージャパン)を主に参照して作成しております。
変数名決定の大前提
コーディングにおいて分かりやすく・メンテナンスしやすい変数名の決め方 が重要になる
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. 変数名は意味を持たせる
NG例→(意味が分かりにくい例)
$user = get(); // 何を取得するのか分からない
$val = 100; // val って何?
模範例→(意味を持たせる)
$user = getCurrentUser(); // 現在のユーザーを取得することが明確
$maxUploadSize = 100; // アップロードの最大サイズを表している
🌟ここをチェック→関数名と組み合わせて「何をする変数なのか」をはっきりと明確にさせる
2. 具体的な単語を使う(抽象的なものはNG)
NG例→(抽象的すぎる)
$data = getData(); // どんなデータか分からない
模範例→(具体的にする)
$users = getAllUsers(); // ユーザーを取得することが分かる
🌟ここをチェック→「data」「value」「flag」などの曖昧な表現の名前は避ける
3. ブール値は「真偽が分かる名前」にする
NG例→(意味が曖昧)
$admin = true; // これは「管理者のデータ」なのか「管理者かどうか」なのか?
模範例→(is/has/can で始める)
$isAdmin = true; // ユーザーが管理者かどうか
$hasPermission = false; // 権限を持っているかどうか
$canEdit = true; // 編集可能かどうか
🌟ここをチェック→ブール値(true / false)は is / has / can で始めると分かりやすいので推奨する
4. 配列・リストの変数名は複数形にする
NG例→(単数形だと配列と分からない)
$user = getUsers();
模範例→(複数形にする)
$users = getUsers(); // `users` なら「複数のユーザー」を扱うことが分かる
🌟ここをチェック→リストや配列を示す変数名は s をつけて複数形にする!
5. 数値を表す変数には count / total / max を使う
NG例→(数値と分からない)
$users = 100; // 配列なのか、ユーザー数なのか分からない
模範例→(数値と分かるようにする)
$userCount = 100; // ユーザーの合計数
$maxUploadSize = 5000; // アップロードの最大サイズ(KB単位)
🌟ここをチェック→ 数値を示す変数には count / total / max などを使用する
6. 定数は UPPER_CASE_SNAKE_CASE にする
NG例→(小文字だと変数と区別しにくい)
$maxsize = 5000;
模範例→(定数は大文字 & アンダースコア区切り)
define('MAX_UPLOAD_SIZE', 5000);
const DEFAULT_PAGE_SIZE = 20;
🌟ここをチェック→ 定数は UPPER_CASE_SNAKE_CASE にすると一目で定数と分かる!
7. コレクションや辞書型は map / list / assoc でできる限り示す
NG例→型が分からない
$items = getItemList();
模範例→型を意識する
$userList = getUserList(); // ユーザーのリスト
$userMap = getUserMap(); // キーがユーザーIDの連想配列
🌟ここをチェック→リストや辞書型を扱う変数には List や Map を付けると理解しやすくなる
8. フラグの名前は should / enable / disable を使う
NG例→何を意味しているか分からない
$flag = true;
模範例→(意図を明確にする)
$shouldNotify = true; // 通知を送るかどうか
$enableCache = false; // キャッシュを有効にするかどうか
🌟ここをチェック→動作を制御するフラグには should / enable / disable を使うと理解しやすい
9. 一貫性を持たせる
NG例→(同じ意味の変数なのに名前の付け方がバラバラ)
$max_users = 100;
$totalUserCount = 100;
userLimit = 100;
模範例→(命名規則を統一する)
$maxUsers = 100;
$totalUsers = 100;
🌟ここをチェック→ チームで変数名のスタイルを統一すると可読性が向上するので推奨
10. 省略しすぎない(ただし短く)
NG例→(略しすぎて意味不明)
$u = getUser();
$t = getTime();
模範例→(短くても意味が分かるように)
$user = getUser();
$timestamp = getTimestamp();
🌟 ここをチェック→省略しすぎると逆に読みにくくなるので、適切な長さにする事を意識する
11. よく使う変数名のパターン
【用途】 【変数名の例】 【説明】
現在のユーザー $currentUser ログイン中のユーザー
ユーザー一覧 $users ユーザーのリスト
投稿の件数 $postCount 投稿数
最大値 $maxUploadSize アップロードの最大サイズ
設定情報 $config 設定データの配列
データキャッシュ $cacheEnabled キャッシュが有効かどうか
フォームデータ $formData フォームからの入力値
通知を送るか $shouldNotify 通知を送るかどうか
権限チェック $hasPermission ユーザーが権限を持っているか
12. 参考文献
ダスティン・ボズウェル(著) リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック オライリージャパン 初版