Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SaaSのフロントエンドをモノレポ化した話
Search
Yuto Moriyasu
February 22, 2023
Programming
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SaaSのフロントエンドをモノレポ化した話
Yuto Moriyasu
February 22, 2023
Other Decks in Programming
See All in Programming
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
気持ちぃ〜角丸 Squircle
ryu1013
0
310
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
5
790
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
270
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
190
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
ジョジョの世界をXRで再現する
mofurune
0
160
APNsからLive Activityを開始する話
yumnumm
0
170
Featured
See All Featured
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
480
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
380
RailsConf 2023
tenderlove
30
1.6k
Accessibility Awareness
sabderemane
1
250
The World Runs on Bad Software
bkeepers
PRO
72
12k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
280
Building Adaptive Systems
keathley
44
3.2k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
How to build a perfect <img>
jonoalderson
1
6.1k
How to Ace a Technical Interview
jacobian
280
24k
Evolving SEO for Evolving Search Engines
ryanjones
0
330
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
Transcript
© 2023 Anti-Pattern Inc. All rights reserved. SaaSのフロントエンドをモノレポ化した話 2023/02/22 株式会社アンチパターン
守安勇⼈
⾃⼰紹介 守安勇⼈(Yuto MORIYASU) 株式会社アンチパターン 役割︓SaaSus Platformのフロントエンド、バックエンドエンジニア 経歴︓2021年より株式会社アンチパターンでインターンシップ 2022年より、同社のSaaSus Platformの開発に参加 現在はリードフロントエンドエンジニアとして開発・マネジメントに従事
⼤学3年⽣。映画が好きです。
© 2023 Anti-Pattern Inc. All rights reserved. SaaSus Platform 概要
SaaSus Platform SaaS の開発と運⽤のサポートをする SaaS 2022年12⽉に正式版リリース SaaSに共通で必要なテナント管理、認証・認可、 請求などの機能を提供 SaaSus Platform利⽤者はSaaSの価値に直結する開 発に集中できる
© 2023 Anti-Pattern Inc. All rights reserved. モノレポ化の背景
© 2023 Anti-Pattern Inc. All rights reserved. SaaSのフロント事情 SaaSって、複数の種類の画⾯(フロントエンド)がありますよね︖ たとえば、
• ユーザーが操作する画⾯(これがメイン) • ユーザーの管理者(テナント管理者)だけが操作する画⾯ • SaaS事業者の管理者(カスタマーサポートなど)向け画⾯ • 場合によっては、 SaaS事業者のエンジニア向け画⾯ などなど
© 2023 Anti-Pattern Inc. All rights reserved. モノレポ化の背景 SaaSus Platformのこれまでの画⾯とリポジトリ構成
• SaaS共通画⾯(Next.js, MUI) • SaaS開発コンソール(Next.js, MUI) • SaaS運⽤コンソール(Next.js, MUI) • UIライブラリ開発⽤モノレポ • UIライブラリ (Next.js, MUIでnpmパッケージっぽく) • デザインドキュメント (Next.js, MUI) SaaS開発コンソール SaaS運⽤コンソール
© 2023 Anti-Pattern Inc. All rights reserved. モノレポ化の背景 複数のリポジトリを管理する際の問題点 •
変更の反映が⾯倒 • APIの変更 • API定義が変わったら、2つのリポジトリにPRを出す • 共有UIライブラリの変更 • 2つのリポジトリでUIライブラリをアップデート • E2Eテストの変更 • こちらも2つのリポジトリでPRを出す • ISSUEとPRの量が増える • ISSUEとPRが 1対1 になるようにしているため • ⼀貫性が取れなくなる
© 2023 Anti-Pattern Inc. All rights reserved. リポジトリの変更を容易にしたい
© 2023 Anti-Pattern Inc. All rights reserved. モノレポ化の⽬的 リポジトリを⼀つにまとめると… •
APIや共有UIライブラリの変更を⼀気に反映できる • ISSUEやPRが⼀つにまとまる • 共通部分が⾒えやすくなる んじゃないか︖ そして、DX (Developer Experience) を向上させたい…! その結果、開発スピードが上がり、さらなる価値を提供できるのでは
© 2023 Anti-Pattern Inc. All rights reserved. モノレポ化への道のり
© 2023 Anti-Pattern Inc. All rights reserved. モノレポ化への道のり モノレポ管理ツールには Lerna
を採⽤(https://lerna.js.org/) • 共有のUIライブラリは Lerna をすでに使っていた • npm パッケージの開発に向いているツール • UIライブラリは元々 npm パッケージっぽく作っていた • 複数の npm スクリプトを⼀回で実⾏できる • 複数の Next.js プロジェクトを⼀気に⽴ち上げたい
© 2023 Anti-Pattern Inc. All rights reserved. モノレポ化への道のり これからのフロントエンドの構成 •
フロントエンドモノレポ • SaaS開発コンソール(Next.js, MUI) • SaaS運⽤コンソール(Next.js, MUI) • 共有UIライブラリ(Next.js, MUI) • デザインドキュメント(Next.js, MUI) • E2Eテスト⽤パッケージ(Cypress) これまでフロントエンドの構成 • SaaS開発コンソール(Next.js, MUI) • SaaS運⽤コンソール(Next.js, MUI) • UIライブラリ開発⽤モノレポ • UIライブラリ (Next.js, MUIでnpmパッケージっぽく) • デザインドキュメント (Next.js, MUI)
モノレポ化への道のり モノレポ化の際に考慮したこと • tsconfig の統⼀ • Linter の設定の統⼀ • CI/CD
の調整 • npm スクリプトの整理 • Node バージョン管理(Volta)
モノレポ化への道のり tsconfig の統⼀ • ルートに tsconfig.base.json を作成して共通部分をまとめる • 各パッケージの tsconfig.json
でルートの tsconfig.base.json を extends • 個別の設定は各パッケージで上書き root/tsconfig.base.json root/packages/hoge/tsconfig.json ベースのtsconfigを参照
モノレポ化への道のり Linter の統⼀ • ESLint, Prettier を使⽤ • ルートに .eslintrc.json
を配置して、各パッケージで extends • VSCode の設定は “eslint.workingDirectories”: [{“mode”: “auto”}], とすることで、各パッケージの .eslintrc.json を参照。 root/.eslintrc.json root/packages/hoge/.eslintrc.json ルートのeslintrcを参照
モノレポ化への道のり CI/CD の調整 • CI/CD には GitHub Actions を使⽤している •
ユニットテスト • ワークフローのトリガーに paths を指定することで、 特定のパッケージに変更があったときのみ実⾏ • E2Eテスト • E2Eテスト⽤のパッケージを作成して cron で定期実⾏ • デプロイ • パッケージごとにワークフローを作成
モノレポ化への道のり npm スクリプトの整理 • ルートの package.json に lerna run コマンドを集約
• ルートで yarn dev や yarn test が実⾏できる • lerna run dev --stream --parallel とすると、 全パッケージの dev コマンドが実⾏される • ディレクトリの移動が無くなり、CI/CDも書きやすくなる
© 2023 Anti-Pattern Inc. All rights reserved. モノレポ化の結果…
モノレポ化の結果 • 変更の反映がしやすくなった • TSやLinterの設定が統⼀できた • ISSUEやPRの数が減ってスッキリ 結果的に開発スピードも上がる予定!! モノレポへの移⾏は近⽇完了予定
モノレポ化の結果 今後の課題点 • 共通化できていないところがまだある • Next.js や TypeScript, React などのバージョンを合わせる
• パッケージのバージョン管理 開発者からのフィードバックも受けながら改善していく!!
© 2023 Anti-Pattern Inc. All rights reserved. “⽇本のソフトウェアエンジニアを 憧れの職業へ” ご清聴ありがとうございました。