「触ると壊れるコード」第5回:共通化したら壊れた話
「重複を消しただけなのに…」
実務あるある
👉 同じ処理がある
👉 共通化したくなる
結果
👉 片方を直すと、もう片方が壊れる
元のコード
def send_user_mail():
subject = "[サービス] お知らせ"
print(subject)
def send_admin_mail():
subject = "[サービス] お知らせ"
print(subject)👉 件名が同じ
👉 コードも重複してる
なんとなく
👉 「まとめたくなる」
よくある改善
MAIL_SUBJECT = "[サービス] お知らせ"
def send_user_mail():
print(MAIL_SUBJECT)
def send_admin_mail():
print(MAIL_SUBJECT)👉 スッキリした
👉 修正も1箇所で済む
👉 一見かなり良さそうです。
ここで仕様変更
後日
👉 管理者メールだけ件名を変えたい
よくある修正
MAIL_SUBJECT = "[管理者向け] 障害通知"何が起きるか
👉 管理者メール → OK
👉 ユーザー向けメール → 壊れる
「なんで?」
ここが今回のポイントです
最初は本当に同じだった
[サービス] お知らせ👉 だから共通化した
でも後から
ユーザー向け件名
管理者向け件名👉 “別の意味”になった
🔥 ここが本質
👉 共通化で消えるのは「重複」だけではありません。
👉 違いも消えます
書いた本人は
「同じ文字列だからまとめた」
👉 でも実際は
用途が違う
将来の変更も違う
結果
👉 修正の影響範囲が広がる
👉 「関係ないところ」が壊れる
今日のポイント
👉 “今同じ”と“ずっと同じ”は別物
📚 もう一歩深く理解したい人へ
「共通化ってどこまでやるべき?」と思った人へ
Effective Python 第3版
👉 共通化・責任分離の考え方が具体例で学べます
Clean Architecture 達人に学ぶソフトウェアの構造と設計
👉 “依存を減らす設計”がかなり理解しやすいです
※上記リンクはアマゾンアソシエイトを利用しています
実務だとこうなる
utility.py(共通化ファイル)が巨大化
共通関数修正で全体影響
DRY(Don't Repeat Yourself(重複を避けよう))しすぎて逆に壊れる
👉 全部同じ構造です。
次回予告
👉 「状態を共有したら壊れた話」
“便利な共有”の怖さに入ります。
ひとこと
👉 この2つ、本当に“ずっと同じ”ですか?
いいなと思ったら応援しよう!
応援お願いします!
より良い情報を提供できるよう活動費に使わせていただきます。