設計を学びたいときに読みたい本一覧

## これは何

https://qiita.com/official-events/d409f91fc8b9b44cefb4

の参加記事です。

エンジニアとして開発をしていく以上、設計についての知識を身につけていくことはとても重要です。
とはいえ設計という言葉からは何を勉強するべきかがいまいちピンときません。
この記事では、僕が読んできた設計に関するおすすめの本を網羅的に紹介しています。

これから設計を勉強する方の役に立てれば幸いです。

## おすすめの本一覧
おすすめの本を紹介していきます。
他にもおすすめがあればぜひ編集リクエストをください！

## [オブジェクト指向設計実践ガイド](https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E8%A8%AD%E8%A8%88%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%EF%BD%9ERuby%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B-%E9%80%B2%E5%8C%96%E3%81%97%E3%81%A4%E3%81%A5%E3%81%91%E3%82%8B%E6%9F%94%E8%BB%9F%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E8%82%B2%E3%81%A6%E6%96%B9-Sandi-Metz-ebook/dp/B01L8SEVYI/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E8%A8%AD%E8%A8%88&qid=1625222656&sr=8-1)

設計を始めに学ぶならこれ、という一冊です。
エンジニアとして開発を行なっている中で、オブジェクト指向設計は一番汎用的に使う設計知識なのではないでしょうか？
オブジェクト指向設計を学ぶことで、いわゆる「におう実装」と「良い実装」を見極めることができるようになると思います。


### 知らなかったら読んだほうが良いキーワード

- SOLID原則

## [Clean Architecture　達人に学ぶソフトウェアの構造と設計](https://www.amazon.co.jp/dp/B07FSBHS2V/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)

クリーンアーキテクチャはアーキテクチャと言いながら、かなり汎用度が高く設計にも近い考え方を持っています。
こちらはオブジェクト指向設計で学んだ知識の本質を知っていくためにも一読しておくのをお勧めします。
オブジェクト指向設計とクリーンアーキテクチャまでを学ぶと、いわゆる「変更と拡張に強い」コードを書くことができるようになります。

### 知らなかったら読んだほうが良いキーワード
- ヘキサゴナルアーキテクチャ
- オニオンアーキテクチャ
- クリーンアーキテクチャ
- 依存性の注入
- Interactor
- 境界

## [ドメイン駆動設計入門 ボトムアップでわかる！ドメイン駆動設計の基本](https://www.amazon.co.jp/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88%E5%85%A5%E9%96%80-%E3%83%9C%E3%83%88%E3%83%A0%E3%82%A2%E3%83%83%E3%83%97%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B%EF%BC%81%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88%E3%81%AE%E5%9F%BA%E6%9C%AC-%E6%88%90%E7%80%AC-%E5%85%81%E5%AE%A3-ebook/dp/B082WXZVPC/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88&qid=1625222757&sr=8-1)

次に紹介するのは、DDD（ドメイン駆動設計）です。ドメイン駆動設計は大きくコードレベルでのプラクティスとコードを書く以外のプラクティスの二本立てになっています。
この本はまずはコードレベルでのプラクティス（戦術的DDD）を学ぶ入門書としてとても良い本でした。
この本を読んだ後、よりDDDについて学びたくなったら次の本を読んでみることをお勧めします。

### 知らなかったら読んだほうが良いキーワード
- 値オブジェクト
- エンティティ
- ドメインサービス
- アプリケーションサービス
- リポジトリ
- ドメインモデル
- 境界づけられたコンテキスト

## [実践ドメイン駆動設計](https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88-%E3%83%B4%E3%82%A1%E3%83%BC%E3%83%B3%E3%83%BB%E3%83%B4%E3%82%A1%E3%83%BC%E3%83%8E%E3%83%B3-ebook/dp/B00UX9VJGW/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88&qid=1625222757&sr=8-3)
実戦ドメイン駆動設計は、前項で書いたコードレベルでのプラクティスとコードを書く以外のプラクティスの両方を体系的に学ぶことができる本です。内容が重厚なため、始めに前項の本を読んでおくと理解が深まると思います。
DDDの目的は「サービスで実現しようとしている実世界の実体や手続き」をドメインとして定義することで、「本当に価値のある」ソフトウェアを作り上げていくことです。
DDDを学ぶことで課題を解決するための開発、考え方、エンジニア以外の人とのコミュニケーションのあり方を理解することができます。

### 知らなかったら読んだほうが良いキーワード
- 前項のキーワード
- ドメインモデリング
- ドメインエキスパート
- ユビキタス言語
- コンテキストマップ

## [増補改訂版 Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88-Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9-ebook/dp/B00I8ATHGW/ref=pd_vtp_1/357-5438781-7103527?pd_rd_w=3mYHt&pf_rd_p=949e26f5-c2ef-4c96-bfde-49d7614d0317&pf_rd_r=NNDD9XK3JXRS38WFWGW7&pd_rd_r=f4203e9e-d363-470f-8280-3991a741dbff&pd_rd_wg=hu7fb&pd_rd_i=B00I8ATHGW&psc=1) & [増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88-Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E7%B7%A8-%E7%B5%90%E5%9F%8E-%E6%B5%A9-ebook/dp/B00I8AT1BS/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3&qid=1625224527&s=books&sr=1-1)

最後はデザインパターンです。こちらは今までの本とは少し毛色が違いますが、設計に関わると判断して紹介します。
デザインパターンとは「特定のユースケースを実現するためのコードレシピ」のようなものです。
日々コードを書いていると、無意識に特定のデザインパターンを実装している、みたいなこともあると思います。
デザインパターンはシンプルでありながら、設計時に考えるような思考のエッセンスが多く含まれています。
デザインパターンだけを丸暗記するのではなく、どうしてこのパターンが必要なのか、それがベストなのか、ということを読みながら考えていくと勉強になるかもしれません。

### 知らなかったら読んだほうが良いキーワード
- GoF(Gang of Four)
- デザインパターン
- マルチスレッドプログラミング

## 最後に
Meetyもやっているので、ご興味あれば気になるをおねがいします！
サービス開発やチームビルディングなどの情報交換ができればと思っています。

https://meety.net/matches/JkVrBQmJVoST