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

サーバーサイドもTSにしたらモノレポになった.pdf

 サーバーサイドもTSにしたらモノレポになった.pdf

gizm000

May 10, 2024
Tweet

More Decks by gizm000

Other Decks in Programming

Transcript

  1. npm workspace product ┗ node_modules ┗ packages ┗ frontend ┗

    backend ┗ schema ┗ and more ← node_modulesに各パッケージへの シンボリックリンクが生成される
  2. npm workspace product ┗ node_modules ┗ packages ┗ frontend ┗

    backend ┗ schema ┗ and more ← node_modulesに各パッケージへの シンボリックリンクが生成される `import { hoge } from @product/schema` これで他パッケージから参照可能 ✨
  3. npm workspace product ┗ node_modules ┗ packages ┗ validators ┗

    utilities ┗ tsconfig ┗ eslint ← zodで記述した共通バリデーション frontend/backendで共通利用
  4. npm workspace product ┗ node_modules ┗ packages ┗ validators ┗

    utilities ┗ tsconfig ┗ eslint ← 各種パッケージで共通のtsconfigを用意 front, back間で共通はさせない方がよいかも...
  5. NestJS モノレポモード product ┗ node_modules ┗ packages ┗ frontend ┗

    backend ┗ schema ┗ and more ← この配下でネストさせられる 👀
  6. NestJS モノレポモード backend ┗ apps ┗ main ┗ worker ┗

    other ┗ shared ┗ core ┗ infrastructure ┗ utils
  7. NestJS モノレポモード backend ┗ apps ┗ main ┗ worker ┗

    other ┗ shared ┗ core ┗ infrastructure ┗ utils ← ひとつのNestJSプロジェクトに格納可能
  8. NestJS モノレポモード backend ┗ apps ┗ main ┗ worker ┗

    other ┗ shared ┗ core ┗ infrastructure ┗ utils ← appsで共通利用可能なドメインロジック
  9. NestJS モノレポモード backend ┗ apps ┗ main ┗ worker ┗

    other ┗ shared ┗ core ┗ infrastructure ┗ utils ← AWSクライアントなどのインフラ層
  10. NestJS モノレポモード backend ┗ apps ┗ main ┗ worker ┗

    other ┗ shared ┗ core ┗ infrastructure ┗ utils ← ドメインの関係ないユーティリティ
  11. NestJS モノレポモード backend ┗ apps ┗ main ┗ worker ┗

    other ┗ shared ┗ core ┗ infrastructure ┗ utils ← ドメインの関係ないユーティリティ npm workspaceでも 同じことできそう 🤔
  12. NestJS モノレポモード ・npm workspace との違いは? ・NestJS モノレポモードではnpm packageの単位として同一になる ・つまり package.jsonは共有

     → package.jsonを分離したいなら分けた方がよい ・何が嬉しい? ・npm workspaceで複数のNestJSアプリを作らなくてよい  → 認知負荷の軽減
  13. まとめ 📚 ・サーバーサイドをTSにしたときのプラクティスがもっと欲しい! Ruby, Java, PHP のように枯れていない・・・ ・営業製作所では以下を使って構成している ・npm workspace

    ・モジュラーモノリスのような構成が作りやすい ・NestJS モノレポモード ・NestJSに閉じるなら、npm workspaceよりカンタン