株式会社Odd-e Japanの開発エンジニアである金井 大輝は、ソフトウェア開発の「テスト技術」において、No.1を目指しています。
金井は「テスト=最終チェック」という通念を覆すべく、あえてその逆を行く手法にたどり着きました。大きな挫折経験を経て彼が見出した、テスト技術の本質に迫ります。
Odd-e Japanでは、全員がTDDで開発を進めています。彼らにとってそれは「呼吸をするようにテストを書く」日常です。先にゴール(テスト)を定義し、それを満たすコードを書くという、従来とは真逆の発想です。
金井は、人の習性として「つい汎用的につくってしまう」「臭いものに蓋をする」「自分の正しさを証明するためのテストを作る」の3つを挙げます。TDDはこれらへの強力な対抗策となります。
「テストファーストと自動テストにより、いつでもリファクタリングできる環境が整います。これにより『つくりすぎ』を防ぎ、常にキレイなコードを追求する『強気の開発』が可能になるんです。」
かつては大規模チームを率い、詳細設計と一括テストこそが正解だと信じていた金井。そんな彼がTDDに魅せられたのは、自らの観念を180度変えた、ある大きな「失敗」が理由でした。
管理会計システム開発の際、初週からスケジュールが崩れ始めました。金井は自信を持ってプロジェクトをリードし、綿密な設計をメンバーに伝えれば成功すると信じて疑いませんでした。しかし、作り込んだ汎用クラスや複雑なデザインパターンが足枷となり、理想通りには進みませんでした。
「結局1ヶ月の延期と3割の機能削減でリリースしましたが、納期を優先するために『自動テストを書かない』という負債を受け入れました。それは、将来の自分たちの首を絞める選択でした。」
達成感のないまま追加対応に追われるチームに、さらなる衝撃が走ります。「半年後に製品をクローズする」という通告。自分たちの苦労は一体何のためだったのか。
「システムの複雑性が増し、メンバーの手が止まることも多かった。時間をかけて幅広く機能を用意しても、結局お客様には使っていただけなかった。今考えると、本当にもったいないことをしました。」
「もう二度と不要な機能は作りたくない。」強烈な後悔を原動力に、金井はユーザーが求めるコア機能に集中するための手法——スクラムやアジャイルを真剣に学び始めたのです。
アジャイルの思想とそれを実現する技術の深さに惹かれ、金井はOdd-eに入社。即座に志願したCSD(認定スクラムデベロッパー)研修で、TDD、ATDD、リファクタリング、レガシーコード改善など、エンジニアとしてスクラムを実践するための核心的な手法を学びました。
「XP(Extreme Programming)の『創発的設計(進化的設計)』という考え方、そしてそれを実現するためのTDDという一連のプロセスとして学べたことが、何よりの収穫でした。」
「創発的設計」とは、初期設計よりもリファクタリングによる再設計を重視する考え方です。最小単位で開発・テストを繰り返し、顧客からこまめにフィードバックを得るスタイルに、金井は一気に夢中になります。
「例えば1+1をテストする時、最初に書く最小単位のコードは『ただ2を返す』だけの関数です。function plus(x, y) {return 2}。この極小のステップの積み重ねに、最初は本当に驚きました(笑)」
テストを先に書くことや自動化に対して、依然として「コストがかかる」と否定的に捉えられる現状があります。しかし金井は、その先にあるエンジニアとシステムの理想の姿を見据えています。
「長期的な視点に立てば、テストコードは『メンテナンスが保証された実行可能な仕様書』となり、属人性を排除した強固なシステムを構築できます。テストファーストが当たり前になれば、『なぜ作るのか』を常に意識するエンジニアと、技術的負債のないシステムが世の中の標準になるはず。まずは自分のチームから、そして志を同じくする仲間と共に、研鑽を積んでいきたいです。」
金井は、そう明るく語ります。
各種トレーニングについては
以下のリンク先よりお申し込みください。
「テストを単なる『最終確認』ではなく、『いかに変化に対応しやすい状況をつくるか』のための手段と捉え直したんです。顧客のニーズが刻々と変わる今の時代には、その視点が不可欠です。」