ソフトウェア設計のトレードオフと誤り
ソフトウェアセッケイノトレードオフトアヤマリ
プログラミングの際により良い選択をするには
- 著者:
- Tomasz Lelek / Jon Skeet / 渋川 よしき / 山田 智子 / 本田 健悟 / 辻 大志郎(トマッシュ レレック / ジョン スキート / シブカワ ヨシキ / ヤマダ トモコ / ホンダ ケンゴ / ツジ ダイシロウ)
- 出版社:
- オライリー・ジャパン
- 出版日:
- 2023年05月25日
- ISBN:
- 9784814400317
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
技書の森解説
設計の判断は、その場では正しく見えても、後になって大きな制約に変わることがあります。『ソフトウェア設計のトレードオフと誤り』は、プログラミングで日々行う設計上の選択について、何と引き換えに何を得ているのか、その選択がどんな誤りを招きうるのかを、具体的な実装と失敗例で示す本です。著者は 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 件)
ちょっと広く例外を学んでみた
♡ 175error, 設計, 例外, 例外処理, エラー対処【凄腕エンジニアさんから学んだ例外の話】の補足
♡ 51error, 設計, 例外, 例外処理, エラー対処フューチャーの3年間でチームリーダーになるまでの失敗談と成功談まとめ
♡ 4コンサルティング, リーダー【アサヒGHD等の事例】工場のラインや物流が止まる「ランサムウェアと可用性のトレードオフ」
♡ 1Security, OTセキュリティ, ランサムウェア, 製造業, BCP技術書読書ログ「ソフトウェア設計のトレードオフと誤り」
♡ 1技術書, 設計【書評】The Site Reliability Workbook: Practical Ways to Implement SRE
♡ 0SRE, SLO, devops, 書評, アーキテクチャ
この本に興味がある方におすすめ
関連する本
関連記事
セキュリティ本ガイド - Web 開発者が読むべき技術書の選び方
Web セキュリティの基礎から実践まで学べる技術書の選び方マトリクスと、読了後にやるべき 3 つのアクションを紹介します。
技術書の誤りを見つけたときの対応 - 正誤表と著者への連絡
技術書の誤りを見つけたときの確認手順と、著者 / 出版社への適切な連絡方法、誤りの発見が学習を深める理由を紹介します。
技術書の誤植 - 1 文字の違いで読者が止まる理由と正誤表の使い方
技術書は 1 文字の誤植でコードが動かなくなります。読者を止める誤植の型、正誤表と誤植報告の使い方、4 段階の校正を経てもゼロにならない理由を解説します。