マーチン・ファウラー氏が約2年を費やして執筆してきた新著「リファクタリング 2nd Edition」が完成し、日本のAmazon.comなどで予約が始まりました。発売日は11月22日と表示されています（下記の表紙画像からもAmazon.comへリンクしています。記事執筆時点でのAmazon.comでの販売価格は7279円）。

「リファクタリング」とは、ソフトウェアの機能追加や変更、性能向上などに備えるため、開発されたコードの外部に対する振る舞いは変えずに、より整理された、あるいは洗練されたコードに書き換えること、あるいはその手法のことを指します。

いまでは開発者の間で広く知られているこのリファクタリングの意義や方法論をはじめて系統的に解説し、普及に大きな貢献を果たしたのが、マーチン・ファウラー氏が執筆し1999年に発行された書籍「Refactoring. Improving the Design of Existing Code.」（日本語版「新装版 リファクタリング 既存のコードを安全に改善する」） です。

本書はIT業界において古典的名著のひとつとされています（以下、この1999年版を1st Edtionと呼びます）。

今回発売される「リファクタリング 2nd Edition」（正式な書名は「Refactoring: Improving the Design of Existing Code (2nd Edition)」）（以下、2nd Edition）は20年ぶりにこの名著が刷新されるものです。

内容のほとんどを新たに書き直し

2nd Editionは、全体の構成は1st Editionと大きく変わらないものの、リファクタリングのテクニックの説明などを含めて内容のほとんどはゼロから書き直したものだと、ファウラー氏は今年3月に自身のブログにポストした記事で説明しています。

特に2nd Editionではクラスを中心とした考え方を減らす方針であること、そしてサンプルコードがJavaからJavaScriptに変わったことが大きな変更点です（ただし一部はJavaが残っているとのこと）。

それを示す一例が、1st Editionでは68種類が解説されていたリファクタリングのテクニックが、2nd Editionではそれぞれ見直され、必要に応じて名称や内容の変更も行われて63種類になっていること。

さらにこの63種類は重要度の高いものと低いものの2つに分けられ、重要度の低いもののいくつかは書籍では解説が省略されているとのこと。そして省略された解説はWeb版に掲載されているそうです。

Web版が用意されているのも2nd Editionの大きな特徴でしょう。ファウラー氏は2nd Editionの正規版はWeb版であり、紙の書籍は正規版の内容を印刷にふさわしい形態に直したエッセンシャル版であると語っています。

そして紙の書籍を購入した読者は、版元である米ピアソン・エデュケーションが用意したWebサイトにアクセスできるようになるとのことです。

2nd Editionの本当の評価は10年後、20年後

2nd Editionを書き上げたファウラー氏は、しかし2nd Editionは多くの読者をがっかりさせるのではないか（「Most people will be disappointed by the second edition」）と、意外な予想を表明しています。

それはファウラー氏が2nd Editionの執筆に失敗したわけではありません。以下は同氏のブログから引用します。

People are familiar with the first edition, have got used to its flaws, and like elements in the original that I decided to change. We know that loss aversion means that people feel the loss of something twice as much as they appreciate a corresponding gain. So any improvements in the new edition have to be twice as good as any perceived faults in order for me to break even - that’s a hard target to achieve. 読者の方々は、1st Editionの欠点の部分や今回変更された部分も含めて慣れ親しんできました。一方、人々は何かを失うことで感じる嫌悪が、おなじだけ得るときに感じる好感の2倍であることが分かっています（訳注：行動経済学によると人は利得より損失に対して2倍ほど敏感だとされる）。つまり、（2nd Editionに好感を持ってもらうには）2ne Editionによる改善が、1st Editionの欠点の2倍はなければなりません。これを実現するのはとても難しいことです。

短期的にはがっかりするような評判が立ったとしても、ファウラー氏はこの2nd Editionの本当の評価は10年後、20年後に分かるだろうと。

The answer is that the true judgment on this new edition isn’t the immediate reaction in the few months after it’s released. Instead it’s whether it helps people learn about refactoring in five, ten, twenty years time. Most of the target audience for this edition don’t even know about the book yet, many haven’t yet written a program, most will never care about the first edition. The impact on those readers is the test for whether this effort was worthwhile. 2nd Editionの本当の評価は、出版から数カ月で示されるような反応ではありません。そうではなく、これから5年、10年、20年かけて人々がリファクタリングについて学ぶことを助けられるかどうかなのです。2nd Editionの想定読者の多くは、まだこの本の存在を知らない、まだプログラムも書いていない、1st Editionの存在など気にかけないような人たちです。こうした読者に影響を与えられるかどうかが、私の努力が価値あるものだったかどうかを試すものになります。

がっかりされるかもしれないと書いておきながら、この文章からは2nd Editionの内容はこの先10年も20年も有用なものである、というファウラー氏の自負が伝わってくるようです。

こうした長期的な視点ゆえに約2年をかけて20年ぶりに内容を刷新し、Web版の方を正規版とするといった出版形態をとったのでしょう。

（2nd Editionの日本語版を出版する予定の関係者の方がいらっしゃったら、Publickeyまでぜひご連絡ください。本記事に追記したいと思います）

Refactoring: Improving the Design of Existing Code (2nd Edition)

This eagerly awaited new edition has been fully updated to reflect crucial changes in the programming landscape. Refactoring, Second Edition, features an updated catalog of refactorings and includes JavaScript code examples, as well as new functional examples that demonstrate refactoring without classes. This eagerly awaited new edition has been fully updated to reflect crucial changes in the programming landscape. Refactoring, Second Edition, features an updated catalog of refactorings and includes JavaScript code examples, as well as new functional examples that demonstrate refactoring without classes.

参考：マーチン・ファウラー氏「リファクタリング 2nd Edition」で20年ぶり内容刷新、サンプルコードはJavaScriptに。Web主体で書籍はエッセンシャル版の位置づけ