yoshikipom Tech Blog

twitter: https://twitter.com/yoshikipom

ソフトウェアアーキテクトに必要なシステム設計知識を学んだ17冊

はじめに

仕事では2022年までは主にバックエンドサービスの開発リードをしていたが、今後はソフトウェアアーキテクトとしてサービス全体の設計や横断的なシステムの設計をメインでやっていく。自分で悩んだ時の辞書としての役割と、おすすめの本を求められたときのリストとしての役割を兼ねて今まで読んだシステム設計系の本をまとめる。

チームの移り変わりはあったものの、基本的に以下のような環境で働いてきたので、そこで役立つ情報に偏ってる可能性有り。

  • マイクロサービス
  • バックエンド
  • 同期通信はREST APIでの連携が多め

アーキテクチャ・デザイン全般

ソフトウェアアーキテクチャの基礎

1部でアーキテクトは何を考える必要があるのか説明され、2部で様々なパターンを学ぶことができる。3部ではアーキテクトが効果的に働くための方法を知ることができる。図や具体例が多くて読みやすくかつ網羅的なのでソフトウェアアーキテクチャとは何か知りたい人にオススメ。

Clean Architecture 達人に学ぶソフトウェアの構造と設計

多数の設計原則を説明した上でメンテナブルでスケーラブルなクリーンアーキテクチャを設計する実践的な方法を学ぶことができる。開発チームで設計原則に基づいて意思決定することも多いのでその原則を学ぶだけでも価値がある。自分の場合、肝心のアーキテクチャ部分は社会人一年目だといまいち価値が理解できなかったので、あとから読み直した。

Design It!

デザイン思考に基づいて良いアーキテクチャをどう作り上げるかステップバイステップで説明される。”第Ⅲ部 アーキテクトの道具箱”ではどうやって問題を理解し、設計を可視化し、評価するかについて、様々なアクションで提案されるので、設計プロセスに困ったら目を通し直す価値あり。

ソフトウェアシステムアーキテクチャ構築の原理

とても分厚い上にあまりわかりやすい具体例はない。しかし、アーキテクチャのプロセス、考えなければならないことが網羅的にモレなく記述してある。自分の場合、深く設計が必要なときは一度は開く良書となっている。

データ指向アプリケーションデザイン

直接的にアーキテクチャ設計を取り扱ってはいないが、設計内に含まれるであろうテクノロジーの特性やトレードオフについて学ぶことができる。特に分散システムについてのトレードオフは深く記述されている。アプリケーション内だけでなく、システム全体を設計するのであれば是非読んでほしい。

マイクロサービス

マイクロサービスアーキテクチャ

マイクロサービスについて、利点欠点、何をするべきか、どう進めるべきかを幅広く説明している良書。 自分が読んだのは1st edition。 2nd editionはKubernetestとかマイクロフロントエンドとか流行りに合わせてかなり情報が追加されている。また、構成も整理されていて読みやすそう。

マイクロサービスパターン 実践的システムデザインのためのコード解説

具体的なエピソードに沿って、具体的な設計とコードを使ってパターンを解説してくれる。理想的なマイクロサービスを作る難しさを痛感した。

ソフトウェアアーキテクチャ・ハードパーツ

"ソフトウェアアーキテクチャの基礎"の作者らによる続編。マイクロサービスで出てくる様々なトレードオフに対してどう考えるかを教えてくれる。設計に関する引き出しを増やし、整理してくれる良書だった。

ドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計

DDDの哲学が学べる。一回で理解しきれなかったが、実践や他の本を経て戻ってくるとよくまとまっている印象を受けた。実装の具体例は下の2冊で学んだ。

ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本

各パターンの意味や実装例がとてもわかりやすいし読みやすい。先にこの本で概要を掴んでから他のDDD本を読みたかった。

現場で役立つシステム設計の原則

特にタイトルにはDDDと入っていないが、DDDを用いた設計がメインの本。Java, Spring Frameworkを用いてオブジェクト指向を突き詰めたような本だった。保守しやすい理想的なアプリケーションの書き方の参考にはなるが、DDD初心者には上2冊のほうがオススメ。

要件定義

はじめよう!プロセス設計 ~要件定義のその前に

はじめよう! 要件定義 ~ビギナーからベテランまで

はじめよう!システム設計 ~要件定義のその後に

要件定義が何かもわかっていない最初の段階で読んだ。要件定義とシステム設計の流れが丁寧に説明されているので新卒にもオススメできる。要件定義から自分でしないとしても、どういう流れで要件が出来上がるか知ることで要件を適切に満たす設計ができるようになるので早めに学ぶと良い。

Web, Web API

Webを支える技術

Webまわりの基本的な技術が丁寧に説明されている。ちょっと古い情報、あまり仕事で出会わない技術も入っているが、REST周りの情報の網羅性が高いので今でもオススメできる。

プロになるためのWeb技術入門

「Webを支える技術」と近い範囲もカバーしているが、この本を読むとWebアプリケーションがどう動くかがより理解できる。

Web API: The Good Parts

Web APIに特化した本。実践的で網羅性が高く、API設計初心者のときは何度も参照した。仕事でAPI設計するならオススメ。

おわりに

新しいバージョンが出てるものや、読んでから時間が経っているものは読み直したい、、、。