🔏

ソフトウェアを守る命名

2023/12/20に公開
1

「ソフトウェア開発において最も大切なことは何ですか?」

あなたはとてもすごいソフトウェアを作り上げた、とてもすごいプログラマー。テレビでインタビューを受けることになり、さまざまな質問に順に答えていく。インタビュアーが最後にこう聞いた。

「ソフトウェア開発において最も大切なことは何ですか?」

あなたはなんと答えるだろうか。

私ならこう答える。

「命名です」

と。

これだけ聞くと、どういった文脈なのかとか、誰にとって大切なのかとか、論点が散らかった議論になるので、この質問自体に意味は無いのだが。その上で、Aという文脈で大切なものはこれだし、Bという文脈ではこれ、といった玉虫色の答えではなく、「命名です」と言いたくなるくらいに、私が命名を意識しているという話をする。命名が大切である、重要であると思っているというよりは、つい名前のことが気になってしまう、くらいの表現の方が正しいかもしれない。

命名するプログラマー

プログラマーは多くの場面で名前をつける。新しい機能を作ってほしいと言われたら、その機能の名前を考える。それをコードで表現しようと思えば、ClassやStructにその機能に登場するモノを表現する名前をつける。関数やメソッドには処理の流れについての名前をつけるし、発生するイベントや、ある操作が可能かどうかといった状態にも名前をつける。

命名に対する細かさは相対的なものである。自分が所属している組織で、周りにあなたよりも細かい人がいなければ、あなたは命名に細かい人である。なんとなく、これ以上は細かいというより、もはや好みの問題ではないか、というラインは存在する。そのときは当事者間でうまく折り合うしかない。命名に絶対の正解は存在しない。

注意深く命名することはのちのちの開発に与える影響が大きい。より良い名前をつけるために、コードを書く時間を1時間失うことを恐れるな。

間違った名前は、対象物の呼び方に揺れを与える。ひとつのモノや概念が複数の名前で呼ばれているときは注意が必要だ。正しい名前がついていれば基本的には正式な名前で呼ばれる。複数の呼ばれ方が生まれるとしても、せいぜい略称が現れるくらいである。呼び方の揺れはそれに依存する全てに影響を与える。他のプログラムにも影響を与えるし、それを説明するドキュメントにも影響を与える。それを使ってユーザーに提供されるサービスの質にも関わってくる。それを扱う人間の認知負荷やコミュニケーションコストにも反映される。

優れた命名の効果は非常に大きいが、それによっては得られているものは「問題が生じづらい」という状態である。つまりその効果は実感しづらい。何も起きないことにはその効果に気づくことができない。何も起きなくて0点、何か起きたらマイナス点。だが0点を出すことは尊い。

優れた命名が生み出した価値を周りはあまり意識せずに享受する。残念な名前が生み出されたとき、それを受け取ってネガティブな感情を想起するのは命名に細かい側の人間である。命名におおらかな人間はそれによって受ける精神的なダメージが相対的に低い。細部の改善ができるのは、細部の違和感に気が付く人だけである。言い換えると、違和感に気がついてかつ、その状態のままにしておくのが耐えられないという感情になる人である。ゆえに、価値を生み出せる人ほど、その領域でネガティブな気持ちを抱いている。

命名すること自体が困難なときは、名前をつけようとしている対象の切り出し方を間違えている場合が多い。対象をさらに細かい単位に分割したり、今まで縦に切ろうとしていたものを横に切り直してみたりして、再度命名を試みよう。それでうまくいく場合もある。うまくいかない場合は、再度異なる切り出し方を考えてみよう。これは、これから自分が書くプログラムで扱おうと思っているものを理解するための活動である。良さそうな命名が生み出されたことは、必ずしも対象を正しく理解できたことの証左ではない。だが、理解の助けになることは間違いない。

あなたも命名が気になり始める。

Discussion