リファクタリング合宿レポート

こんにちは、2016新卒入社の平塚です。Capture EveryThingの略称である「CET」というプロジェクトに配属され、インフラと機械学習の間を日々奔走しています(翻弄されています)。

CETでは、サービス改善によるユーザーやクライアント企業への高付加価値の提供、およびそれによるCVR向上を目的とし、各種ログやトランザクションデータの収集・分析およびそれらを基にした開発を行っています。

チームでは

  • ビッグデータの収集を行うための基盤を構築・運用するインフラエンジニア
  • 収集されたデータを分析するデータサイエンティスト
  • 分析されたモデルに基づいて実装を行うアプリケーションエンジニア

が活躍しています。役割は明確に分かれているわけではなく、必要に応じて他の役割を担います。 過去記事はこちら

今回は、我々が行った「リファクタリング合宿」についてご報告したいと思います。

リファクタリング合宿とは?

一言で言えば、『新規開発禁止』の合宿です。

我々のチームでは、「基盤構築」「企画/分析」「開発」「A/Bテスト実施」「A/Bテスト評価」「本番運用」までを一気通貫して行います。

高速かつ継続的に案件を進めるために、CI/CD環境を整えるといったことはもちろん、良さそうな技術は積極的に取り入れ実際に使って良かった物を残す、といった方針で進めています。 その結果として、チーム内でベストプラクティスが固まってきたものの、それ以前に作られていた部分が技術的負債になってきていました。

「このライブラリがdeprecatedなんだけど元の担当がいない」

「いくつかある似たようなDockerのimageを統一したい」

「毎回手動でやっていたコンパイル作業を自動化したい」

「社内wikiの情報が散らかっててよくわからない」

「…」

「…」

「…」

「「「リファクタリングだ!!! 」」」

という経緯で、まとまった時間をとって既存部分の改修のみを行う合宿の開催が決定。

  • ベストプラクティスに統一することで開発の見通しをよくする
  • 負担となっていた作業を自動化することで開発を効率化する
  • 暫定対応になっていた部分をしっかり改修し、将来的な問題を未然に防ぐ

を目標としました。

いざ土善旅館へ!

ということで、千葉県の土善旅館にお世話になりました。 こちらを選ばせていただいた理由としては、

  • 開発部屋やプロジェクタ、ホワイトボードなどが充実した開発合宿プランがあったこと
  • すでに開発合宿の実績が数多くあり、無線LANなどインフラ面の心配がなかったこと
  • 東京からの距離がそこまで遠くないこと
  • 温泉があること
  • 猫がいること

ですね。猫かわいい。

Cat

合宿の流れ

1 日目

当日は生憎の天気(台風)でしたが、どうにか決行できました。 いつもの業務開始時間よりちょっと遅めに現地集合。

最初に無線LANのアクセスポイントとかを設定すれば、後は快適な開発空間。 タスクに各自もくもくと取り組みます。 マッサージチェアやクッションでくつろぎながら開発する姿も。

Code

近所を散策して昼食をとった後、帰って再びリファクタリング。 メンバー同士で協力しながら、終始途切れることなく集中して開発に取り組めました。 MTGで中断されないのっていいですよね。

そして夕食、非常に豪勢でした。地元のブランド豚や刺し身の特大舟盛り! 写真を撮ろうと思ったときにはすでに食べ終わってしまって、完全に失敗です。ぜひ現地でご賞味ください。

食後は卓球やゲームに興じる人もいれば、開発を続行する人もいたりと、かなり自由な感じで過ごしました。24 時間入浴し放題の温泉も忘れるわけにはいきません。

Play

普段の業務でなかなか時間の取れない、長期的な開発の方向性などについての議論も深めることができました。 個人的には、普段気になっていた文法や記述を先輩諸氏に多数質問できたのが良かったですね。 徹夜は効率が悪くなるので、健康的に早く就寝。

2 日目

「通勤時間 0 分によって、起床・即・開発が始められる!」とか主張していた自分は結局お布団で粘ってしまいましたが、先輩諸氏のカチャカチャ・ターン!で目が覚めました。 タスクの続きにもくもくと取り組みます。 お昼は気分転換に再び散策、1 日目とは別のごはん処へ。

そして戻って開発を続け、夕方に解散。各自そのまま家路につきました。

成果

散らかっていた諸々をかなりの程度、整えることができました。 具体的なところでは

  • 自動化されていなかったビルド作業をCIツールのDroneで行うように変更
  • 例外処理の不十分だったアプリケーションのエラーハンドリングを改善
  • バッチ実行システムをDockerベースに統一
  • 環境ごとに分かれていなかったアプリケーションを環境ごとに分離
  • つい忘れがちなREADMEの更新
  • やるやるといってやらなかった修正対応

などが挙げられます。

もちろん全て解決できたわけではないですが、直面していた多くの負債は解決、or解決の見通しが立つ段階に進めました。

何が課題で誰がやるべきなのか、というところの割り振りを前もってクリアにしておいた部分が大きかったです。 普段から、修正が必要な部分・やるべきだけどやれていないことなどをメモ代わりにまとめておいたおかげで、この点はスムーズに行えました。

また、開発リーダーによる適切な采配も重要なファクターです。 現地を訪れてからタスクの洗い出しを行っていたら開発がほとんど行えなかったことでしょう。

そしてこれらがなぜ可能になったかというと、本番環境で障害の類が発生しなかったこともありますが、何より土善旅館さんの快適な開発環境のおかげです。

今後の課題

1 泊だと短いよね、というのは全員共通の感想でした。せっかくのよい環境なのに移動にけっこう時間を取られてしまってもったいなかったです。

次に、タスクは消化できたものの、合宿ならではの活動を盛り込むことができませんでした。2 日あればペアプロ的な取り組みや、最終日の成果発表会などのイベントもできるかと思うので、これは次回に持ち越しです。

まとめ

以上、合宿レポートでした。 テーマをしぼった合宿もなかなかよいのではないでしょうか?

今後もこういった取り組みは継続的に行っていきますので、ご興味をもたれた方はぜひ弊社でご一緒に開発しましょう!

Mem