リファクタリング (第 2 版)
リファクタリングダイニハン
既存のコードを安全に改善する
- 著者:
- Martin Fowler 著 / 児玉 公信 / 友野 晶夫 / 平澤 章 / 梅澤 真史(マーチン ファウラー / コダマ キミノブ / トモノ マサオ / ヒラサワ アキラ / ウメザワ マサシ)
- 出版社:
- オーム社
- 出版日:
- 2019年12月01日頃
- ISBN:
- 9784274224546
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
技書の森解説
動いているコードの外から見える振る舞いを変えずに、内部の構造だけを少しずつ良くしていく作業を リファクタリング と呼びます。『リファクタリング (第 2 版) 既存のコードを安全に改善する』 (Martin Fowler 著、児玉公信 / 友野晶夫 / 平澤章 / 梅澤真史 訳、オーム社、2019 年 12 月刊) は、この技法を体系化した原著 Refactoring の第 2 版を日本語に翻訳したもので、版元が「ソフトウェア開発の名著」と紹介する定番書です。版元の紹介文によれば、本書はリファクタリングのガイドブックとして、リファクタリングとは何か、なぜリファクタリングをすべきか、どこを改善すべきかを、実際の事例を交えて解説する構成をとります。
全 12 章の構成、最初の例と原則からカタログ 7 章へ
本文は Chap.1 から Chap.12 までの全 12 章です。Chap.1「リファクタリング-最初の例」で一連の作業を実例として通しで見せ、Chap.2「リファクタリングの原則」、Chap.3「コードの不吉な臭い」、Chap.4「テストの構築」、Chap.5「カタログの紹介」で考え方と準備を固めます。Chap.6「リファクタリングはじめの一歩」から Chap.12「継承の取り扱い」までの 7 章がカタログ本体で、Chap.7「カプセル化」、Chap.8「特性の移動」、Chap.9「データの再編成」、Chap.10「条件記述の単純化」、Chap.11「API のリファクタリング」と、改善の対象ごとに手法が整理されています。巻頭には「第 2 版翻訳にあたって」と初版の「本書に寄せて」、巻末には文献リスト、訳者あとがき、索引が付きます。
第 2 版の変更点、サンプルコードは Java から JavaScript へ
版元の紹介によれば、第 2 版は約 20 年前のオリジナル原稿の構成を変えないまま大幅に書き換えられ、サンプルコードは Java から JavaScript に変わりました。版元は対象読者に「旧版読者」も挙げています。初版で技法を学んだ人にとっては、同じ骨格の上で説明と例が書き直された本として読み直す価値があります。JavaScript を日常的に書いていない読者は、例を追うために基本的な文法に慣れておく必要がありますが、扱う手法の考え方そのものは言語に依存しません。逆に言えば、本書は JavaScript の入門書でも、特定のフレームワークの本でもない点は押さえておく必要があります。
小さな安全な手順がコードの寿命を延ばす理由
ソフトウェアは要求の変化に応じて書き足されるうちに、当初の設計から外れた構造が積み重なり、変更のたびに壊れやすくなります。そのまま放置した結果が 技術的負債 で、返済の手段が大掛かりな書き直ししかないと、事業側の合意が得られず手が付かないままになります。リファクタリングの考え方が効くのは、返済を振る舞いを保った小さな一歩の連続に分解し、各一歩をテストで確かめながら進めることで、開発を止めずに構造を改善できる点にあります。目次で Chap.3 に「コードの不吉な臭い」、Chap.4 に「テストの構築」が置かれているのはこの順序の反映で、重複や長すぎる関数といった コードの不吉な匂い を見つける目と、変更の安全網になるテストを、カタログに入る前に用意させる構成です。手法に名前が付いていることの価値も大きく、統合開発環境が備える自動リファクタリング機能の多くはこうした名前で呼ばれており、コードレビューでも関数の抽出といった共通の言葉で改善案を議論できるようになります。
ソフトウェア開発者向けの前提知識と、向かない読み方
版元が対象として挙げるのはソフトウェア開発者、プログラマー、旧版読者で、難易度表記は中級です。何らかの言語で実務のコードを書き、自分や他人のコードが読みにくくなっていく経験をしたことがある人が、いちばん元を取れる読者です。反対に、プログラミングをこれから始める人には前提が足りず、また本書が扱うのはコードの内部構造の改善なので、システム全体の分割やアーキテクチャの再設計を主題にした本を探している人には目的がずれます。カタログ部分は通読するより、手元のコードに当てはまる項目を引く辞書のように使うほうが実務では役立ちます。
「動いているから触るのが怖い」コードを抱えているチームにとって、本書は安全に手を入れる手順と語彙を与えてくれる一冊です。設計力をどの順で伸ばすかについては当サイトの 設計 / アーキテクチャ本の選び方 も参考になりますが、コードそのものの改善をこれから学ぶなら、出発点として堅実な選択です。
言及した記事 (10 件)
【読書の夏?】各分野のおすすめ技術書を75冊まとめてみた
♡ 126AWS, Security, 初心者, 技術書, AI1年間続けた勉強会の成果と失敗
♡ 80勉強会, 初心者, ポエム, 新人プログラマ応援, 新人プログラマ応援_記事投稿キャンペーン政府批判も「財源幻想」に支配される ― 批判のOSをリファクタリングする : システム設計視点の行動経済学 (21)
♡ 5システム設計, 行動経済学, ChatGPT, Gemini, マクロ経済学消費税を上げるか下げるか、その前に ― 財源幻想から考える国家OSのリファクタリング : システム設計視点の行動経済学 (15)
♡ 5システム設計, 行動経済学, Gemini, ChatGPT, マクロ経済学なぜ日本では「起業→投資→賃金→相続」の循環が弱いのか? ― 諸外国の税制から考える国家OSの再設計 : システム設計視点の行動経済学 (13)
♡ 5システム設計, 行動経済学, Gemini, ChatGPT, マクロ経済学AIと対話して「技術者の自分」を再定義した話 〜不具合(Bug)だと思っていたものは、生存戦略(Spec)だった〜
♡ 1AIソフトウェア設計の本質: 5冊の名著から学ぶ「変更容易性(ETC原則)」
♡ 1オブジェクト指向, 設計, 技術書, アーキテクチャ最近のモデルでもハルシネーションはするのか?Geminiで試してみた!
♡ 0GoogleCloud, Gemini, 生成AI, ハルシネーション【書評】新装版 リファクタリング―既存のコードを安全に改善する
♡ 0オブジェクト指向, リファクタリング, 設計, アーキテクチャ, 書評組込み系システムエンジニアのためのステートパターン紹介(C++)
♡ 0C++, デザインパターン, 状態遷移, ステートパターン, 組込み系
この本に興味がある方におすすめ
関連する本
関連記事
リーダブルコードの次に読む本 - ステップアップの読書ルート
リーダブルコードを読み終えた後、設計力を段階的に高めるための読書ルートと、各レベルで学ぶべきテーマを紹介します。
ChatGPT に聞けば済む時代に、あえて本を開く理由
生成 AI で何でも聞ける時代に、技術書を読む意味はあるのか。AI の回答と書籍の知識の決定的な違いを掘り下げ、両者の使い分けを提案します。
コードレビューが上手い人は何を読んでいるのか
的確なコードレビューができる人は、指摘を裏づける語彙と判断基準を持っています。レビュー力を支える 3 つの読書領域と、レビューに直結する知識の身につけ方を解説します。