リクルートリファクタリングコンテストを開催しました

HOT PEPPER Beautyのアプリ開発チームでTechLeadをしている中里です。

こちらのブログで告知させていただいた通り、3/20にリクルートリファクタリングコンテストを開催しました。今回は当日の様子を紹介したいと思います。

リクルートリファクタリングコンテストとは

Main photo

リクルートリファクタリングコンテストは、HOT PERPPER BeautyのAndroidアプリを題材としたソースコードを、チームでリファクタリングしていき制限時間内でなるべくキレイなコードに書き換えていくコンテストです。

今回用意したソースコードは、HOT PEPPER Beautyのアプリを題材としつつも、その全てのコードをリファクタリングしようとすると仕様理解だけで時間が終わってしまうため、「サロン検索」「サロン詳細の閲覧」「サロンのブックマーク」という3つの機能に絞ったものにしました。

また、HOT PEPPER Beautyのアプリでは普段からリファクタリングに取り組んでいるため、今回の課題向けにあえてレガシーな書き方や危険な書き方に変更したものを用意しました。通信処理をHttpsURLConnection+AsyncTaskに書き換えてみたり、データベースをSQLiteOpenHelperで書き直してみたり、FragmentのViewをlazyで定義してみたりと、普段とは逆の頭の使い方をしたので、これはこれでちょっと面白かったです。

Slide1

また、様々なレベルの参加者がいる中で、いきなりコードを渡されても何をして良いか分からない場合もあると思ったので、GitHubのIssuesにあらかじめリファクタリングの指針をいくつか用意してみました。ただ、Issuesはあくまで指針として使うもので、コンテストは「様々なメンバーが、素早く、安全に改善していけるコード」に書き換えることを目的としました。

Slide2

また、最後に各チームから、どのような方針でどのようなリファクタリングをしたかを簡単に発表してもらいました。

リファクタリングにはハッキリとした正解がなく、Issueの解決数を競うわけでもないため、特に優勝といったものは決めませんでしたが、コンテストということで、コードの内容と発表結果に応じて、実際にHOT PEPPER Beautyを開発しているエンジニアが審査員賞を決める、というルールにしました。

当日の様子

当日は、12名の参加者が3人ずつ4つのチームに分かれました。また、各チームに1名弊社の現役エンジニアがメンターとして参加しました。

また、今回このようなイベントを開催するにあたり、新型コロナウイルスの感染拡大を防止するため、手洗いうがいの徹底、手指消毒剤の用意、マスクの配布を行いました。

最初に上記のルール説明をした後、約5時間のリファクタリングに取り組みました。今回は1人ではなくチームでリファクタリングするため、最初はどういった方針でリファクタリングしていくか、どこまでリファクタリングするか、役割分担はどうするか、といったことが話し合われていました。

  • エンジニアがスムーズに開発を始められるようにするために、一通りモダンな技術に書き換えていくチーム
  • 時間的に全ての画面をリファクタリングすることが難しいため、1つの画面に集中してリファクタリングし、残りの画面もそれにならって書き換えられるようにドキュメンテーションしておくチーム
  • バグは潰しつつも、手当り次第できることを素早くやっていくチーム
  • アプリ規模の小ささからあえてマルチモジュール化しないことを選んだチーム

など、チームごとに様々な特徴が見られて面白かったです。

方針が決まった後は、まずは変更が全体に及びそうな、パッケージ分割やマルチモジュール化に全員で取り組むチームが多かったです。ただそれでも、影響が全体に及んでしまうため、コンフリクトに苦しむチームが多かったようです。

その後は各チーム、それぞれのメンバーが自分でできるリファクタリングに真剣に取り組みました。皆さん集中しすぎて、ランチを食べたり飲み物を飲んだりするのを忘れるほどでした。

Refactoring

結果

冒頭でも書いた通り、コードと発表内容から、審査員賞を決めました🎉

Award

審査員賞の理由としては、モダンなライブラリへ一通り書き換えていたことに加え、マルチモジュール化していたこと、Kotlin Coroutines Flowも用いていたことなどです。

同じようにリファクタリングできていたチームがもう1つありましたが、実際にアプリを動かしてみるとクラッシュしてしまうことが分かりました。このチームも大変良くリファクタリングできていたのですが、リファクタリングという活動を通してバグを増やしてしまうのは良くないという理由により、僅差で前述のチームを審査員賞とさせていただきました。

また懇親会では、今回のリファクタリングコンテストをやっていく上で必要になりそうなモダンなライブラリの解説や、HOT PEPPER Beautyで実際に行われているマルチモジュール化の取り組みやパフォーマンス・チューニング事例の紹介、リファクタリングに役立つライブラリの紹介やリファクタリングをする上で指針となる指標の紹介などをLTとして発表しました。

Lt

まとめ

今回リファクタリングコンテストという聞き慣れない取り組みに参加していただいた方々、本当にありがとうございました。イベントを開催してみて、まだまだ改善点もありそうだなと感じました。

またどこかで、HOT PEPPER BeautyやAndroidに限らない題材で、リファクタリングコンテストが開催できたら嬉しいなと思っているので、もしその時は皆様の参加をお待ちしております。