本当に必要ですか?:コードの肥大化を防ぐための問い
ソフトウェア開発において、機能を追加する際には「YAGNI(You Aren't Gonna Need It)」を意識することが重要ですが、不要なコードを削除する際には「DYSNI(Do Ya Still Need It?
)」という考え方を取り入れると効果的です。
Objective-CからSwiftへの移行プロジェクトで、DYSNIを繰り返し適用することで、複雑な抽象化を簡素化し、不要なプロパティや変数を削除、Command Blockの構造を整理することができました。
このアプローチは、コードの可読性を高め、将来的な保守性を向上させるという点で有効です。
開発現場でコードを整理する際、「必要ないものは書かない(YAGNI)」という開発原則はよく知られています。しかし、逆に「もう必要ないコードをどう捨てるか」という問題も重要です。ある開発チームが、この「DYSNI(Do Ya Still Need It?)」という問いを徹底的に実践した結果、複雑なコードベースを劇的にシンプル化させた事例が紹介されています。
複雑なコード構造の課題
ある開発チームは、Objective-C(オブジェクティブC)のコードベースを整理する作業を進めていました。彼らは、チームのスキル維持や最新技術(Swift Concurrencyなど)の導入を容易にするため、古いObjective-Cのコードを削除することを目指しています。通常、古いコードを移行する際、元の構造をそのまま移植しがちですが、このチームは「DYSNI」を繰り返し問いかけることで、複雑な抽象化を根本から簡素化することに成功したとのことです。
段階的なコードの削減プロセス
彼らが直面した初期のコードは、`CommandBlock`というクラスを中心に、複数のコマンド(CommandA, CommandBなど)が絡み合う複雑な構造でした。まず、クラスを匿名関数に置き換える試みから始まりましたが、さらに「DYSNI」を適用し、コールバックハンドラに渡される引数(`userInfo`、`error`など)が実際に使われているかを徹底的に検証しました。その結果、使われていない引数は次々と削除されていきました。
設計思想の根本的な見直し
引数の削減が進んだ後、チームはさらに大きな視点から「このコマンド自体が必要なのか?」という問いを投げかけました。その結果、使用されなくなったコマンド(CommandAなど)を完全に削除することができました。最終的に、当初の設計で必要とされていたインスタンス変数(ivars)も、実際の動作を分析した結果、不要であると判断され、完全に排除されたそうです。
まとめ
この事例は、単にコードを書き直すだけでなく、「なぜこのコードが存在するのか」という根本的な問いを繰り返すことの重要性を示しています。DYSNIというシンプルな問いかけが、技術的負債を解消し、よりメンテナンス性の高いシステム構築に繋がったと見られています。
原文の冒頭を表示(英語・3段落のみ)
29 Oct 2025Most of us are familiar with YAGNI (“You Aren’t Gonna Need It”), that old developer mantra reminding us not to add code or functionality until it’s truly needed.
But if we have a mantra for not adding unnecessary code, it seems only fitting we have one for removing code that’s outlived its usefulness.
That’s where my internal monologue often kicks in: DYSNI - Do Ya Still Need It?
※ 著作権に配慮し、引用は冒頭3段落までです。続きは元記事をご覧ください。