命名は、コードを書く中で最も身近な設計です。
よい名前は、コメントを減らし、関数の責務を明確にし、バグを見つけやすくします。
一言でいうと
よい名前は、「それが何で、何のためにあるのか」を読み手に伝えます。
コードは書く時間より読む時間のほうが長いです。名前が曖昧だと、読むたびに中身を確認する必要があります。
悪い名前の例
const data = await fetchUser();
const flag = data.age >= 18;
function handle(value: string) {
return value.trim();
}
data、flag、handle、value はよく見ますが、意味が薄い名前です。何のデータか、何のフラグか、何を処理するのかが分かりません。
よい名前の例
const user = await fetchUser();
const isAdult = user.age >= 18;
function normalizeUserName(name: string) {
return name.trim();
}
名前だけで意図がかなり分かります。
命名の基本
| 対象 | よい名前の方向 |
|---|---|
| 変数 | 中身を表す名詞 |
| boolean | is, has, can, should で始める |
| 関数 | 動詞 + 対象 |
| クラス | 役割を表す名詞 |
| 定数 | 意味を表す名前 |
count より failedLoginCount、list より activeUsers のように、範囲を少し具体化します。
スコープで名前の長さを変える
短い範囲なら短い名前でも問題ありません。
for (const user of users) {
console.log(user.name);
}
一方、広い範囲で使う変数は、具体的な名前にします。
const monthlyActiveUserCount = calculateMonthlyActiveUsers(users);
長い名前が常に良いわけではありません。読む範囲に合わせます。
避けたい名前
| 名前 | 問題 |
|---|---|
data | 何のデータか不明 |
tmp | 一時的の意味しかない |
flag | 何の条件か不明 |
handle | 何を扱うか不明 |
manager | 責務が広くなりやすい |
util | 何でも入る箱になりやすい |
曖昧な名前は、責務が曖昧な設計のサインです。
名前を付けられないとき
名前に迷うときは、コードの責務が混ざっている可能性があります。
たとえば processUserData という名前しか思いつかないなら、入力チェック、整形、保存、通知が1つの関数に混ざっているかもしれません。
命名に詰まったら、処理を分けるチャンスです。
まとめ
命名は、コードの意味を外に出す設計作業です。
よい名前を付けると、コメントを読まなくても意図が伝わり、変更範囲も見つけやすくなります。