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

ローコードサービスの進化のためのモノレポ移行

taro
March 18, 2025

 ローコードサービスの進化のためのモノレポ移行

NEWT Tech Talk vol.15
サービスの成長に合わせたフロントエンドの進化
https://reiwatravel.connpass.com/event/346339/

での登壇資料です。

taro

March 18, 2025
Tweet

More Decks by taro

Other Decks in Programming

Transcript

  1. root/ ├─ packages/ │ ├─ web/ # Webクライアント │ ├─

    js-executor/ # Node.jsクライアント │ └─ lib/ # 共有ライブラリ ├─ pnpm-workspace.yaml └─ package.json モノレポの構成 モノレポの構成
  2. • pnpmのWorkspaceのドキュメント ◦ pnpm.io/workspaces • Turborepoのガイド(おすすめ) ◦ turbo.build/repo/docs/crafting-your-repository ◦ ⼀般的なモノレポの構成のことがだいたいわかる

    ◦ Next.jsのstandaloneでのDockerfileとかも書いてある ◦ (結局Turborepoは使ってないけど…) モノレポのキャッチアップ モノレポ移行の流れ
  3. root/ ├─ packages/ │ ├─ web/ ├─ pnpm-workspace.yaml └─ package.json

    root/ ├─src/ │ ├─features/ │ ├─pages/ └─ Dockerfile └─ tsconfig.json └─ next.config.js └─ package.json 移⾏前 移⾏後 稼働中のアプリかつ他の開発ライ ンも動いているので、できるだけ 影響を⼩さく段階的に移⾏した モノレポ移行の流れ
  4. root/ ├─ packages/ │ ├─ web/ ├─ pnpm-workspace.yaml └─ package.json

    root/ ├─src/ │ ├─features/ │ ├─pages/ └─ Dockerfile └─ tsconfig.json └─ next.config.js └─ package.json 移⾏前 移⾏後 src/配下は差分なし それ以外の差分も、ほぼパスに packages/webをつけるだけ モノレポ移行の流れ
  5. • tsconfig • Jest(当時、今はVitest) • ESlint • GraphQL Codegen •

    GitHub Actions を共通化できる形式に移⾏(詳細は割愛) 開発ツールの設定をモノレポに移行 モノレポ移行の流れ
  6. root/ ├─ packages/ │ ├─ web/ # Webクライアント │ ├─

    js-executor/ # Node.jsクライアント │ └─ lib/ # 共有ライブラリ ├─ pnpm-workspace.yaml └─ package.json モノレポの構成 モノレポの構成
  7. モノレポの構成 root/ ├─ packages/ │ ├─ web/ # Webクライアント │

    ├─ js-executor/ # Node.jsクライアント │ └─ lib/ # 共有ライブラリ ├─ pnpm-workspace.yaml └─ package.json モノレポの構成 運⽤中のアプリでも 意外と簡単にモノレポ移⾏できた!
  8. • 特定の機能に依存しないもの ◦ 汎⽤の定数、関数、型 ◦ 開発ツールの設定(tsconfig, ESLint, etc.) ◦ 外部ライブラリの初期化関数

    • 特定の機能に依存するもの ◦ 「アクションの実⾏機能」に依存する処理 ◦ 「ユーザーがコードを書く機能」に依存する処理 モノレポで共通化しているもの モノレポで共通化しているもの
  9. • 特定の機能に依存しないもの ◦ 汎⽤の定数、関数、型 ◦ 開発ツールの設定(tsconfig, ESLint, etc.) ◦ 外部ライブラリの初期化関数

    • 特定の機能に依存するもの ◦ 「アクションの実⾏機能」に依存する処理 ◦ 「ユーザーがコードを書く機能」に依存する処理 モノレポで共通化しているもの モノレポで共通化しているもの
  10. モノレポで共通化しているもの モノレポで共通化しているもの • 特定の機能に依存しないもの ◦ 汎⽤の定数、関数、型 ◦ 開発ツールの設定(tsconfig, ESLint, etc.)

    ◦ 外部ライブラリの初期化関数 • 特定の機能に依存するもの ◦ 「アクションの実⾏機能」に依存する処理 ◦ 「ユーザーがコードを書く機能」に依存する処理
  11. Lib

  12. モノレポで共通化しているもの モノレポで共通化しているもの • 特定の機能に依存しないもの ◦ 汎⽤の定数、関数、型 ◦ 開発ツールの設定(tsconfig, ESLint, etc.)

    ◦ 外部ライブラリの初期化関数 • 特定の機能に依存するもの ◦ 「アクションの実⾏機能」に依存する処理 ◦ 「ユーザーがコードを書く機能」に依存する処理
  13. Lib

  14. モノレポで共通化しているもの モノレポで共通化しているもの • 特定の機能に依存しないもの ◦ 汎⽤の定数、関数、型 ◦ 開発ツールの設定(tsconfig, ESLint, etc.)

    ◦ 外部ライブラリの初期化関数 • 特定の機能に依存するもの ◦ 「アクションの実⾏機能」に依存する処理 ◦ 「ユーザーがコードを書く機能」に依存する処理
  15. • 運⽤中のアプリでも、意外とさくっとモノレポ始められた • GraphQLだと関数と⼀緒に取得する情報も共通化できて嬉 しい ◦ モノレポとGraphQL Fragment Colocationはいいぞ •

    別環境のクライアント間のモノレポだと、機能単位で処理 を共通化できる(できるように頑張ってる🔥) まとめ まとめ