Open3

Ruby on Railsでモジュラーモノリスを採用する場合の調査

iwamasaiwamasa

目的

モノリスのRuby on Railsのプロジェクトに対し、複数チームでの開発効率を良くするために「モジュラーモノリス」が良いのではないか?と、思ったので調査してみる

モジュラーモノリスとは?

同一アプリ内でサービス(ドメイン)ごとにモジュールに分割する手法

ざっくり対比として

  • モノリス
    • 全て同一アプリに集約
  • モジュラーモノリス
    • 同一アプリに複数のサービス(ドメイン)をモジュールに分けて作成
  • マイクロサービス
    • サービス(ドメイン)ごとに別のアプリに分割

なぜマイクロサービスを採用しないの?

現在自分が関わっているプロジェクトでは大きくサービス単位で分割するような事業では無いことと、インフラコストを考えた時に同一アプリ内で分けた方がコスパが良いと考えたため。
※完全に事業ドメインが違うとかなら話は別になるため、その時はマイクロサービスも検討する

iwamasaiwamasa

どうやって分割する?

packwerk というShopifyのgemを採用している事例を見かけた
https://github.com/Shopify/packwerk

Packwerk(パックワーク)とは

Packwerk is a Ruby gem used to enforce boundaries and modularize Rails applications.

つまり、Railsアプリをモジュール単位で分割する仕組みを提供(強制化)してくれる。

提供してくれる機能

  • Combine groups of files into packages
    • ファイルのグループをパッケージに結合
  • Define package-level constant visibility (i.e. have publicly accessible constants)
    • パッケージレベルの定数の可視性を定義(つまり、公開可能な定数を持つ)
  • Help existing codebases to become more modular without obstructing development
    • 既存のコードベースが開発を妨げることなく、よりモジュール化されるのを支援