実践で学ぶコード改善の極意 5行ルールで強く美しくリファクタリングする (Christian Clausen)
書籍情報
- 著者:Christian Clausen(著), 松田晃一(訳)
- 発行日:2025-05-27
- ISBN:9784839987718
- URL:https://book.mynavi.jp/ec/products/detail/id=147499
書籍目次
- リファクタリングパターン一覧
- 翻訳者より
- 序文
- まえがき
- 第1章 リファクタリングをリファクタリングする
- 1.1 リファクタリングとは何か?
- 1.2 スキル: 何をリファクタリングすべきか?
- 1.3 組織文化: いつリファクタリングを行うべきか?
- 1.4 ツール: 安全にリファクタリングする手段
- 1.5 本書を読むのに必要なツール
- 1.6 本書で用いる例: 2Dパズルゲーム
- 1.7 実際のソフトウェアに関する注意
- 1.8 まとめ
- 第2章 リファクタリングの裏側を見る
- 2.1 可読性と保守性を向上する
- 2.2 スピード、柔軟性、安定性の獲得
- 2.3 リファクタリングと日常業務
- 2.4 ソフトウェアにおける「ドメイン」を定義する
- 2.5 まとめ
- 第1部 コンピュータゲームでリファクタリングを学ぶ
- 第3章 長い関数を分割する
- 3.1 最初のルールを決める: なぜ5行なのか?
- 3.2 関数を分割するためのリファクタリングパターンを導入する
- 3.3 関数を分割して抽象化のバランスを取る
- 3.4 適切な関数名の特性
- 3.5 たくさんのことをやりすぎている関数を分割する
- 3.6 まとめ
- 第4章 タイプコードを機能させる
- 4.1 単純なif文をリファクタリングする
- 4.2 大規模なif文をリファクタリングする
- 4.3 コードの重複に対処する
- 4.4 複雑なif節をリファクタリングする
- 4.5 不要なコードを削除する
- 4.6 まとめ
- 第5章 類似したコードをまとめて1つにする
- 5.1 類似したクラスをまとめる
- 5.2 条件分岐をまとめる
- 5.3 複雑な条件をまとめる
- 5.4 クラス間でコードをまとめる
- 5.5 類似した関数をまとめる
- 5.6 類似したコードをまとめる
- 5.7 まとめ
- 第6章 データを守る
- 6.1 ゲッターなしでカプセル化する
- 6.2 単純なデータをカプセル化する
- 6.3 複雑なデータをカプセル化する
- 6.4 順序制約をなくす
- 6.5 別の方法で列挙型をなくす
- 6.6 まとめ
- 第3章 長い関数を分割する
- 第2部 学んだことを実務に取り入れる
- 第7章 コンパイラと協調する
- 7.1 コンパイラを知る
- 7.2 コンパイラを活用する
- 7.3 コンパイラを信頼する
- 7.4 コンパイラだけを信じること
- 7.5 まとめ
- 第8章 コメントに近づかない
- 8.1 古くなったコメントを削除する
- 8.2 コメントアウトされたコードを削除する
- 8.3 無意味なコメントを削除する
- 8.4 コメントをメソッド名にする
- 8.5 不変条件を書いたコメントは残す
- 8.6 まとめ
- 第9章 コードを積極的に削除する
- 9.1 コードの削除が次のフロンティアになるかもしれない
- 9.2 コードを削除し偶発的な複雑さをなくす
- 9.3 親密度をもとにコードを分類する
- 9.4 レガシーシステムのコードを削除する
- 9.5 中断されたプロジェクトからコードを削除する
- 9.6 バージョン管理システムからブランチを削除する
- 9.7 コードのドキュメントを削除する
- 9.8 テストコードを削除する
- 9.9 設定コードを削除する
- 9.10 ライブラリを破棄するためにコードを削除する
- 9.11 動いている機能からコードを削除する
- 9.12 まとめ
- 第10章 恐れずにコードを追加する
- 10.1 不確実性を受け入れる: あえて危険に飛び込む
- 10.2 スパイクを使って、間違ったものを作ってしまうことへの不安を克服する
- 10.3 割合を固定し、無駄やリスクへの恐れを克服する
- 10.4 徐々に改善していくことで不完全さの恐怖を克服する
- 10.5 コピー&ペーストが変更履歴にどのような影響を与えるか?
- 10.6 拡張性を用いた追加による変更
- 10.7 追加による変更は後方互換性を可能にする
- 10.8 機能トグルを用いた追加による変更
- 10.9 抽象化による分岐を用いた追加による変更
- 10.10 まとめ
- 第11章 コード内の構造に従う
- 11.1 スコープと起源で構造を分類する
- 11.2 コードに動作を反映させる3つの方法
- 11.3 コードの追加で構造を明確にする
- 11.4 予測するのではなく観察し、経験的手法を用いる
- 11.5 コードを理解せずに安全性を確保する
- 11.6 構造を見つけ出す
- 11.7 まとめ
- 第12章 最適化と汎用性を避ける
- 12.1 シンプルさを追求する
- 12.2 いつ、どのように汎用化するか
- 12.3 いつ、どのように最適化するか?
- 12.4 まとめ
- 第13章 悪いコードを悪く見せる
- 13.1 悪いコードでプロセス上の問題を知らる
- 13.2 クリーンなコードとレガシーコードを分離する
- 13.3 悪いコードを定義する方法
- 13.4 コードを安全に改善するためのルール
- 13.5 コードを安全に悪くする方法
- 13.6 まとめ
- 第14章 本書を終えるにあたって
- 14.1 本書で学んだことを振り返る
- 14.2 根底にある考え方を探る
- 14.3 今後の進め方
- 14.4 まとめ
- 第7章 コンパイラと協調する
- Appendix 巻末付録
- 付録A 第1部のためのツールのインストール
- A.1 Node.js
- A.2 TypeScript
- A.3 Visual Studio Code
- A.4 Git
- A.5 TypeScriptプロジェクトをセットアップする
- A.6 TypeScriptプロジェクトをビルドする
- A.7 レベルの変更方法
- 付録A 第1部のためのツールのインストール
- 索引
- ルール一覧
- 翻訳者紹介