良いコード/悪いコードで学ぶ設計入門
―保守しやすい 成長し続けるコードの書き方
―保守しやすい 成長し続けるコードの書き方
2022年4月30日紙版発売
2022年4月26日電子版発売
仙塲大也 著
A5判/400ページ
定価3,278円(本体2,980円+税10%)
ISBN 978-4-297-12783-1
書籍の概要
この本の概要
「ITエンジニア本大賞2023」技術書部門で大賞受賞!
本書は,より成長させやすいコードの書き方と設計を学ぶ入門書です。
システム開発では,ソフトウェアの変更が難しくなる事態が頻発します。コードの可読性が低く調査に時間がかかる,コードの影響範囲が不明で変更すると動かなくなる,新機能を追加したいがどこに実装すればいいかわからない……。
変更しづらいコードは,成長できないコードです。ビジネスの進化への追随や,機能の改善が難しくなります。
成長できないコードの問題を,設計で解決します。
こんな方におすすめ
- コードの設計スキルに興味がある人
- 日々,悪いコードと向き合っていて改善したい人
- より良いコードを書きたい人
この書籍に関連する記事があります!
- 悪いコードの正体を知り,良いコードを書けるようになろう
- 本書は、より成長させやすいコードの書き方と設計を学ぶ入門書です。
本書のサンプル
本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。
目次
1 悪しき構造の弊害を知覚する
- 1.1 意味不明な命名
- 1.2 理解を困難にする条件分岐のネスト
- 1.3 さまざまな悪魔を招きやすいデータクラス
- 1.4 悪魔退治の基本
2 設計の初歩
- 2.1 省略せずに意図が伝わる名前を設計する
- 2.2 変数を使い回さない,目的ごとの変数を用意する
- 2.3 ベタ書きせず,意味のあるまとまりでメソッド化
- 2.4 関係し合うデータとロジックをクラスにまとめる
3 クラス設計 ―すべてにつながる設計の基盤―
- 3.1 クラス単体で正常に動作するよう設計する
- 3.2 成熟したクラスへ成長させる設計術
- 3.3 悪魔退治の効果を検証する
- 3.4 プログラム構造の問題解決に役立つ設計パターン
- Column 種類の異なる言語と本書のノウハウ
4 不変の活用 ―安定動作を構築する―
- 4.1 再代入
- 4.2 可変がもたらす意図せぬ影響
- 4.3 不変と可変の取り扱い方針
5 低凝集 ―バラバラになったモノたち―
- 5.1 staticメソッドの誤用
- 5.2 初期化ロジックの分散
- 5.3 共通処理クラス(Common・Util)
- 5.4 結果を返すために引数を使わないこと
- Column C#のoutキーワード
- 5.5 多すぎる引数
- 5.6 メソッドチェイン
6 条件分岐 ―迷宮化した分岐処理を解きほぐす技法―
- 6.1 条件分岐のネストによる可読性低下
- 6.2 switch文の重複
- Column クソコード動画「switch文」
- 6.3 条件分岐の重複とネスト
- 6.4 型チェックで分岐しないこと
- 6.5 interfaceの使いこなしが中級者への第一歩
- 6.6 フラグ引数
7 コレクション ―ネストを解消する構造化技法―
- 7.1 わざわざ自前でコレクション処理を実装してしまう
- Column 車輪の再発明
- 7.2 ループ処理中の条件分岐ネスト
- 7.3 低凝集なコレクション処理
8 密結合 ―絡まって解きほぐせない構造―
- 8.1 密結合と責務
- Column クソコード動画「共通化の罠」
- 8.2 密結合の各種事例と対処方法
- Column クソコード動画「継承」
9 設計の健全性をそこなうさまざまな悪魔たち
- 9.1 デッドコード
- 9.2 YAGNI原則
- 9.3 マジックナンバー
- 9.4 文字列型執着
- 9.5 グローバル変数
- 9.6 null問題
- 9.7 例外の握り潰し
- 9.8 設計秩序を破壊するメタプログラミング
- 9.9 技術駆動パッケージング
- 9.10 サンプルコードのコピペ
- 9.11 銀の弾丸
10 名前設計 ―あるべき構造を見破る名前―
- 10.1 悪魔を呼び寄せる名前
- 10.2 名前を設計する―目的駆動名前設計
- 10.3 設計時の注意すべきリスク
- 10.4 意図がわからない名前
- Column 技術駆動命名を用いる分野もある
- 10.5 構造を大きく歪ませてしまう名前
- Column クソコード動画「Managerクラス」
- 10.6 名前的に居場所が不自然なメソッド
- 10.7 名前の省略
11 コメント ―保守と変更の正確性を高める書き方―
- 11.1 退化コメント
- 11.2 コメントで命名をごまかす
- 11.3 意図や仕様変更時の注意点を読み手に伝えること
- 11.4 コメントのルール まとめ
- 11.5 ドキュメントコメント
12 メソッド(関数) ―良きクラスには良きメソッドあり―
- 12.1 必ず自身のクラスのインスタンス変数を使うこと
- 12.2 不変をベースに予期せぬ動作を防ぐ関数にすること
- 12.3 尋ねるな,命じろ
- Column クソコード動画「カプセル化」
- 12.4 コマンド・クエリ分離
- 12.5 引数
- 12.6 戻り値
- Column メソッドの名前設計
- Column staticメソッドの扱いに注意
13 モデリング ―クラス設計の土台―
- 13.1 邪悪な構造に陥りがちなUserクラス
- 13.2 モデリングの考え方とあるべき構造
- 13.3 良くないモデルの問題点と解決方法
- Column クソコード動画「Userクラス」
- 13.4 機能性を左右するモデリング
14 リファクタリング ―既存コードを成長に導く技―
- 14.1 リファクタリングの流れ
- 14.2 ユニットテストでリファクタリングのミスを防ぐ
- 14.3 あやふやな仕様を理解するための分析方法
- 14.4 IDEのリファクタリング機能
- 14.5 リファクタリングで注意すべきこと
- Column Railsアプリのリファクタリング
15 設計の意義と設計への向き合い方
- 15.1 本書はなんの設計について書いたものなのか
- 15.2 設計しないと開発生産性が低下する
- 15.3 ソフトウェアとエンジニアの成長性
- 15.4 課題を解決する
- 15.5 コードの良し悪しを判断する指標
- Column クラスを分割すると読みにくくなる?
- 15.6 コード分析をサポートする各種ツール
- Column シンタックスハイライトを品質可視化に利用する
- 15.7 設計対象と費用対効果
- 15.8 時間を操る超能力者になろう
16 設計を妨げる開発プロセスとの戦い
- 16.1 コミュニケーション
- 16.2 設計
- 16.3 実装
- 16.4 レビュー
- 16.5 チームの設計力を高める
17 設計技術の理解の深め方
- 17.1 さらにステップアップするための設計技術書紹介
- Column バグ退治RPG『バグハンター2 REBOOT』
- 17.2 設計スキルを高める学び方
- Column C#と長き旅,そして設計への道
この本に関連する書籍
-
エンジニア組織を強くする 開発生産性の教科書 ~事例から学ぶ、生産性向上への取り組み方~
近年,ソフトウェアエンジニアリングにおいて開発生産性について言及されることが増えています。ソフトウェア開発チームのパフォーマンスを示すための指標「Four Keys」...
-
改訂新版 前処理大全 〜SQL/pandas/Polars実践テクニック
BigQuery,Pandas,Polarsを使った実用的なモダン前処理を学びましょう! データ分析において前処理が重要かつ多くの時間をとられる業務であることは広く知られてき...
-
読みやすいコードのガイドライン ―持続可能なソフトウェア開発のために
開発が大規模化・長期化するほど,コードを「読む」コストは増大していきます。そのため「読みやすさ」の向上は,生産性を改善し,プロダクトの成長限界を引き上げる重...
-
エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリング
第6回ブクログ大賞[2018] ビジネス書部門大賞受賞 「コミュニケーションにおける不確実性を減らすには?」「技術的負債を解消する方法とは?」「経営陣とエンジニア...
-
現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法
「ソースがごちゃごちゃしていて,どこに何が書いてあるのか理解するまでがたいへん」「1つの修正のために,あっちもこっちも書きなおす必要がある」「ちょっとした変更...