📄
概念 📚 software-design-concepts

設計・実装 参考書籍

アーキテクチャ・コード品質・テスト設計の学習に役立つ定番書籍とその要点の紹介

ソフトウェア設計と実装の品質を高めるためには、個々の技術トピックの習得だけでなく、設計の思想・原則・パターンを体系的に学ぶことが重要である。以下に挙げる書籍はいずれも長年にわたってソフトウェア開発者に読み継がれており、現代の設計議論においても基礎知識として参照される定番の資料である。チームでの共通言語を形成するためにも、設計レビューやアーキテクチャ議論の場でこれらの書籍の用語・パターンが自然に使われる環境を作ることが推奨される。

コードレビューで着目するポイント

  • コードが書籍で定義された用語・パターンを一貫して使っており、チーム内での共通言語が形成されているか
  • 書籍の推奨パターンをそのまま適用するのではなく、コンテキストに応じた適切なトレードオフが検討されているか
  • 設計決定の背景として書籍の概念が参照可能な状態でドキュメント化されているか

書籍紹介

Robert C. Martin『Clean Code』(2008年)

関数の長さ・命名規則・コメントの書き方・エラーハンドリングなど、コードの可読性と保守性を高めるための具体的な実践を豊富なリファクタリング例とともに解説する。「コードは書かれるよりも読まれる時間の方が圧倒的に長い」という前提のもと、可読性を第一の関心事として置く姿勢を身に付けるために読むべき一冊。ただし一部の提言(関数の行数を極端に短くする等)は過度に適用されると却って可読性を下げる場合もあり、批判的に読む視点も重要。

Martin Fowler『Refactoring』第2版(2018年)

コードの動作を変えずに内部構造を改善するリファクタリングの手法を、具体的な手順と適用条件付きでカタログ化した書籍。第2版はJavaScriptで書き直され現代のコードベースに馴染みやすくなっている。「どこをリファクタリングすべきか」の判断基準として提示される「コードの臭い(Code Smells)」の概念は、コードレビューでの指摘語彙として広く使われる。

Robert C. Martin『Clean Architecture』(2017年)

SOLID原則・コンポーネント設計・依存関係の方向性・ユースケース中心の設計など、アーキテクチャレベルの設計原則を体系的に解説する。具象から抽象への依存(依存性逆転の原則)を徹底することで、フレームワーク・UIフォーマット・データベースをビジネスロジックから切り離す「プラグイン可能なアーキテクチャ」の考え方を学べる。

Eric Evans『Domain-Driven Design』(2003年)

複雑なビジネスドメインをソフトウェアで表現するためのユビキタス言語・境界づけられたコンテキスト・エンティティ・値オブジェクト・集約などの概念を定義した、DDD(ドメイン駆動設計)の原典。マイクロサービスの設計境界を議論する際の基本語彙として現在も広く参照される。20年以上前の書籍だが、複雑なドメインモデリングの指針として色あせていない。

Martin Fowler『Patterns of Enterprise Application Architecture』(2002年)

Webアプリケーション・データ永続化・ビジネスロジック・プレゼンテーション層の設計パターンをカタログ化した書籍。Transaction Script・Domain Model・Active Record・Data Mapper・Repository・Unit of Workなど、現在のORMや設計議論で日常的に使われるパターン名の出典として機能している。古い書籍だが、パターン名の定義を確認するリファレンスとして手元に置く価値がある。

Vladimir Khorikov『Unit Testing: Principles, Practices, and Patterns』(2020年)

テストの価値を最大化するための「テストすべきものと統合の仕方」を明確に論じた書籍。単純に高いコードカバレッジを追うのではなく、退行(リグレッション)の検出能力・リファクタリング耐性・迅速なフィードバックのトレードオフでテストの設計を評価する視点を提供する。古典派テスト(State-Based)とモック学派(Interaction-Based)の違いと使い分けが特に参考になる。

Gregor Hohpe / Bobby Woolf『Enterprise Integration Patterns』(2003年)

システム間の非同期メッセージングと統合パターンをカタログ化した書籍。Message Channel・Message Router・Message Transformer・Splitter・Aggregator・Dead Letter Channelなど60以上のパターンを定義しており、Kafka・RabbitMQ・Azure Service Busなどのメッセージングシステムを設計する際の共通言語として現在も参照される。サービス間通信設計のレビューで用語の一致を取るために有用。

参考リソース

  1. 1. 📄アーキテクチャスタイル
  2. 2. 📄ドメインモデリング
  3. 3. 📄モジュール分割と依存管理
  4. 4. 📄データモデリング
  5. 5. 📄API設計
  6. 6. 📄整合性とトランザクション
  7. 7. 📄非同期処理(Queue/Event)
  8. 8. 📄キャッシング
  9. 9. 📄ユーザーリサーチ
  10. 10. 📄情報アーキテクチャ
  11. 11. 📄インタラクションデザイン
  12. 12. 📄UX原則とヒューリスティクス
  13. 13. 📄アクセシビリティ(UX観点)
  14. 14. 📄UXメトリクス
  15. 15. 📄スケーラビリティ
  16. 16. 📄可用性とレジリエンス
  17. 17. 📄オブザーバビリティ
  18. 18. 📄環境・インフラ設計
  19. 19. 📄データマイグレーション
  20. 20. 📄セキュリティ設計原則
  21. 21. 📄データ保護とマルチテナント
  22. 22. 📄LLMセキュリティ
  23. 23. 📄ビジュアルデザイン原則
  24. 24. 📄デザインシステム
  25. 25. 📄コンポーネント設計
  26. 26. 📄スタイリング
  27. 27. 📄状態管理
  28. 28. 📄フロントエンドパフォーマンス
  29. 29. 📄アクセシビリティ(実装観点)
  30. 30. 📄アニメーションとインタラクション
  31. 31. 📄設計原則
  32. 32. 📄デザインパターン(GoF)
  33. 33. 📄エンタープライズパターン
  34. 34. 📄クリーンコード
  35. 35. 📄リファクタリング
  36. 36. 📄型設計とコントラクト
  37. 37. 📄関数型プログラミング概念
  38. 38. 📄エラーハンドリング
  39. 39. 📄テスト戦略と哲学
  40. 40. 📄テスト種別(機能テスト)
  41. 41. 📄テスト種別(UI・ビジュアル)
  42. 42. 📄テスト種別(契約・境界)
  43. 43. 📄テスト種別(非機能テスト)
  44. 44. 📄テストダブル
  45. 45. 📄テスト設計技法
  46. 46. 📄並行処理・マルチスレッド
  47. 47. 📄パフォーマンス最適化
  48. 48. 📄ドキュメント管理
  49. 49. 📄バージョン管理と開発プロセス
  50. 50. 📄脅威モデリング
  51. 51. 📄通信保護(TLS)
  52. 52. 📄暗号化・機密情報管理
  53. 53. 📄認証・セッション管理
  54. 54. 📄認可・アクセス制御
  55. 55. 📄入力バリデーション
  56. 56. 📄インジェクション攻撃
  57. 57. 📄出力エンコーディング
  58. 58. 📄エラーハンドリング(セキュリティ観点)
  59. 59. 📄SSRF(サーバーサイドリクエストフォージェリ)
  60. 60. 📄依存関係管理
  61. 61. 📄設計・実装 参考書籍
  62. 62. 📄セキュリティ参考資料
  63. 63. 📄正規化(データベース正規化)