【どらいげんそく】

DRY原則 とは?

💡 「同じことを2回書くな」
📌 このページのポイント
DRY原則:Don't Repeat Yourself ✗ 重複コード(悪い例) function calcTaxA() { return price * 0.1 } function calcTaxB() { return price * 0.1 } function calcTaxC() { return price * 0.1 } 同じ処理が3箇所に… ✓ 共通関数(良い例) function calcTax(price) return price * 0.1 画面A 画面B 画面C 1箇所を変更すれば全体に反映!
DRY原則のイメージ
ひよこ ひよこ

なぜ繰り返しがダメなの?

ペンギン先生 ペンギン先生

税率計算ロジックが5箇所にコピペされていたら、税率が変わった時に5箇所すべて修正が必要。1箇所でも漏れたらバグになる。DRYに従って1つの関数にまとめておけば、修正は1箇所で済む。DRYの本質は「1つの知識は1箇所に」ということだよ

ひよこ ひよこ

何でもかんでも共通化すべき?

ペンギン先生 ペンギン先生

それは危険だよ。見た目が似ているだけで意味が異なるコードを無理に共通化すると、一方の変更がもう一方に予期しない影響を与える。「偶然の重複」と「本質的な重複」を区別することが大事。Rule of Three(3回同じコードを書いたら共通化を検討)という指針もあるね

ひよこ ひよこ

WETって何?

ペンギン先生 ペンギン先生

Write Everything Twice(全部2回書く)の皮肉な略語。でも最近は「2回までの重複は許容して、3回目で共通化する」のが実用的だという考えが広まっている。早すぎる抽象化は、間違った共通化をしてしまうリスクがある。「少し重複がある方が、間違った抽象化よりマシ」というSandi Metzの名言もあるよ

ひよこ ひよこ

DRYはコード以外にも適用できる?

ペンギン先生 ペンギン先生

もちろん。①ドキュメントとコードの二重管理(コメントが古いまま放置される問題)、②CI/CDの設定重複、③DBスキーマとバリデーションルールの二重定義。OpenAPI定義からコードを自動生成する、Prismaスキーマから型を自動生成するのもDRYの実践だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「DRY」って出てきたら「同じコードを繰り返し書かない原則」と思えればだいたいOK!
📖 おまけ:英語の意味
「Don't Repeat Yourself」 = 繰り返すな
💬 Andy HuntとDave Thomasが『達人プログラマー』で提唱。DRY(乾いた)の対義語でWET(湿った)だよ
← 用語集にもどる