【どらいげんそく】
DRY原則 とは?
最終更新:
💡 同じ知識の変更を、何か所にも散らさない
Don’t Repeat Yourselfの略。同じ知識や決まりを複数箇所で別々に管理せず、システム内に明確な正本を持たせる設計原則。コードだけでなく、設定や文書にも関わる。
📌 このページのポイント
- 同じ決まりを別々に管理すると、変更時に食い違いが生じやすい
- 共通の関数や設定、正本からの生成などで知識の管理をまとめる
- 見た目が同じでも、意味や変更理由が違うものは無理にまとめない
- 重複の回数だけで判断せず、共通化が変更を助けるか考える
なぜ繰り返しがダメなの?
たとえば同じ料金計算の決まりを5箇所に別々に書くと、変更時に一部を直し忘れて食い違うことがあるよ。1つの関数や設定を参照するようにすれば、その決まりの管理をまとめられる。大切なのはコードの文字列より、同じ知識が何か所にも分かれていないかなんだ。
何でもかんでも共通化すべき?
見た目が似ていても、意味や変更理由が違うものは分けてよいよ。たとえば数量と年齢のチェックがたまたま同じ形でも、将来の条件は別々に変わり得る。無理にまとめて条件分岐だらけにするより、本当に同じ決まりかを考えるんだ。
WETや3回目で共通化という話は?
重複を少し残してから共通化を考える指針だよ。ただし2回ならよい、3回なら必須というDRYの正式なルールではない。Sandi Metzも、間違った抽象化より重複の方が扱いやすいと説明している。回数だけでなく、何を一緒に変更する必要があるかを見るんだ。
コード以外にも適用できる?
できるよ。同じ仕様を文書とコードで別々に管理すれば、一方だけ古くなることがある。1つの定義から文書やコードを生成する方法もあるね。生成物に同じ情報が現れても、正本を1つにして作り直せるなら、独立した二重管理とは違うんだ。
まとめ:ざっくりこれだけ覚えればOK!
「DRY」って出てきたら「同じ知識を、何か所でも別々に管理しない原則」と思えればだいたいOK!
📖 おまけ:英語の意味
「Don't Repeat Yourself」 = 自分自身を繰り返すな
💬 Andy HuntとDave Thomasの『The Pragmatic Programmer』で紹介された原則だよ。DRYは乾いたという英単語でもあり、重複を許す考えを対照的にWETと呼ぶことがあるんだ