dodaの技術負債を解消する守りのリファクタリングと攻めのリアーキテクティング / パーソルキャリア
dodaの技術負債を解消する守りのリファクタリングと攻めのリアーキテクティングというタイトルで発表させていただきます。
まず、自己紹介です。私は斎藤悠太と申します。略歴としましては、Sirや事業会社での開発を経験して、2020年にパーソルキャリアに入社しています。現在はdodaの開発に関わっていて、得意な領域は、サーバーサイドからインフラ領域です。言語的なところでいうと、Javaであったり、インフラ周りはAWSを使うことが多いです。
まず、dodaの課題を共有いたします。こちらの図は、ユーザーのシステムを簡略化して表したものです。
利用者がdodaにアクセスすると、エンドポイントによって2つのシステムのいずれかにリクエストが割り振られます。求人系のエンドポイントであれば、求人系のシステムにリクエストされてDBに接続してデータを返します。ユーザー情報系のエンドポイントであれば、ユーザー情報系のシステムにリクエストされて、内部のビジネスロジック用のAPIに接続して、更にC#のシステムに接続したり、あとDBに接続してデータを返却するようになっています。
ここでの課題は大きく3つあります。まずは開発の生産性が低いという課題があります。例えば、ローカルで開発する際に幾つかのシステムを起動する必要があって、時間が掛かったり、内部のロジックが複雑になっていて可読性が低いなどの問題があります。
MPAによるユーザーへの価値提供については限界を感じていて。HTMLを生成したり、JQueryでフロント操作をしたりしているのですが、コードを汎用的に使えず、それぞれの画面で似たような処理を書いていたり、フロント側に処理を寄せすぎていて、CSSを発生させたりすることで、操作性が悪くなっていたりします。
インフラ領域では、EC2でサーバーを立てていますが、イミュータブルではないのでスケールするのが大変だったり、ミドルウェアのバージョンアップに時間がかかったりします。
そこで私達はこの右の図のようなアーキテクチャを作成して移行することにしました。元々、複数のシステムが絡み合って複雑になっていたものを、フロント領域とバックエンド領域に分けて、それぞれ一つずつのシステムにしようとしています。
同時に、システムの中も技術負債を生みにくいシステムにすることで、技術負債を解消しようとしています。ただし、全ての機能を移行するには時間もかかるので、当面は既存の左側のシステムも修正する必要があります。そのため、この既存のシステムについてもリファクタリングを行う必要があります。なので、私達は既存の領域に対してはリファクタリングをしつつ、新しい領域に対しては新しい領域に移行していくということを進めています。
今回は、それぞれを守りのリファクタリング攻めのリアーキテクティングという観点で、ご紹介します。
まずは守りのリファクタリングです。既存システムの技術負債に対しては、2つの方針で取り組んでいます。一つは既存のコードをより悪化させないこと。もう一つはリファクタリングをしたい時にできる状態を作ることになります。
具体的な取り組みをご紹介していきます。取り組みの一つとしては、SonarQubeを導入しました。SonarQubeは、システムの品質を価値可視化することができますが、これによって費用対効果が高い部分のリファクタリングを優先して行えるようになりました。
この左のキャプチャーが特定領域のコード品質を評価したものになります。この丸が左下にある程、品質が良くてテストが書かれているコードです。反対に右上にあるほど、品質は低くてテストコードも書かれていないみたいなことになっています。
この右上の行動に対して、リファクタリングを行っていくことが効果的だということが判断できるということになります。また、リリースの都度新しく追加されたコードに対して品質をチェックしていて、もし品質が基準値以下のコードが見つかった場合には、リファクタリングを行わなければいけないというようなフローを作成しました。
この右側のキャプチャーが問題が見つかった例になっていて、ここでフェイルが出ていると思うんですけども、これが発生したらリリースしたものに対して、再度修正が必要になる運用フローになっています。これらによって、既存のコードを今以上に悪化させるっていうことを防いでいます。
守りのリファクタリングのもう一つは、テストコードの定着化です。これまでのdodaは、テストコードを書く文化がなくて、多くは手動でテストをしていたんですけども、リファクタリングをするにはテストコードは不可欠だと考えています。そのため、まずはテストコードを文化として定着させたいと考えてCIを設定しました。
これによってテストコードに失敗する場合は、ビルドデプロイさせない仕組みを作ったことで、プロダクションコードと一緒にテストコードもメンテナンスしていかなければいけないという意識作りをしました。また、カバレッジを可視化することで、どのメソッドがどの程度テストで網羅できているのかを見える化して、テストを効果的に書ける状態を作成しました。
守りのリファクタリングは以上で、続いては攻めのリアーキテクティングをご紹介します。
まず、新しいアーキテクチャのAPI領域における具体的なシステム構成はこちらになっております。AWSのECSを利用して、コンテナでAPIサーバを動かしています。また、AWSの各種リソースについては、CloudFormationを活用してコード管理をしています。
これらによってインフラリソースからミドルウェアまで変更したい時には、コードを変えるだけですぐに変更できるような状態になりました。また、既存のシステムでは実現できていなかったオートスケーリングも導入して、余計なインスタンスを立ち上げ続けておく必要もなくなり、コスト管理が適切になりました。
CI/CD周りに関しては、対象ブランチにマージしたら自動でリリースされる状態を作って、Blue/Greenデプロイも行っているので、本番でもし問題が発生してもすぐ切り戻せるようになりました。
これらによっていつでもリリースできる仕組みを作れたので、ユーザーに価値を早く届けられるというような状態を作れたと思っております。アプリケーションの領域においては、クリーンアークテクチャを導入しております。これによって可読性を向上させて、またテストしやすい状態を作成しました。
JavaのLTSの最新バージョンである17をリリースされた直後から使っていたり、SpringBootの比較的新しいバージョンも利用しています。また、技術負債を増やさずに開発生産性を高める仕組みも構築しています。例えば、クリーンアーキテクチャを導入して、この図のように依存関係を整理して、このような形で作ってください。
進めてくださいという風にルールを作ったとしても、なかなかルールが浸透せずに守られなくて、結果的に流通負債が増えていくみたいなことは起こりやすいかと思うんですけども、今回のシステムではこれらのルールを守っていないコードがあれば、テストコードでエラーになるような仕組みが入れられたりしています。
こちらの詳細については、こちらの記事でご紹介しておりますので、ご興味があればご覧ください。このようにdodaは技術負債を解消するために取り組んできましたが、最後に今後dodaがどのようにしていきたいのかをご紹介いたします。
まずは新アーキテクチャへの移行を加速させていきたいと考えています。
今は、既存システムの開発は各スクラムチームが行っていて、新システムの開発は移行を専門とするプロジェクトチームにて実施していますが、この方法だと移行に時間がかかってしまいます。
そのため、今後は各スクラムチームでも新システムの開発に関わっていただいて移行スピードアップさせていきたいと考えています。
ただし、現状はアジャイルチームのメンバーが新しい技術やこれまでと異なる設計をキャッチアップする部分での課題があるので、移行プロジェクトを行っているチームを中心にして各アジャイルチームにスキルを引き継いで品質を低下させないような取り組みを進めていこうと考えています。
さらに進んだ未来としては、マイクロサービス化を進めていきたいと考えています。
現状のシステムは、一つのDBを社内のシステムも含めてさまざまなシステムが参照していることで、それぞれのシステムへの修正影響が出てしまうという課題があるため、各サービスごとにDBを作成してマイクロサービス化を進めることで、この課題を解消しつつ、開発生産性を高めていきたいと考えています。
ここはまだ検討中ではあるんですけども、実現に向けて動いていきたいと考えております。以上になります。ご清聴ありがとうございました。
– - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
齋藤 悠太 / パーソルキャリア株式会社
SIerや事業会社業務での開発を経験し、2020年9月にパーソルキャリアに入社。現在はdodaサイト開発に携わっている。好きな技術領域はJava、Spring、AWS。
パーソルキャリア株式会社
パーソルキャリア株式会社は、-人々に「はたらく」を自分のものにする力を-をミッションとし、転職サービス「doda」やハイクラス人材のキャリア戦略プラットフォーム「doda X」をはじめとした人材紹介、求人広告、新卒採用支援等のサービスを提供しています。グループの総力をあげて、これまで以上に個人の「はたらく」にフォーカスした社会価値の創出に努め、社会課題に正面から向き合い、すべての「はたらく」が笑顔につながる社会の実現を目指します。
– - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ミイダス Techについて
ミイダスでは、様々な技術イベントを開催しています。connpassやYouTubeチャンネルでミイダスグループのメンバーになった方には、最新の開催情報やアーカイブの公開情報が届きますのでぜひご登録をお願いいたします。
イベントページ:https://miidas-tech.connpass.com/
Twitter:https://twitter.com/miidas_tech
この記事が気に入ったらサポートをしてみませんか?