はじめに
こんにちは、レバテック開発部でテックリードを担当している河村です。 私はレバテック全体のシステム設計を担当しており、今後の事業拡大に向けて、理想のシステムを目指して、技術的負債の解消などの推進を行っています。
レバテックはこれまで、マイクロサービス化を主体においた技術スタックの刷新を行ってきました。これからはユーザー体験、業務プロセス、技術的負債を含めて「痛み」となっている部分の解消を進めていき、プロダクトやサービスとしての最適解を探索していきます。 そこで、今回はレバテックのシステム課題である「分散されたモノリス」の状態から「日本一のデータとシステムを持つ事業とそれを支えるアーキテクチャ」を目指してどのようなことを行おうとしているのか、そこに合わせて新設されるCTO室がどのような活動を行うとしているのか、レバテックの現状と課題を踏まえてご紹介します。
CTO室が設立された背景
レバテックは現在、フリーランス・派遣・就転職、新卒の各領域を軸に様々なサービス・事業を展開しています。
※ 主なサービス、関わるシステム
- レバテックフリーランス、レバテッククリエイター
- ITフリーランスとしてのキャリアの可能性を広げるエージェントサービス
- レバテックキャリア、レバテックダイレクト
- 正社員としてのキャリアの可能性を広げる転職エージェント・スカウトサービス
- レバテックルーキー
- ITエンジニアを目指す学生の可能性を広げる就活エージェント・スカウトサービス
- レバテックプラットフォーム
- レバテックに登録いただいたITフリーランスのスカウトから、参画後の契約管理までを実現するプラットフォームサービス
- レバテックID
- サービスを継続して使い続けてもらうための根幹となる認証認可基盤システム
- 参考記事:エンジニアが事業戦略の実現のために認証基盤システムを構築した話
- 上記レバテックのサービスを支えるマイクロサービス群
レバテックは5年後、10年後の事業拡大に向けて、様々な事業展開を計画しております。
今までは営業とマーケティングの強みを生かして事業展開を行ってきましたが、今後は開発とデータを活用して事業展開を計画しており、開発とデータが強い組織・システムを構築しなければなりません。そのためにも、「日本最大級のIT人材プラットフォームの進化を支える」組織やシステムを構築する必要があり、ユーザー体験、業務プロセス、技術的負債の改善に向けて取り組んでいます。
レバテックの各サービス・事業を支えるシステムは上記のようになっています。 各システム間の連携や営業支援システム、外部サービスとの連携があり、レバテックに関連したレポジトリだけでも200個以上あり、大規模なシステムになりつつあります。
その中でもシステムとして最も課題としているのが「分散されたモノリス」のような状態(参考記事:What is 分散モノリス(Distributed Monolith))です。すべての機能がマイクロサービス化されているわけではないので、一般的な「分散されたモノリス」の状態というわけではないのですが、発生している問題としては近い状態です。
上記の図のようにシステムは各サービス・事業ごとに分散されています。ですが、この分散されたシステムは理想的な分割ではなく、既存システムの複製で作られたシステムであったり、人が増えたことにより出来上がったシステム、システムの本来の責務を超えた機能をもっていたりと理想のシステムとかなりギャップがある状態です。
そこで、「分散されたモノリス」となってしまっている原因として以下の問題があります。
- 密結合なシステム
- 人材や企業のデータも重複して保持している状態でかつDB直参照やバッチサーバ連携で行っているため、システムの追加や変更を意識して開発しなければならない
- 非構造化データの存在
- 文字列やEAVパターンを利用した暗黙的なリレーション構造が存在し、DBに格納される文字列を変更するだけでシステムの障害のきっかけとなり得る
- マスタデータ(職種やスキルなどのリファレンスデータ)の分散
- 各システムでマスタデータのIDや項目が異なり、マッピングをして連携や分析を行っている
上記の問題は2、3年前から顕在化していました。ですが、いきなりすべての問題に取り組むのは難しく、また、当時の技術スタックも古い状態で稼働していました。なので、まずは技術スタックの刷新やマイクロサービス化の導入から進めてきました(参考記事:マイクロサービス化を中心においた技術刷新とその狙い、レバテックの未来に向けた開発組織の取り組み)。技術スタックの刷新により、静的型付け言語であるTypeScriptをベースとしたシステムにすることができ、負債を貯めにくい・解消しやすい設計手法であるクリーンアーキテクチャやDDD(ドメイン駆動設計)の導入が行いやすくなり、計画的な負債の解消を進めやすい状態にすることができました。
今後は「分散されたモノリス」から「それぞれのシステムとデータが”独立化”し”疎結合化”された状態」を目指して、現在のTypeScriptをベースとしたシステムのリニューアルを行い、今後のレバテックを支える組織・システムを構築していきます。
つまり、今まで行ってきた「リプレース」を生かして、今後は「それぞれのシステムとデータが”独立化”し”疎結合化”された状態」に向けて「リファクタリング」「リプレース」「リニューアル」を計画的に進めていきます。
※ リファクタリング・リプレース・リニューアルの定義
- リファクタリング
- 現在のシステムをI/F(IN/OUT)やふるまいを変えずにコードを変更すること
- 例:MVCからレイヤードアーキテクチャに移行する
- 現在のシステムをI/F(IN/OUT)やふるまいを変えずにコードを変更すること
- リプレース
- 現在のシステムをI/F(IN/OUT)やふるまいを変えずに別のシステムに載せ替えること
- 例:PHPがベースで動いているシステムをTypeScriptベースのシステムに載せ替える
- 現在のシステムをI/F(IN/OUT)やふるまいを変えずに別のシステムに載せ替えること
- リニューアル
- 現在のシステムをI/F(IN/OUT)やふるまいを変えて、新しい価値を生み出すこと
- 例:システム・データの拡張性を向上させるため、ユーザー登録の仕組みや業務プロセスから改善を行う
- 現在のシステムをI/F(IN/OUT)やふるまいを変えて、新しい価値を生み出すこと
CTO室で実現したいこと
上記のレバテックにおけるシステム・データの課題を解決をリードしていくため、この度、CTO室を立ち上げることになりました。
大規模なシステムになってきたレバテックの関連サービスを支え、今後の事業拡大に向けて、総合的なアーキテクチャや設計が求められることになります。特に、最も難しいと考えているのが、今のレバテックにおけるユーザー体験、業務プロセス、技術的負債の中で最も「痛み」となっている部分の特定とその「痛み」の解消です。 すべての課題をいきなりすべて解消できる規模ではなく、今後の事業拡大を鑑みて、最も「痛み」となる部分を分析・特定し、経営や他職種を巻き込んで、この「痛み」を計画的に解消を進めていく必要があります。なので、ただ単純に技術的負債を解消を進めていくということではありません。現状のユーザー体験や業務プロセスを含めて最適解を探索する必要があります。
レバテックは現在、登録者数50万人、契約社数1万社を突破し、IT人材の2.5人の1人が登録するサービスになっております。上記の「分散されたモノリス」な状態を脱却し、レバテックにおけるユーザー体験、業務プロセス、技術的負債の中で最も「痛み」となっている部分を解消し、目指す先は「日本一のデータとシステムを持つ事業とそれを支えるアーキテクチャ」を作ることです。
「日本一のデータとシステムを持つ事業とそれを支えるアーキテクチャ」になるために上記のTobeのような状態が必要だと定義しています。つまり、データを軸にプロダクト/オペレーション/システム(Data→Product/Operation/System)を再設計していく必要があると考えています。
ここまでをまとめると、
- レバテックは5年後、10年後の事業拡大に向けて、様々な事業展開を計画している
- そのためには、「日本最大級のIT人材プラットフォームの進化を支える」組織やシステムを構築する必要がある
- 現在、組織・システムとして「分散されたモノリス」という状態の課題を抱えている
- 理想を「日本一のデータとシステムを持つ事業とそれを支えるアーキテクチャ」と定義
- そこに紐づくTobeを目指してレバテックを再設計していく
CTO室の今後
今後、CTO室は上記の課題から以下の軸をベースに強化していきます。まだまだ具体的な目標などは決められていませんが、以下を軸にCTO室の役割を拡大していけたらなと考えております。
- 事業戦略に紐づいたシステム戦略のリード
- テクニカルとドメインを掛け合わせたドメインの最適化
- 事業横断した組織・システムの最適化
- 開発者生産性の向上
事業戦略に紐づいたシステム戦略のリード
CTO室は、今後ますます事業戦略に連動したシステム戦略を主導する役割を果たします。この取り組みにより、技術戦略がビジネスの長期的な目標と一致し、我々の競争力を向上させ、新たな市場機会を探求します。「日本最大級のIT人材プラットフォームの進化を支える」組織やシステムを構築し、戦略的な成長を支えることを目標に進んでいきます。
テクニカルとドメインを掛け合わせたドメインの最適化
テクニカルな専門知識とビジネスドメイン知識を融合させて、ドメインの最適化に取り組みます。このアプローチにより、特定のドメインに特有の課題に対処するための優れたソリューションを提供します。そこで、レバテックの事業/開発双方の戦略及び戦術に基づく特定のテクニカルドメイン領域における信頼されるスペシャリストを多く輩出していき、新たな可能性を切り拓きます。
事業横断した組織・システムの最適化
CTO室は、組織とシステムを結びつけ、情報共有と協力を促進し、事業全体での最適化を実現します。これにはイネイブリング、SRE、QA、アジャイルCoEによる事業を横断した組織・システムの強化が必要です。冗長性の排除やリソースの最適利用、可観測性の向上により、より効果的に運営し、ビジネス目標の達成を目指します。
開発者生産性の向上
CTO室は開発者生産性の向上に注力します。新しいツール、プロセス、トレーニングを提供し、開発者がより効果的に作業できる環境を整備していきます。これにより、イノベーションが促進され、プロダクト開発をより支援できたらと考えています。 ゆくゆくはエンジニアが選ぶ「開発者体験が良い」イメージのある企業「Developer eXperience AWARD 2023」ランキング上位5にランクインに向けて取り組みを進めていきたいと考えております。
さいごに
これらの目標を達成するために、CTO室は積極的な取り組みを進め、テックカンパニーとしてより高いレベルの開発組織にしていきたいと考えています。現在、一緒にCTO室を推進していただけるエンジニアを募集しています!ご興味のある方はぜひこちらからご連絡ください!