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

反省 モジュラモノリス タイミーの試行錯誤と現在地

shunsugai
March 12, 2025
3.2k

反省 モジュラモノリス タイミーの試行錯誤と現在地

アーキテクチャ選定の事例と学び ~モノリス、マイクロサービス、モジュラーモノリスの共生と最適化~
https://findy.connpass.com/event/344567/

上記のイベントで発表した内容です。

shunsugai

March 12, 2025
Tweet

Transcript

  1. モジュラモノリスを取り巻く状況( 2025年3月) • 2024年に入ってShopifyが総括しはじめる ◦ The Myth of the Modular

    Monolith - Rails World 2024 Eileen Uchitelle - The Myth of the Modular Monolith - Rails World 2024 ◦ A Packwerk Retrospective A Packwerk Retrospective • うまく活用している事例もある ◦ コインチェックさん サイロ化した金融システムを、 packwerk を利用して無事故でリファクタリングした話
  2. 導入時に解決したかった課題 • 複雑な依存関係 ◦ 変更の影響範囲を把握することが困難 ◦ 上記に伴う開発速度の低下を当時は懸念 • 認知負荷の増加 ◦

    タイミーは1プロダクトではあるが複数の業務ドメインを持っている。 1チームが複数のドメインを把 握することに限界がある • 不明瞭な責任範囲 ◦ チームの責任範囲があいまいなため Sentryのアラートの放置、スロークエリの放置などが起きてい る ◦ あるいは過剰に広範囲なオーナーシップが求められる
  3. packwerk packwerk(発音:パックヴェルク、パックワーク) Shopify製のOSS。2020年登場。 Enforcing Modularity in Rails Apps with Packwerk

    https://shopify.engineering/enforcing-modularity-rails-apps-packwerk クラス(定数)の依存関係のLint - 実行時に影響はない - 開発中に実行したり、CIに組み込んだりしてチェックしている
  4. 課題① 依存関係 📝 モジュラモノリスにしても依存関係の複雑さは簡単には解決しない • 󰢏Pros ◦ packwerkによってパッケージ間の依存関係の可視化はされた • 󰢄Cons

    ◦ 依存関係は複雑なままになっている箇所が大半 ◦ packwerk自体はどうコードを整理していくか教えてくれるわけではないので、これは自分たちで試 行錯誤し続ける必要がある ◦ さらにpackwerkでは検出できない類の依存もあるので、 packwerkのチェックをすべてパスしたから OKというわけでもない ◦ マイクロサービスほどではないが境界の試行錯誤のコストは高い
  5. 課題③ 不明瞭な責任範囲 📝 パッケージ化だけでは責任範囲を明確にできない • 󰢏Pros ◦ パッケージ化 + GitHubのCODEOWNERSでパッケージのオーナーが明確になった

    • 󰢄Cons ◦ packwerkでコードのグルーピングは楽になるが、 CODEOWNERS単体でも実現は可能なので packwerkが無くても良い ◦ ユーザー価値をベースにチームを作っているので、チームが責任を持つ価値と静的なコードが一致 しないケースではコードオーナーの設定が難しい
  6. 学んだこと③ packwerkを導入すべきか? 使わずに済むなら使わないほうが良い - Railsのレールを外れる代償はある - 事業のコアなモデルの設計に注力するほうが価値がある - 単一のRailsアプリに複数プロダクトが同居しているなどであればまた別 -

    privacyチェッカーは慎重に使うべき - 開発者の関心事がパッケージの publicなAPIに行き過ぎる危険性がある - それをやりたくて有効化しているなら問題ないが、ツールに振り回されないように