テスト駆動開発の考案者 Kent Beck が記した原典『Test-Driven Development by Example』を新たに訳し直し、新訳版『テスト駆動開発』としてオーム社から復刊しました。ただ訳し直すだけではなく、初めての方にも旧訳版をお持ちの方にも読んでいただけるための工夫を凝らしました。
電子書籍版は Kindle 版は Amazon Kindle ストア、 PDF 版と EPUB 版は 達人出版会 から発売されています。
『Test-Driven Development by Example』との出会い
『Test-Driven Development: By Example』には、深い思い入れがあります。プログラマとしてのキャリアの初期に出会い、その後のプログラミングスタイルやキャリアそのものに決定的な影響を及ぼした本だからです。本書との出会いは、「著者あとがき」にも次のように書きました。
私(和田)が原書に出会ったきっかけは、XPやJUnitなど、ソフトウェア開発のさまざまなことを私に教えてくれた故・石井勝(まさーる)さんから「Kent Beckがいま書いている本の原稿をメーリングリストで公開して意見を募っているから、読んでみるといいよ」と勧められたことでした。
TDD MLには、Kent Beckが(たしか)MS Wordで書いた原稿が共有されており、私はその原稿を仕事場から帰る深夜バスの中で毎日「写経」することで、まるでKent Beckとペアプログラミングしているかのような体験をしました。
それ以来、テストと共にコードを書くことを続け、やがて他の人にそのやり方を伝えはじめ、仲間が増え、いつしか仲間と共に開発者テストとテスト駆動開発の啓蒙に努めるようになりました。
『Test-Driven Development by Example』は私の人生に決定的な影響を与えた一冊と言えます。
そのような本の復刊に関われるのは、喜びであり、名誉でもあります。
ピアソンショック
「復刊する」ということは、つまり一度絶版になったわけです。事件は2013年に起こりました。ピアソン桐原のピアソングループ離脱です(ピアソンの技術書は書店在庫限りとの見通し。ピアソン桐原社がピアソングループ離脱で - Publickey)。
1990年代後半から2000年代前半、良質な技術書が Addison-Wesley 社から多数出版され、それをピアソン・エデュケーションが短いタイムラグで旬のうちに翻訳して出版する時代がありました。ピアソン・エデュケーションは、多くのプログラマの学びを支え、道を示してきました。技術書にとって幸せな時代でした。
ピアソン・エデュケーションは2010年に桐原書店と合併します。そして問題の2013年、ピアソングループ離脱の際に、ピアソン桐原は技術書並びに翻訳等の業務から撤退し、ピアソン・エデュケーションが翻訳してきた名著達は全て絶版になってしまいました。
1990年代後半から2000年代前半にピアソンが出してきた書籍群には、現代のソフトウェア開発のスタンダードを作り上げた本が多数ありました。時間が経ったので準古典とはいえますが、失われるにはあまりにも勿体ない本たちです。そして、旧訳版『テスト駆動開発入門』も、絶版になってしまった本に含まれていました。
出版各社の動き
ピアソン桐原撤退の一報が界隈を駆け巡るとほぼ同時に、技術書の翻訳を扱う出版社が動き出しました。ピアソンの本の中から、売れ筋や定番の古典の版権を引き取り、再出版しようという試みです。
絶版になった書籍の多くは、丸善出版が引き取り、早期に再出版され、書店に戻っていきました([丸善出版] 旧・ピアソン桐原より翻訳刊行されていた書籍を、一部再出版することになりました)。プログラマになじみが深いのは、『Effective C++』『Effective Java』『オブジェクト指向のこころ』『人月の神話』などでしょうか。
また、古典である『計算機プログラムの構造と解釈』『詳解UNIXプログラミング』は翔泳社から復刊しました。
出版社に知り合いがいる関係上、私も何社かの相談に乗りました。そして、そのうち1社とは深く関わることになりました。オーム社です。ただ翻訳を買い取って出し直すのではなく、訳文をブラッシュアップ、状況によってはゼロから訳し直し、より良い状態で復刊させる企画がオーム社の現場から立ち上がったのです。
訳し直して再出版するために
ただでさえ技術書が売れない時代です。一度絶版になった状態の本を訳し直してまで復刊させるには、ハードルがありました。企画を通して復刊までこぎ着けるべく、再翻訳の訳者(私と『エクストリームプログラミング』訳者の角さん)は、手がける書籍について、それぞれ2つの文章「本書を日本の読者に紹介すべき理由」及び「エレベーターピッチ」を書きます。以下に、当時私が『テスト駆動開発』復刊のために記した2本を過去のメールから掘り起こし、全文を引用します。
本書を日本の読者に紹介すべき理由
この10年で日本においてもテスト自動化が広く行われるようになったが、テスト駆動開発を実践している人間はまだ少なく、理解が進んでいるとはいえない。
しかし、「テスト駆動開発」という名前だけは十分に広まった。
その結果、その名前から想起される内容と実際のプラクティスとの乖離に基づく誤解や誹謗、テスト駆動開発の効果や適用範囲に対する過大評価や過小評価が頻繁に発生している。その一方で、原理主義的な傾向もある。原典たる本書『テスト駆動開発』にはそこまで教条主義的に書かれていないにも関わらず、聞きかじったテスト駆動開発の手順に準拠すること自体が目的化してしまっているエンジニアも見られる。
つまり、名前だけが一人歩きしている。テスト駆動開発に関する議論は軸を持たず、常に発散する傾向にある。
未だにテスト駆動開発に対する正確な理解が進まない原因のひとつは、様々な事情もあり、多くのエンジニアにピアソン版『テスト駆動開発入門』が読まれなかったことであろう。「テスト駆動開発」という名前を知っているエンジニアの中で、ピアソン版『テスト駆動開発入門』を読んだ人の割合が少なすぎる。この本が広まっていれば、実例を伴った内容によってエンジニアの理解も進み、日本におけるテスト駆動開発の普及は進んだと考えられる。
日本におけるテスト駆動開発の正しい理解を進め、開発の現場により深い自信と改善の機会を与えるためにも、いまこそ原典たる『テスト駆動開発』が求めやすい価格と内容で復刊し、多くのエンジニアに読まれなければならない。
エレベーターピッチ
『テスト駆動開発』は、自分たちのコードに自信を持って開発を続けたいプログラマ、チームリーダー向けの書籍である。これはテスト駆動開発の考案者自身によって書かれた原典であり、テスト駆動開発とは単にテスト自動化を行うことではなく、ユニットテストとリファクタリングを両輪とした小さいサイクルを回すことで不確実性を制御し、不断の設計進化を可能にする手法であることを、読者は実例を通して学ぶことができる。
再出版へ
企画は通り、オーム社から4冊の本が再出版に向かうことになりました。具体的には次の4冊です。
私は『テスト駆動開発』の再翻訳を手がけることになりました。
そして、私の遅筆により多方面にご迷惑をおかけし、発売まで非常に時間がかかりましたが、本日ようやく復刊までたどり着きました。
新訳版の工夫
再出版にあたっては、ただ訳し直すだけではなく、初めての方にも旧訳版をお持ちの方にも読んでいただけるための工夫を凝らしました。
ソフトウェアのバージョンを最新に
サンプルコードは全面的に書き直し、使用されているソフトウェアは翻訳時点での最新バージョンにしました。具体的には下記の変更を行い、動作検証しつつ書き直しました。
- 第I部の JUnit は JUnit3 から先日リリースされたばかりの JUnit 5 へ
- 第II部の Python は Python2 から Python3 へ
※ ただし、JUnit4 で勉強される方も多いと考え、JUnit5 のみに含まれる新機能(@DisplayNameなど)は導入していません
ソフトウェアを最新版にした背景には、可能な限り長生きする本になって欲しいという思いもあります。
判型を小さく
持ち運びやすく、電車の中でも読みやすいように、判型を小さく(B5 → A5)しました。 「大きくて薄い」よりは「小さくて厚い」方が好まれるという昨今の傾向を反映しています。
ちなみに、先に復刊した『達人プログラマー』も同様の理由でB5版からA5版に変更されています。
自分が手がけた本が電車の中で読まれている光景を目にするのは、本当に嬉しいものです。新訳版は様々な場所で読まれてほしいと考えています。
脱落しにくい構成に
原書のページ数は 240 ページ。旧訳版のページ数は 217 ページ。それに対して新訳版のページ数は 344 ページもあります。ページ増にはもちろん判型が小さくなったことも関係ありますが、それだけで 100 ページ以上増えるわけはありません。
ページ数が大幅に増えた原因は、サンプルコードの扱いの変更です。
本書の第I部、第II部は、ペアプログラミングのような語り口で、そのときどきの思考の言語化を挟みながら、コードがだんだん育っていくという構成を採っています。
つまりコードが非常にたくさん出てくるのですが、困ったことに原書はコードの省略が非常に多いのです。変更された箇所のみか、あるいはその直前直後くらいしか記載されておらず、読み手は頭の中で注意深く補完しながら読むか、あるいはコードを書きながら読むしかありません。これは旧訳版も同様でした。
残念ながら、この紙面構成はたくさんの脱落者を生んでしまったと考えています。そこで新訳版では、3つの工夫をしました。
- コードの省略を極力やめる
- コードの変更部分を目立たせる
- 各章末にその時点での全コードを記載する
まず、本文の中のコードは、可能な限り省略をやめました。変更部分の前後共に省略が行われると途端に脱落率が高まることがわかったので、コードの変更部より前は可能な限り省略しないようにしています(なお、コードの変更部以後は適宜省略しています)。
また、変更部分を目立たせるため、コードの新規追加/変更部分は強調表示を行い、削除された部分は打ち消し線で消すようにしました。
そして各章末には、その章末時点でのコードを全文記載しています。時間をおいて読んでも脱落しにくく、どの章からでも読み進められるようになることを狙いました。
これらの工夫によりページ数が大幅に増えることになったのですが、読みやすさ、脱落しにくさも大幅に向上したのではないかと考えています。「写経」も、やりやすくなったと思います。
技術書の「写経」の方法。 1.ローカルで使える SCM を用意 2.「ほんたった」などで対象の本を固定 3.ひたすらサンプルコードを写して実行 4.実行するたびにコミット(コミットログにページ番号を含める) 5.疑問点があったらコミットログや本に書き込む 6.章ごとにタグを打つ
— Takuto Wada (@t_wada) 2010年2月12日
新規書き下ろしの訳者解説を追加
新訳版の付録では「訳者解説:テスト駆動開発の現在」と題して、私の視点から、原書出版後のテスト駆動開発の15年間を、何冊かの書籍や出来事を軸にしてふりかえり、現代におけるテスト駆動開発の立ち位置を書いてみました。加えて、本書の読み方と、これからのテスト駆動開発の学び方も記しています。
自分が書いた訳者解説の評価を自分で行うのはなかなか難しいので、書評を書いてくださった arton さん、mame さんの文章を引用したいと思います。
arton さんによる書評
本書で重要なのは、準古典なだけに、どこまで価値を持つ本なのか、一体、どれだけポジティブ方向であれば発展や革新が、ネガティブ方向であれば誤解や曲解が生まれたかについて、歴史的な俯瞰を訳者の和田さんが付録Cとして10ページほどの『訳者解説:テスト駆動開発の現在』を付けている点だ。
これ読めば、あっというまに、テスト駆動開発(TDD)批評家になれる。つまり、TDDという手法はこの文章の冒頭で準古典と決めつけたように、既にして批評の対象足り得るほどの広がりを持つ存在となった。つまり周縁を持つ(=パラダイムが形成された)存在であり、TDDを知らずにプログラムを開発するのはド素人だ。
要するに、読めということ。それも手を使って、エディターに打ち込み、追体験しながらだ。
mame さんによる書評
本書自体も(読んだことのなかった自分には)面白い内容でしたが、この翻訳には訳者の t_wada さんによる「訳者解説:テスト駆動開発の現在」という付録がついてます。TDD の原著が出てから現在までの歴史と現状が非常にコンパクトにまとまっていて、さらに現代で TDD とどう向き合っていくべきかが書かれています。ここの良さを説明するのは困難ですが、とりあえず、自分が TDD を強迫観念みたいに感じていた理由と、別に怖くない(人もいる)というのがよくわかりました。
森田さんのアドバイス
訳者解説の追加は、編集の森田さんのアイデアです。森田さんは次のようなアドバイスをくださいました。
訳者による脚注や、本文のリライトで、適切に情報提供できるものは、そのように対処するのがよいと思います。ただ、脚注等では対応しきれない事柄もあるかと思います。例えば、TDDに関連して2003以降に起きた特筆すべきことなど。そういったものを、巻末付録等で補えるとよいかなと思いました。
森田さんは他にもたくさんの修正提案をくださいました。担当が森田さんだったことは、この本にとって幸せだったと思います。
テスト駆動開発のこの15年には、さまざまな出来事がありました。解説を書き始めると、次から次へと書くべきことが出てきて、最終的な分量は大変なものになってしまいました。難産し、長く不格好になってしまった文章を、森田さんにかなり直していただきました。上記引用で arton さんは「10ページほどの」と書かれていますが、実は倍の20ページもあります……
訳者解説はもちろん旧訳版にはありませんので、旧訳版をお持ちの方でも、新訳版にご興味をお持ちいただける理由になるといいなと考えています。そして、新訳版で初めてテスト駆動開発に触れる読者の方には、テスト駆動開発のこれまでとこれからを掴んでいただくための解説になれば幸いです。
それでも価格は上げない
可読性を上げて脱落者を減らすために、コードの省略を減らし、各章末に全コードを記載しました。原書出版時から現在までの文脈を補うために、訳者解説を新たに加えました。その結果として約120ページも増えてしまったため、価格が上がるのは仕方ないかもしれない、と思っていました。
しかし、企画時には下記のように記した以上、価格はできるだけ安くお届けしたいとも考えていました。
いまこそ原典たる『テスト駆動開発』が求めやすい価格と内容で復刊し、多くのエンジニアに読まれなければならない。
そして結果として、実は旧訳版よりも若干安く、税抜き2,800円という価格で復刊できることになりました。ページ数が大幅に増えたにも関わらず、このような価格設定が可能になったのは、オーム社の尋常でない努力が背景にあったのだと思います。この点、非常に感謝しております。
準古典にして現役の原典
これは「訳者あとがき」に書いたことなのですが、実際に翻訳していて驚いたのは、本書の内容が古びていないことでした。たしかに、コードの一部を含め、原書に記載されている技術的な詳細のいくつかは現状に合わなくなっていました。しかし、翻訳に際して現在の技術に基づいて書き直した結果、そこに現れたのは今日のプログラマが備えるべき重要なスキルを鮮明に伝える原典の姿でした。
このブログエントリがきっかけでご興味を持たれましたら、是非書店でお手にとっていただければと思います。
テスト駆動開発にたくさんのものを教わってきた者としては、新訳版『テスト駆動開発』を多くの方にお読みいただき、 TDD の本来の姿を多くの方に知ってもらえれば、これ以上の幸せはありません。
新訳版『テスト駆動開発』を、何卒よろしくお願いします。