Kindle 価格: ¥3,212

(税込)

獲得ポイント:
1305ポイント (41%)

これらのプロモーションはこの商品に適用されます:

一部のプロモーションは他のセールと組み合わせることができますが、それ以外のプロモーションは組み合わせることはできません。詳細については、これらのプロモーションに関連する規約をご覧ください。

を購読しました。 続刊の配信が可能になってから24時間以内に予約注文します。最新刊がリリースされると、予約注文期間中に利用可能な最低価格がデフォルトで設定している支払い方法に請求されます。
メンバーシップおよび購読」で、支払い方法や端末の更新、続刊のスキップやキャンセルができます。
Kindleアプリのロゴ画像

無料のKindleアプリをダウンロードして、スマートフォン、タブレット、またはコンピューターで今すぐKindle本を読むことができます。Kindleデバイスは必要ありません

ウェブ版Kindleなら、お使いのブラウザですぐにお読みいただけます。

携帯電話のカメラを使用する - 以下のコードをスキャンし、Kindleアプリをダウンロードしてください。

KindleアプリをダウンロードするためのQRコード

何か問題が発生しました。後で再度リクエストしてください。

良いコード/悪いコードで学ぶ設計入門―保守しやすい 成長し続けるコードの書き方 Kindle版

4.4 5つ星のうち4.4 557個の評価

こちらの書籍は 2022/06/17 紙版の5刷に対応するため更新をおこないました。
(概要)

本書は、より成長させやすいコードの書き方と設計を学ぶ入門書です。

システム開発では、ソフトウェアの変更が難しくなる事態が頻発します。コードの可読性が低く調査に時間がかかる、コードの影響範囲が不明で変更すると動かなくなる、新機能を追加したいがどこに実装すればいいかわからない……。

変更しづらいコードは、成長できないコードです。ビジネスの進化への追随や、機能の改善が難しくなります。

成長できないコードの問題を、設計で解決します。


(こんな方におすすめ)

・ コードの設計スキルに興味がある人

・ 日々、悪いコードと向き合っていて改善したい人

・より良いコードを書きたい人


(目次)

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 設計スキルを高める学び方
続きを読む もっと少なく読む
この本はファイルサイズが大きいため、ダウンロードに時間がかかる場合があります。Kindle端末では、この本を3G接続でダウンロードすることができませんので、Wi-Fiネットワークをご利用ください。

出版社より

オブジェクト指向, Java, 設計, ソフトウェア設計, クソコード, リーダブルコード, コードレビュー, ミノ駆動, 開発技法, モデリング, モデル, オブジェクト指向プログラミング

商品の説明

出版社からのコメント

良いコードを書き、開発力を高めるための「設計」の入門書です。本書では本来あるべきコードの構造、まずいコードが生みだす弊害をわかりやすく解説します。

著者について

青森県出身。大手電機メーカーなどを経て、現在はREADYFOR株式会社にてアプリケーションアーキテクトを務める。リファクタリングや設計全般を推進。

悪しきコードとの戦いの中で設計の魅力に気付く。暇さえあれば脳内でリファクタリングしている。

Twitterではプログラミングの風刺動画を不定期で投稿。

Developers Summit 2021 Summerベストスピーカー賞3位。その他登壇多数。

Twitter : ミノ駆動(@MinoDriven)

登録情報

  • ASIN ‏ : ‎ B09Y1MWK9N
  • 出版社 ‏ : ‎ 技術評論社 (2022/4/26)
  • 発売日 ‏ : ‎ 2022/4/26
  • 言語 ‏ : ‎ 日本語
  • ファイルサイズ ‏ : ‎ 35722 KB
  • Text-to-Speech(テキスト読み上げ機能) ‏ : ‎ 有効
  • X-Ray ‏ : ‎ 有効
  • Word Wise ‏ : ‎ 有効にされていません
  • 付箋メモ ‏ : ‎ Kindle Scribeで
  • 本の長さ ‏ : ‎ 601ページ
  • カスタマーレビュー:
    4.4 5つ星のうち4.4 557個の評価

著者について

著者をフォローして、新作のアップデートや改善されたおすすめを入手してください。
仙塲 大也
Brief content visible, double tap to read full content.
Full content visible, double tap to read brief content.

著者の本をもっと発見したり、よく似た著者を見つけたり、著者のブログを読んだりしましょう

カスタマーレビュー

星5つ中4.4つ
5つのうち4.4つ
557グローバルレーティング

この商品をレビュー

他のお客様にも意見を伝えましょう
せっかく届いたが、捲れ上がっている、、
1 星
せっかく届いたが、捲れ上がっている、、
楽しみに買ったが、傷物が届いたどこのタイミングか特定も難しいのと、こんなくらいじゃ問題ないが新品で購入でこれは悲しい😩
フィードバックをお寄せいただきありがとうございます
申し訳ありませんが、エラーが発生しました
申し訳ありませんが、レビューを読み込めませんでした

上位レビュー、対象国: 日本

2023年6月8日に日本でレビュー済み
Amazonで購入
サンプルコードをもとにして、何が問題でどのように設計すると良くなるかという視点で書かれており、分かりやすい。
デザインパターンなどを座学としてやったはいいが実際のコードにどのように適用するのかピンとこない人にとっては特に有用になると思う。
設計方針は著者の思想が強く反映されており、好みが分かれる気もするが私としては概ね良い内容だと考える。
さすがにこの1冊で設計ができるようにはならないが、アンチパターンのいくつかには気付けるようになるのでそれだけでも初心者には価値がある。
ソフトウェア設計の入門としては非常に良い本だと思う。
18人のお客様がこれが役に立ったと考えています
レポート
2023年2月12日に日本でレビュー済み
Amazonで購入
データの持ち方と関心事の関連付けについての記述がとにかく印象に残りました。
MVCモデルやMVVMモデルなどを知った上で、ではどこに何を持つのかという答えになるのでまだ1回通して読んだだけですが何度も読み返して生かしていきたいところです。
それ以外にも保守性の高いコーディングの基本から書いているので長く付き合える本だと思いました。
11人のお客様がこれが役に立ったと考えています
レポート
2023年5月11日に日本でレビュー済み
Amazonで購入
キンドル本で購入したのを忘れていて、紙の本も購入しました。
重要な部分を蛍光ペンで線を引きながら読みました。
紙の本は必要な所を直ぐに見返せるという利点があるので、何度でも見返す必要のある本は、紙で購入した方が良いと思います。なので両方購入したことに後悔はしていません。

オブジェクト指向でコードを設計する為の書籍で、参考になる部分が多くあります。
当方メインフレームやオフコンの時代からの人間で、AI等の先端IT関連まで幅広くやっていますが、少し設計の型が古いのは自認していました。ただ、一応高度IT人材で設計は重要視しており、最新の設計を学ぶのに非常に参考になりました。
オブジェクト指向設計の考え方も時と共に変遷していて、一昔前の考え方からどんどん変化・拡張しているので、定期的に学び直す必要があります。この書籍はそう言った意味でも有用です。コードを書かない管理職等の人も、この位のことは知っておいて欲しいと思います。
18人のお客様がこれが役に立ったと考えています
レポート
2023年2月13日に日本でレビュー済み
Amazonで購入
すべてのプログラマーさんに読んで欲しい
8人のお客様がこれが役に立ったと考えています
レポート
2023年1月3日に日本でレビュー済み
Amazonで購入
1章から14章まではよくある悪いコードを例にどう実装すべきかが纏められています。15章から17章では文化/プロセスに言及されています。全体的に要点が良く纏まっており、初学者でも参考になります。
9人のお客様がこれが役に立ったと考えています
レポート
2022年5月7日に日本でレビュー済み
Amazonで購入
クラスベースのオブジェクト指向に基づく、設計のノウハウを解説した本。
自分としては、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章でもスモールステップでチームの設計力を高めていくことを推奨している)、
どの程度本書内のプラクティスが有効に働くのかを確かめてみたいと考えている。
113人のお客様がこれが役に立ったと考えています
レポート
2022年10月17日に日本でレビュー済み
Amazonで購入
Unityでゲームを作っています。
学習度としては、Untiyの初級本は読み終えており、ゲームの作成自体は出来るのですが、オブジェクト指向とは何かはピンと来ていない…といった感じでした。
なので「どのような方針に従ってプログラムを設計するべきか」が分からない…という悩みを抱えていました。

具体例で言うと、例えばアクションゲームでプレイヤーが体力回復アイテムを取得したとき
・プレイヤーがアイテムの効果を読み取って、プレイヤー自身がHPを回復するべきか?
・アイテムがプレイヤーのHPを読み取って、アイテムからプレイヤーHPを回復させるべきか?
・ゲームコントローラークラスにプレイヤーを見張らせて、そいつがアイテムの効果を読み取ってプレイヤーのHPを回復させるべきか?

と、どのような手法を取るべきか分からない、そしてどの手法を取ったとしても、最終的にはお互いを行ったり来たりするスパゲッティなコードになってしまう…といった感じです。

こちらの本は、そんな「行ったり来たりするコードを撲滅するノウハウ」をまとめたものであり、まさしく私の「学習度」と「悩み」に完全にマッチしていました。

また本を読み進めていくことで副次的に「オブジェクト指向プログラミング」についても非常に腹落ちし、今まで手が出せなかったようなプログラムの記事や本なども読めるようになりました。

上記のような悩みを持っている方に非常におすすめの本です。
21人のお客様がこれが役に立ったと考えています
レポート
2022年12月11日に日本でレビュー済み
Amazonで購入
著書の中で述べられてますが、この書籍は著者の「クソコード動画」の書籍版です。
きちんとした書籍の体裁ではないので、ある程度設計スキルのある人には突っ込みどころ満載かと思います。
ですが、私めのような構造化プログラミングに足を突っ込んだばかりの人間には、なるほどと思わせるところがたたございます。
構造化初心者で、にわかプログラマーにはとっつきやすい内容かと思います。
15人のお客様がこれが役に立ったと考えています
レポート
問題を報告

この商品には、不適切な内容が含まれていますか?
この商品は、著作権を侵害していると思いますか?
この商品には、品質または書式設定の問題が含まれていますか?