packwerk
https://github.com/Shopify/packwerk
モジュール
間の
依存関係
を
静的解析
する
ライブラリ
Shopify
製
コード群をpackagesに分割し、packages間の依存関係やアクセスを制御できる
ディレクトリにコードを移動するだけなので修正がしやすい
いきなり
マイクロサービス
に切り出すのではなくファイル移動で
モジュール
化を試せる
2024-01
A Packwerk Retrospective
Shopifyによる振り返り
意味論的なコード分割は依存関係の整理を必ずしも意味しない
利用例
本家
https://shopify.engineering/enforcing-modularity-rails-apps-packwerk
note
https://note.com/konpyu/n/nc27f32c49213
https://speakerdeck.com/shshimamo/monorisitukurailsapurikesiyonwo-moziyuramonorisuheyi-xing-siteiru-notenoshi-li
Gusto
2022-05
https://medium.com/gusto-engineering/laying-the-cultural-and-technical-foundation-for-big-rails-6b5ab78349ed
2023-01
https://medium.com/gusto-engineering/a-how-to-guide-to-ruby-packs-gustos-gem-ecosystem-for-modularizing-ruby-applications-e236126b8c2c
Gradual Modularization for Ruby and Rails
を執筆したのもGustoの
エンジニア
gem
や
Rails engine
によるアプローチとの違いは「段階的なモジュール化(not 厳格な境界)」「低コストで作成・変更できる」
2024-06
The current state of Gusto’s modularity tooling
packwerkを使い400のpackagesができたが認知負荷は高いままだった
論理的には20のpackagesで十分だった
packagesを削減する試みが進行中(nesting pack etc.)
ツールはpackwerkとほぼ互換の
Rust
製の
pks
に移行した