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

TypeScriptとモジュラーモノリスで挑む複雑なWebアプリケーション開発

 TypeScriptとモジュラーモノリスで挑む複雑なWebアプリケーション開発

Katsuma Narisawa

July 25, 2023
Tweet

More Decks by Katsuma Narisawa

Other Decks in Programming

Transcript

  1. Katsuma Narisawa 東北大学で自然言語処理 → 株式会社ディー・エヌ・エー → 株式会社ラブグラフ → フリーランス →

    SALESCORE株式会社のCTO 直近はTypeScript, GraphQL, Prisma, Recoil, Turborepoあたりが好き 趣味:食、酒、旅、写真、漫画
  2. どれだけ複雑か? - SALESCOREのデータパイプライン Data Source ELT TRANSFORM DWH BI SHEET

    REVERSE-ETL User SALESFORCE →普通は複数サービスでやることを単一サービスで実現
  3. 実際の設計紹介 - 垂直分割?水平分割? 垂直分割:ドメインごとに分割 水平分割:レイヤーごとに分割 Q. 我々は? A. 世間的にはモジュラーモノリス=垂直分割が一般的? 一般のイメージとはやや異なる設計かも

    特に、複雑なドメインロジックを外に独立させているの がお気に入り どちらでも分割。必要な粒度で分割   +コアロジックを外に抽出 PRESENTATION1 INFRA1 INFRA2 APPLICATION2 MODULE1 MODULE2 PRESENTATION2 DB1 DB2 サービス1 サービス2 なんか複雑な ドメインロジック
  4. 実際の設計紹介 - 構成方法 モジュールごとにpackage.jsonを定義 mainにindex.tsを指定 index.tsにexportしたい関数を書く → モジュール外にexportしたくない関数はexportされ ない(カプセル化) →

    これが地味に良い。関数名を長くしなくて良い ドメインロジックのモジュールは依存 パッケージはほぼなし。ピュアな関数で 構成。
  5. 実際やってみてどうか - 悪かったところ ・buildとlint のパフォーマンスが悪い  主目的のためにはYarn Workspaceを使ったモジュール構成の必然性はそこまでないの で eslint-plugin-import-access を使う構成に変更を検討中

    ・初期構築の難易度が多少高い ・新規メンバーのキャッチアップには、良くも悪くもあまり影響していない…? (全体像を整理したくなるくらいのドメイン理解度がないと、モノリスと同じ?) 「モノレポ」の恩恵は大きい。コードジャンプしていくだけで全部把握できる (=マイクロサービスだと受けづらい恩恵)
  6. Appendix - 技術スタックの変遷 2019- Rails, Nuxt.jsで開発。2週間でMVPを作った。週0.5くらいで開発していた時代 2021- フルコミット開始。Next.js + Node.js

    (Nexus) に移行。    初期はフロントエンド・バックエンドをリポジトリ分割。    それぞれTypeScript Project Referencesを使ったモジュール構成 2022- Turborepoを使ったモノレポ・モジュラーモノリスに移行 2023春 二人目のエンジニア、PdM、デザイナーがジョイン!    (逆に、ここまでずっと一人開発)