Nxã¯ãŒã¯ã¹ããŒã¹ã掻çšããŠãã³ãŒãå ±æããã«ãããã©ãŒãã³ã¹ãããŒã ãšãããžã§ã¯ãå šäœã®éçºè ã³ã©ãã¬ãŒã·ã§ã³ãæ¹åãããããã³ããšã³ãã¢ãã¬ãéçºã«ã€ããŠåŠã³ãŸãã
Frontend Nxã¯ãŒã¯ã¹ããŒã¹: ã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ã®ããã®ã¢ãã¬ãéçº
仿¥ã®ããŒã¹ã®éããœãããŠã§ã¢éçºã®ç¶æ³ã§ã¯ãå€§èŠæš¡ãªããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ãšç¶æã¯å°é£ãªå ŽåããããŸãã äŸåé¢ä¿ã®ç®¡çãã³ãŒãã®äžè²«æ§ã®ç¢ºä¿ããã«ãæéã®æé©åã¯ããããžã§ã¯ããæé·ããã«ã€ããŠãŸããŸãè€éã«ãªããŸãã ã¢ãã¬ãã¯ãè€æ°ã®ãããžã§ã¯ããšã©ã€ãã©ãªãåäžã®ãªããžããªã«çµ±åããããšã«ããã匷åãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã ã¹ããŒãã§æ¡åŒµå¯èœãªãã«ãã·ã¹ãã ã§ããNxã¯ãé«åºŠãªããŒã«ãšæ©èœã«ãããã¢ãã¬ãéçºã匷åããŸãã
ãã®å æ¬çãªã¬ã€ãã§ã¯ãããã³ããšã³ãã¢ãã¬ãéçºã«Nxã¯ãŒã¯ã¹ããŒã¹ã䜿çšããå©ç¹ã«ã€ããŠãäž»èŠãªæŠå¿µãå®è·µçãªäŸãããã³ãã¹ããã©ã¯ãã£ã¹ãåãäžããªãã説æããŸãã
ã¢ãã¬ããšã¯äœã§ããïŒ
ã¢ãã¬ãã¯ããã¹ãŠã®ãããžã§ã¯ããšãã®äŸåé¢ä¿ãåäžã®ãªããžããªã«ä¿åããããœãããŠã§ã¢éçºæŠç¥ã§ãã ãã®ã¢ãããŒãã¯ãåãããžã§ã¯ãã«ç¬èªã®ãªããžããªãããåŸæ¥ã®ãã«ãã¬ãã¢ãããŒããšã¯å¯Ÿç §çã§ãã
ã¢ãã¬ãã®äž»ãªç¹åŸŽ:
- å¯äžã®çå®ã®æº: ãã¹ãŠã®ã³ãŒãã1ã€ã®å Žæã«ååšããŸãã
- ã³ãŒãã®å ±æãšåå©çš: ãããžã§ã¯ãéã§ã³ãŒããå ±æããã³åå©çšããã®ãç°¡åã§ãã
- äŸåé¢ä¿ã®ç®¡çã®ç°¡çŽ å: ãããžã§ã¯ãéã®äŸåé¢ä¿ã®ç®¡çãããç°¡åã«ãªããŸãã
- ã¢ãããã¯ãªå€æŽ: 倿Žã¯è€æ°ã®ãããžã§ã¯ãã«ãŸãããããšãã§ããäžè²«æ§ã確ä¿ããŸãã
- ã³ã©ãã¬ãŒã·ã§ã³ã®æ¹å: ããŒã ãé¢é£ãããžã§ã¯ãã§å ±åäœæ¥ãããããªããŸãã
ããã³ããšã³ãéçºã«ã¢ãã¬ãã䜿çšããçç±
ã¢ãã¬ãã¯ãç¹ã«å€§èŠæš¡ã§è€éãªãããžã§ã¯ãã®å Žåãããã³ããšã³ãéçºã«å€§ããªå©ç¹ããããããŸãã
- 匷åãããã³ãŒãå ±æ: ããã³ããšã³ããããžã§ã¯ãã¯ãå€ãã®å Žåãå ±éã®UIã³ã³ããŒãã³ãããŠãŒãã£ãªãã£é¢æ°ãããã³ãã¶ã€ã³ã·ã¹ãã ãå ±æããŸãã ã¢ãã¬ãã¯ãã³ãŒãã®å ±æãä¿é²ããéè€ãæžãããäžè²«æ§ãä¿é²ããŸãã ããšãã°ããã¶ã€ã³ã·ã¹ãã ã©ã€ãã©ãªã¯ãåãã¯ãŒã¯ã¹ããŒã¹å ã®è€æ°ã®Reactã¢ããªã±ãŒã·ã§ã³éã§ç°¡åã«å ±æã§ããŸãã
- åçåãããäŸåé¢ä¿ç®¡ç: ç¹ã«çµ¶ããé²åããJavaScriptãšã³ã·ã¹ãã ã§ã¯ãè€æ°ã®ããã³ããšã³ããããžã§ã¯ãã«ãããäŸåé¢ä¿ã®ç®¡çã¯å°é£ãªå ŽåããããŸãã ã¢ãã¬ãã¯ãäŸåé¢ä¿ãäžå åããããŒãžã§ã³ãšã¢ããã°ã¬ãŒãã管çããããã®ããŒã«ãæäŸããããšã«ãããäŸåé¢ä¿ã®ç®¡çãç°¡çŽ åããŸãã
- ãã«ãããã©ãŒãã³ã¹ã®åäž: Nxã¯ãé«åºŠãªãã«ããã£ãã·ã¥ãšäŸåé¢ä¿åæãæäŸããããé«éã§å¹ççãªãã«ããå¯èœã«ããŸãã äŸåé¢ä¿ã°ã©ããåæããããšã«ãããNxã¯å€æŽã®åœ±é¿ãåãããããžã§ã¯ãã®ã¿ããªãã«ãã§ããããããã«ãæéãå€§å¹ ã«ççž®ã§ããŸãã ããã¯ã倿°ã®ã³ã³ããŒãã³ããšã¢ãžã¥ãŒã«ãæã€å€§èŠæš¡ãªããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠéåžžã«éèŠã§ãã
- ãªãã¡ã¯ã¿ãªã³ã°ã®ç°¡çŽ å: ã¢ãã¬ãã§ã¯ãè€æ°ã®ãããžã§ã¯ãã«ãããã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ã容æã«ãªããŸãã 倿Žã¯ã¢ãããã¯ã«è¡ãããšãã§ããäžè²«æ§ã確ä¿ãããã°ãçºçãããªã¹ã¯ã軜æžããŸãã ããšãã°ãè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠããã³ã³ããŒãã³ãã®åå倿Žã¯ãåäžã®ã³ãããã§å®è¡ã§ããŸãã
- ããè¯ãã³ã©ãã¬ãŒã·ã§ã³: ã¢ãã¬ãã¯ãå ±æã³ãŒãããŒã¹ãšå ±éã®éçºç°å¢ãæäŸããããšã«ãããããã³ããšã³ãéçºè éã®ããè¯ãã³ã©ãã¬ãŒã·ã§ã³ãä¿é²ããŸãã ããŒã ã¯ãããŸããŸãªãããžã§ã¯ãã«ç°¡åã«è²¢ç®ããç¥èãšãã¹ããã©ã¯ãã£ã¹ãå ±æã§ããŸãã
Nxã®ç޹ä»: ã¹ããŒãã§æ¡åŒµå¯èœãªãã«ãã·ã¹ãã
Nxã¯ãé«åºŠãªããŒã«ãšæ©èœã«ãããã¢ãã¬ãéçºã匷åãã匷åãªãã«ãã·ã¹ãã ã§ãã æšæºåãããéçºãšã¯ã¹ããªãšã³ã¹ãæäŸãããã«ãããã©ãŒãã³ã¹ãåäžãããäŸåé¢ä¿ã®ç®¡çãç°¡çŽ åããŸãã
Nxã®äž»ãªæ©èœ:
- ã¹ããŒããã«ãã·ã¹ãã : Nxã¯ããããžã§ã¯ãã®äŸåé¢ä¿ã°ã©ããåæãã圱é¿ãåãããããžã§ã¯ãã®ã¿ããªãã«ãããããããã«ãæéãå€§å¹ ã«ççž®ãããŸãã
- ã³ãŒãçæ: Nxã¯ãæ°ãããããžã§ã¯ããã³ã³ããŒãã³ããããã³ã¢ãžã¥ãŒã«ãäœæããããã®ã³ãŒãçæããŒã«ãæäŸããéçºãå éããäžè²«æ§ã確ä¿ããŸãã
- çµ±åããŒã«: Nxã¯ãReactãAngularãVue.jsãªã©ã®äžè¬çãªããã³ããšã³ããã¬ãŒã ã¯ãŒã¯ãšçµ±åãããŠãããã·ãŒã ã¬ã¹ãªéçºãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
- ãã©ã°ã€ã³ãšã³ã·ã¹ãã : Nxã«ã¯ã远å ã®ããŒã«ãšçµ±åã«ããæ©èœãæ¡åŒµããè±å¯ãªãã©ã°ã€ã³ãšã³ã·ã¹ãã ããããŸãã
- ã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ã: Nxã®ã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ãã·ã¹ãã ã¯ã倿Žããããã®ã®ã¿ããªãã«ããããããéçºãã£ãŒãããã¯ã«ãŒããå€§å¹ ã«é«éåãããŸãã
- èšç®ãã£ãã·ã¥: Nxã¯ããã«ãããã¹ããªã©ã®ã³ã¹ãã®ãããèšç®ã®çµæããã£ãã·ã¥ããããã©ãŒãã³ã¹ãããã«åäžãããŸãã
- 忣ã¿ã¹ã¯å®è¡: éåžžã«å€§èŠæš¡ãªã¢ãã¬ãã®å ŽåãNxã¯ã¿ã¹ã¯ãè€æ°ã®ãã·ã³ã«åæ£ããŠããã«ããšãã¹ãã䞊è¡ããŠå®è¡ã§ããŸãã
ããã³ããšã³ãéçºçšã®Nxã¯ãŒã¯ã¹ããŒã¹ã®èšå®
Nxã¯ãŒã¯ã¹ããŒã¹ã®èšå®ã¯ç°¡åã§ãã Nx CLIã䜿çšããŠãæ°ããã¯ãŒã¯ã¹ããŒã¹ãäœæãããããžã§ã¯ããšã©ã€ãã©ãªã远å ã§ããŸãã
åææ¡ä»¶:
- Node.js (ããŒãžã§ã³16以é)
- npmãŸãã¯yarn
æé :
- Nx CLIãã€ã³ã¹ããŒã«ããŸã:
npm install -g create-nx-workspace
- æ°ããNxã¯ãŒã¯ã¹ããŒã¹ãäœæããŸã:
npx create-nx-workspace my-frontend-workspace
ããªã»ãããéžæããããã«æ±ããããŸãã åªå ããããã³ããšã³ããã¬ãŒã ã¯ãŒã¯ïŒReactãAngularãVue.jsãªã©ïŒã«äžèŽããããªã»ãããéžæããŠãã ããã
- æ°ããã¢ããªã±ãŒã·ã§ã³ã远å ããŸã:
nx generate @nx/react:application my-app
ãã®ã³ãã³ãã¯ãã¯ãŒã¯ã¹ããŒã¹å ã«ãmy-appããšããååã®æ°ããReactã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
- æ°ããã©ã€ãã©ãªã远å ããŸã:
nx generate @nx/react:library my-library
ãã®ã³ãã³ãã¯ãã¯ãŒã¯ã¹ããŒã¹å ã«ãmy-libraryããšããååã®æ°ããReactã©ã€ãã©ãªãäœæããŸãã ã©ã€ãã©ãªã¯ãã¢ããªã±ãŒã·ã§ã³éã§ã³ãŒããå ±æããããã«äœ¿çšãããŸãã
Nxã¯ãŒã¯ã¹ããŒã¹ã®æŽç
é©åã«æŽçãããNxã¯ãŒã¯ã¹ããŒã¹ã¯ãä¿å®æ§ãšã¹ã±ãŒã©ããªãã£ã«ãšã£ãŠéåžžã«éèŠã§ãã ã¯ãŒã¯ã¹ããŒã¹ãæ§ç¯ããéã¯ã次ã®ã¬ã€ãã©ã€ã³ãèæ ®ããŠãã ããã
- ã¢ããªã±ãŒã·ã§ã³: ã¢ããªã±ãŒã·ã§ã³ã¯ãããã³ããšã³ããããžã§ã¯ãã®ãšã³ããªãã€ã³ãã§ãã ãããã¯ããŠãŒã¶ãŒåãã®ã€ã³ã¿ãŒãã§ã€ã¹ã衚ããŸãã äŸãšããŠã¯ãWebã¢ããªã±ãŒã·ã§ã³ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ããŸãã¯ãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ããããŸãã
- ã©ã€ãã©ãª: ã©ã€ãã©ãªã«ã¯ãè€æ°ã®ã¢ããªã±ãŒã·ã§ã³éã§å ±æã§ããåå©çšå¯èœãªã³ãŒããå«ãŸããŠããŸãã ãããã¯ãæ©èœã«åºã¥ããŠããŸããŸãªã¿ã€ãã«ç·šæãããŠããŸãã
- ãã£ãŒãã£ãŒã©ã€ãã©ãª: ãã£ãŒãã£ãŒã©ã€ãã©ãªã«ã¯ãç¹å®ã®ãã£ãŒãã£ãŒã®ããžãã¹ããžãã¯ãšUIã³ã³ããŒãã³ããå«ãŸããŠããŸãã ãããã¯ãã³ã¢ã©ã€ãã©ãªãšUIã©ã€ãã©ãªã«äŸåããŸãã
- UIã©ã€ãã©ãª: UIã©ã€ãã©ãªã«ã¯ãè€æ°ã®ãã£ãŒãã£ãŒããã³ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããåå©çšå¯èœãªUIã³ã³ããŒãã³ããå«ãŸããŠããŸãã
- ã³ã¢ã©ã€ãã©ãª: ã³ã¢ã©ã€ãã©ãªã«ã¯ãã¯ãŒã¯ã¹ããŒã¹å šäœã§äœ¿çšããããŠãŒãã£ãªãã£é¢æ°ãããŒã¿ã¢ãã«ãããã³ãã®ä»ã®å ±éã³ãŒããå«ãŸããŠããŸãã
- å ±æã©ã€ãã©ãª: å ±æã©ã€ãã©ãªã«ã¯ãããã³ããšã³ããã¬ãŒã ã¯ãŒã¯ïŒReactãAngularãVue.jsïŒã«é¢ä¿ãªããè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãšã©ã€ãã©ãªã§äœ¿çšã§ãããã¬ãŒã ã¯ãŒã¯ã«äŸåããªãã³ãŒããå«ãŸããŠããŸãã ããã«ãããã³ãŒãã®åå©çšãä¿é²ãããéè€ãåæžãããŸãã
ãã£ã¬ã¯ããªæ§é ã®äŸ:
my-frontend-workspace/ âââ apps/ â âââ my-app/ â â âââ src/ â â â âââ app/ â â â â âââ app.tsx â â â â âââ app.module.css â â â âââ main.tsx â â âââ project.json â âââ my-other-app/ â âââ ... âââ libs/ â âââ feature-my-feature/ â â âââ src/ â â â âââ lib/ â â â âââ feature-my-feature.tsx â â âââ project.json â âââ ui/ â â âââ src/ â â â âââ lib/ â â â âââ button/ â â â âââ button.tsx â â âââ project.json â âââ core/ â â âââ src/ â â â âââ lib/ â â â âââ api.ts â â âââ project.json â âââ shared/ â âââ src/ â â âââ lib/ â â âââ date-formatter.ts â âââ project.json âââ tools/ â âââ generators/ âââ nx.json âââ package.json âââ tsconfig.base.json
Nxã©ã€ãã©ãªã䜿çšããã³ãŒãã®å ±æãšåå©çš
Nxã©ã€ãã©ãªã¯ãã¢ãã¬ãã§ã®ã³ãŒãã®å ±æãšåå©çšã®éµãšãªããŸãã ã³ãŒããæç¢ºã«å®çŸ©ãããã©ã€ãã©ãªã«æŽçããããšã«ãããã³ã³ããŒãã³ãããµãŒãã¹ãããã³ãŠãŒãã£ãªãã£ãè€æ°ã®ã¢ããªã±ãŒã·ã§ã³éã§ç°¡åã«å ±æã§ããŸãã
äŸ: UIã³ã³ããŒãã³ãã®å ±æ
è€æ°ã®Reactã¢ããªã±ãŒã·ã§ã³éã§å ±æãããã¿ã³ã³ã³ããŒãã³ãããããšããŸãã ãuiããšããååã®UIã©ã€ãã©ãªãäœæãããã®ã©ã€ãã©ãªã«ãã¿ã³ã³ã³ããŒãã³ããé 眮ã§ããŸãã
- UIã©ã€ãã©ãªãäœæããŸã:
nx generate @nx/react:library ui
- ãã¿ã³ã³ã³ããŒãã³ããäœæããŸã:
nx generate @nx/react:component button --project=ui
- ãã¿ã³ã³ã³ããŒãã³ããå®è£
ããŸã:
// libs/ui/src/lib/button/button.tsx import styles from './button.module.css'; interface ButtonProps { text: string; onClick: () => void; } export function Button({ text, onClick }: ButtonProps) { return ( ); } export default Button;
- ã©ã€ãã©ãªãããã¿ã³ã³ã³ããŒãã³ãããšã¯ã¹ããŒãããŸã:
// libs/ui/src/index.ts export * from './lib/button/button';
- ã¢ããªã±ãŒã·ã§ã³ã§ãã¿ã³ã³ã³ããŒãã³ãã䜿çšããŸã:
// apps/my-app/src/app/app.tsx import { Button } from '@my-frontend-workspace/ui'; function App() { return (
Welcome to My App
ã©ã€ãã©ãªã䜿çšããããšã«ãããUIã³ã³ããŒãã³ãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã§äžè²«ããŠããããšã確èªã§ããŸãã UIã©ã€ãã©ãªã§ãã¿ã³ã³ã³ããŒãã³ããæŽæ°ãããšãã³ã³ããŒãã³ãã䜿çšãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãèªåçã«æŽæ°ãããŸãã
Nxã¯ãŒã¯ã¹ããŒã¹ã§ã®äŸåé¢ä¿ç®¡ç
Nxã¯ããããžã§ã¯ããšã©ã€ãã©ãªéã®äŸåé¢ä¿ã管çããããã®åŒ·åãªããŒã«ãæäŸããŸãã åãããžã§ã¯ããŸãã¯ã©ã€ãã©ãªã®`project.json`ãã¡ã€ã«ã§äŸåé¢ä¿ãæç€ºçã«å®çŸ©ã§ããŸãã
äŸ: äŸåé¢ä¿ã®å®£èš
ã¢ããªã±ãŒã·ã§ã³ãmy-appããã©ã€ãã©ãªãcoreãã«äŸåããŠãããšããŸãã ãmy-appãã®`project.json`ãã¡ã€ã«ã§ãã®äŸåé¢ä¿ã宣èšã§ããŸãã
// apps/my-app/project.json
{
"name": "my-app",
"projectType": "application",
...
"implicitDependencies": ["core"]
}
äŸåé¢ä¿ãæç€ºçã«å®£èšããããšã«ãããNxã¯ã¯ãŒã¯ã¹ããŒã¹ã®äŸåé¢ä¿ã°ã©ããåæããäŸåé¢ä¿ã倿Žããããšãã«åœ±é¿ãåãããããžã§ã¯ãã®ã¿ããªãã«ãã§ããŸãã ããã«ããããã«ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã
Nxã䜿çšãããã«ãããã©ãŒãã³ã¹ã®æé©å
Nxã®ã¹ããŒããã«ãã·ã¹ãã ãšèšç®ãã£ãã·ã¥æ©èœã«ããããã«ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããŸãã Nxã¯ãŒã¯ã¹ããŒã¹ã§ãã«ãããã©ãŒãã³ã¹ãæé©åããããã®ãã³ããæ¬¡ã«ç€ºããŸãã
- äŸåé¢ä¿ã°ã©ãã®åæ: `nx graph`ã³ãã³ãã䜿çšããŠãã¯ãŒã¯ã¹ããŒã¹ã®äŸåé¢ä¿ã°ã©ããèŠèŠåããŸãã æœåšçãªããã«ããã¯ãç¹å®ãããããžã§ã¯ãæ§é ãæé©åããŠäŸåé¢ä¿ãæžãããŸãã
- èšç®ãã£ãã·ã¥ã®äœ¿çš: Nxã¯ããã«ãããã¹ããªã©ã®ã³ã¹ãã®ãããèšç®ã®çµæããã£ãã·ã¥ããŸãã èšç®ãã£ãã·ã¥ã`nx.json`ãã¡ã€ã«ã§æå¹ã«ãªã£ãŠããããšã確èªããŠãã ããã
- ã¿ã¹ã¯ã®äžŠåå®è¡: Nxã¯ã¿ã¹ã¯ã䞊åã«å®è¡ããŠãè€æ°ã®CPUã³ã¢ãå©çšã§ããŸãã `--parallel`ãã©ã°ã䜿çšããŠãã¿ã¹ã¯ã䞊åã«å®è¡ããŸãã
- 忣ã¿ã¹ã¯å®è¡ã®äœ¿çš: éåžžã«å€§èŠæš¡ãªã¢ãã¬ãã®å ŽåãNxã¯ã¿ã¹ã¯ãè€æ°ã®ãã·ã³ã«åæ£ããŠããã«ããšãã¹ãã䞊è¡ããŠå®è¡ã§ããŸãã
- ã³ãŒãã®æé©å: ã³ãŒããæé©åããŠããã«ãæéãççž®ããŸãã æªäœ¿çšã®ã³ãŒããåé€ããç»åãæé©åããã³ãŒãåå²ã䜿çšããŠãã³ãã«ã®ãµã€ãºãçž®å°ããŸãã
Nxã¯ãŒã¯ã¹ããŒã¹ã§ã®ãã¹ã
Nxã¯ãåäœãã¹ããçµ±åãã¹ããããã³ãšã³ãããŒãšã³ããã¹ããå®è¡ããããã®çµ±åãã¹ãããŒã«ãæäŸããŸãã `nx test`ã³ãã³ãã䜿çšããŠãã¯ãŒã¯ã¹ããŒã¹å ã®ãã¹ãŠã®ãããžã§ã¯ããŸãã¯ç¹å®ã®ãããžã§ã¯ãã®ãã¹ããå®è¡ã§ããŸãã
äŸ: ãã¹ãã®å®è¡
nx test my-app
ãã®ã³ãã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ãmy-appãã®ãã¹ãŠã®ãã¹ããå®è¡ããŸãã
Nxã¯ãJestãCypressãPlaywrightãªã©ã®äžè¬çãªãã¹ããã¬ãŒã ã¯ãŒã¯ããµããŒãããŠããŸãã åãããžã§ã¯ãã®`project.json`ãã¡ã€ã«ã§ãã¹ãç°å¢ãæ§æã§ããŸãã
Nxã䜿çšããç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãšç¶ç¶çãããã€ã¡ã³ãïŒCI/CDïŒ
Nxã¯ãGitHub ActionsãGitLab CIãJenkinsãªã©ã®äžè¬çãªCI/CDã·ã¹ãã ãšã·ãŒã ã¬ã¹ã«çµ±åãããŸãã Nxã®ã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠãCI/CDãã€ãã©ã€ã³ã§ã®ãã«ãããã¹ããããã³ãããã€ã¡ã³ããèªååã§ããŸãã
äŸ: GitHub Actionsã¯ãŒã¯ãããŒ
Nxã¯ãŒã¯ã¹ããŒã¹ããã«ãããã¹ããããã³ãããã€ããGitHub Actionsã¯ãŒã¯ãããŒã®äŸã次ã«ç€ºããŸãã
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
- uses: actions/setup-node@v3
with:
node-version: 16
cache: 'npm'
- run: npm ci
- run: npx nx affected --target=lint --base=origin/main --head=HEAD
- run: npx nx affected --target=test --base=origin/main --head=HEAD --watchAll=false
- run: npx nx affected --target=build --base=origin/main --head=HEAD
ãã®ã¯ãŒã¯ãããŒã¯ã次ã®ã¿ã¹ã¯ãå®è¡ããŸãã
- Linting: 圱é¿ãåãããããžã§ã¯ãã§ãªã³ã¿ãŒãå®è¡ããŸãã
- ãã¹ã: 圱é¿ãåãããããžã§ã¯ãã§ãã¹ããå®è¡ããŸãã
- ãã«ã: 圱é¿ãåãããããžã§ã¯ãããã«ãããŸãã
Nxã¯ã倿Žã®åœ±é¿ãåãããããžã§ã¯ãã§ã®ã¿ã¿ã¹ã¯ãå®è¡ã§ãã`affected`ã³ãã³ããæäŸããŸãã ããã«ãããCI/CDãã€ãã©ã€ã³ã®å®è¡æéãå€§å¹ ã«ççž®ãããŸãã
Frontend Nxã¯ãŒã¯ã¹ããŒã¹éçºã®ãã¹ããã©ã¯ãã£ã¹
Nxã§ããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ãã¹ããã©ã¯ãã£ã¹ã次ã«ç€ºããŸãã
- äžè²«ããã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã«åŸã£ãŠãã ãã: Prettierãªã©ã®ã³ãŒããã©ãŒããã¿ãŒãšESLintãªã©ã®ãªã³ã¿ãŒã䜿çšããŠãã¯ãŒã¯ã¹ããŒã¹å šäœã§äžè²«ããã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ãé©çšããŸãã
- åäœãã¹ããäœæããŸã: ã³ãŒãã®å質ã確ä¿ãããªã°ã¬ãã·ã§ã³ãé²ãããã«ããã¹ãŠã®ã³ã³ããŒãã³ãããµãŒãã¹ãããã³ãŠãŒãã£ãªãã£ã®åäœãã¹ããäœæããŸãã
- ãã¶ã€ã³ã·ã¹ãã ã䜿çšããŸã: ãã¶ã€ã³ã·ã¹ãã ã䜿çšããŠãUIã³ã³ããŒãã³ãå šäœã®äžè²«æ§ã確ä¿ããŸãã
- ã³ãŒãã®ããã¥ã¡ã³ãå: ä»ã®éçºè ãçè§£ããŠä¿å®ããããããã«ãã³ãŒãã培åºçã«ããã¥ã¡ã³ãåããŸãã
- ããŒãžã§ã³ç®¡çã®äœ¿çš: ããŒãžã§ã³ç®¡çã«Gitã䜿çšããäžè²«ãããã©ã³ãæŠç¥ã«åŸããŸãã
- ã¯ãŒã¯ãããŒã®èªåå: CI/CDã§ã¯ãŒã¯ãããŒãèªååããŠãã³ãŒããåžžã«ãã¹ããããèªåçã«ãããã€ãããããã«ããŸãã
- äŸåé¢ä¿ãææ°ã®ç¶æ ã«ä¿ã€: ææ°ã®æ©èœãšã»ãã¥ãªãã£ããããå©çšããããã«ãäŸåé¢ä¿ã宿çã«æŽæ°ããŸãã
- ããã©ãŒãã³ã¹ã®ç£èŠ: ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç£èŠããæœåšçãªããã«ããã¯ãç¹å®ããŸãã
é«åºŠãªNxã®æŠå¿µ
Nxã®åºæ¬ã«æ £ããããé«åºŠãªæŠå¿µã調ã¹ãŠãéçºã¯ãŒã¯ãããŒãããã«åŒ·åã§ããŸãã
- ã«ã¹ã¿ã ãžã§ãã¬ãŒã¿ãŒ: ã«ã¹ã¿ã ãžã§ãã¬ãŒã¿ãŒãäœæããŠãæ°ãããããžã§ã¯ããã³ã³ããŒãã³ããããã³ã¢ãžã¥ãŒã«ã®äœæãèªååããŸãã ããã«ãããéçºæéãå€§å¹ ã«ççž®ããäžè²«æ§ã確ä¿ã§ããŸãã
- Nxãã©ã°ã€ã³: Nxãã©ã°ã€ã³ãéçºããŠãã«ã¹ã¿ã ããŒã«ãšçµ±åã§Nxã®æ©èœãæ¡åŒµããŸãã
- ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³: ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ç¬ç«ããéšåãåå¥ã«ãã«ãããã³ãããã€ããŸãã ããã«ããããããã€ãé«éåãããæè»æ§ãåäžããŸãã
- Nx Cloud: Nx Cloudãšçµ±åããŠãé«åºŠãªãã«ãã€ã³ãµã€ãã忣ã¿ã¹ã¯å®è¡ãããã³ãªã¢ãŒããã£ãã·ã¥ãååŸããŸãã
çµè«
Nxã¯ãŒã¯ã¹ããŒã¹ã¯ãããã³ããšã³ãã¢ãã¬ãã管çããããã®åŒ·åã§å¹ççãªæ¹æ³ãæäŸããŸãã Nxã®é«åºŠãªããŒã«ãšæ©èœã掻çšããããšã«ãããã³ãŒãã®å ±æããã«ãããã©ãŒãã³ã¹ãããã³éçºè ã®ã³ã©ãã¬ãŒã·ã§ã³ãæ¹åããã¹ã±ãŒã©ãã«ã§ä¿å®å¯èœãªããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ãå®çŸã§ããŸãã Nxãæ¡çšãããšãéçºããã»ã¹ãåçåãããããŒã ã®çç£æ§ãå€§å¹ ã«åäžããŸããç¹ã«ãè€éã§å€§èŠæš¡ãªãããžã§ã¯ãã«åãçµãã§ããå Žåã¯å¹æçã§ãã ããã³ããšã³ãã®ç¶æ³ãé²åãç¶ããã«ã€ããŠãNxã䜿çšããã¢ãã¬ãéçºãç¿åŸããããšã¯ãããã³ããšã³ããšã³ãžãã¢ã«ãšã£ãŠãŸããŸã䟡å€ã®ããã¹ãã«ã«ãªãã€ã€ãããŸãã
ãã®ã¬ã€ãã§ã¯ãããã³ããšã³ãNxã¯ãŒã¯ã¹ããŒã¹éçºã®å æ¬çãªæŠèŠã«ã€ããŠèª¬æããŸããã ãã¹ããã©ã¯ãã£ã¹ã«åŸããé«åºŠãªæŠå¿µãæ¢æ±ããããšã«ãããNxã®å¯èœæ§ãæå€§éã«åŒãåºããçŽ æŽãããããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã