ソフトウェア開発おすすめの書籍(2024)

## 概要
私がこれまでに読んだソフトウェア開発関連書籍からおすすめのものを抜粋して分類・評価しました。
> **抜粋8冊**

## 本ページの見方
点数は、下記の基準で５段階に★を付けました。  
（抽象的で平易な場合）
> **具体的　★★★★★　抽象的**

> **平易　★☆☆☆☆　難解**

# おすすめの書籍一覧
## コーディング
[『リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック』](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655)  
**具体的　★★★☆☆　抽象的**  
**平易　★☆☆☆☆　難解**  
すべてのプログラミング言語に共通するプラクティス集です。
本書はかなり評判がよくいろいろな場所でおすすめされています。
内容としては、命名規則やコメント、コードの長さなどに関連した話題が主になっています。
この本自体が簡潔にまとめられているため、読み応えはないかもしれません。

## 設計・アーキテクチャ
[『オブジェクト指向における再利用のためのデザインパターン』](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%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%86%8D%E5%88%A9%E7%94%A8%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3-%E3%82%A8%E3%83%AA%E3%83%83%E3%82%AF-%E3%82%AC%E3%83%B3%E3%83%9E/dp/4797311126/ref=sr_1_3?dib=eyJ2IjoiMSJ9.JH3fnPPBol42kk886vOHyBWwvQkzvjPEKhGFDJEtktQRbRyIGQ6l_W46GXs9wMgjpnDmFUKXSf8vihiwqSMdxjJdijCaFV4nrO8GA1z-LxfuL3mE4_Kh6_QD7eLcBqJN59OsGcbw0FHCfeOl9KbWhNVgju3ZeSj7zCrN-YJmw1NllRoR_UgR6Mo0fE3Y8HgDK8mEzo7B1FoZ-NsIcgoyXKCLvDDXhVXumxyTlUvJE0A.f3u25Mf-qRGKzU2GHCxN0XRnqDPN7UdbX1pW6BGxR30&dib_tag=se&keywords=%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=1713069450&s=books&sr=1-3)  
**具体的　★★☆☆☆　抽象的**  
**平易　★★★★★　難解**  
コードを再利用可能にするためのプラクティス集です。
本書で書かれた23のパターンが「デザインパターン」として現在まで普及しているようです。
内容としては、23のパターンごとにUML図と複数からなるサンプルコードが記載、解説されています。
サンプルコードは、C++とSmalltalkで書かれているため読むのが大変です。
古い書籍なために理解が難しくなっている側面もあるため、参考程度に置いておくのがよいかもしれません。

[『Clean Architecture 達人に学ぶソフトウェアの構造と設計』](https://www.amazon.co.jp/Clean-Architecture-%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%A8%E8%A8%AD%E8%A8%88-Robert-C-Martin/dp/4048930656/ref=sr_1_1?crid=3KI8F7QVJRMD1&dib=eyJ2IjoiMSJ9.oMmpozH9Wy7cMjX3B4BhvtJdbmccz2zyGERM7EfGwBETPEIBgDldfisjOZGNASWiy_2KKu4caGUFQAXxv66YKGRbuk9tUL2hxEUxCpOpssbjpf8GbvWJM0JNIxrUee-S2FDnPnehh7CF0BB-NDuDhS19YGxm6zuUxtdw1Zce6eupfgv6fCprWWJhp8Dyt4vn-colRJo1F70cZx5PCvrmLNipCqFdcHQKprvw21S-U_w.69W5bLacrHzmirMp9sBCVF3f4hpKy2fgjiFfi3JMcZU&dib_tag=se&keywords=clean+architecture&qid=1713071289&s=books&sprefix=Clean+%2Cstripbooks%2C190&sr=1-1)  
**具体的　★★★★★　抽象的**  
**平易　★★☆☆☆　難解**  
ソフトウェアアーキテクチャに関する解説書です。
本書の出版後、タイトルにもなっている「クリーンアーキテクチャ」と同心円状のアーキテクチャ図が世界的に有名になったようです。
内容は、「クリーンアーキテクチャ」の解説のが中心になっている訳ではありません。
SOLID原則をはじめとして著者の経験から重要だと認識される普遍的なソフトウェア設計原則が解説されています。
それらの設計原則の延長線上で数ページだけ「クリーンアーキテクチャ」という章があるのみです。
注意点として、著者の感覚的な意見や著者特有の経験が記載されている傾向が強く、読んでいる側からは抽象的に感じます。
それでも、図と文章を合わせるといろいろな設計原則が理解できます。

## テスト・改善
[『リファクタリング(第2版): 既存のコードを安全に改善する』](https://www.amazon.co.jp/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0-%E7%AC%AC2%E7%89%88-%E6%97%A2%E5%AD%98%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%AE%89%E5%85%A8%E3%81%AB%E6%94%B9%E5%96%84%E3%81%99%E3%82%8B-OBJECT-TECHNOLOGY/dp/4274224546/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2N9B6CFGBT9PA&dib=eyJ2IjoiMSJ9.m-PtizCCR7MvzFYRa8ya0LGrbXTfPwZN1q54eZW9xLcP6ECqx7IvsO3c4PJn_rpOfm4J9htr5UJs4u6uvwcxrW5Vx5i7-o1x9jX0zqImX5uPOxuftRm9EEX90If3LSlMdkT65PWEe0wP1yJ_t_myIlV5cfp54A3iM0zz4EkbifIiK1U7WQNLxpSh-jdqy8HdncM6gvUdhB5rrJzuUPwZuZl9QaH2lMWAwDeSk5vsYPo.LbZCK737J68E6HwialrvTGc8zDo3OCA9QhtG3eEVsSc&dib_tag=se&keywords=%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0&qid=1713068274&s=books&sprefix=%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%2Cstripbooks%2C172&sr=1-5)  
**具体的　★★☆☆☆　抽象的**  
**平易　★★★★☆　難解**  
すべてのプログラミング言語に共通するプラクティス集です。
本書によって「リファクタリング」の概念と実践方法が普及するようになったと言われています。
内容は、第1章～第4章の概念と導入、第5章以降のプラクティス集になっています。
著者は実践方法を重要視されており、概念と導入よりもプラクティス集に多くの分量があてられています。
プラクティス集はサンプルコードを実際に「リファクタリング」する流れになっています。
一気に読める書籍ではないので少しずつ読むのがよいと思います。

[『テスト駆動開発』](https://www.amazon.co.jp/%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA-Kent-Beck/dp/4274217884)  
**具体的　★☆☆☆☆　抽象的**  
**平易　★★★☆☆　難解**  
自動ユニットテストの解説書です。
JUnitを開発して「テスト駆動開発」を推進したケント・ベックが著者になっています。
内容は、様々な自動テストのサンプルコードを提示して手法を解説していくものになっています。
サンプルコードはJavaで書かれており、ライブラリとしてJUnitが使われています。
付録としてJava以外への「テスト駆動開発」の広がりも記載されています。

## 開発手法
[『エクストリームプログラミング』](https://www.amazon.co.jp/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E3%82%B1%E3%83%B3%E3%83%88-%E3%83%99%E3%83%83%E3%82%AF/dp/4274217620)  
**具体的　★★★☆☆　抽象的**  
**平易　★★★☆☆　難解**  
ソフトウェア開発手法のプラクティス集です。
本書タイトルになっている「エクストリームプログラミング(XP)」を推進したケント・ベックが共著者になっています。
ケント・ベックは本ページでおすすめしている「テスト駆動開発」の著者であり、マーティン・ファウラー著の「リファクタリング」にも登場する開発者です。
内容は、ソフトウェア開発におけるチーム構成と開発サイクルの計画に関する手法の紹介になっています。また、テストやデプロイに関する手法についても解説されています。
本書を読むことでXPやそれ以降の様々な開発手法の源流を知ることができます。

[『レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス』](https://www.amazon.co.jp/%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%81%AE%E8%84%B1%E5%8D%B4-%E2%80%95%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E5%AF%BF%E5%91%BD%E3%82%92%E5%BB%B6%E3%81%B0%E3%81%97%E4%BE%A1%E5%80%A4%E3%82%92%E9%AB%98%E3%82%81%E3%82%8B9%E3%81%A4%E3%81%AE%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9-David-Scott-Bernstein/dp/4873118867/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=FOKFFBXWPLO1&dib=eyJ2IjoiMSJ9.2i5B9nLAaNeM5dcHud0yf0Wh3Lux37q3rmIcJZsIGrKK36TGE-rawIVWa5hAab-RW_R1m2sweN2YXJ-c8r5L_hkTmhNztcfN7hCgezjdKxMtsqJLsBWFS7fisPW3_02x_yKS6Smn1abwGrDOMKEBxg.1L5Eonqxc2g6vvVSvInQ-gQeY131xAw2CTlrCAzZ5Ps&dib_tag=se&keywords=%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%81%AE%E8%84%B1%E5%8D%B4&qid=1713072362&s=books&sprefix=%E3%83%AC%E3%82%AC%E3%82%B7%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%81%AE%E8%84%B1%E5%8D%B4%2Cstripbooks%2C159&sr=1-1)  
**具体的　★★★☆☆　抽象的**  
**平易　★★☆☆☆　難解**  
開発手法も含むソフトウェア開発全般のプラクティス集です。
本書でのプラクティスを実践していないコードを「レガシーコード」とした上で、
コードの寿命を伸ばすための手法がまとめられています。
内容は、アジャイル、XP、リファクタリング、自動テスト、テスト駆動開発などの手法を順番に説明するものになっています。
大きな枠組みから解説されているのでやや抽象的な側面もありますが、重要なキーポイントは明確に記載されているので分かりやすいです。

[『アジャイルサムライ−達人開発者への道−』](https://www.amazon.co.jp/%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%B5%E3%83%A0%E3%83%A9%E3%82%A4%E2%88%92%E9%81%94%E4%BA%BA%E9%96%8B%E7%99%BA%E8%80%85%E3%81%B8%E3%81%AE%E9%81%93%E2%88%92-Jonathan-Rasmusson/dp/4274068560)  
**具体的　★★★☆☆　抽象的**  
**平易　★☆☆☆☆　難解**  
開発手法についての解説書です。
タイトルと装丁が印象的な「アジャイル」開発手法についてまとめられた書籍です。
（サムライの挿絵もときどき登場します。）
内容は、読者が「アジャイル」の計画を立ててチームを構成して実践するまで、順を追って解説する内容になっています。
分かりやすい挿絵やグラフが多く、構成もストーリー仕立てになっているため非常に読みやすいです。


## ふりかえり
本ページで紹介した書籍は、割と有名どころが多かったと思います。
すべておすすめではあるものの、人によっては評価が分かれるものもあるかもしれません。
「他にも必読の書籍がありますよ」という意見あればコメント頂けるとありがたいです。