$flg という名前に、半年後の自分が泣かされた。変数名は未来の自分への手紙だと思う

動けばいいと雑につけた変数名が、数か月後の自分をいちばん苦しめる。
受託15年でようやく身についた、名前のつけ方の話。

受託でシステムを作るようになって15年、いちばん時間を溶かしてきたのは、実は難しいアルゴリズムではない。
自分が半年前に書いたコードを読み返して「これ、何の値だっけ」と固まる、あの時間だ。

原因はたいてい変数の名前にある。
若い頃の僕は、とりあえず動けばいいと $flg や $tmp、$data2 みたいな名前を平気で置いていた。
その瞬間は自分だけが分かっていればいいと思っている。
でも三か月も経てば、書いた本人がいちばんの他人になる。

flg という名前が、何も説明していなかった

$flg は「フラグ」の略で、オンかオフかを持つ変数によく付けられる。
ただ、この名前は「これはフラグです」としか言っていない。
肝心の「何のフラグなのか」がどこにも書いていない。

これを $is_published(公開済みかどうか)や $has_error(エラーがあるか)に変えるだけで、コードは急に読めるようになる。
if ($flg) と書いてあると中を追わないと意味が取れないが、if ($is_published) なら英語の文としてそのまま読める。
名前が条件の意味を語ってくれるから、コメントすら要らなくなる。

良い名前は、未来の自分への手紙だ

僕が今つけているルールは単純だ。
真偽値には is や has を頭につけて「はい/いいえ」で答えられる名前にする。
数を数える変数には count を、一覧には複数形の s を付ける。
省略語は極力使わず、num を number に、usr を user にする。
タイプ数は少し増えるが、読み返す回数のほうが圧倒的に多い。

面白いもので、名前を丁寧につけ始めてから、バグそのものが減った。
名前をきちんと決めようとすると「この変数は結局なんの役割なんだ」と、書く前に一度立ち止まることになる。
その一瞬の見直しが、おかしな設計を未然に止めてくれているんだと思う。

コードは機械のために書くものだと思われがちだけれど、機械はどんな名前でも文句を言わずに動かす。
名前で困るのは、いつも人間のほうだ。
だから僕は、変数名を「半年後の自分に宛てた短い手紙」だと思って付けている。

技術ブログ一覧へ戻る