なるべくバグを発生させず、すばやく正確にコードを変更できる度合いを変更容易性といいます。変更容易性が低いコードは、バグを埋め込みやすく、正確にコードを変更できるまでに時間がかかってしまいます。
変更容易性を初学者でもやさしく学べるように解説したのが『改訂新版 良いコード/悪いコードで学ぶ設計入門』です。ITエンジニア本大賞2023 技術書部門の大賞を受賞した書籍が、このたびリニューアルしました。
凝集度と結合度からカプセル化と関心の分離へ
凝集度は、モジュール内におけるデータとロジックの関係性の強さを表す指標です。結合度は、モジュール間の依存の度合いを示す指標です。初版ではコードの良し悪しを凝集度と結合度の観点で説明していました。しかし、本書で解説している「変更容易性の高い構造」には、凝集度や結合度の観点だけでは必ずしも品質が高いとは言えないものも含まれていました。
新版では「凝集度」「結合度」を一切使わず、カプセル化と関心の分離の観点へ全面的に置き換えました。
カプセル化とは、データとそのデータを操作するロジックをひとつにまとめることです。関心の分離とは、それぞれの関心でモジュールを独立させ、他の関心と分離する考え方です。強く関係するものどうしをカプセル化する。関係の弱いものどうしを分離する。この観点で見直したことで一貫性のある内容に改善しました。
インターフェイスと実装の分離にもとづいたinterface設計
interfaceはJavaなどが備える、 多態性を実現するしくみのひとつです。interfaceを適切に使うことで条件分岐が減り、ロジックがシンプルになります。新版ではinterfaceのメリットや設計のしかたがわかりやすくなるよう、解説を改善しました。「interfaceを使って機能を取り換える」という表現や図を用いた、より理解しやすい内容に変わりました。
interfaceを使いこなせるようになるには、インターフェイスと実装の分離が有用です。インターフェイスと実装の分離とは、ひとつのモジュールをインターフェイスパートと実装パートに分ける考え方です。インターフェイスと実装の分離にもとづいて設計することで、関心をうまく分離できます。
名前設計のテクニック
クラスやメソッドへの命名は、単に可読性を高めるためだけではありません。あいまいな命名をすると、さまざまな関心が混ざり込み、巨大化・複雑化してしまいます。一方で、適切な命名をすると関心をうまく分離でき、変更容易性が向上します。構造への影響も絶大な命名のテクニックを、本書では名前設計と称して解説しています。
新版で加筆したテクニックのひとつがアンカリング効果です。アンカリング効果とは、最初に提示された数値や情報が基準になってしまい、その後の判断を歪めてしまう認知バイアスです。アンカリング効果は命名でも生じます。思い込みに縛られて、うまく名前を改善できないことがよくあります。アンカリング効果から抜け出し、適切な名前を設計しましょう。
ジョシュアツリーの法則に踏まえた設計の進め方も加筆しました。ジョシュアツリーの法則とは、名前を知ってはじめて存在を知覚できるようになるという認知法則です。裏を返せば、名前を知らないままでは適切な構造を設計することが難しい、という重要な示唆を与えてくれる法則でもあります。
説明による設計スキルアップ
設計スキルを効率的にすばやく身につけるにはどうすればいいのか、お悩みの方は多いでしょう。
初版では「設計技術の理解の深め方」と題して、効率的な学習方法を解説しました。このコンテンツに、人に説明することでスキルアップする学習ノウハウを加筆しました。人に説明すると、学びが深まります。これはコードを設計実装することと同等、もしくはそれ以上に重要な学習ステップだと考えます。ただやみくもに説明しても、設計スキルの向上にはなかなかつながりません。設計スキルを効率よく高めるための、おさえるべきポイントをまとめました。
本書を片手に快適な開発を目指そう
ほかにも説明不足だった箇所の補足や細かな表現の修正を行い、全体的にさらに読みやすい文章へと改善しました。
パワーアップした本書をぜひ手にとってください。そしてバグに苦しめられず、快適に開発していける世界を、私たちみんなで築いていきましょう。