プログラミング
コーディング規約
コードレビュー

相対的なネーミングはよせ、やめるんだ!

たぶん1000回くらいは言われてきているがいまだに絶滅しないので、もう1回言う。ファイル名でもソースコード上の変数でもCSSのセレクタでもなんでもいいけど、相対的なネーミングはやめよう。

Safe Harbor Statement

この投稿は個人の(中略)であり、所属する組織とは関係ありません。

なぜ相対的なネーミングをしてはいけないか

  • 名前をつけた人の主観が入り込むため
  • 時間が経つにつれ名前が実態と乖離し混乱を招くため
  • 実装に無駄な制約をかけるため

なぜ相対的なネーミングがなくならないか

なにが相対的なネーミングなのか理解していないため じゃないかな多分。

避けるべき語

というわけで相対的なネーミングを回避するための禁止ワードのうち代表的なものをあげておきます。

new, 新, latest, 最新, old, 旧 など

これらの時系列を表す語は、比較対象がないと新なのか旧なのかわかりません。特に「最新」とか使うと明日誰かが新しいバージョンを作ったときに嘘になります。迷惑なのでやめましょう。かわりにyyyyMMddやバージョン番号などの絶対的な値の利用を検討しましょう。isNewのような安易なフラグ値を作成して「Newってどういう状態なんだよ」とレビュアーをブチ切れさせるのはやめましょう。

top, bottom, left, right, middle, center 上, 下, 左, 右, 中央 など

これらの位置を表す語も、比較対象がないとどこに配置すべきかわかりません。さらに、仕様変更で「top○○の上に新しい要素をおいて」とか「右にある○○を左に持っていってくれ~」とかいわれたときに絶望的な修正コストがかかります。大変なのでやめましょう。これらの語はあえて使う必要がないことが多いです。使う前に本当に必要かどうか5000兆回検討しましょう。

long, short など

名付けの対象物が長いか短いかはあなたの主観によるものではないでしょうか。これらの語を使う場合は、事前に関係者全員に「長いとはなにか」「短いとはなにか」を説明し合意を得るようにしましょう。
なお、聡明な読者の皆様であればこれは「長い」「短い」を定義することに他ならないことにお気づきかと思います。定義をもとに別の具体的な名前を与えるほうがよいでしょう。

light, heavy, medium, high, low など

同上。

better, fasterなど比較級の単語

比較対象がいつまでも存在するわけではありません。比較級の単語を利用する場合は何と比較しているのかわかるような名前(例: doSomethingFasterThanHoge)をつけましょう。そしてレビュアーにキレられましょう。

避けたほうが良い・または利用に注意が必要な語

first, last

(配列の先頭・末尾の操作のような)一部システムの内部処理や(ある月の最初の日のような)絶対的な値を指し示す場合を除き、これらの単語はシステムの仕様変更に耐えないので使うのをやめましょう。特にUI上に表現される要素の順序を示す場合は危険です。firstの前とかlastの後ろに何かを差し込まれる恐れがあります

side

そのsideなんとかがいつでも横に置かれているというのはあなたの思い込みではありませんか?(スマホの画面は回転しますよ?)

before, after, 前, 後

ソートなど明確に比較対象と一緒に用いられる場面以外での利用は危険です。(常に比較対象と共に用いられる場合は問題ないでしょう。)

past, future, 過去, 未来

current, 現在が明確になっている場面以外での利用は危険です。

おわりに

ここにあげた単語を「絶対に使ってはいけないよ!」ということではありません。が、普段無意識に使ってしまっている場合は紛争の火種をばらまいてしまっている可能性があります。特に、長期間運用されるシステムにおいてはこういった細かな無配慮が負債となるリスクが高いです。そういったリスクを理解した上で、それでもなお必要だということで利用するならOKかなと思います。

考えずに使っていた人は悔い改めてくださいね!!!1


  1. 別に仕事でイヤなことがあったわけではないです。いまのところは。