無料のKindleアプリをダウンロードして、スマートフォン、タブレット、またはコンピューターで今すぐKindle本を読むことができます。Kindleデバイスは必要ありません。
ウェブ版Kindleなら、お使いのブラウザですぐにお読みいただけます。
携帯電話のカメラを使用する - 以下のコードをスキャンし、Kindleアプリをダウンロードしてください。
良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方
「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 プログラム構造の問題解決に役立つ設計パターン
4 不変の活用 ―安定動作を構築する―
4.1 再代入
4.2 可変がもたらす意図せぬ影響
4.3 不変と可変の取り扱い方針
5 低凝集 ―バラバラになったモノたち―
5.1 staticメソッドの誤用
5.2 初期化ロジックの分散
5.3 共通処理クラス(Common・Util)
5.4 結果を返すために引数を使わないこと
5.5 多すぎる引数
5.6 メソッドチェイン
6 条件分岐 ―迷宮化した分岐処理を解きほぐす技法―
6.1 条件分岐のネストによる可読性低下
6.2 switch文の重複
6.3 条件分岐の重複とネスト
6.4 型チェックで分岐しないこと
6.5 interfaceの使いこなしが中級者への第一歩
6.6 フラグ引数
7 コレクション ―ネストを解消する構造化技法―
7.1 わざわざ自前でコレクション処理を実装してしまう 7.2 ループ処理中の条件分岐ネスト
7.3 低凝集なコレクション処理
8 密結合 ―絡まって解きほぐせない構造―
8.1 密結合と責務
8.2 密結合の各種事例と対処方法
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 意図がわからない名前
10.5 構造を大きく歪ませてしまう名前
10.6 名前的に居場所が不自然なメソッド
10.7 名前の省略
11 コメント ―保守と変更の正確性を高める書き方―
11.1 退化コメント
11.2 コメントで命名をごまかす
11.3 意図や仕様変更時の注意点を読み手に伝えること
11.4 コメントのルール まとめ
11.5 ドキュメントコメント
12 メソッド(関数) ―良きクラスには良きメソッドあり―
12.1 必ず自身のクラスのインスタンス変数を使うこと
12.2 不変をベースに予期せぬ動作を防ぐ関数にすること
12.3 尋ねるな、命じろ
12.4 コマンド・クエリ分離
12.5 引数
12.6 戻り値
13 モデリング ―クラス設計の土台―
13.1 邪悪な構造に陥りがちなUserクラス
13.2 モデリングの考え方とあるべき構造
13.3 良くないモデルの問題点と解決方法
13.4 機能性を左右するモデリング
14 リファクタリング ―既存コードを成長に導く技―
14.1 リファクタリングの流れ
14.2 ユニットテストでリファクタリングのミスを防ぐ
14.3 あやふやな仕様を理解するための分析方法
14.4 IDEのリファクタリング機能
14.5 リファクタリングで注意すべきこと
15 設計の意義と設計への向き合い方
15.1 本書はなんの設計について書いたものなのか
15.2 設計しないと開発生産性が低下する
15.3 ソフトウェアとエンジニアの成長性
15.4 課題を解決する
15.5 コードの良し悪しを判断する指標
15.6 コード分析をサポートする各種ツール
15.7 設計対象と費用対効果
15.8 時間を操る超能力者になろう
16 設計を妨げる開発プロセスとの戦い
16.1 コミュニケーション
16.2 設計
16.3 実装
16.4 レビュー
16.5 チームの設計力を高める
17 設計技術の理解の深め方
17.1 さらにステップアップするための設計技術書紹介
17.2 設計スキルを高める学び方
- 本の長さ400ページ
- 言語日本語
- 出版社技術評論社
- 発売日2022/4/30
- 寸法21 x 14.8 x 2.2 cm
- ISBN-104297127830
- ISBN-13978-4297127831
この商品をチェックした人はこんな商品もチェックしています
出版社より
商品の説明
出版社からのコメント
著者について
悪しきコードとの戦いの中で設計の魅力に気付く。暇さえあれば脳内でリファクタリングしている。
Twitterではプログラミングの風刺動画を不定期で投稿。
Developers Summit 2021 Summerベストスピーカー賞3位。その他登壇多数。
Twitter : ミノ駆動(@MinoDriven)
登録情報
- 出版社 : 技術評論社
- 発売日 : 2022/4/30
- 言語 : 日本語
- 本の長さ : 400ページ
- ISBN-10 : 4297127830
- ISBN-13 : 978-4297127831
- 商品の重量 : 1 g
- 寸法 : 21 x 14.8 x 2.2 cm
- Amazon 売れ筋ランキング: 本 - 127,727位 (本の売れ筋ランキングを見る)
- 開発技法 - 179位
- ソフトウェア開発・言語 - 315位
- IT - 653位
- カスタマーレビュー:
著者について

著者の本をもっと見つけたり、似たような著者を調べたり、おすすめの本を読んだりできます。
カスタマーレビュー
お客様のご意見
お客様の投稿に基づきAIで生成されたものです。カスタマーレビューは、お客様自身による感想や意見であり、Amazon.co.jpの見解を示すものではありません選択して詳細を見る
日本からのトップレビュー
- 星5つ中5つ
とても良い。
2024年10月22日に日本でレビュー済みタイトルに書いたようにとても良いです、参考になります。
ただあくまでパターン毎の説明になっているので、実際webサービスを作る一連の流れ(データ受け取り→加工→アウトプット)の中でどのように適用すれば良いかのイメージが付かず、使えそうな所を掻い摘むことになってしまっているのがもどかしいです。せっかくなので徹頭徹尾クラスベースの設計をしてみたいのですが、、、なので応用編を出してもらえると助かります。
3人のユーザーが役に立ったと感じていますフィードバックを送信中...フィードバックを送信中...参考になったフィードバックをお寄せいただきありがとうございます。申し訳ありませんが、投票の記録に失敗しました。 もう一度お試しくださいありがとうございます。数日中に調査いたします。申し訳ありません。このレビューを報告できませんでした。 もう一度お試しください - 星5つ中5つ
初心者にはありがたい本でした
2022年5月9日に日本でレビュー済み【基本的な感想】
初心者でも読める文量で、
どう実装すべきか・すべきでないかを分かりやすく教えてくださる本でとてもありがたかったです。
章立てが細かいところも、学習の目標が立てやすくて非常に助かりました。
この先、もっと沢山学習して、知識を増やしていく必要があるだろうとは思いますが、
自分に後輩が出来たら一歩目として勧めたいです。
【強いて書くならばのレビュー】
もし著者の方にとっての設計知識のロードマップがあって、
そのロードマップを前提に取捨選択して章立てしているとしたら、
ロードマップも合わせて書いて頂いて、どんなつながりがあるのか・何を補足で学ぶべきかも
理解出来たらより最高なのかもしれないと思いました。
10人のユーザーが役に立ったと感じていますフィードバックを送信中...フィードバックを送信中...参考になったフィードバックをお寄せいただきありがとうございます。申し訳ありませんが、投票の記録に失敗しました。 もう一度お試しくださいありがとうございます。数日中に調査いたします。申し訳ありません。このレビューを報告できませんでした。 もう一度お試しください - 星5つ中4つ
この本自体のリファクタリングが必要
2022年5月3日に日本でレビュー済み本書の最後半部分にあたる第15章に、「本書はなんの設計について書いたものなのか」という節がある。その中に、「本書で取り扱っているのは、保守性に関する設計です。」(本書321ページ)という一文があり、これを読んで、ここまでの記述が何となく理解出来たような気がした。
冒頭から、設計というよりはコーディングのtips集のような記述が続く。例えば、第4章で不変の活用ということでfinalの利用が推奨され、第5章ではstaticの使い方が解説されたり。第6章では、条件分岐について、ifやswitchではなく、interfaceの利用が提唱されたり。このあたり、何が良くて何が悪いのかもう少し明確にしてくれないと、著者が良いと思うから使ってみてと勧めているだけのように見えてしまう。
設計の話に入るのは、第10章「名前設計」のあたりから。と思いきや、第11章はコメントについてのあれこれ。ここも結局のところtips集の趣きが抜けない。そこから進んで、第13章のモデリングや第14章のリファクタリングについての解説は、ここまでの説明で著者が用いてきたRPGへのこだわりからも無縁で、好内容だと思う。設計の意義と向き合い方を書いた第15章や設計と開発プロセスの関係を書いた第16章もよく整理されていると思うが、最後の第17章はこれまた著者の妙な思い入れが混じっていて、最後に来て思ったのと違うことを読まされている印象を持った。
部分部分で有用な内容に満ちた書ではあるが、内容の整理と著者の思い入れの中和化が必要だろう。
49人のユーザーが役に立ったと感じていますフィードバックを送信中...フィードバックを送信中...参考になったフィードバックをお寄せいただきありがとうございます。申し訳ありませんが、投票の記録に失敗しました。 もう一度お試しくださいありがとうございます。数日中に調査いたします。申し訳ありません。このレビューを報告できませんでした。 もう一度お試しください - 星5つ中5つ
初心者向きだが良い本
2023年6月8日に日本でレビュー済みサンプルコードをもとにして、何が問題でどのように設計すると良くなるかという視点で書かれており、分かりやすい。
デザインパターンなどを座学としてやったはいいが実際のコードにどのように適用するのかピンとこない人にとっては特に有用になると思う。
設計方針は著者の思想が強く反映されており、好みが分かれる気もするが私としては概ね良い内容だと考える。
さすがにこの1冊で設計ができるようにはならないが、アンチパターンのいくつかには気付けるようになるのでそれだけでも初心者には価値がある。
ソフトウェア設計の入門としては非常に良い本だと思う。
20人のユーザーが役に立ったと感じていますフィードバックを送信中...フィードバックを送信中...参考になったフィードバックをお寄せいただきありがとうございます。申し訳ありませんが、投票の記録に失敗しました。 もう一度お試しくださいありがとうございます。数日中に調査いたします。申し訳ありません。このレビューを報告できませんでした。 もう一度お試しください - 星5つ中5つ
リファクタリングやコーティング規約に悩んだ人が読むべき!
2022年5月8日に日本でレビュー済み他の設計書籍と違って、初心者にもわかりやすく、Bad/Best Practiceを見せながら、どうしていくべきか?ということを書いていて、読みながら頷きたくなるw本です。
Javaの基本的な文法/仕組みは前提として記載しているため、初心者には少し読み解き辛いかもしれませんが、保守開発でいろんなコードを見て「どうやったら、より良いコードになるか?」ということを考え続けてる人にはとても参考になると思います。
リファクタリング/コーティング規約のガイドの一要素として取り入れることもお勧めしたいですね。
技術的なことを学ぶより、哲学的な観点で見た方が学びを多く得られると思いました。
応援してます!
9人のユーザーが役に立ったと感じていますフィードバックを送信中...フィードバックを送信中...参考になったフィードバックをお寄せいただきありがとうございます。申し訳ありませんが、投票の記録に失敗しました。 もう一度お試しくださいありがとうございます。数日中に調査いたします。申し訳ありません。このレビューを報告できませんでした。 もう一度お試しください - 星5つ中3つ
大局的な内容は有用。コーディング指南については一部賛同しがたい部分もあり
2022年5月7日に日本でレビュー済みクラスベースのオブジェクト指向に基づく、設計のノウハウを解説した本。
自分としては、13章のモデリングの話が一番興味深かった。
単語としてはよく聞くものの実践が困難な「単一責任の原則」について、著者の考える実践の指針が説明されており参考になった。
一方で、それ以前のサンプルコードを元に良いコード/悪いコードを解説している部分は、読んでいていくつか違和感を抱く箇所があった。
---
最も気になったのは12.6.3の「エラーは戻り値で返さない、例外でスローすること」と題された節で、ミスリーディングな記述があると感じた。
本節では、位置を2次元座標を用いて表現するクラス Location の、位置を移動するメソッド shift(int shiftX, int shiftY) を例として扱っており、
「問題のあるエラー処理」の例として、移動後の位置(座標)が valid でなかった場合にはエラー値として Location(-1, -1) を返す、というものを紹介している。
そのうえで、これはある値に複数の意味を持たせる「ダブルミーニング」であってロジックの複雑さを招くため望ましくない、として、
「戻り値でエラーを返すのではなく、例外をスロー」すべきだと主張している。
しかしながら、「戻り値でエラーを返す」ために「ダブルミーニング」を用いる必要はない。
本書で用いられている Java であれば、shift を(Location 型を返すメソッドとして定義されているが)Optional<Location> 型を返す定義にして、
エラー値として Optional.empty() を返すようにすれば良い。
このようにすれば型レベルでエラー値と正常値の区別ができるので「ダブルミーニング」とは言い難いし、
これは何も Java 固有の機能ではない(例えば Rust であればこれに似た Option 型や、直和型を用いてより詳しくエラー情報を格納できる Result 型もある)。
さらに付言すると、Optional 登場以前の Java や、Ruby や Python のような動的型付け言語の場合でも、
Location(-1, -1) よりは null 値(nil / None)を返却するほうが一般的な手法と考えられる(それが良い手法かは措くとしても)。
以上のことから、本節の「戻り値でエラーを返す」ことのデメリットの説明は、適切でないと感じた。
もっとも、著者はこれ以前に5.5.1 節の「プリミティブ型執着」の中で、
「プログラミング言語が標準で用意している基本データ型」=「プリミティブ型」を濫用せず、1つ1つ丁寧にクラス化すべきである、と主張しているため、
もしかすると著者の考えとしては、Optional 型も(戻り値としては)使うべきでないのかもしれない。
(※Optional 型は Java の言語仕様的な意味ではプリミティブではないが、本書の中では String もプリミティブと呼ばれているため、本書の定義としてはプリミティブと呼べるかもしれない)
しかし、仮にそうだとすれば、なおさら Optional 型を使ったやり方に触れた上で、それよりも著者の推奨するやり方のほうが優れている、と示す論理展開がほしかった。
---
この箇所以外にもいくつか気になった部分はあったものの、
基本的には著者の一貫したスタンス(一つ一つの概念を丁寧にクラス化し、データとロジックを凝集させてゆく)が反映されていて、興味深く読める内容ではあった。
ただ、逆に言えば著者の思想が強く出ている(それが本書の魅力でもあるのだが)本であるからこそ、
前述したようなミスリーディングな議論を避けてほしかった。
上記のような理由から、本書の主張がどのくらい妥当なのか、は自分の中で判断保留の状態になっている
(13章以降の大局的な内容については妥当だと思うが、12章以前のコードの書き方指南については多少の疑義がある)。
それでも、間違いなく有用だと感じる部分もあったので、少しずつ徐々に本書の書き方を普段のコーディングに導入しながら(本書16章でもスモールステップでチームの設計力を高めていくことを推奨している)、
どの程度本書内のプラクティスが有効に働くのかを確かめてみたいと考えている。
134人のユーザーが役に立ったと感じていますフィードバックを送信中...フィードバックを送信中...参考になったフィードバックをお寄せいただきありがとうございます。申し訳ありませんが、投票の記録に失敗しました。 もう一度お試しくださいありがとうございます。数日中に調査いたします。申し訳ありません。このレビューを報告できませんでした。 もう一度お試しください - 星5つ中5つ
オブジェクト指向言語に携わる人は必読!
2024年7月22日に日本でレビュー済み数々の技術書籍における「入門書」の消化不良感に苦しんできましたが、この本は正しく「設計入門」です。
良い設計は良いコードを生み、良いコードは良いソフトウェアが継続的に開発できることを意味します。
上流下流関係なく、オブジェクト指向言語に関わるなら是非読んで頂きたいです。
本書にも書かれていますが、課題は理想と現実のギャップによって発見されます。理想を知らなくてはスタート地点に立てないのです。
5人のユーザーが役に立ったと感じていますフィードバックを送信中...フィードバックを送信中...参考になったフィードバックをお寄せいただきありがとうございます。申し訳ありませんが、投票の記録に失敗しました。 もう一度お試しくださいありがとうございます。数日中に調査いたします。申し訳ありません。このレビューを報告できませんでした。 もう一度お試しください - 星5つ中4つ
オブジェクト指向設計の本
2023年5月11日に日本でレビュー済みキンドル本で購入したのを忘れていて、紙の本も購入しました。
重要な部分を蛍光ペンで線を引きながら読みました。
紙の本は必要な所を直ぐに見返せるという利点があるので、何度でも見返す必要のある本は、紙で購入した方が良いと思います。なので両方購入したことに後悔はしていません。
オブジェクト指向でコードを設計する為の書籍で、参考になる部分が多くあります。
当方メインフレームやオフコンの時代からの人間で、AI等の先端IT関連まで幅広くやっていますが、少し設計の型が古いのは自認していました。ただ、一応高度IT人材で設計は重要視しており、最新の設計を学ぶのに非常に参考になりました。
オブジェクト指向設計の考え方も時と共に変遷していて、一昔前の考え方からどんどん変化・拡張しているので、定期的に学び直す必要があります。この書籍はそう言った意味でも有用です。コードを書かない管理職等の人も、この位のことは知っておいて欲しいと思います。
24人のユーザーが役に立ったと感じていますフィードバックを送信中...フィードバックを送信中...参考になったフィードバックをお寄せいただきありがとうございます。申し訳ありませんが、投票の記録に失敗しました。 もう一度お試しくださいありがとうございます。数日中に調査いたします。申し訳ありません。このレビューを報告できませんでした。 もう一度お試しください











