内製開発チームがリファクタリングで得られた3つのこと
こんにちは。私は、エンジニアリンググループの田邊と申します。
HR OnBoardというエン・ジャパンの離職リスク可視化ツールの開発をしています。今回は、HR OnBoardのプログラムをリファクタリングした話を書いていきます。
こんな人に読んでほしい!
・エン・ジャパンのHR OnBoardというサービスの裏側(システム)を知りたい人
・リファクタリングしたいけど、悩んでいる人
まとめるとこんな感じです!
・リファクタリングすると『品質向上』『機能追加の容易性向上』『開発スピード向上』につながるという話です。
HR OnBoardとは?
HR Onboardとは企業の人事向けに提供する「社員の離職リスク」可視化のサービスです。早期離職を防ぎ、定着・活躍してもらう為に、月に一度のアンケートを通じて、入社者の状況や離職リスクを可視化することができます。エン・ジャパンの掲げる「入社後活躍」というビジョンの実現のために、とても重要な役割を担うプロダクトです。
大きくは以下の機能で構成されています。
・月次アンケート機能
・1年後活躍アンケート機能
・上司向け通知機能
他にも多様な機能を用意しています。詳細は公式ページにも書いてあるので、ぜひリンクを参照していただければ。
▼ HR OnBoardの公式ページ
https://on-board.io/
HR OnBoardの歴史
HROnboardは、立ち上げ当初エン・ジャパンの社外でシステム開発を行いました。2017年にサービスが開始されて、2018年にエン・ジャパンの内部でも開発できるよう体制の見直しがあり、私は2019年このプロジェクトに参画しました。年表にすると以下の通りです。
2017年11月 :外注でシステム開発・リリース
2018年6月 :内製開発開始、外注と内製の両方で開発
2019年10月 :田邊が参画
HR OnBoardで発生した問題
元々外注だったシステムということで、私が参画したときは外注先と一緒にシステムの開発を行っており、お互いに違う機能を別々に開発している状況でした。そうすると、ソースコードはだんだんと複雑化してきました。
社内と社外でお互いに機能追加されていきサービスとしては進化していったのですが、一方ソースコードは難読化するということが続いていました。
リファクタリングしようぜ!
この状況を改善するため、2020年のはじめにHR OnBoardの大規模リファクタリングが計画されました。内容としては以下の3点です。
1. ソースコードの刷新
0からの作り直しました。
2. プログラムのバージョンUP
ロングタームサポートのバージョンへ変更しました。
3. 機能の追加
メール送信の重要な機能について裏側を大幅に変更しました。
難易度の高さにプレッシャーを感じつつも、完成後を想像しながら楽しく取り組もうと心がけました。
リファクタリングのスケジュール
2020年6月頃 技術調査・開発環境の構築・実装
私を含めた3人のエンジニアで、リファクタリングでやることの洗い出しや技術検証を行い、さらに新しいテスト環境の構築を開始しました。
2020年7〜8月頃 単体テスト・シナリオテスト
新人エンジニアが参画。4人体制になり、単体テスト実施、シナリオテストを通して最終確認を行いました。また新人のエンジニアが大活躍し、シナリオテストの自動化へ取り組み、早期にバグを発見することができました。
▼ シナリオテスト自動化ツール『cypress』
https://www.cypress.io/
2020年9月15日 リリース
そしてついに本番環境にリリース完了。
無事プロジェクトを完遂することができました。
リファクタリングで得られたこと
今回のリファクタリングの経験で得られた3つのよかったことが以下です。
1. 品質向上
ソースコードを手の内化したことによって機能の全容を把握しドキュメント化を行い、ソースコードのレビューやテスト観点表作成を行い品質を担保するようにしました。
具体的には、『機能のドキュメント化』『コードレビュー文化の定着』『テスト観点表の作成』について取り組みました。
機能のドキュメント化
Confluenceというドキュメント共有ツールを使って、開発手順や機能の詳細を落とし込みました。開発のためのテンプレートも予め用意されており、使いやすかったので、おすすめです。
▼ Confluenceの公式ページ
https://www.atlassian.com/software/confluence
コードレビュー文化の定着
Githubでソースコードを管理してましたが、社外・社内ともに自由にソースコードを更新できるようになっていました。なので、そこに制限をかけ絶対に1人では完結させないような仕組み作りをしました。
テスト観点表の作成
今回、品質をあげるため今まであったテスト仕様書の見直しを行いました。まず仕様書を作成する前の観点表を書籍などを参考にして作成しました。
その観点表から、HR OnBoardではどのようなパターンを実施すべきか検討・精査してテスト観点表の作成を行いました。
▼ 参考書籍:知識ゼロから学ぶソフトウェアテスト
https://www.amazon.co.jp/dp/B00HQ7S5CA/
2. 機能追加の容易性向上
プログラム言語のPHPとフレームワークのLaravelのバージョンを上げたので、少ないコードでプログラムが書きやすくなりました。
例えば以下のような形です。
リファクタリング前
$this->theme->of('xxxxxx', $data)->render();
リファクタリング後
view('xxxxxx', $data);
一見すると、そんなに短くないと思われるかも知れないですが、
こちらの記述は頻繁に使い、リファクタリング前でも約50個ほど同じ記述がありました。この部分を書き換えることで、今後機能追加する場合も短いコードでかけるので機能追加が大分楽になりました。
3. 開発スピード向上
リファクタリングした結果、社内だけで開発が完結するようになったので、コミュニケーションがより円滑&スピーディに出来るようになりました。
今までのフロー
・開発
・社外の開発とで影響を確認
・機能がバッティングした場合作り直し
・通しで最終動作確認
・リリース
今までは、上記のようなフローで開発していました。
しかしリファクタリングを行い社内だけで開発できるような体制となった為、フローが変わり以下のように変化しました。
リファクタリング後のフロー
・開発
・社内で最終動作確認
・リリース
結果、確認手順や手戻りが減ったので、開発スピードが上がりました。
これまで機能追加の度に慎重になっていた部分も確認がスムーズになり、より素早い開発が可能になりました。リファクタリングが完了してまだ1ヶ月程ですが、効果が出てきています。
まとめ
リファクタリングする前は品質よりスピードを意識した開発になっていました。しかし、可読性の低いソースコードに疑問を持ち、開発効率・品質の問題をリファクタリングによって解決することができました。結果、品質向上・機能追加の容易性向上・開発スピード向上へと繋がりました。
エンジニアにとって、手を上げればリファクタリングできる環境は新しい技術を身につけるチャンスが得られる良い環境だと思っています。
最後に宣伝
前回のnoteにも記載していますが、Video Interviewというサービスもリファクタリングしています。エンジニアにとって、リファクタリングができるということは新しい技術を身につけられる良い会社だと思っています。
▼ Video Interviewのリファクタリングのnote
https://diginote.en-japan.com/n/n0dd17e612cb3
ぜひともエンジニアのみなさん一緒に働きませんか。
私達は一緒に働けるエンジニアを募集しております。
▼ エン・ジャパンのエンジニアを募集しているサイト
https://eh-career.com/job/j-110989/