運用中のプロジェクトで、テストコード“ゼロ”から1年でカバレッジ90%を達成できた理由とは。
2014年6月にサービスを開始したなぞるRPG「ポコロンダンジョンズ」。
現在、累計ダウンロード数は1000万ダウンロードを越え、多くのユーザーの方に長く楽しんでもらえるサービス創りを目指し、日々運営している。
そんな「ポコロンダンジョンズ」のリリース当時は、不具合が多く、安定運用からはかなり遠い状態だった。そんな状況を打破するために、運用をしながらテストコード導入に踏み切り、1年でテストコード“ゼロ”から、カバレッジ90%に。どうやってテストコード導入を成し遂げたのか、「ポコロンダンジョンズ」のエンジニアリーダーを務める 塚原 裕也に話をききました。
「好き」だけで頑張り続けていた
テストコード導入前のプロジェクトの状況を教えてください。
リリース当時は、リリースに向かってとにかくまっすぐに突き進むのが正義だったんです。そもそも、当時はスケジュールなんてあってないようなものでした。開発メンバーは、「ポコロンダンジョンズ」が大好きだったので、良いアイディアを思いついたらすぐに開発を始め、その日のうちにリリースしようといった感じに、熱い気持ちのままに開発していました。
サービスが大好きなのはいいことで今も変わらないのですが、そんな状態だったので、不具合も多く、プロジェクトは安定していませんでした。大げさに言うと、触ると不具合が出るくらいの状態だったんです。動かさないとよく分からないし、どこに影響しているのかもよく分からない。まさに、「祈る開発」状態でした。不具合が出て、次の開発が遅れる悪循環の連続でしたね。そんなカオスな状態の時に朝会でスケジュールについて口論していたこともありました(笑)。今となっては笑い話ですが。
テストコード導入の経緯を教えてください。
当たり前のことですが、不具合を出すとユーザーの皆様は離れていってしまいます。私がグレンジへ異動し、ポコロンダンジョンズに参加したのは、ユーザーの方が減っていってしまいなんとかしなければというタイミングでした。プロジェクトに参加し、始めに思ったことは「とにかくサービスもスケジュールも安定化させたい。自信をもって、メンバーがプログラムをかけるようにしたい。」ということです。そのための1つの手段として、テストコードは絶対に導入したほうがいいと思っていました。
塚原 裕也(Tsukahara Yuya)
大学卒業後、サービスづくりに携わりたいと思い、エンジニアとして、Sier系のベンチャー企業に入社。2012年にサイバーエージェントグループのゲーム系子会社に入社し、モバイルゲーム、スマートフォンゲームの開発に携わる。2014年、グレンジに異動し、現在は、「ポコロンダンジョンズ」のエンジニアリーダーを務める。
テストコード導入時は、どんな体制でやっていたのですか?
テストコードのために、特別なチームや体制は作っていません。自分と同じプロジェクトから異動してきたメンバーはテストコードが当たり前の開発をしていたので、そのメンバーが中心となって進めていきました。
ポコロンダンジョンズの海外版の開発をしていたチームにテストコードのベースがあったので、それを逆輸入する形でスタートし、サーバーサイドエンジニア4、5名で運用しながらテストコードを増やしていきました。基本的にはTDDをやりたいので、新機能を実装する時は、まずテストコードを書いて、実装し、時間が余ったら、過去のコードにテストコードを書いていくというかたちで進めていきました。過去のコードに関しては、次はこういう機能を実装するはずだから、ここのテストコードは作っておいた方がいいね、と話してる中で適当に担当が決まる感じでした。特に一人すごくテストコードを書き進めてくれるメンバーがいて助かりました。
テストコードを導入するとスケジュールはどれくらい変わるものですか?
スケジュールは、実装の内容次第なので、このくらい変わりますとは言えないですね。テストコードを書いた経験がない方は、単純に余計に工数が必要になると思っていることが多いですが、実際はそんなことはないです。これまでは、デバッガーさんが、バグを見つけてくれて、そこを直すと別の不具合が出て、とフィードバックが繰り返されて、時間がかかってしまうことがありました。そういったつまらないフィードバックを減らすことができます。テストコードを書くのに時間は必要ですが、それは本来必要な工数だと考えているので、見積もりには必ず含めてもらっています。仕様変更があっても改修が早くできたり、開発がスムーズに進むようになりました。
運用しながら、テストコード導入をやり続けられた理由とは
テストコード導入にあたり、反発はなかったのですか?
最初は、今の状況じゃテストコードはかけない、工数がさけない。という感じで、反発はすごかったですね(笑)。
テストコードを書いたことがない人が多数だったので、他人が書いたコードを調べてテストコードを書くので時間がかかりそうというイメージと忙しさが先行し、導入が進みませんでした。
エンジニアだけでなく、プロデューサーやディレクターなどプロジェクトメンバーにもテストコードを書く意味を理解してもらえないと導入は難しいと思います。「テストコードを書くことで、不具合が出るかどうか分からない不安定なプログラムではなくなるので、安心して新機能開発に集中できる。」やテストコードを導入することでのスケジュール的なメリットなども伝えました。とにかくスケジュールに組み込むところから始めて、エンジニアには工数あげるから書いていいよと。
エンジニアにスケジュール的に難しいと言われた時はどうしていたんですか?
「何時間あればできますか?」と聞き、テストコード分を加味した見積もりをしてもらうようにしました。グレンジでは、必ずスケジュールの見積もりを担当者がするので、時間がないということだったら、テストコードを書く期間もいれて、スケジュールを組んでもらうようにしました。
見積もりをしてもらったら、「テストコード分のスケジュールも調整するので、やってください。」と伝えるようにしていました。癖がつくまでは、常に「テストコード書いてくださいね」と言っていました。それでもスケジュールの折り合いがつかずどうしても無理だった時は、テストコードは一旦なしで実装し、リリース後に書いてもらうように妥協することはありましたね。
テストコードの粒度は基本的には担当者に任せていますが、コードレビューの時にテストケースが足りていないなどを見るようにしています。
なぜテストコードをやり続けることができたのですか?
とにかく、たくさんの人に「ポコロンダンジョンズ」をストレスなく楽しんでほしかったんです。そのためには、バグをなくすためにテストコードを導入し運用を安定化させる必要がありました。
エンジニアには、とにかく自信をもって実装をして欲しかった。「テストを通ってるから、大丈夫です。」と不安に思わずに実装できた方が、絶対にいいものができるので。そして、エンジニアまわりが安定すれば、不具合を気にすることなく安心して新機能の導入ができる、新機能のおもしろさに集中できる、そういった状態を作りたかったんです。不具合は、ユーザーの方に迷惑をかけてしまいますし、メンバーも疲弊してしまいます。不具合が不具合を呼ぶという負のループを早い段階で脱しサービスのおもしろさづくりに集中したかったという思いが強いですね。あとは、「見積もり通りに終わらないので、今日は終わるまでやります」といった時間で解決しようとするという考え方も変えたかったんです。そういったいろんな思いがあり、テストコード導入を続けられたと思います。
工夫したことはありますか?
スケジュール調整やチームへの啓蒙以外だとカバレッジを日々メンバーみんなで意識できるように見える化していたことですかね。エンジニアは、数字が見えると残りを埋めたくなる人が多いというか、そういう人が「ポコロンダンジョンズ」チームにはいたので、どんどん埋めるのが楽しくなっていったんだと思います。
メンバーには言っていませんでしたが、導入時、目標を1年でカバレッジ80%としていたのですが(言わなくてもやってくれていたので)、初速がすごくよかったこともあり、結果90%までもっていくことができました。メソッド数にすると、3000メソッドくらいですかね。
メリットは聞くよりも実感が大切
テストコード導入後はどうなりましたか?
祈らなくてよくなりました(笑)。
よくなったことを上げればきりがないですね。生産性は確実に上がりました。
コードの改修がしやすくなり、途中で参加した人がコードの理解をするのが容易になったり、不具合が減るだけでなく、不具合察知が早くできるようになりました。直接的な理由ではないかもしれませんが、いろんなKPI数値も改善しています。
導入前は何が起きるか分からなかったので、実装後は実機でひたすら確認していたのですが、明らかに減りましたね。自分が行った改修がどういう影響を与えるかを把握できるので、工数見積もりもしやすく、工数自体も削減ができています。メリットを伝えるのは、説明だけではやはり難しく、体験してもらい実感してもらわないと厳しいので、テストコードを導入してから、メンバー皆が感じられる良い効果が出たのは、その後のカバレッジをあげるスピードにも影響が大きかったと思います。導入当初は考えられなかったのですが、今は書くのが当たり前になっていて、チームメンバー全員書かなきゃ不安みたいな状態になっています(笑)。
もしこれから運用中のタイトルが、テストコードを導入するとしたら、必要なことはありますか?
実行者の強い意志、諦めない強い心が一番大切だと思います。
通常、テストコードを書かなくてもリリースはできてしまうので、テストコードがない状態でプロジェクトインをしているサービスに後から導入するのは、かなり反発も多く大変です。開発ルールとして、入れ込み、1人ひとりがテストコードを書くことがクセになる状態に持っていくまで、絶対に「テストコードを書く」という強い信念を持つことが何よりも大切だと思います。あとは、プロジェクト内のスケジュールなどを調整する、うまい調整役になることです。
テストコード導入の次に目指すものは。
今後の、開発で目指すものはありますか?
サーバーサイドはカバレッジ100%を目指すとして、今後は、クライアントサイドで、テストコード導入を進めたいと考えています。もうすでに始めているのですが、コード数もサーバーサイドよりもかなりあることもあり、まだカバレッジも低いので、サーバーサイドと同じくらいのレベルにしていきたいと考えています。啓蒙は、サーバーサイドよりもさらに難しいのですが、こちらも地道にやっていきたいと考えています。世の中的にもクライアントサイドの話はあまり聞かないので、良い結果を出してモデルケースになれたらいいなと考えています。
あ、もちろんテストコード以外にもやろうとしてることは色々ありますよ(笑)。
チームメンバーに求めていることは?
エンジニアの仕事だけに留まって欲しくないと思っています。チームに行動指針があるのですが、その一つにチームメンバーと支え合うという趣旨の項目があります。バグなく開発し運用を安定化させることはもちろんなのですが、安定させることで空いた時間を仲間のフォローのために使う意識を持っておいてほしいと考えています。実際に今のメンバーはプランナーが大変な部分、自動化できることにチャレンジしたり、クリエイターの効率化にも着手できていたりと、普段から意識して働いてくれているので、本当に良いチームだなと思っています。
今後の抱負を教えてください。
「ポコロンダンジョンズ」は、2017年6月でiOS版が3周年を迎えます。伸び悩んだ時もありましたが、昨年は念願だったテレビCMを実施でき、良い結果もついてきて、チームの成長を感じられましたし、ようやく一つ壁を越えられたと思っています。ですが、残念ながらまだアプリランキング上位に常連として入っていけていないのが現状です。「ポコロンダンジョンズ」を誰でも知っているアプリにするために、これからも改善を重ねていき、今後1年でまたさらにステップアップしていけるように色々と仕込んでいきますので、期待していてください。
<「ポコロンダンジョンズ」とは>
スマートフォン向け新感覚パズルRPG。同じ色のパズルブロック「ポコロン」をなぞって主人公キャラクターと仲間のモンスターを移動させ、敵を倒し、ダンジョンを攻略していくゲームです。
2014年6月にiOS版、同年8月にAndroid版の提供を開始以降、ダウンロード数を伸ばし、3年目となる2017年6月現在累計ダウンロード数は1000万ダウンロードを突破しております。
公式サイト:http://pocodun.grenge.jp/