📖
リーダブルコードから学んだ「実務で使える変数名」の付け方
はじめに
エンジニア歴2年半の私が『リーダブルコード』を読み進める読書記録シリーズです。今回は変数名や関数名の付け方について学んだことを、実務経験と照らし合わせながらまとめてみました。「なんとなく」で付けていた名前を見直すきっかけになりそうです。
読んで気づいた5つのポイント
1. 具体的な動詞の選択
普段何気なく使っているget
やprocess
などの曖昧な動詞を、もっと具体的にできることに気づきました。
実務での改善例:
-
getUserInfo()
→fetchUserProfile()
(APIから取得するなら) -
processOrder()
→validateOrderDetails()
(バリデーション処理なら) -
updateData()
→saveUserPreferences()
(何を更新するかを明確に)
2. 汎用的すぎる名前の回避
tmp
、data
、result
などの名前を多用していたことを反省しました。
よくやってしまっていた例:
// ❌ 改善前: 何のデータかわからない
const data = await api.getUser();
const result = validateData(data);
// ✅ 改善後: 何を扱っているか明確
const userProfile = await api.getUser();
const validationResult = validateUserProfile(userProfile);
3. 単位を含めた命名
-
timeout
→timeoutMs
-
cacheExpiry
→cacheExpiryMinutes
-
fileSize
→fileSizeBytes
4. スコープに応じた名前の長さ調整
関数内のループ変数はi
でも良い、クラスのメンバ変数は詳細な名前を付けるべき、という考え方です。
実務での使い分け:
- ループ変数:
i
、j
(短いスコープ) - インスタンス変数:
currentUserSessionId
(長いスコープ) - グローバル設定:
MAX_API_RETRY_COUNT
(最も詳細に)
5. 命名規則による情報伝達
チーム開発では特に重要だと感じました。
- プライベートメソッド:
_calculateTotalPrice()
- 定数:
API_TIMEOUT_MS
- ブール値:
isUserLoggedIn
、hasValidToken
視覚的に情報が伝わるので、コードレビューでも指摘が減りそうです。
実務ですぐに活かしたいこと
- 単位を名前に含める → バグ防止の第一歩
- 汎用的な名前を具体的に → コードレビューでの指摘も減りそう
- スコープに応じた名前の長さ調整 → 保守性の向上
まとめ
普段「コードが動けばOK」という意識でしたが、後から読む人(未来の自分含む)のことを考えるという視点が抜けていました。変数名一つとっても、チーム開発での配慮が重要です。
最後まで読んでいただきありがとうございました。
Discussion