Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

一枚岩なレガシーシステムを ラクスルではどのようにRebuildしているのか?

1,649 views

Published on

ラクスルにおける技術負債解消の取り組みを紹介します

2018/11/29 yappli x RAKSUL 合同技術イベント 生まれ変わらNight -技術的負債からの一発逆転-
by Nobuhiro Nikushi

Published in: Software
  • Login to see the comments

一枚岩なレガシーシステムを ラクスルではどのようにRebuildしているのか?

  1. 1. © RakSul,Inc. All Rights Reserved. 一枚岩なレガシーシステムを ラクスルではどのようにRebuildしているのか? 生まれ変わらNight -技術的負債からの一発逆転 - ラクスル株式会社 二串 信弘 2018/11/29
  2. 2. © RakSul,Inc. All Rights Reserved. About me Nobuhiro Nikushi 二串 信弘   ● Works for RAKSUL INC. from 2017/3 ● Tech Lead in Raksul Platform Team ● Favorite Languages: Ruby, Golang, TypeScript, etc ● Private: English, Violin, 子育て Server-Side Engineer, Tech Lead in RAKSUL github: @nikushi twitter: @nikushi_jp
  3. 3. © RakSul,Inc. All Rights Reserved. About RAKSUL INC.
  4. 4. 「仕組みを変えれば、     世界はもっと良くなる」 VISION Better System, Better World
  5. 5. ファブレス型印刷/広告EC “ラクスル” 物流のUber “ハコベル” Business 印刷や物流といった伝統的な産業で事業を展開
  6. 6. 複数の産業を革新するBtoBプラットフォームを通じた持続的成長
  7. 7. ファブレス型印刷/広告EC “ラクスル” 物流のUber “ハコベル” 今日のスコープ 印刷のラクスルのシステムの裏側を話します
  8. 8. © RakSul,Inc. All Rights Reserved. Main Theme
  9. 9. © RakSul,Inc. All Rights Reserved. ● ラクスルにおける技術負債 ● Raksul Platform Projectでやっている技術負債解消のアプローチ ● 新しいRailsプロジェクトについて ● まとめ 今日の話
  10. 10. © RakSul,Inc. All Rights Reserved. エンジニア20名強、他プロダクトオーナ、エンジニアリングマネージャー、プロダクトマ ネージャーが在籍 チーム数: 4スクラム 技術スタック ● インフラ AWS (EC2, S3, RDS Aurora, etc)、一部GCP ● サーバサイド Ruby on Rails, PHP(Symfony, etc), Golang, etc ● フロントエンド Vue.js, Nuxt.js, jQuery, etc ※ ハコベル事業は含まない 現在のラクスルの規模感
  11. 11. © RakSul,Inc. All Rights Reserved. 開発の周辺環境 Chat Deploy/Ops Error Monitoring/Notification CI Stable Infrastructure AWS managed by SRE team Code Review
  12. 12. © RakSul,Inc. All Rights Reserved.           良いところは沢山ある
  13. 13. © RakSul,Inc. All Rights Reserved. 開発の現場の課題
  14. 14. © RakSul,Inc. All Rights Reserved. 例えば ● どこを修正すればいいか分からないので隣のチームに質問しにいく ● 影響範囲がわからない。想定外の場所でエラーが発生。 ● 同じバグを何度も引く ● 新人のシステムキャッチアップコストが高くbootstrapに時間がかかる 開発の現場で起きていたこと
  15. 15. © RakSul,Inc. All Rights Reserved. 歴史的経緯が積み重なり複雑で巨大に成長してしまったリポジトリ ● 初見では把握できない複雑なディレクトリ構成 ● 様々なサービス、機能が全部入り ● 結合度が高い なぜそうなったか? - 直接的な原因
  16. 16. © RakSul,Inc. All Rights Reserved. 根本は以下に集約される ● 印刷というビジネスドメインをシステム化することのそもそもの難しさ ● 適切な分解無しに、複数ドメイン・機能を混ぜてしまったこと ○ 紙の印刷サービスを売るECだけでなく、他のサービス(新聞折込やポスティン グなどの付加価値付きの集客支援サービス、紙以外の商材、etc)の混入 ○ デザイン機能、見積もり機能など なぜそうなったか? - 根本的な要因
  17. 17. © RakSul,Inc. All Rights Reserved. Rebuildを決意 開発効率が上がらない 負債が負債を呼ぶ悪循環 ひいては今後の事業成長の足かせになりかねない Rebuildを決意 cf. そうだ、ラクスルを作り直そう!https://tech.raksul.com/2017/12/18/raksul-platform-project/
  18. 18. © RakSul,Inc. All Rights Reserved. 戦略
  19. 19. © RakSul,Inc. All Rights Reserved. ● 既存コード(PHP)はリファクタせず、新しくリライト ● ビジネスドメインとレイヤーを意識して分割 ● 新しいシステムは原則に従う ○ 各システムはモノリシックに ○ 1システム1データベース 戦略
  20. 20. © RakSul,Inc. All Rights Reserved. ● 既存コード(PHP)はリファクタせず、新しくリライト ● ビジネスドメインとレイヤーを意識して分割 ● 新しいシステムは原則に従う ○ 各システムはモノリシックに ○ 1システム1データベース 戦略
  21. 21. © RakSul,Inc. All Rights Reserved. 我々はPHPのコードを捨て、新しく作り変えていく道を選択した 既存のPHP をリファクタするという選択は無かった ● エンジニアの得意言語の変化 ○ 創業時 = PHPが得意なエンジニア ○ 現在 = Ruby On Railsが得意なエンジニア ● Rebuild後のシステム価値 ○ リファクタした場合の価値 << リライトした場合の価値 Ruby on Railsを主フレームワークに採用 既存コード(PHP)はリファクタせず、新しくリライト
  22. 22. © RakSul,Inc. All Rights Reserved. ● 既存コード(PHP)はリファクタせず、新しくリライト ● ビジネスドメインとレイヤーを意識して分割 ● 新しいシステムは原則に従う ○ 各システムはモノリシックに ○ 1システム1データベース 戦略
  23. 23. © RakSul,Inc. All Rights Reserved. ビジネスドメインとレイヤーを意識して分割 印刷EC 顧客基盤や認証 決済 データチェック機能 集客支援・広告系EC ECレイヤー 個別見積もり、etc... 発注ディスパッチ処理 原価管理 コスト最適化 etc... 汎用機能レイヤー 印刷SCMレイヤー ビジネス ドメイン ビジネスドメインに関係な く使える機能は汎用レイ ヤーへ 汎用系の一種。 印刷SCM機能は ラクスルの根幹部分
  24. 24. © RakSul,Inc. All Rights Reserved. ● 既存コード(PHP)はリファクタせず、新しくリライト ● ビジネスドメインとレイヤーを意識して分割 ● 新しいシステムは原則に従う ○ 各システムはモノリシックに ○ 1システム1データベース 戦略
  25. 25. © RakSul,Inc. All Rights Reserved. ● 各システムはモノリシックに作り、凝縮度を高め開発効率を上げる。 ● つまり、マイクロサービス化しない。組織の規模に合わないマイクローサービス化は かえって開発効率を下げたり、把握コスト、DevOps等のオーバヘッドを生む。 ● 20名少々のエンジニア = 5つくらいのチーム。1チーム 1~2リポジトリくらいをメンテ できるくらいが開発効率的にもベスト。 各システムはモノリシックに、マイクロサービス化はしない
  26. 26. © RakSul,Inc. All Rights Reserved. ● アプリケーションをまたいで DBを参 照しない。 ● 過去の経験も踏まえてアンチパ ターンを踏まない ● よくあるアンチパターンな構成 = モ ノリシックなデータベースが中心に あり、ユーザー向け、管理画面や APIなどの多数のWebアプリが読 み書きしている状態 1システム、1データベース
  27. 27. © RakSul,Inc. All Rights Reserved. Blue Print 共通機能 Payment Ops API DB User/ Auth Ops API DB DataCheck/ Prepress Ops API DB 印刷ECOps API DB Printing Ops API DB Web EC機能 Other Business are the same Web: Publicサイト Ops: 管理画面 API: Internal API Web ExtAPI Users Printing Companies 集客・広告Ops API DB Web
  28. 28. © RakSul,Inc. All Rights Reserved. Blue Print 共通機能 Payment Ops API DB User/ Auth Ops API DB DataCheck/ Prepress Ops API DB 印刷ECOps API DB Printing Ops API DB Web EC機能 Other Business are the same Web: Publicサイト Ops: 管理画面 API: Internal API Web ExtAPI Users Printing Companies 集客・広告Ops API DB Web Development is ongoing!
  29. 29. © RakSul,Inc. All Rights Reserved. Inside of raksul-core Introducing monolithic architecture of our new Rails project
  30. 30. © RakSul,Inc. All Rights Reserved. ● 既存システム(github:raksul/raksul) の置き換えとしてスタート ● 印刷ECドメインにフォーカス ● データベースは既存データベースを参照 raksul-core, the new place for raksul.com raksul (existing PHP sytem) DB LB GET https://raksul.com/path/to/page raksul-core (The new raksul.com in Rails) 置き換え機能、新機能既存ページ The Raksul’s Database
  31. 31. © RakSul,Inc. All Rights Reserved. 3種類のコンポーネントを定義 3コンポーネント同居による凝縮度を上げた Rails app Database Models Thor CLI(Batch) Controllers Views, Serializers Controllers Views, Serializers Controllers Serializers Web Ops API raksul.com 管理画面 api.raksul.local 責務 Web ● Public Web Site ● フロント向けAPI(BFF)も兼任 Ops ● 管理画面(CR、経理など) ● フロント向けAPI(BFF)も兼任 API ● Internal Web APIs for other systems Layering of raksul-core
  32. 32. © RakSul,Inc. All Rights Reserved. ● この構成で1年ほど運用できている ● 開発効率は非常によい ● raksul-coreのナレッジは他のリポジトリに横展開している この構成で運用して
  33. 33. © RakSul,Inc. All Rights Reserved. ● モノリシック => 肥大化していく ○ raksul-coreの責務なのかどうかの見極め ○ 別システムへの切り分けの提案 課題もある
  34. 34. © RakSul,Inc. All Rights Reserved. 取り組み
  35. 35. © RakSul,Inc. All Rights Reserved. 水曜日のラクスル ● 水曜午後の社内勉強会 ● テーマななんでも良い ● 準備不要 ● 技術的不安の相談なども ペアプロ、モブプロ ● 難しい課題への取り組み時に ● 心理的安全性 ● コードレビュー負担の軽減 水曜日のラクスル、ペアプロ、モブプロ
  36. 36. © RakSul,Inc. All Rights Reserved. まとめ
  37. 37. © RakSul,Inc. All Rights Reserved. ● ラクスルのRebuildは現在進行系です ● 我々はシステム設計のディスカッションや日々の発見を通じて、ラクスルのシステム をより良くしていく取り組みをしています ● プロジェクトはチャレンジングです。我々はRebuildを通してレベルの高いシステム を目指しています ● やることは沢山あります! Rebuilding is On Going
  38. 38. © RakSul,Inc. All Rights Reserved. We Are Hiring!
  39. 39. © RakSul,Inc. All Rights Reserved. Thank you!

×