1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【命名】今からおまえの名前はFooBarだ

Posted at

何についての記事か

システム開発における命名の話。

具体的な名称やコードは、実際の状況とは異なる形で例示しています。
重要なのはその詳細ではないので、そこについてはご容赦ください。

先日私は、あるプロダクトで次のように命名した。

class FooBar {
}

ひどい名前でしょう。
何故このような選択をしたのか、その経緯を説明します。

背景

元々このクラスは別の名称でした。
仮に支払いを表すPaymentとでもしておきましょう。そしてシステムの支払い機能で使用されていました。

以前の状態(仮)
class Payment {
}

FooBarよりはちゃんとした名前ですね。
 
 
「支払い機能以外でも使用されている」という点に目をつぶれば。
 
 
このPaymentクラスはシステムの様々な機能で利用されていたのです。
会員登録でもPayment、お問い合わせでもPayment
とても適切な名称ではありません。

そして先日、支払い機能を改修するタイミングで、支払い機能ではこのPaymentクラスは使用しないようになりました。

君の名は

いよいよ肝心の支払い機能でPaymentクラスを使用しないことになり、私はこの名称を変更する機会だと考えました。

そして考えます。適切な名称は何なのか。

 
君の名は・・・

 
名前は・・・

 
わからん。

そもそも何故こうした状況になっているのかというと、単に「コードを流用したいため」にバラまかれたのは想像に難くありません。

つまり正しさはすでに失われたので「適切な名称は存在しない」と結論付けました。

命名する

とはいえPaymentは明らかに適さないので、何か別の名前を付ける必要があります。

こういう時にCommonUtilが浮かびそうですが、私はそれを避けました。これらの当たり障りのない名称は「とりあえずこれで良い」という悪い流れを生みます。

また意味のないものに、さも意味ありげな名前を付け、命名した気になるのを避けたかったのです。

そうして悩んだ結果、最終的にFooBarクラスと命名することを選択しました。
(残念ながらこれを正しい形にするタイミングは今ではない、という判断も含めて)

まとめ

FooBarという命名が正しかったのかはさておき、重要と考えるのは「良いも悪いも正しく伝える必要があり、それを誤魔化すべきではない」という点です。

私は設計で妥協したり誤魔化したりした結果がどうなるか、実際に見てきましたし今も見ています。
それを踏まえて、今回は「適切な名前がない」ことを示すような命名を選択しました。

"この責任を果たすことは「戦い」に足を踏み入れることを意味する。"
"保護すべきソフトウェアに対する責任がある。それがあなたの役割であり、義務である。それが、あなたが雇われている大きな理由だ。"1
-- Robert C. Martin(ボブおじさん)

 
 
 
 
余談ですが、良くないのは名称だけ、なんてことはなく、この何倍も大変なレガシーコードとの戦いがありました。
全くもって不毛な戦いでしかなかったので、何かの役に立てば幸いです。

ー完ー

  1. 『Clean Architecture』 アーキテクチャの戦い

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?