ソフトウェア設計のトレードオフと誤り

ソフトウェアセッケイノトレードオフトアヤマリ

プログラミングの際により良い選択をするには

ソフトウェア設計のトレードオフと誤りの表紙
プログラミング
著者:
Tomasz Lelek / Jon Skeet / 渋川 よしき / 山田 智子 / 本田 健悟 / 辻 大志郎(トマッシュ レレック / ジョン スキート / シブカワ ヨシキ / ヤマダ トモコ / ホンダ ケンゴ / ツジ ダイシロウ)
出版社:
オライリー・ジャパン
出版日:
2023年05月25日
ISBN:
9784814400317
在庫:
在庫あり
2.8(5 件 / 楽天ブックス)
中級者向け
プログラミングマイクロサービスビッグデータソフトウェア設計システム設計アーキテクチャトレードオフ設計パターンソフトウェアエンジニアリングコード品質

なぜ注目されているか

総合290位 ↓ 1 ランクダウン 言及 8 件・うち記事 6 件を掲載
言及数
422位
出版前出版日02320222023202420252026

書籍紹介

ソフトウェアで陥りやすい誤りと、設計のトレードオフを紹介!
ソフトウェアにかかわるすべての人は常に、さまざまなコンテキストや制約の中で多くの決断に迫られています。本書は、モノリス、マイクロサービス、ビッグデータ処理、ライブラリなど、さまざまなソフトウェアシステムの経験から得た教訓を共有するため、実際の業務システムの開発の中で行われた意思決定、そのトレードオフ、そしてその失敗を深く分析しています。設計における潜在的な問題や限界をあらかじめ学ぶことで、より良い選択ができるようになるでしょう。

技書の森解説

設計の判断は、その場では正しく見えても、後になって大きな制約に変わることがあります。『ソフトウェア設計のトレードオフと誤り』は、プログラミングで日々行う設計上の選択について、何と引き換えに何を得ているのか、その選択がどんな誤りを招きうるのかを、具体的な実装と失敗例で示す本です。著者は Tomasz Lelek と Jon Skeet、訳は渋川 よしき ほか 11 名で、オライリー・ジャパンから 2023 年 5 月 25 日に発行されました。原書は Software Mistakes and Tradeoffs、副題は「プログラミングの際により良い選択をするには」です。

全 13 章の構成、コードの重複から分散システムまで

2 章、3 章、5 章、6 章、13 章の章題が「A vs B」の形を取っているのが、この本の性格をよく表しています。1 章「イントロダクション」で、単体テストと統合テストの割合や、デザインパターンとアーキテクチャのパターンが万能でない理由を示したあと、2 章から 6 章はコードと API の水準の選択を扱います。2 章「コードの重複は必ずしも悪ではない」、3 章「例外 vs 他のエラーハンドリングパターン」、4 章「柔軟性と複雑性のバランス」、5 章「早すぎる最適化 vs ホットパスの最適化」、6 章「API のわかりやすさ vs メンテナンスコスト」という並びです。7 章からはシステム寄りの話題に移り、日付と時間のデータ、データローカリティとメモリーの活用、サードパーティーライブラリ、分散システムにおける一貫性と原子性、分散システムのデータ配信、バージョンと互換性の管理と続き、13 章「流行を追いかけ続けること vs コードのメンテナンスコスト」で、依存性注入のフレームワーク、リアクティブプログラミング、関数型プログラミング、遅延評価と先行評価の使いどころを問い直します。巻末の付録 A は、設定値をリテラル、定数、環境変数、設定ファイル、オンラインデータベースなどのどれで持つかを、デプロイの手順や起動時間、セキュリティの観点で比べています。

重複を許すか共有するか、2 章に見る判断の材料

DRY 原則 は広く知られた設計原則ですが、重複をなくすために共通部分をまとめると、まとめた側とそれを使う側の結びつきが強くなります。2 章はこの緊張関係を正面から扱い、複数のコードベースで共通のコードを持つ場合、共有ライブラリにする場合、別のマイクロサービスへ抽出する場合を順に比べ、それぞれのデメリットを評価します。さらに、コードの重複による疎結合の改善、継承とコンポジションのトレードオフ、本質的な重複と偶然の重複の区別へ進みます。見た目が同じでも変わる理由が違うコードを無理にまとめると、片方の変更がもう片方を壊すようになります。どの重複を消し、どの重複を残すかを、結合の強さと変更の頻度から判断する練習ができる章と読めます。

一貫性と配信保証を扱う 10 章と 11 章

分散システムでは、ネットワークの失敗に備えて呼び出しをリトライすると、同じデータが 2 回届く可能性が生まれます。10 章はデータソースの at-least-once 配信から始まり、アプリケーションからの呼び出しのリトライ、データ生成と 冪等性、CQRS、重複排除ライブラリの素朴な実装、分散システムで重複排除を実装する際のよくある誤り、レースコンディションを防ぐためにロジックをアトミックにする方法へ進みます。11 章は Apache Kafka に基づくプロデューサーとコンシューマーのアプリケーションを題材に、プロデューサーの一貫性と可用性の選択、コンシューマーの手動コミット、厳密に 1 回のデータ配信、配信保証による耐障害性の向上を扱います。1 台のノードでは正しく動く処理が、複数ノードでは誤りになる過程を追えるため、分散処理の設計に関わる人には特に得るものが多い部分です。

向いている読者と、合わない読み方

この本が向くのは、実務である程度の設計判断を任され、過去の選択が後から足かせになった経験を持つ開発者です。答えを 1 つ示す本ではなく、選択肢ごとの代償を比べる本なので、設計の定石をまず一通り身につけたい段階では、設計本の選び方 を参考に原則や定石を扱う本から入るほうが理解が早いでしょう。章の範囲はコードの書き方からデータ処理、バージョン管理まで広く、自分の担当に近い章ほど読み返す価値が高くなります。

共有ライブラリにするか重複を残すか、例外で扱うか別の手段にするか、流行の手法を取り入れるか見送るか。こうした場面で判断の根拠をチームに説明できるようになりたい人にとって、具体的な失敗例と比較の観点をまとめて手に入れられるこの本は、設計の議論を深めるための確かな材料になります。

言及した記事 (6 件)

この本に興味がある方におすすめ

関連する本

関連記事

関連用語

共有: