はじめに
Webエンジニア1.25ヶ月の新人エンジニアです。
簡易的にいろんな知識をまとめてみたシリーズです。
誤りがありましたら、ご指摘お願いします!!
私たちエンジニアは「名前」を毎日使っています。テーブルやクラス、メソッドを追加したり、細かいところではメソッドや関数の中で使う一時的な変数など、日々何かしら「名前を付ける」ということをしているはずです。また、前任者が書いた業務のプログラムやオープンソースソフトウェアといったとこ ろで、名前を「読む」という仕事も発生しています。このように、私たちエンジニアの仕事と「名前」は切っても切れない関係にあります。
良い名前は読みやすく理解しやすいので、むしろ記憶に残らない傾向にあります。私たちの目にひっかかるのは悪い名前です。
理解できない
直感に反する名前、誤った名前はコードを読んで何を指しているのか、何が起こるのかを理解するのに時間がかかります。名前から何が起こるのか理解できないので実装を読んだ、という経験はみなさんあるはずです。
勘違いしてしまう
名前から挙動を想像して使ったけど、実際に起こったことは違った、という苦い経験も私たちエンジニアの日常です。誤解させる名前による思わぬ不具合も、悪い名前による被害の1つです。saveRecordというメソッドがなぜか既存のレコードの一部を削除してしまう、というのは明らかに名前に反した挙動に思えます。このような不適切な名前がコードベースの中で正統の位置を占める、ということも業務の現場では起こることです。
変更が難しい
先ほどの例の「レコードを消すsaveRecord」がプロジェクトのあらゆるところで使われており、さらにテストコードもない、という状況では、良い名前に変えるのも実装を直すのも困難です。メソッド名ならまだ良いかもしれませんが、テーブル名だとさらに変更は難しくなります。
読みにくい
名前自体の通りは良いけど、たとえばsaveRecord、del_recordというように書き方がバラバラということもあります。現代仮名遣いと旧仮名遣い、ローマ字表記とカタカナ表記が頻繁にスイッチし、随所に誤字脱字やスペルミスがある文章は読んでいてつらいですね。
良い名前とは何か
Rubyの作者であるまつもとゆきひろさんの言葉を紹介しておきましょう。
これはつまりこういうことなのではないかと思います。適切な名前をつけられると言うことは、その機能が正しく理解されて、設計されているということで、逆にふさわしい名前がつけられないということは、その機能が果たすべき役割を設計者自身も十分理解できていないということなのではないでしょうか。個人的には適切な名前をつけることができた機能については、その設計の8割が完成したと考えても言い過ぎでないことが多いように思います。