Findy Engineer Lab

エンジニアのちょい先を考えるメディア

「テスト書いてないとかお前それ〜」が私の代名詞になるまで。テスト駆動開発とともに歩んだキャリア

日本におけるテスト駆動開発の著名人といえば誰か?

この問いを投げかけられたとき、多くのエンジニアが思い浮かべる人物がいます。ITコンサルタント・ソフトウェアエンジニアの和田卓人(@t_wada)さんです。和田さんは日本のテスト駆動開発の第一人者として、長年、この分野の実践や講演・執筆などの普及活動を続けてきました。

こう書くと、読者のなかには「和田さんはもともとテストが好きだったから、テスト駆動開発の第一人者になれたのでは」と思われた方もいるかもしれません。しかし、その答えはNOです。むしろ和田さんは、テストが嫌いなエンジニアだったといいます。ある出来事をきっかけとして、嫌いだったテストを好きになれる方法を見つけたのです。

読者の方々にも「自分には○○なんて向いていない」という印象を抱いている技術領域があるかもしれません。ですが、そんな領域にこそ、あなたの新たな可能性が詰まっているかもしれないのです。和田さんの歩んだキャリアから、“自分が輝ける領域を見つけるためのヒント”を探っていきましょう。

*…取材はリモートにて実施しました。
*…記事サムネイルの漫画の作者は、ソフトウェアテストをわかりやすく伝える漫画『テスターちゃん』などで知られる松谷峰生(@mty_mno)さんです。

コミュニティでの出会いが、後のキャリアに影響を与えた

──和田さんとテスト駆動開発との出会いには、大学時代に参加した読書会が大きく影響しているのだとか。

私が読書会に参加し始めたのは2000年くらいでした。当時はオブジェクト指向プログラミングが流行しており、私の大学での研究テーマもソフトウェア工学とオブジェクト指向プログラミング。オブジェクト指向の専門書は難易度の高いものが多かったため、理解を深めるためにオージス総研が主宰する読書会に参加したんです。

読書会には第一線で活躍するソフトウェアエンジニアたちがたくさん集まっていました。彼らは、好きな技術に没頭していて、キャラが濃く、生き生きしているように見えました。世の中にはこんなに優秀で面白い人たちがいるのかと衝撃を受けたんです。

もっと技術のことを知りたくなり、読書会だけではなく他の勉強会や各種コミュニティのメーリングリストにも参加し始めました。すると、徐々に技術的なトレンドが理解できるようになってきました。学外のコミュニティを通じて、優秀なエンジニアの方々と出会えたことや技術的な知識を得られたことは、私のキャリアに大きな影響を与えてくれたと思います。

──当時はどのような技術が流行していたのでしょうか?

当時はオブジェクト指向プログラミングだけではなく、2000年に書籍『エクストリームプログラミング』の第1版が翻訳されて、アジャイル的な開発手法の波が日本にやってきていました。また、各種のソフトウェアパターンも徐々に普及していた時代です。

その後、大学を卒業した私は受託開発のプログラマとしてキャリアをスタートします。いくつかのプロジェクトを経験した後、2002年には公共システムの開発プロジェクトに携わりました。

同年、技術イベントのJUnitに関するセッションに参加したことがきっかけで、私の師匠のような存在である、まさーるさん(編注:石井勝氏*の通称)に出会います。対面で遭遇したのは初めてだったものの、私は以前からまさーるさんの運営する技術サイトをよく訪問しており、存在を知っていました。会場でお名前を伺ったとき「あの、まさーるさんか!」と本当に驚きましたね。

まさーるさんはイベント後もメールやブログ、SNSなどで質問に答えてくださったり、文章やコードをレビューしてくださったりして、私に多くのことを教えてくださいました。テスト駆動開発との出会いも、まさーるさんに影響を受けています。

*…石井勝氏は、1990年代後半から2000年代前半の日本における、オブジェクト指向プログラミングや自動テスト、テスト駆動開発、アジャイルソフトウェア開発の啓蒙において大きな役割を果たした人物。

あれから 10 年。まさーるさん(石井勝さん)を偲ぶ。 - t-wadaのブログ
和田さんは石井氏について自身のブログで言及している。その記述からは、石井氏から受けた影響の大きさや感謝の気持ちの強さが伺える。

深夜バスで夢中になって読んだ『テスト駆動開発』

──石井さんからはどのような形で、影響を受けられたのですか?

順を追ってお話しすると、公共システムのプロジェクトに携わった数年間は労働時間の長かった時期でもありました。出社時は電車で出勤しますが、深夜まで残業をするので帰るころには終電が終わっていて、夜行バスを使うんです。忙しくてなかなか勉強会に参加できなくなっていたため、もっぱら通勤時の移動中が勉強時間でした。帰りの夜行バスの車内は暗くて本を読めませんから、ノートパソコンを開いて勉強していました。

そんなある日、ケント・ベックが執筆中の書籍のレビュアーを募っており、原稿のWordファイルをメーリングリストで公開していることを、まさーるさんから教えてもらったんです。この原稿こそ、後に出版される名著『Test-Driven Development: By Example (邦訳: テスト駆動開発)』でした。

私は夜行バスのなかで、ケント・ベックの生原稿を写経(コードを書き写しながら読み進めていくこと)していきました。衝撃的な出会いでしたね。テスト駆動開発という概念が生まれる瞬間をほぼリアルタイムに体験できたことは、私のキャリアに大きな影響を与えてくれました。

リモート取材中の和田さん

──なぜ、それほど大きな衝撃を受けたのでしょうか?

当時の私は“完璧主義の呪い”にかかっていたんです。システム開発とは、完璧な設計を行い、その設計をコードに落とし込むプロセスであると考えていました。逆に言えば、良い設計ができない限り良いシステムは開発できないという、強迫観念が非常に強かったんです。

しかし、ケント・ベックが『テスト駆動開発』で教えてくれたのは、ボトムアップ設計でした。複雑なものを複雑なまま設計するのではなく、まずシンプルで責務が明確なコンポーネントをつくる。それらのコンポーネントを組み合わせることで、複雑性に対処するというのがボトムアップ設計の世界です。

これは大学のときに学んだUNIX哲学にも通じています。UNIX哲学とテスト駆動開発という、一見すると異なる概念のようにも思える両者が、実は近しい概念のもとに成り立っていることを知ったわけです。テスト駆動開発の考え方が、私にかかっていた完璧主義の呪いを解いてくれました。

余談ですが、私にとってテストを書くことは趣味と実益を兼ねています。私はもともとテストがあまり好きではありませんでした。より正確に言えば、コードを書いた後に、人間がシステムを操作して検証する作業が好きではなかった。面倒くさいし、面白くないと感じていました。しかしJUnitなどを用いてテストコードを書けば、大嫌いなテストを大好きなプログラミングで実現できます。自動テストを知ったときは、なんてすごいんだと感動しましたね。

“テスト駆動開発の第一人者”として認知されるまで

──その後、和田さんがテスト駆動開発に関する執筆・講演活動を始めたのはなぜですか?

公共システムのプロジェクトを終えた後、学生時代に勉強会などで関わりのあった方々から声がかかり、私は永和システムマネジメントのシステム開発を手伝うようになりました。

参画していたのは、角谷信太郎さんが率いる開発組織「チームかくたに」です。エクストリームプログラミングを開発手法として取り入れ、ペアプログラミングやテスト駆動開発を実践しているチームでした。「チームかくたに」では定時に仕事が終わるので、私はふたたび、さまざまな勉強会に参加できるようになりました。

チームへの参画と時を同じくして、和田さんはブログでの情報発信を始める。「チームかくたに」の初期メンバーは有名な技術ブロガーばかりだったため、「自分もブログを書かなければ」という思いを抱いたという。https://t-wada.hatenadiary.jp/archive/2004/7?page=4 には、当時の投稿が残されている。

そんななか、ある出来事が起こります。月に一回のペースで開催されていた読書会で、ある本を読み終えた後、次に読む書籍の候補がなくなってしまったんです。会を中止にするのも惜しいですから、次の本が決まるまでの間、読書をする代わりに私を含む何名かが登壇して、技術的なノウハウを発表することになりました。

私はJUnitについての発表をしましたが、それがなかなか好評でした。翌月・翌々月も読む本が決まらなかったため、私が連続して登壇し、テスト駆動開発とリファクタリングについての発表を行いました。ありがたいことにいずれも評判が良く、私の知識は世の中にニーズがあるんだと気付きました。

また、その講演を聴いた方が、技術評論社の稲尾尚徳さんという編集者と知り合いで、稲尾さんに私の講演のことを紹介してくれたんです。発表内容を気に入ってくれた稲尾さんから打診があり、雑誌『WEB+DB PRESS Vol.35』にテスト駆動開発の特集記事を書かせていただくことになりました。

雑誌への寄稿をするとブランディングに絶大な効果があります。徐々にテスト駆動開発の第一人者として認知していただけるようになりました。有名になるとさらに講演や執筆の依頼が舞い込み、仕事を成功させるとますますブランディングに効果があるという、好循環が回る状態になりました。

イベント登壇時の和田さん

──さまざまな活動をしてきたと思いますが、特に和田さんにとってターニングポイントになった出来事はありますか?

2009年に、テスト駆動開発をテーマにした「TDD Boot Camp」というイベントの立ち上げを行ったことでしょうか。テスト駆動開発について、座学だけでなく、実習形式で手を動かして体得することを目的とするイベントです。技術が好きな仲間たちと1日を通して学ぶことで、コミュニティとしての結束力も高まり、大きな成功体験が生まれるんです。

東京で第1回のイベントを開催したところ、大勢の人が集まり大盛況でした。もともとは単発イベントのつもりでしたが、第1回に参加された方が「面白いイベントだから、自分の地元でもやってほしい」と言ってくださり、第2回は北陸で開催しました。第2回も非常に好評だったので、そこから名古屋、九州とつながり、日本各地で同様のイベントを開催するようになったんです。

イベントを続けるなかで、同じ志を持った大勢の仲間ができました。本当に嬉しかったですね。「TDD Boot Camp」を立ち上げて活動を続ける過程で、テスト駆動開発を世の中に伝えていこう、このムーブメントを日本中に広げていこうという意識が、私のなかに芽生えていきました。

キャリアのターニングポイントになった出来事としてもうひとつ、和田さんはTDD Boot Campの立ち上げ以外にも「Power Assertが多くの方々に使われるようになったこと」を挙げてくれた。Power Assertは和田さんが作成したオープンソースのJavaScriptテスティングライブラリで、Alibabaグループなど世界中の企業で採用されている。「コードを書くことで自分の思う“良いテストのあり方”を世界に示せたのは、プログラマとして感慨深かった」と和田さんは語る。

ライオンのアスキーアートはナマハゲや妖怪のようなもの

──和田さんといえばライオンのアスキーアートが有名です。

ああ、これですね(笑)。

ちなみにアスキーアートの作者はもちろん私ではなく、実は日本Nodeユーザー会会長の古川陽介さんです。とあるイベントで古川さんと私が順番に登壇する機会があったときに、古川さんが登壇資料の最後にジョークとして、2ちゃんねる発祥のアスキーアートを改変したこの画像を忍ばせていたんですよ。インパクトが大きかったのか、その後さまざまな場所でこのアスキーアートが使われるようになりました。

──自分自身を示すアスキーアートが流行したことを、どのように感じていますか?

ライオンがいわば私の分身として機能したことで、良い点も頭の痛い点もありました。良い点からお話しすると、ネットミームとしてライオンが流通したことで、テストを書くことへの意識づけが行われたことです。言うなれば、このライオンはIT業界におけるナマハゲや妖怪のような存在なんですよね。「テストを書いていないと、t-wadaが来るぞ」という。教育や啓蒙の装置としては、ライオンは有効に機能してくれたのではないかと思います。

一方で頭が痛いのは、このアスキーアートが、テストを書く文化を推進する人々は高圧的であるという印象を与えかねないことです。教育的効果と怖さが表裏一体になっているわけです。一種の怖さが伴っているからこそ、ナマハゲや妖怪のような形でネットミームとして流通したわけですから。

また個人的な影響としては、人々が私に対して抱く印象が変わりました。ライオンのイメージの擦りこみがあるので、テストを書かなければ私が怒ると思っているんですよ。そんなことは全くないのに。私のことをよく知っている人は理解してくれていますが、私はかなり温和な人間で、怒ることなんてほとんどありません。

私は複数企業の技術顧問として、新卒プログラマーやインターンの学生さんなど、様々なプログラマとペアプログラミングをすることがあるのですが、ペアになる相手が初対面であっても私のことをこのアスキーアートを通じて知っており、どこか怯えているんです。一言目に「すみません。私はこれまでテストコードを書いたことがありません」と謝罪してきたりします。申し訳ない気持ちになりますね。パブリックイメージと実態との乖離が進んだのは、予想外でした。

──ネットミームの影響力は大きいですね。

とはいえ、ライオンのアスキーアートがテストを書く文化を広めてくれた面はあるでしょうから、結果的に見れば良かったのだろうとは思います。

長く深く向き合い続けることで、技術は身体の一部になる

──和田さんは長年にわたりテスト駆動開発の普及活動を続けてこられました。なぜ途中で飽きることなく活動を継続できたのだと思いますか?

まずは、私が飽きっぽくないタイプだからですね。エンジニアにはいろいろなタイプの人がいます。面白そうな技術にどんどん手を出して学習しては次にいくタイプもいれば、そうでないタイプもいる。私は「これは世の中を変える技術だ」と確信できるゲームチェンジャーには積極的に手を出すものの、それ以外の技術に関しては、概要を掴んだ後は静観するところがあります。

その意味では、テスト駆動開発はまさに「これだ!」と確信できるような技術でした。私がコツコツと特定の何かと向き合える性格だというのは、続けられる理由のひとつだろうと思っています。私はいまでもテスト駆動開発に飽きていないんですよ。

それから、普及活動を続ける過程でたくさんの仲間に出会えたからですね。「TDD Boot Camp」の立ち上げ以降はその傾向が顕著です。新しい仲間と出会い、情熱を共有して活動を大きくしていくと手応えを感じますし、モチベーションにもつながります。

私自身が若いころにコミュニティの方々に助けられましたし、技術のさまざまな可能性を教えていただきました。今度は私たちの世代が、新しく業界に入ってくる人たちに恩送りとして何かを伝えていくべきなのではないかと思っています。

──活動初期と現在とで、テスト駆動開発の普及度は変わったと思われますか?

狭義のテスト駆動開発はまだまだ普及できていないものの、広義のテスト駆動開発はかなり普及したと感じています。前者はつまり、プログラムの実装前にテストコードを書いて、そのテストコードに適合するように実装とリファクタリングを行う、そのステップを繰り返していく方法のことです。私がケント・ベックの書籍から学んだ、原義的なテスト駆動開発ですね。

しかし、自動テストが普及するに伴って概念の希薄化が起きました。現在では、自分の書いたコードに対してテストコードを書くことをテスト駆動開発と呼んでいる方も、一定数いらっしゃるんです。これが広義のテスト駆動開発といえます。

もしかしたら、私は原理主義者で狭義のテスト駆動開発しか認めないと思われているかもしれませんが、そんなことはありません。たとえ概念の希薄化が起きたとしても、テストコードを書く人が増えて開発プロセスを改善する足がかりになれば、それでいいと考えています。たとえ原義どおりではないとしても、テストによって間違いなく世の中が良くなっているわけですから。

──最後に、和田さんにとってのテスト駆動開発のように、エンジニアが特定の技術領域と長く向き合い続ける意義を教えてください。

技能が洗練されることです。長く深く取り組み続けることで、その技術はいわば身体の一部になります。同じ道具や方法論でくり返し経験を積んでいくことで、量稽古ができますよね。量は質に転化します。質とは何かというと、技術者においては“設計の判断力”ということになると思います。

経験が洗練を生み出し、自分の設計に自信を持てるようになるわけです。長く活動していく過程で、成功と失敗の両方を経験しながら改善を続けられる。これは、特定領域と長く向き合うからこそ習得できるスキルだと思います。

取材・執筆:中薗昴