Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ビズリーチにおけるリアーキテクティング実践事例 / JJUG CCC 2025 Spring

ビズリーチにおけるリアーキテクティング実践事例 / JJUG CCC 2025 Spring

2025年6月7日に開催された「JJUG CCC 2025 Spring」の登壇資料です。
https://ccc2025spring.java-users.jp/

▼関連資料
ユーザー数100万人規模の事業成長を止めずに、レガシーコードと戦う
https://speakerdeck.com/visional_engineering_and_design/jjug-ccc-2022-fall

-----
Visionalのエンジニアリングに関する最新情報はX、ブログで発信しています!📣

▼Visional Engineering Blog
https://engineering.visional.inc/blog/

▼VISIONAL ENGINEERING / X
https://twitter.com/VISIONAL_ENG

More Decks by Visional Engineering & Design

Other Decks in Technology

Transcript

  1. 菊池 信太郎
 
 2012〜 株式会社ニトリ
 • 店舗 / 物流でトラブルシューティングしたり、現場の改善を回したり 


    2014〜 SIer
 • 受託開発やSESで複数プロジェクト経験 
 • テックリード・PM・EMとして開発経験を積む 
 2018〜 株式会社ビズリーチ 
 • ビズリーチのtoBプロダクトを中心に開発 
 • EMとしてリアーキテクティングの推進、組織横断プロジェクトなどのリード 
 • 現在はプロダクト本部プラットフォーム統括部 統括部長
 2 自己紹介

  2. 8 ユーザー数100万人規模の事業成長を止めずに、レガシーコードと戦う / JJUG CCC 2022 Fall - Speaker Deck


    技術的負債が積み重なり、開発生産性が低下(2018年頃)
 JJUG CCC 2022 Fallでレガシーコードとの戦いについてお話しました。今回はその続編です。

  3. デリバリに過度なプレッシャー
 • 事業が急成長していると、技術的負債を生んでしまう意思決定が起こりやすい
 • QCDSのうちコスト、納期、スコープが固定されると品質が下がる
 密結合で凝集度が低いプログラム構造が原因でテストが書きづらい
 • プレゼンテーションロジックとドメインロジックがちゃんと分離されていない
 • API呼び出しやDBアクセスなど副作用がドメインロジックと同じ場所にあった


    • 度重なる変更でスパゲッティ化したコードは何をやってるのかを読み解くのも一苦労
 大規模プロジェクトを計画し、実行しきる組織力が不足
 • 過去これまでに何度か技術的負債解消プロジェクトは立ち上がってはいた
 • 短期間の課題解決能力は高いが、プロジェクトマネジメントの経験が浅い傾向があった
 9 レガシーコードの生まれた原因分析

  4. 10 現在進行系でプロダクトを改善中
 引用:Betsy Beyer, Chris Jones, Jennifer Petoff, Niall Richard

    Murphy『SRE サイトリライアビリティエンジニアリング』(オライリー・ジャパン, 2017)
 p.88「サービスの信頼性の階層」
 

  5. 11 現在進行系でプロダクトを改善中
 ①現状把握とプロセス整備から始め、緊急 度の高いリスクは応急処置 
 ④段階的な内部品質改善 
 ②ポストモーテムを通じた継続 的な改善サイクルの確立 


    ③自動化、プロセス、テスト、 QA の強化
 引用:Betsy Beyer, Chris Jones, Jennifer Petoff, Niall Richard Murphy『SRE サイトリライアビリティエンジニアリング』(オライリー・ジャパン, 2017)
 p.88「サービスの信頼性の階層」

  6. アジリティを獲得し、開発スピードと信頼性を上げるために、4つの観点から整理
 • 価値提供への集中
 • 透明性・検査・適応
 • 変化は機会
 • 失敗からの学習
 13

    アジリティを獲得するために考えるべきこと
 • 自動化による品質保証
 • テスト駆動開発 (TDD)
 • 継続的なリファクタリング
 • 知識の共有と品質向上
 • 柔軟なアーキテクチャ
 • 自己組織化チームの組成
 • 明確な役割と責任
 • 心理的安全性の醸成
 • ステークホルダーとの協調
 • 学習する文化の支援
 組織 技術
 • イテレーティブな開発
 • 継続的なフィードバック
 • フローの最適化
 • 価値に基づく優先順位付け
 プロセス マインドセット

  7. 「Explicitly define the context within which a model applies. Explicitly

    set boundaries in terms of team organization, usage within specific parts of the application, and physical manifestations such as code bases and database schemas. Keep the model strictly consistent within these bounds, but don't be distracted or confused by issues outside.」
 ― Eric Evans『Domain-Driven Design: Tackling Complexity in the Heart of Software』(Addison-Wesley Professional,2003)
 
 モデルが適用されるコンテキストを明示的に定義する。チーム組織、アプリケーションの特定の部分における使用、コー ドベースやデータベーススキーマのような物理的な表現など、境界を明示的に設定します。これらの境界内ではモデル の一貫性を厳密に保ちますが、境界外の問題に惑わされたり混乱したりしないようにします。
 19 参考:Bounded Context(境界づけられたコンテキスト)
 引用:Martin Fowler「martinfowler.com,Bounded Context」 (https://martinfowler.com/bliki/BoundedContext.html)

  8. 26 • 小さく書き直すことで、すぐに成果が出る 
 • 実際の成果を目にすれば安心するので、一気に書き換えるよ うな時間的プレッシャーやストレスを回避できる 
 • 書き直して新しくなった機能は、モダンアーキテクチャで機能

    改善を進めることができる 
 • お客様への公開が先になる場合は、フィーチャーフラグを使う ことでリリースとデプロイを分離できる 
 ビッグバンリライトを避ける
 ビッグバンリライト
 • リリースされるまで書き換えの効果を享受できない 
 • 競合他社に何年もの先行を許すことになる 
 • 大規模になるほどリスクと不確実性が増し遅延する 
 • 遅延するほど、チームへのプレッシャーは大きくなる 
 • 再構築の結果、元よりもさらに悪くなる可能性がある 
 
 参考: Martin Fowler「Maarten’s Newsletter,The Explosive Nature of 'Big Bang' Rewrites」
 (https://mdalmijn.com/p/the-explosive-nature-of-big-bang )
 段階的な書き直し
 継続的にビジネス成長させるなら、原則ビッグバンリライトは避けるべき

  9. 33 実際にCプロダクト / 採用企業向けプロダクトで実践したアプローチ
 1. 新デザインの企画
 2. 既存プロダクト全体へ最低限の変更で新デザインを適用
 3. 表層デザイン・情報設計を再構成し、新しいアーキテクチャで実装してリリース


    (グロナビの配置など、場合によってはCSSの適用難度が高い。弊社は力技でなんとかしました😇)
 デザイン負債を抱えているプロダクトの改善アプローチ

  10. リアーキテクティングの中でテストのあり方も変えていく必要がある
 39 テストピラミッドの段階的実現
 引用:「Move Fast & Don't Break Things 」―

    Google Test Automation Conference 2014
 (https://docs.google.com/presentation/d/15gNk21rjer3xo-b1ZqyQVGebOp_aPvHU3YH7YnOMxtE/edit?slide=id.g3f5c82004_8611#slide=id.g3f5c82004_8611)

  11. アジリティを獲得し、開発スピードと信頼性を上げるために、4つの観点から整理
 • 価値提供への集中
 • 透明性・検査・適応
 • 変化は機会
 • 失敗からの学習
 43

    アジリティを獲得するために考えるべきこと
 • 自動化による品質保証
 • テスト駆動開発 (TDD)
 • 継続的なリファクタリング
 • 知識の共有と品質向上
 • 柔軟なアーキテクチャ
 • 自己組織化チームの組成
 • 明確な役割と責任
 • 心理的安全性の醸成
 • ステークホルダーとの協調
 • 学習する文化の支援
 組織
 技術
 • イテレーティブな開発
 • 継続的なフィードバック
 • フローの最適化
 • 価値に基づく優先順位付け
 プロセス
 マインドセット
 再掲

  12. アジリティを獲得し、開発スピードと信頼性を上げるために、4つの観点から整理
 • 価値提供への集中
 • 透明性・検査・適応
 • 変化は機会
 • 失敗からの学習
 44

    アジリティを獲得するために考えるべきこと
 • 自動化による品質保証
 • テスト駆動開発 (TDD)
 • 継続的なリファクタリング
 • 知識の共有と品質向上
 • 柔軟なアーキテクチャ
 • 自己組織化チームの組成
 • 明確な役割と責任
 • 心理的安全性の醸成
 • ステークホルダーとの協調
 • 学習する文化の支援
 組織
 技術
 • イテレーティブな開発
 • 継続的なフィードバック
 • フローの最適化
 • 価値に基づく優先順位付け
 プロセス
 マインドセット
 再掲

  13. アジリティを獲得し、開発スピードと信頼性を上げるために、4つの観点から整理
 • 価値提供への集中
 • 透明性・検査・適応
 • 変化は機会
 • 失敗からの学習
 46

    アジリティを獲得するために考えるべきこと
 • 自動化による品質保証
 • テスト駆動開発 (TDD)
 • 継続的なリファクタリング
 • 知識の共有と品質向上
 • 柔軟なアーキテクチャ
 • 自己組織化チームの組成
 • 明確な役割と責任
 • 心理的安全性の醸成
 • ステークホルダーとの協調
 • 学習する文化の支援
 組織
 技術
 • イテレーティブな開発
 • 継続的なフィードバック
 • フローの最適化
 • 価値に基づく優先順位付け
 プロセス
 マインドセット
 再掲

  14. 47 「どんな悪いことが起こりそうか」を考えるのではなく、「すでに悪いことが起こってしまった」という前提で考える
 
 プレモーテムを実施する理由 
 • 「どんな悪いことが起こりそうか」を考える方法だと …
 ◦ 自分たちの計画の欠点を見つけることと同義

    
 ◦ 欠点がない方が優れているという評価・価値観と相反する 
 ◦ 楽観的になる(都合の良い解釈をしてしまう) 
 • 「すでに悪いことが起こってしまった」という前提で考えると …
 ◦ 後知恵が使える
 ◦ 原因を多く考えられた方が優秀 
 プレモーテム(死亡前死因分析)の実施

  15. アジリティを獲得し、開発スピードと信頼性を上げるために、4つの観点から整理
 • 価値提供への集中
 • 透明性・検査・適応
 • 変化は機会
 • 失敗からの学習
 50

    アジリティを獲得するために考えるべきこと
 • 自動化による品質保証
 • テスト駆動開発 (TDD)
 • 継続的なリファクタリング
 • 知識の共有と品質向上
 • 柔軟なアーキテクチャ
 • 自己組織化チームの組成
 • 明確な役割と責任
 • 心理的安全性の醸成
 • ステークホルダーとの協調
 • 学習する文化の支援
 組織
 技術
 • イテレーティブな開発
 • 継続的なフィードバック
 • フローの最適化
 • 価値に基づく優先順位付け
 プロセス
 マインドセット
 再掲

  16. • ソフトウェアエンジニア
 • エンジニアリングマネジャー
 • QAエンジニア
 • MLエンジニア
 • MLOpsエンジニア


    58 各ポジション絶賛募集中! 
 https://hrmos.co/pages/hrmos/jobs/3100100100963/apply
 カジュアル面談はこちらから Engineering Blog https://engineering.visional.inc/blog/

  17. 59