リファクタリング(第2版) 既存のコードを安全に改善する

  • オーム社 (2019年12月1日発売)
4.13
  • (17)
  • (20)
  • (11)
  • (0)
  • (0)
本棚登録 : 513
感想 : 24
サイトに貼り付ける

本ページはアフィリエイトプログラムによる収益を得ています

Amazon.co.jp ・本 (424ページ) / ISBN・EAN: 9784274224546

作品紹介・あらすじ

ソフトウェア開発の名著、第2版登場!
リファクタリングは、ソフトウェアの外部的な振る舞いを保ったままで、内部の構造を改善する作業を指します。本書はリファクタリングのガイドブックであり、リファクタリングとは何か、なぜリファクタリングをすべきか、どこを改善すべきか、実際の事例で構成され、ソフトウェア開発者にとって非常に役立つものとなっています。
 本第2版では、約20年前のオリジナル原稿の構成は変わらないものの、大幅に書き換えられているほか、サンプルコードがJavaからJava Scriptになるなど、現代的にアレンジされています。

感想・レビュー・書評

並び替え
表示形式
表示件数
絞り込み
  • 現場でなんかイマイチだなー、と思ったコードは、不吉な匂いという概念で表現されていた。見える世界が変わった気がする。一度に理解し切るのは難しいので、繰り返し読みたい。
    途中比喩がわかりづらい部分あったので、Chat GPTに聞いて理解を深めた。

  • 読んでよかった。正直当たり前なことも書かれているけれどもいつも当たり前のことができているかというとそうではないので身が引き締まる思いだし、ステップバイステップでリファクタリング手法を解説してくれるので自信を持って安全に改善していくための土台になる。

  • # プログラミングの実務訓練本

    ## 面白かったところ

    * 言語はJavaScriptを選定されており、プログラマを選ばない仕上がりになっている
    * サンプルコードも、必要なケースに応じて刷新されているので読みやすい
    * Web版(Kindle版ではない)を利用できるので、コピペが可能だった

    ## 微妙だったところ

    * 紹介されているコードが割と必要最低限の分量だったため、未定義の変数などがあり、もやもやした
    * 「テストが通ったら」というフレーズは山程あるが、テストコードは同梱されていない

    ## 感想

    JavaScriptで書かれているということで、僕はTypeScriptの勉強も兼ねて写経・読書を進めた。

    リファクタリングの奥義を学ぶことはもちろん、TSならどのように設計すべきかなどを考えながら読み進めることができ、とても楽しかった。

  • 点検読書I:例はJavaからJavaScriptに変わったが、言語固有点は読み替えて他の言語でも使える。ってか、この本を読んで実践しない意味がわからん。

    読んだことないのに、エディターやIDEのリファクタリング機能を使いこなせるとも思えないので読め。って感じ、読んだだけでは実践できないだろうけど。

    あとそれぞれに命名して他人と共有可能にしたのは素晴らしい。

  • ITエンジニア歴6年目にしてようやく購入し、読破。今でも通用する有用なリファクタリング手法、「不吉な臭い」がよくまとまっており、書籍の文量・分厚さの割には読みやすい。
    「コマンドによる関数の置き換え」と「サブクラスによるタイプコードの置き換え」が読破時点では勉強になった。

  • ## 手に取った動機
    結構大規模なリファクタリングをする機会が訪れそうで。いつ、どこまで、どうやるべきかに悩んで手に取ってみた。



    ## 以下がとても良かった

    p47.
    リファクタリングなしでは、プログラム内部の設計(アーキテクチャ)は徐々に劣化していきます。
    開発者が短期的な目的の実現のために、アーキテクチャの全体的な理解をせずに変更を行なった場合、コードは構造を失うことになります。
    こうなると、コードを読んで設計を把握することも難しくなります。
    そしてコードが構造を失うと、累積的に悪影響が及びます。設計が把握しづらくなるにつれて、それを維持するのが困難になり、急速に劣化していきます。
    リファクタリングを定期的に行うことで、コードを良い状態に保つことができます。

    p48.
    そのコードをリファクタリングできれば、何をしているのかがわかるようになり、その新たな理解を武器に、コードに立ち向かえるようになります。
    プログラムの構造を明確にすることで、コードに対する推測が正しかったことがわかり、やがてバグを無理なく発見できるに至ります。

    ここで、Kent Beckが自らを語ったセリフを思い出しました。
    「僕は、偉大なプログラマなんかじゃない。偉大な習慣を身につけた少しマシなプログラマなんだ。」

    p50.
    内部の設計が優れているソフトウェアは、新たな機能を加える際にどこをどう変更すれば良いか、すぐに把握できます。
    私はこの効果を「デザインスタミナ仮説」と呼んでいます。内部の設計を入念に行えば、ソフトウェア開発のためのスタミナをつけることができ、より長い期間、より早いペースで開発していくことができます。

    p51.
    例えるなら、100マイル東に行きたいのに、ただ森を分け入るのではなく、まず20マイル北の高速道路まで車で行き、そこから本来の3倍の速さで100マイル東に進むようなものです。
    誰かが「まっすぐ行け」と急かしてきても、「待って、地図を確認して一番早いルートを見つけないと」と言う必要がある時があります。
    準備的なリファクタリングは、私にとってまさにその役割を果たしてくれるのです。

    FYI: https://martinfowler.com/articles/preparatory-refactoring-example.html

    p52.
    手始めに、理解のためのリファクタリングを細かく行うようにします。変数名をいくつか修正して、それぞれが何を表すのか理解できるようにしたり、長い関数を適宜分割したりします。
    コードが明確になるにつれて、以前は気づかなかった設計上の考慮すべき事項が把握できるようになります。

    p53.
    変更の要求が来たら、まず変更が容易になるようにする。それから、容易になった変更を行う。

    https://x.com/kentbeck/status/250733358307500032

    p57.
    私が最も危険な罠と思うのは、「美しいコード」「素晴らしいエンジニアリングのプラクティス」といった道徳的な理由により、リファクタリングが正当化される状況です。
    リファクタリングは、コードベースがどれだけ美しいかではなく、純粋に経済的な基準で図られるものです。

    リファクタリングするのは、あくまでもスピードを上げるため、新機能の追加やバグの修正を早めるためです。
    そのことを常に心に留めるべきですし、メンバーにもその観点を持って接していく必要があります。

  • 先人の知恵やテクニックが盛り込まれている良書である。何度も読み直して、また、実践して、知識として定着させたい。

  • 序盤は概念的なところを学べてよい
    中盤なからはレシピ集という感じ。読みやすいし、実際にリファクタリングするときに参考にしやすそう

  • この本の一番の価値は、多分、GoFの本がそうであったように、頻出するパターンに名前をつけてカタログ化したことにあるのではないかと思う。
    一度で期待した通りに動作するプログラムが書けないのと同じように、一度で理想的なコードを書くことはできない。さらに、時間の経過による状況の変化もあり、最初のコードに手を入れることは必須になる。正しく動作させるためにデバッグが欠かせないのと同じように、リファクタリングも必ず必要だと考えたほうが良い。
    もし、言語が最初からこのカタログにあるものを最初からサポートするように作られていたら、最初からありがちなケースを排除するように誘導してくれるようになっていたら、ずっと楽ができるのにと思うも、現実、決してバグを生み出さいない言語が存在できないのと同じように、リファクタリングが不要になることなどないのだろう。

  • 第二版はJavaScript を使った説明になっており、よりモダンな言語仕様を踏まえた解説になっているのかなと思いました。クラスという言語仕様や基本的な言語仕様を理解して、いくらか実際のソフトウェア開発を経験したあとに本書を読むとより気づきが多いと思います。もちろんシニアなソフトウェアエンジニアにとっても手元においておく価値のある素晴らしい本です。

  • リファクタリング(第2版): 既存のコードを安全に改善する

    マーチン・ファウラー氏の著書です。

    リファクタリングに特化した書籍です。
    リファクタリングのカタログと書かれている通り、良く使用するパターンを体系的にまとめ解説してあります。
    この本を読むことで、リファクタリングした後の形を知ることができ、あらかじめ書くコードの質も上がります。

    【本書で学べること・考えること】
    - リファクタリングの必要性
    - リファクタリングの準備
    - リファクタリングの体系的なパターン

    読んでみての感想です。

    サンプルコードはJavaScriptで書かれており、理解しやすいです。
    私の場合は、まとめながら例を自分の得意な言語に置き換えてみることで理解が進みました。

    この本のメリットは、体系的にまとめられたリファクタリングのパターンを学べるとともに、リファクタリング後のコードのイメージを持つことができることだと思います。
    それが持てると、最初から書くコードの質が上がると思います。

    この本のように網羅的に体系的にまとめられているのが、書籍の大きな強みですね。

  • めちゃくちゃ実践的で大変役に立つ。半分以上がリファクタリングカタログ。
    リファクタリングの本なので当然ではあるがある程度の実践経験がある職業プログラマじゃないと面白くないとは思う。

  • リファクタリングの手法について、それぞれ紹介されている内容は当然と感じる内容もあったりしますが、明確に言語化されて体系づけられている点や、具体的なコード例とともに説明されている点は良いなと思いました。後で参照する価値のある本だと思います。
    少しづつ改善していくプロセスなどはTDD本と共通するところもあると感じました。

  • 【書誌情報】
    著者:Martin Fowler
    訳者:児玉 公信、友野 晶夫、平澤 章、梅澤真史
    定価:4,840円 (本体4,400円+税)
    判型:B5変
    頁:456頁
    ISBN:978-4-274-22454-6
    発売日:2019/12/01
    発行元:オーム社

    プログラムに潜む扱いにくい部分を見つけ出し、その動作を変えずに内部の構造を改善していくためのテクニックを整理したマーティン・ファウラー氏によるソフトウェア開発の名著『リファクタリング プログラミングの体質改善テクニック』("Refactoring:Improving the Design of Existing Code")が、オリジナルの訳者による丁寧な見直しと現代的なJava開発環境による「再リファクタリング」を施した書き下ろし付録を収録して再発行!
    旧版の価値を知るベテランはもちろん、これからソフトウェア開発に携わる新人にも必読の一冊です。
     本第2版では、約20年前のオリジナル原稿の構成は変わらないものの、大幅に書き換えられているほか、サンプルコードがJavaからJava Scriptになるなど、現代的にアレンジされています。
    https://www.ohmsha.co.jp/book/9784274224546/
    ※旧版〈https://www.ohmsha.co.jp/book/9784274050190/

    【主要目次】
    第2版翻訳にあたって
    初版の「本書に寄せて」
    はじめに
    Chap.1 リファクタリング-最初の例
    Chap.2 リファクタリングの原則
    Chap.3 コードの不吉な臭い
    Chap.4 テストの構築
    Chap.5 カタログの紹介
    Chap.6 リファクタリングはじめの一歩
    Chap.7 カプセル化
    Chap.8 特性の移動
    Chap.9 データの再編成
    Chap.10 条件記述の単純化
    Chap.11 APIのリファクタリング
    Chap.12 継承の取り扱い
    文献リスト
    訳者あとがき
    索引

    【詳細目次(2014年版)】
    日本語版の再出版にあたって
    謝辞
    本書に寄せて

    はじめに
    リファクタリングとは
    本書の内容
    本書の対象となる読者
    先人の礎の上に
    謝辞

    第1章 リファクタリング最初の例
    スタート地点
    リファクタリングの第一歩
    statement メソッドの分割、再配置
    料金計算の条件文をポリモーフィズムに置き換える
    まとめ

    第2章 リファクタリングの原則
    リファクタリングの定義
    リファクタリングを行う理由
    いつリファクタリングをすべきか
    管理者を説得するには
    リファクタリングの問題点
    リファクタリングと設計
    リファクタリングとパフォーマンス
    リファクタリングの起源

    第3章 コードの不吉な臭い
    重複したコード
    長すぎるメソッド
    巨大なクラス
    長すぎるパラメータリスト
    変更の偏り
    変更の分散
    特性の横恋慕
    データの群れ
    基本データ型への執着
    スイッチ文
    パラレル継承
    怠け者クラス
    疑わしき一般化
    一時的属性
    メッセージの連鎖
    仲介人
    不適切な関係
    クラスのインタフェース不一致
    未熟なクラスライブラリ
    データクラス
    相続拒否
    コメント

    第4章 テストの構築
    自己テストコードの意義
    JUnit テストフレームワーク
    テストの追加

    第5章 リファクタリング・カタログに向けて
    リファクタリングの形式
    参照の検索
    本書のリファクタリングの成熟度

    第6章 メソッドの構成
    メソッドの抽出
    メソッドのインライン化
    一時変数のインライン化
    問い合せによる一時変数の置き換え
    説明用変数の導入
    一時変数の分離
    パラメータへの代入の除去
    メソッドオブジェクトによるメソッドの置き換え
    アルゴリズムの取り替え

    第7章 オブジェクト間での特性の移動
    メソッドの移動
    フィールドの移動
    クラスの抽出
    クラスのインライン化
    委譲の隠蔽
    仲介人の除去
    外部メソッドの導入
    局所的拡張の導入

    第8章 データの再編成
    自己カプセル化フィールド
    オブジェクトによるデータ値の置き換え
    値から参照への変更
    参照から値への変更
    オブジェクトによる配列の置き換え
    観察されるデータの複製
    単方向関連の双方向への変更
    双方向関連の単方向への変更
    シンボリック定数によるマジックナンバーの置き換え
    フィールドのカプセル化
    コレクションのカプセル化
    データクラスによるレコードの置き換え
    クラスによるタイプコードの置き換え
    サブクラスによるタイプコードの置き換え
    State/Strategy によるタイプコードの置き換え
    フィールドによるサブクラスの置き換え

    第9章 条件記述の単純化
    条件記述の分解
    条件記述の統合
    重複した条件記述の断片の統合
    制御フラグの削除
    ガード節による入れ子条件記述の置き換え
    ポリモーフィズムによる条件記述の置き換え
    ヌルオブジェクトの導入
    表明の導入

    第10章 メソッド呼び出しの単純化
    メソッド名の変更
    パラメータの追加
    パラメータの削除
    問い合せと更新の分離
    メソッドのパラメタライズ
    明示的なメソッド群によるパラメータの置き換え
    オブジェクトそのものの受け渡し
    メソッドによるパラメータの置き換え
    パラメータオブジェクトの導入
    set メソッドの削除
    メソッドの隠蔽
    Factory Method によるコンストラクタの置き換え
    ダウンキャストのカプセル化
    例外によるエラーコードの置き換え
    条件判定による例外の置き換え

    第11章 継承の取り扱い
    フィールドの引き上げ
    メソッドの引き上げ
    コンストラクタ本体の引き上げ
    メソッドの引き下げ
    フィールドの引き下げ
    サブクラスの抽出
    スーパークラスの抽出
    インタフェースの抽出
    階層の平坦化
    Template Method の形成
    委譲による継承の置き換え
    継承による委譲の置き換え

    第12章 大きなリファクタリング
    継承の切り離し
    手続き的な設計からオブジェクト指向への変換
    プレゼンテーションとドメインの分離
    階層の抽出

    第13章 リファクタリング、再利用、現実
    現実の壁
    開発者が自分たちのプログラムをリファクタリングしようと思わない理由
    現実の壁(再び)
    リファクタリングのリソースと参考文献
    ソフトウェア再利用および技術移転に与える影響
    最後に
    参考文献

    第14章 リファクタリングツール
    ツールを用いたリファクタリング
    リファクタリングツールの技術的規範
    リファクタリングツールの実践的規範
    まとめ

    第15章 部品から全体へ
    付録  Java のバージョンアップに伴うリファクタリングをめぐる環境の変化
    Java の進歩
    テスティングフレームワークの進歩
    Java 7 で本書コードを再びリファクタリングする

    参考文献
    リファクタリングのヒント
    訳者あとがき
    索引

  • リファクタリングを実装に合わせて行うのは同感。
    実行速度のチューニングはリファクタリングと相反していると考えがちだが、実は違う点はハッとした。基本に忠実にしっかり計測したい。
    カタログは全体を通してざっくり読んだので、必要に応じて読み返したい。
    データベースリファクタリングも少し気になった。

  • ITエンジニア本大賞より (https://www.shoeisha.co.jp/campaign/award)

  • ◎信州大学附属図書館OPACのリンクはこちら:
    https://www-lib.shinshu-u.ac.jp/opc/recordID/catalog.bib/BB29289629

  • リファクタリングに関する基本的な姿勢や考え方に関しては参考になる。
    ただ、具体的な方法についてはこの本でしか得られない情報というものはほとんどなくリーダブルコード、プログラマが知るべき97のことなどの有名所を読んでいればだいたいエッセンスとしては知っているなというものが多かった気がする。数ポイントを得るには読んだ方がいいが他の本を読んでいるならプラスになる事は少ないかなというイメージ。

  • 実践テクニックがたくさん載っており、業務にも有効活用できている。

全22件中 1 - 20件を表示

児玉公信の作品

  • 話題の本に出会えて、蔵書管理を手軽にできる!ブクログのアプリ AppStoreからダウンロード GooglePlayで手に入れよう
ツイートする
×