📖
リーダブルコードから学んだ「実務で使える変数名」の付け方
はじめに
エンジニア歴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