見出し画像

「触ると壊れるコード」第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つ、本当に“ずっと同じ”ですか?

いいなと思ったら応援しよう!

saku|技術メモ 応援お願いします! より良い情報を提供できるよう活動費に使わせていただきます。