人ã«èª¬æããã®ãã¹ã ãŒãºã«ã§ããªããããªã®ã§ãçè«æŠè£
ãšãããé åºç«ãŠãŠè©±ãããã«ãã®èšäºããŸãšããã
察象
TL;DR
- ç¶æ³ããã¹ããã©ã¯ãã£ã¹ãç®ãŸããããå€ããçŸä»£ã«ãããŠãããã«å€åã§ãããœãããŠã§ã¢ãä¿ã€ããšã»ããã®æãã§ããã ã空ããããšãéèŠã
- ãã€ãŠIaaSãAPIãæäŸãç°å¢ç®¡çã®å€ããèªååããããã«ãåçš®ãµãŒãã¹ãAPIãWebhookãéããŠDevelopment Workflowã®å€ããèªååããŠããŠããã
- å€ãã®èŠç¹ãç¥èŠã掻ããcross functionalããŒã ã«ããå
±åéçºãæ¯ããããã«ãã³ã©ãã¬ãŒã·ã§ã³ãå©ããä»çµã¿ãå¿
èŠã
å眮ãïŒèª²é¡è§£æ±ºææ³ãšããŠã®çç£æ§åäž
æã
ã¯ãªãçç£æ§åäžãç®æãã®ãïŒãããã¯çç£æ§ãååã§ã¯ãªããšããèª²é¡æèã屿©æãæã£ãŠããããã ãããã§ã¯ããªãèª²é¡æèãæã£ãã®ãïŒãæ©èœã®å®è£
ãé²ãŸãªããšãããã°ãå€ããšããææ»ããå€ããšããæ¬è³ªçã§ãªãæ¥åãå€ããšããçŸå Žã«ãã£ãŠå€ãã®çç±ããããšæãããããããŠãããæ·±å ãããåã«ä»è
ãšãã£ããèª²é¡æèãå
±æããããã®èšèãšããŠãçç£æ§ãåäžããªããšãããšãã£ã衚çŸãçšããããã
èšãæããã°ãçç£æ§åäžãšããã®ã¯çŸå Žã®æ±ãã課é¡ã«å¯Ÿããæœè±¡çãªè§£æ±ºçã§ãããã®ã§ãçç£æ§ãåäžããã«ã¯ããªã©ãšè°è«ããŠããå°ã«è¶³ãã€ããè°è«ã«ã¯ãªããªããããªãçç£æ§ãäœãã®ãããæãäžããŠããã®è§£æ±ºçãèŠåºãå¿
èŠãããã
ããã§éèŠãªã®ã¯ããªãäœãã®ããã¯æ¯èŒå¯Ÿè±¡ãç¥ããªããã°èª¬æã§ããªãããšã ããããä»ã®ããŒã ãå®éã«åããŠããéçºãªã®ããã¹ã±ãžã¥ãŒã«ããéç®ãããçæ³çç£æ§ããªã®ãã¯èª²é¡ã§ã¯ãªãããããããããã¹ãå§¿ããå
±æãããŠã¯ãããŠæ¯èŒãã§ããKPIïŒã¢ããµã·ïŒãçãŸããè°è«ã§ããããã«ãªããããã¯éçºææ³ãçµç¹ãããã»ã¹ãªã©ãã©ãã«èª²é¡ãããå Žåã§ãåãã ã
ããã¯ãã®ããã°ã§ç¹°ãè¿ãåºãŠããŠããproblem solvingã®èãæ¹ã§ãããçæ°ãããã®ã§ã¯ãªããåã«èª²é¡ã®èšå®ãšå
±æããã¡ããšããããšãã話ã§ããã課é¡ãèšå®ãããŠã¯ãããŠã課é¡è§£æ±ºã®é²æãæœçã®åŠ¥åœæ§ãè©äŸ¡ã§ãããDevelopment Workflowã«æãå
¥ããåã«ãæ¬åœã«å¿
èŠãªãã®ãããã§æã«å
¥ãã®ã確èªããå¿
èŠãããã
Development Workflow
ç§ã¯Development Workflowã¯èªåã®å°éãšããããã§ã¯ãªãããŸããŠã©ããã£ãŒãèªä»»ã§ããã»ã©æéããããŠãã¬ã³ãã远ã£ãŠããªãããã¡ãšã³ãžãã¢ã®çè§£ã§ããäœãã代衚ãããã®ã§ã¯ãªãããšããã¯ããã«æ¹ããŠåŒ·èª¿ããŠããã
ãŸãããã§Development Workflowãšããã®ã¯CI, CD, DevOpsãšãã£ãæèã§åºãŠãããã€ãã©ã€ã³åŠçãç¹ã«ç¢ºèªãæ¿èªãæåãã¹ããšããéèªåååŠçããå«ããäžé£ã®æµããæããŠãããã¯ãŒã¯ãããŒã®ãçµç¹ãã¯ææç©ã®ãããã€ã ãã§ãªããããŒã ãžã®ãã£ãŒãããã¯ïŒåŠç¿æ©äŒã®æäŸã§ããããšãå€ãã
ãã€ãŠDevelopment Workflowã¯ã©ã®ãããªãã®ã ã£ãã
èªåã10幎åã«ã©ãããDevelopment Workflowãçµãã§ããããšãããšãæŠã以äžã®éãã ã£ãããã«èšæ¶ããŠããïŒäŸ¿å®äžHudsonãJenkins*1ãšè¡šèšïŒïŒ
- trunk, branches, tagsãåããSubversionã«ããã³ãŒãã®ããŒãžã§ã³ç®¡çïŒãã©ã³ãåãæ¿ãã³ã¹ããé«ãïŒ
- èšå®ç»é¢ãå©çšããJenkinsãžã§ãã®äœæã»èšå®
- ãã©ã³ããæå®ããŠå®è¡ããJenkinsãžã§ããéçºè
ã«å¯Ÿããå
Ž
- ãã©ã°ã€ã³ã«ããJenkinsã®æ©èœæ¡åŒµ
- Mavenã®èŠªpomãã¡ã€ã«ãå©çšãããããžã§ã¯ã管ç
- LANã«éããéçºç°å¢
- ç°å¢æ§ç¯ãéçºäœæ¥ã®æé æžãWikiçã§ã¡ã³ãïŒ.jarãã¡ã€ã«ã®æåé
眮ããã¹ãæé ãIDEèšå®æ¹æ³ãªã©ïŒ
èªååãããŠããã®ã¯ãžã§ããšåŒã°ããåçºäœæ¥ã®ã¿ã§ããã€ã©ã®ããã«å®è¡ãããã¯äž»ã«ããã«å§ããããŠãããåºè·äœæ¥ãããã«ã¯ãã®ãžã§ãããããã£ããã©ã¡ãŒã¿ã§å®è¡ããããšããšããæé æžãå¿
èŠã ã£ãã®ã§ãããVCSäžã§ã®å€æŽãç¥ãã«ã¯pollingãå¿
èŠãšããŠããããçµæãããã«éç¥ããææ³ã¯ã¡ãŒã«ãäž»äœã ã£ãã®ã§ãäœãã匷å¶ããããšã¯é£ããã£ãã
åœæã¯ãŸã ãã«ãè·äººãšããèšèããã£ãããããã¯ææç©ã®äœæãç¹å®ã®ç°å¢ãå人ã§ããè¡ããªãã£ããããžã§ãå®è¡æéãéåžžã«é·ãã£ããããããšãåæ ããŠãããå®éãã«ãç°å¢ã坿¬ã«ããããšã¯ãŸã é£ããããŸãæé æžãå¿
èŠãªçŸå Žãå€ãã£ãã®ã§ã¯ãšæšæž¬ãããã
è¿å¹ŽDevelopment Workflowåšãã§èŠãããå€å
éã«ãåœæã«ç¡ããã10幎ã§éçºããæ®åãããã®ãæãã€ãéãåèšããïŒ
- ãã©ã³ããå©çšããããVCSïŒGitïŒ
- ç»é¢ã«ããèšå®ã§ã¯ãªããVCSã«ãã£ãŠç®¡çããããã¡ã€ã«ããèšå®
- CIãã€ãã©ã€ã³
- ã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ã
- è€æ°ããŒãã«ããããã¹ãã®parallelå®è¡
- ãããžã§ã¯ãããšã«å©çšããJDKãåãæ¿ããä»çµã¿
rvm
ã¯ãã£ããããªã®ã§ãä»èšèªã«ã¯å®è¡ç°å¢ããããžã§ã¯ãããŒã«ã«ã®ãã¡ã€ã«ã§æå®ããä»çµã¿ã¯ãã£ãïŒ- éçºç°å¢ã«ã¯ãããããè€æ°ã®JDKãå
¥ããŠããããšã§ãToolchainã䜿ã£ãŠäœ¿ããã®ãæå®ããä»çµã¿ã¯ãã£ãïŒã©ã®çšåºŠæ®åããŠããã®ãã¯äžæïŒ
- Disposableã§Reproducibleãªãé »ç¹ã«å£ããŠäœããªãããç°å¢
- Vagrant Sahara pluginãåºãã®ã2011幎
- Boxenãåºãã®ã2012幎
- Dockerãåºãã®ã2013幎
- ChefãšPuppet, EC2ã«AMIã¯ãã£ãã®ã§ãèªåã§ã³ãŒãæžããŠå®çŸããæã¯ãã£ããšæãïŒèªåã¯ãã£ãèšæ¶ããªãïŒ
- CLIããå®è¡ã§ãããèšå®ãVCSã§å
±æå¯èœã§ç°å¢éäŸåãªã³ãŒããã©ãŒããã¿ãŒ
gofmt
, rustfmt
, Prettier, Spotlessãªã©- ã³ãŒããã©ãŒããããå人ã®ç°å¢ã»èšå®ã«äŸåããå¿
èŠæ§ããªãããå·®åã¬ãã¥ãŒã容æã«ãã
- ãã±ããäžå¿äž»çŸ©ã®ç·©å
- PRã§å€æŽãææ¡ãããã®äžã§è°è«ã»ä¿®æ£ã§ãã
- äžå
·åãåçŸãããã¹ããPRã§éããåäžPRå
ã§ä¿®æ£ãããŒãžã§ããïŒãã±ããã«ããå ±åãæ®ã£ãŠã¯ããïŒ
- GitHub Releasesãªã©ã§ã¿ã°ã«å¯ŸããŠæ
å ±ãæ®ããã®ã§ãªãªãŒã¹äœæ¥ããã±ããäžèŠ
- ãã±ãããäœã£ãŠè°è«ãå°œãããŠããã³ãŒããæžãã±ãŒã¹ã¯ãã¡ããæ®ã£ãŠããããé¢é£äœæ¥ã®èšé²ã»éçŽã®ããã«ãŸããã±ãããäœããšãããããŒã¯ã»ãŒäžèŠã«ãªã£ã
- ãã±ãã管çã·ã¹ãã ã®è²¬åãã倿Žã®èšé²ãå€ããèŠä»¶ã®èšé²ã«æ³šåã§ããããã«ãªã£ã
- ä»ã·ã¹ãã ãšã®é£æºãåæãšããAPIãWebHookãã¢ã¯ã»ã¹ããŒã¯ã³
- éçšãè©ä»£ãããæ¬è³ªã«æ³šåãããŠãããSaaS矀
- ãã³ãéã§çµ±äžãããã€ã³ã¿ãã§ãŒã¹ïŒWebDriver, JS, CSSãªã©ïŒ
倿§ã«ããããããã®å€ãããã«ãæéã®ççž®ãç°å¢ç®¡çãæ¥œã«ããããšãã·ã¹ãã ãâç¹ãâããšã«è²¢ç®ãããã®ã§ããã
10幎åãšæ¯èŒããŠãã©ã®ãããªããŒãºã®å€åããã£ãã®ã
æè¡ã®é²å±ãšããã®ã¯ããšããæ¯ãè¿ããšããªãã§ä»ãŸã§ãªãã£ããã ã£ãïŒããšæãããã®ãå€ãããDevelopment Workflowãæ§æãããµãŒãã¹ã®æé·ã«ãåãããšãæããã
äŸãã°10幎åã¯ããã«äœ¿ãããããšãåæã«GUIãéããŠæäŸããŠããæ©èœã®å€ããããµãŒãã¹ãã䜿ãããããšãåæã«WebAPIãVCSã§ç®¡çããããã¡ã€ã«ã«ãã£ãŠäœ¿ããããã«ãªã£ãããããGUIãšCUIã©ã¡ããæè¡çé£æåºŠãé«ãããšèšããšãäžè¬çã«GUIã ãããGUIãæäŸã§ãããCUIã¯ã§ããªãããšããã±ãŒã¹ã¯ããŸããªãã¯ãã ã
ã§ã¯ãªã10幎åã¯GUIãäžå¿ãšããŠããã®ãïŒããã¯ïŒç¹ã«Jenkinsã«ã€ããŠã¯ïŒå©çšè
ã«å¯ŸããããŒãã«ãäžããé¢ããããšæãããæå®è¡ããããšãããŸãåé¡ã«ãªããªãã£ããèšå®ãéçšããªãŒãã³ã«ã誰ã§ãè§Šããããã«ããã¢ãããŒã·ã§ã³ãé«ããªãã£ãããšãèŠå ãšããŠæããããããã£ãšèšãã°ãåœæã¯1æ¥ã«æ°åã®ãã«ãã§ååã«ããžãã¹ãåããã®ã ãDevOpsã®èåããšãªã£ãFlickrã®çºè¡šãã¡ããã©10幎ã¡ãã£ãšå*2ã ããããããåœæã¯ãŸã å€ãã®çµç¹ã§ãéçºãšéçšã®å¯Ÿç«ããåºè·åæ€èšŒã®éèŠããæ®ã£ãŠããã¯ãã ãFlickrãå§ããšããå€ãã®çµç¹ã§ãã€ã³ãã©ã®ã³ãŒãåãå
±æãããVCSãªããžããªãããã«çç£æ§ãžè²¢ç®ããããæ³šç®ãããé ãšãèããããã
ã€ãŸã10幎åãšä»ã®å€§ããªéãã¯ãéçºã«ããã詊è¡é¯èª€ã®é床ã ãèªåãã¹ããç¶ç¶çãããã€ãã«ãªã¹ãšã³ãžãã¢ãªã³ã°ãã³ã³ãããªã©ã®æ§ã
ãªæè¡ãçãŸããããšã§ããœãããŠã§ã¢ãããçŽ æ©ãå€åãããã®ã«ãªã£ãŠããããŸããœãããŠã§ã¢éçºã®çŸå Žã«çµéšäž»çŸ©ã®èããåŒ·ãæ ¹ä»ããŠããããšããã¹ã¿ãŒãã¢ãããšãœãããŠã§ã¢ã®çžäºã®çµã³ã€ãããããœãããŠã§ã¢ãçŽ æ©ãå€åã§ããããšãããžãã¹ã§æå©ã«åããšåŒ·ãä¿¡ããããããã«ããªã£ãŠãããDevOpsãSREãçãŸããèæ¯ããããè£ä»ããŠããããã«æãã
é床ãéããšã¯ãã©ãããããšããäŸãã°10幎åã®ç§ã«ãGradle Pluginã®éçºã§ãã¹ãã«äœ¿ãGradleã®ããŒãžã§ã³ãå¢ããããããªããããªããšãJenkins管çè
ã«ãé¡ãããªããã°ãªããªãã®ãããšèšã£ããšããã§ããããã¡ãŒã«äžæ¬ã ãå¥ã«ããããããäœæ°ã«ããŠãã®ïŒããšäžæè°ããããã«éããªããä»ã¯ãããPRã²ãšã€ã§å®çŸå¯èœã ããåœæã¯ããã§ã¯ãªãã£ãã
ä»ã®äŸã§ã¯ãMavenã®ãã°ãåé¿ããããã«ããŒãžã§ã³ãäžãããšããŠãJenkins管çè
ã«ãé¡ãããŠCIç°å¢ã®ããŒãžã§ã³ãäžããã ãã§ãªããåéçºè
ã®äœ¿ã£ãŠããMavenã®ããŒãžã§ã³ãŸã§äžããã«ã¯ã¡ãŒã«ã§ããŒãžã§ã³ãäžããããäŸé Œãã€ã€maven-enforcer-pluginã§æå³ããªãããŒãžã§ã³ã§ãã«ãããå Žåã«èœã¡ãããã«ããå¿
èŠãããã ãããããã«è€æ°ãããžã§ã¯ãã§å®æœããã«ã¯ãã¹ãŠã®ãããžã§ã¯ãã®pom.xmlãæžãæããããããããã芪pomãäœæããŠåãããžã§ã¯ãã«äŸåãããmaven-enforcer-pluginã®èšå®ã芪pomã«å ããŠprivate maven repositoryã«deployããŠããåãããžã§ã¯ãã®pom.xmlãæžãæããå¿
èŠããããæãé·ããŠãããã«ãããããšããããé¢åãªããã»ã¹ãå¿
èŠãšããããšãäŒããã°è¯ãããããMaven Wrapperã䜿ãããã«ããã°PRã²ãšã€ã§æžããããã«ãŠã§ã¢ã«ã€ããŠãåæ§ã§ãDockerfile
ãªãdocker-compose.yml
ãªãAnsibleãªããäœããã®ãã¡ã€ã«ãå°ãå€ããã ãã§æå³ããããŒãžã§ã³ã確å®ã«äœ¿ãããããã«ã§ããã
ããããŠè£œåãªããéçºç°å¢ãå€ããããšãPRã²ãšã€ã§ã§ããããã«ãªã£ãã ãã§ãªããããŒãžåã®ããã»ã¹ã®ç°¡çŽ åã»ççž®åãå³ãããããã«ãªã£ããTracã§ãã±ãããäœã£ãŠæå
ã§å¯Ÿå¿ããããããäœã£ãŠReview Boardã§ã¬ãã¥ãŒããŠåé¡ãªããã°ããããé©çšãããšããè€æ°ã®ã·ã¹ãã ãè¡ãæ¥ããæ¹æ³ãããæ€èšŒæžã¿ããŒãžãPull Requestãšãã£ãã²ãšã€ã®ã·ã¹ãã ã§å®çµããæ¹æ³ãžãšå€åããããŸãPre-merge buildèªäœã®å®è¡æéãåçš®æè¡ã«ãã£ãŠççž®ãããããããã«ãŠã§ã¢ã䜿ã£ãçµ±åãã¹ããäœ¿ãæšãŠç°å¢ãäœãããããªã£ãã®ã§å®è¡ããããšãã«ä»ã®ãã¹ããšã®è¡çªãæ°ã«ããå®è¡ã§ããããã«ãªã£ããæ°ã«ããããšãæžããšããã®ã¯ãPre-merge buildã§ããããªããšãèªåçã«ç¢ºèªã»æ€èšŒããããšããããŒãºãæºããäžã§å¿
èŠã ãçµ±åãã¹ããåããŠäºææ§ãå£ããŠããªãããšã確èªãããã®ã«ãDBãä»ã®ãã¹ãã§äœ¿ãããŠããã®ã§åŸ
ã€å¿
èŠãããããªããŠäºæ
ã¯é¿ãããã®ã ã
10幎åãšä»ã®ãçç£æ§ããæ¯ã¹ããšãã«ããã®éçºããã»ã¹ã®éãã¯å€§ããªå·®ãçãã«éããªãã
èªååãææ©ç飿ºããããŠãªã¢ã¯ãã£ãã¯ãŒã¯ãããŒ
å¥ã®è¡šçŸããããšã10幎åã¯çååã®ããã«äœæ¥ã®èªååãæšå¥šãããããã§ååç«¶äºåãçãã§ããããã®åŸãèªååãããäœæ¥ãææ©çã«ç¹ãåãããããã«ãªããCIãã€ãã©ã€ã³ãç»å Žãã*3ããã®åŸã§WebAPIãWebHookçã®æŽåã«ãããPRãcron以å€ã§ããã€ãã©ã€ã³ãèªåçºç«ããããšãå¢ãããªãªãŒã¹äœæ¥ããããã€ãããã¥ã¡ã³ãæŽåãªã©å€æ§ãªäœ¿ãæ¹ããããããã«ãªã£ããšèšããã ããã
è¿å¹Žã¯è匱æ§å¯Ÿå¿ã®èгç¹ãããã©ã€ãã©ãªã®ãªãªãŒã¹ãè匱æ§ã®å
¬éãã€ãã³ããšããŠäœ¿ããããã«ãªã£ãŠããŠãã*4ãããããåŸæ¥ãªãéçºè
ãåãã³ãããã®æ
å ±ãRSSãSNSçã䜿ã£ãŠãŠã©ããããå¿
èŠããã£ãã
ããŠãžã§ãã®äžŠåå®è¡ã»äžŠè¡å®è¡ãªãã³ã«ææ©çé£åž¯ã«ã€ããŠã¯PipelineãWorkflowãšããçšèªãååšãããããã®ããã®æç€ºã«ããå®è¡ã§ã¯ãªãã€ãã³ãã«å¿ããå®è¡ãæèããçµã¿æ¹ã«ã€ããŠã¯ç¹ã«åºæåè©ããªãããã«æããã€ãã³ããåãåãã¹ããŒãã¬ã¹ãªèŠçŽ ãã€ãªãåãããŠå®è¡ããæ§ããªã¢ã¯ãã£ãã·ã¹ãã ã®èãæ¹ã«è¿ãããšãããããã§ã¯ãªã¢ã¯ãã£ãã¯ãŒã¯ãããŒïŒReactive WorkflowïŒãšåŒã¶ã
ãªããªã¢ã¯ãã£ãã¯ãŒã¯ãããŒã奜ãŸããã®ãããã®èª¬æã¯Reactive Manifestoãæµçšå¯èœã ã䜿ããããšãã«ãã䜿ãïŒResponsibleïŒããžã§ããã¹ããŒãã¬ã¹ãªããå£ããŠãåå®è¡ã§ã»ãŒå¯ŸåŠã§ãïŒResilientïŒãããžãã¹äžã®èŠè«ãããã¯æè¡çãªå¿
èŠæ§ããçãŸããçªçºçãªè² è·ã«å¯Ÿå¿ããïŒElasticïŒããŸãåãžã§ãã®å
¥åºåãã³ãããããã·ã¥ããã©ã¡ãŒã¿ãªã©äžå€ãªãã®ãã»ãšãã©ã§ããããšãšãã¯ãŒã¯ãããŒåºç€ããµãŒããŒã¬ã¹ã¢ãŒããã¯ãã£ã§æ§æãããããšãå€ãããšãããã¡ãã»ãŒãžé§åã®ã¡ãªããã享åã§ãããšæãããã
ãããããŠãŒã¶ïŒéçºè
ïŒãšããŠã¯Responsibleã§ããããšãæãéèŠã ãJenkinsã®ãã¹ã¿ãŒããšãŒãžã§ã³ããLANå
ã«æ§ç¯ããŠããïŒãµãŒããŒã¬ã¹ã§ãªãã£ãïŒããã¯ãè³æºãããŸã䜿ãããã«å€éã«å®äŸåŠçãåããã鱿«ã«ãã¹ããåããããšãã£ã工倫ãå¿
èŠã ã£ããããã¯ãªã¢ã¯ãã£ãã¯ãŒã¯ãããŒãçµã¿ãè³æºã®ç®¡çãSaaSãããã¯IaaSã«æŒãä»ããããšã§ãå¿
èŠãªãšãã«å¿
èŠãªã ãå®è¡ãå³çµæãåãåããããã«ãªã£ããElasticã§ããããšãåããã£ãŠãéçºè
ãæ¬è³ªçã§ãªãæ°é£ããæãïŒãã«ã䞊ååãªã©ã«ãã£ãŠïŒéçºé床ãäžããããšã«è²¢ç®ã§ããããã ã
ããããŠã¿ããšãã³ã³ããïŒãžã§ãã¯ã³ã³ããå
ã§èµ°ãããšãããïŒããµãŒããŒã¬ã¹ãšãã£ãæ°æè¡ã«ãã£ãŠæè¿ã®Devlopment Workflowãæ¯ããããŠããã®ã ãªãšæããã
ã³ã©ãã¬ãŒã·ã§ã³ã®éèŠæ§
è¿å¹Žã®éçºææ³ãäŸãã°SREãDevOps, Lean, cross-functional teamã«ã€ããŠçŽè§£ããšãå人ã®åœ¹å²ãæç¢ºåã»çްååãããšåæã«çµç¹ã®ãµã€ãåãé²ãããšã«å€å€§ãªé¢å¿ãæã£ãŠããããšã䌺ãããèåãªã®ãError Budgetã§ãReliabilityã®å®çŸãç®çãšããSREãšå€æ§ãªãããã€ã倿°è¡ãïŒããšã«ãããããã¯ãã®æ¹åïŒãç®çãšããéçºãšããäžèŠçžåããè¡ååçãæã€åœ¹å²ãããŸããåã課é¡ã解決ããããŒã ããžãšä»ç«ãŠäžãããµã€ãåãé²ãã§ããã詳ããè©±ã¯æžç±ã«è²ã岿ããïŒ
![The DevOps ãã³ããã㯠çè«ã»ååã»å®è·µã®ãã¹ãŠ The DevOps ãã³ããã㯠çè«ã»ååã»å®è·µã®ãã¹ãŠ]()
ä»ã«ããããã¯ããããžã¡ã³ããã©ã€ã¢ã³ã°ã«ã§ããç«å Žãç°ãªããããããã«é£åž¯ããæ©èœãããããšããé¢å¿ããšã«ã€ããŠèª¬ããŠãããããã®è°è«ã®äžå¿ã¯Productãšãã誰ããå
±æããŠããã¢ãã«ããïŒãšç§ã¯è§£éããïŒããã¶ã€ããŒã¯éçºè
ã®çã¿åºã䟡å€ããŠãŒã¶ãŒã«å±ããããã«ã©ããã¶ã€ã³ãã¹ãããçµå¶ã¯éçºè³æºãå¹ççã«äœ¿ãããã«ã©ããããžã¡ã³ããã¹ãããéçºè
ã¯ãŠãŒã¶ã«è£œåã®é
åãäŒããããã«ã©ãã³ãã¥ããã£ãç¯ãã¹ããªã®ãããã®ãã¹ãŠã®ã³ã©ãã¬ãŒã·ã§ã³ã補åãšããOutputãéããŠOutcomeãçã¿åºããéçºãããžãã¹ããŠãŒã¶ã®ã©ããåã£ãŠãç¬ç«ããŠãããããã¹ãŠãProductãä»ã®ããŒã«ãšç¹ãã£ãŠããããããã¯ããããžã¡ã³ãã¯ããã®ã³ã©ãã¬ãŒã·ã§ã³ãèªããŠã¯ãããŠã§ãããã®ã ã
ããã²ãšã€ãé¢çœã芳ç¹ã«ããã¯ã¹ã¿ãŒãšã³ãžãã¢ãšãããã€ããããæèœãªãšã³ãžãã¢ã¯ããã§ãªããšã³ãžãã¢ã®10åããããã¯27åã®çç£æ§ãæã£ãŠãããšããold termã ãããããã¶ãæã¯èª¬åŸåã®ããæŠå¿µã ã£ãã®ã ããããè¿å¹Žã§ã¯å
šã䜿ãããªããªã£ãŠããã代ããã«technology raderã§ã¯10x teamãšãã衚çŸã玹ä»ããŠããŠãçŽ æŽãããoutputãçŽ æŽãããããŒã ã«ãã£ãŠçãŸãããšããŠãããããã¯Googleãç ç©¶ã§æããã«ããããŒã ããããžã¡ã³ãã®éèŠæ§ã«ãã£ãŠãè¯å®ãããŠãããšèšãããã
ã€ãŸãè¿å¹Žã®ãœãããŠã§ã¢éçºã®çŸå Žã§ã¯ãå人ãè²ãŠãããšä»¥äžã«ããŒã ãè²ãŠãããšã«é¢å¿ãæã£ãŠãããå人ãè²ãŠçµç¹ãéçºããããšã§ãããžãã¹äžã®ç«¶äºåãå¹ççã«é«ããŠããããšä¿¡ããŠããããã ã
ããŒã ãè²ãŠãã«ã¯æ§ã
ãªææ³ãããã ããããæé·ãå
çã«ãã£ãŠçãŸããããšãèããã°Blameless Postmortemã®ãããªäºå®ãšåãåãçæ§çãªè°è«ãéããŠããè¯ãå§¿ãæš¡çŽ¢ããæŽ»åã«ã¯äžå®ã®äŸ¡å€ããããšæãããã倱ææã«éããæ¥é ããåçã®æ©äŒãæã€ããšãScrumã§èšãSprint Retrospectiveã®ãããªå®äŸã€ãã³ããå©ãã«ãªãã ããã
ããŠãã®æã®ã€ãã³ãããã£ãŠã¿ããšãããã®ããæºåã®ã³ã¹ããé«ãããšã ãPostmortemã®ããã«ã¯äºå®ããªã¢ã«ã¿ã€ã ã«èšé²ããªããã°ãªããªãããããã·ãã£ã枬ãã«ã¯æ¥ã
ãã±ããæ¶åã®ç¶æ³ãèšé²ããå¿
èŠããããèªåãšã¯éãå°éæ§ãæã€ããŒã ã¡ã€ãã«åããŠè³æãæŽçããããšãããããããããããããããã«ã°ã©ããæŽçããããšãããã ããã宿çãªã€ãã³ãã®æºåããã¹ãŠäººåã§ãã£ãŠããŠã¯ãç¶ç¶çã«ã³ã¹ããæãããšã«ãªãã
Development Workflowã¯ãã®ã³ã¹ããäžããããšãã§ããã人æã䜿ã£ãŠèšŒè·¡ãæ®ããŠããéçšããèªåçã«ãã°ãæ®ãéçšã«å€ãããããChatOpsãGitOpsãæãã€ã¡ãŒãžããããã ããã
ãŸãèªååãSaaSãªã©ã«ãã£ãŠãçžæã®å°éæ§ã«åããããã¥ãŒããã¡ã€ã«åœ¢åŒã§æ
å ±ãæäŸããã³ã¹ããäžãããããäŸãã°ãã¶ã€ãã®èŠè«ãåããŠCSSã倿Žãããšãã«ããããæ¢åããŒãžã«ã©ããã£ã圱é¿ãåãŒãããpercyã®ãããªGUI regression testingãæŽã£ãŠããã°ã¹ã¯ãªãŒã³ã·ã§ãããåãããšç¡ãPRäžæ¬ã§èª¬æã§ããã
ãŸãšã
ãšããšãã®ãªããŸãŸã«æžãäžããçµæãã²ã©ãããšã«ãªã£ãŠããŸã£ããã
çµå±ã¯ãcross-functional teamãšããŠé«éåºŠã§ææãåºãããšããæä»£ã®èŠè«ã«èªååãã³ã³ããããµãŒããŒã¬ã¹ãšãã£ãæè¡ãå¿ãã圢ãããŸã®ãªã¢ã¯ãã£ãã¯ãŒã¯ãããŒãªã®ã ãšæããæ©æ¢°åŠç¿ãæ¥åæ¹é©ã®æèã§ãæ©æ¢°ãã§ããããšã¯æ©æ¢°ã«ããããŠãããã¯ããã«ããã§ããªãããšããããããšèšãããããéçºããã»ã¹ã«ãããé©çšãããã®ãããã ã
äºå®ãšåãåãèããããšããããããã«ããã§ããªãããšã ãäºå®ïŒãã°ïŒã®éçŽãè§£æããã¹ãããã«ããšãã£ãéçºäœæ¥ãã©ã€ãã©ãªã®æŽæ°ãè匱æ§å ±åã®ç²Ÿæ»ãšãã£ãå®äŸäœæ¥ã¯ãã¹ãŠãªã¢ã¯ãã£ãã¯ãŒã¯ãããŒã«ãããããç§éã¯äžãã£ãŠããããŒã¿ãããšã«èããè°è«ããå
çããç«ãŠã仮説ãããšã«æ¬¡ã®PRãäœããGitã«pushããã°æ©äŒã倿Žã®åŠ¥åœæ§ããŸãæ€èšŒããŠãããã®ã§ãããã¯æ¢ç¥ã®åé¡ãç¡ãããšãåæã«è°è«ãå°œããããšãã§ãããã¿ãæåãã¹ããŒã¹ããæ¬åŒ§ã®äœçœ®ã¯ã©ãã«ããããªããŠè°è«ãPRã§ããæä»£ã§ã¯ããç¡ãã®ã ã
ãã¡ããããã§è°è«ããã®ã¯ããçš®ã®çæ³åœ¢ã§ããã¹ãŠã®ãããžã§ã¯ãããããæºããããšã¯éããªããç§ãèŠãŠããFOSSãããžã§ã¯ãã«ãããŸã æåã§è²ã
ãšãããªããã°ãªãªãŒã¹ããã§ããªããã®ãããããŸã10幎åã§ãæ¢ã«ãªã¢ã¯ãã£ãã¯ãŒã¯ãããŒãåããŠãããšããããããããããªãã