çŸåšãã»ãšãã©ã®ãœãããŠã§ã¢è£œåã¯ããŒã ã§éçºãããŠããŸãã ããŒã éçºãæåããããã®æ¡ä»¶ã¯ãç°¡åãªå³ã®åœ¢ã§è¡šçŸã§ããŸãã
ã³ãŒããäœæãããã次ã®ããšã確èªããå¿
èŠããããŸãã
- ããŸããããŸãã
- ååãæžããã³ãŒããå«ããŠãäœãå£ããããšã¯ãããŸããã
äž¡æ¹ã®æ¡ä»¶ãæºããããŠããã°ãæåãžã®éãé²ãã§ããŸãã ãããã®æ¡ä»¶ãç°¡åã«ç¢ºèªããåçæ§ã®é«ãéããå€ããªãããã«ããããã«ãç§ãã¡ã¯ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãæãã€ããŸããã
CI ã¯ãã³ãŒããã§ããã ãé »ç¹ã«è£œåã³ãŒãå
šäœã«çµ±åããã¯ãŒã¯ãããŒã§ãã ãŸããåã«çµ±åããã ãã§ãªãããã¹ãŠãæ©èœããŠããããšãåžžã«ãã§ãã¯ããŸãã é »ç¹ã«å€§éã®ãã§ãã¯ãè¡ãå¿
èŠããããããèªååãæ€èšãã䟡å€ããããŸãã ãã¹ãŠãæåã§ç¢ºèªããããšãã§ããŸããããããã¹ãã§ã¯ãããŸããããã®çç±ã¯æ¬¡ã®ãšããã§ãã
- 芪æãªãçããã ããã°ã©ããŒã® XNUMX æéã®äœæ¥ã¯ããµãŒããŒã® XNUMX æéã®äœæ¥ãããé«äŸ¡ã§ãã
- 人ã¯ééããç¯ãã ãããã£ãŠããã¹ããééã£ããã©ã³ãã§å®è¡ããããããã¹ã¿ãŒåãã«ééã£ãã³ããããã³ã³ãã€ã«ããããããç¶æ³ãçºçããå¯èœæ§ããããŸãã
- 人ã ã¯æ ãè ã§ãã æã ãã¿ã¹ã¯ãçµãããšãã«æ¬¡ã®ãããªèããæµ®ãã³ãŸãã XNUMX è¡æžããŸãããããã¹ãŠããŸããããŸããã çããã®äžã«ããæã ãããªæããæ±ã人ããããšæããŸãã ããããåžžã«ãã§ãã¯ããå¿ èŠããããŸãã
Avito ã¢ãã€ã«éçºããŒã ã§ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãã©ã®ããã«å®è£
ããã³éçºããããã0 æ¥ããã 450 ãã 200 ã®ãã«ããã©ã®ããã«è¡ããããããããŠãã«ã ãã·ã³ã¯ XNUMX æ¥ XNUMX æéçµã¿ç«ãŠããããš Nikolai Nesterov æ°ã¯è¿°ã¹ãŠããŸã (
ãã®è©±ã¯ Android ã³ãã³ãã®äŸã«åºã¥ããŠããŸãããã»ãšãã©ã®ã¢ãããŒã㯠iOS ã«ãé©çšã§ããŸãã
æã ãAvito Android ããŒã 㧠XNUMX 人ãåããŠããŸããã å®çŸ©äžã圌ã¯ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ããäœãå¿ èŠãšããŸããã§ãããçµ±åããçžæãããªãã£ãã®ã§ãã
ããããã¢ããªã±ãŒã·ã§ã³ã¯æé·ããæ°ããã¿ã¹ã¯ãã©ãã©ãç»å Žããããã«å¿ããŠããŒã ãæé·ããŸããã ããæç¹ã§ãã³ãŒãçµ±åããã»ã¹ãããæ£åŒã«ç¢ºç«ããææãæ¥ãŸãã Git flow ã䜿çšããããšã«ããŸããã
Git ãããŒã®æŠå¿µã¯ããç¥ãããŠããŸãããããžã§ã¯ãã«ã¯ XNUMX ã€ã®å
±éã®éçºãã©ã³ãããããéçºè
ã¯æ°æ©èœããšã«å¥ã®ãã©ã³ããåãåããããã«ã³ãããããŠããã·ã¥ããã³ãŒããéçºãã©ã³ãã«ããŒãžããå Žåã¯ããã«ãªã¯ãšã¹ãã ç¥èãå
±æããã¢ãããŒãã«ã€ããŠè©±ãåãããã«ãã³ãŒã ã¬ãã¥ãŒãå°å
¥ããŸãããã€ãŸããååããäºãã®ã³ãŒãããã§ãã¯ããŠç¢ºèªããå¿
èŠããããŸãã
å°åæ
ã³ãŒããç®ã§èŠãã®ã¯çŽ æŽãããããšã§ãããããã ãã§ã¯ãããŸããã ãããã£ãŠãèªåãã§ãã¯ãå°å ¥ãããŠããŸãã
- ãŸãæåã«ç¢ºèªããŸã ARKã¢ã»ã³ããª.
- ãããã Junit ãã¹ã.
- ã³ãŒãã«ãã¬ããžãèæ ®ããŸãããã¹ããå®è¡ããŠããããã§ãã
ãããã®ãã§ãã¯ãã©ã®ããã«å®è¡ããããç解ããããã«ãAvito ã®éçºããã»ã¹ãèŠãŠã¿ãŸãããã
ããã¯æ¬¡ã®ããã«å³åŒçã«è¡šãããšãã§ããŸãã
- éçºè ã¯ã©ãããããã§ã³ãŒããæžããŸãã ããã§çµ±åãã§ãã¯ãå®è¡ã§ããŸããã³ãããããã¯ã䜿çšããããããã¯ã°ã©ãŠã³ãã§ãã§ãã¯ãå®è¡ããã ãã§ãã
- éçºè ã¯ã³ãŒããããã·ã¥ããåŸããã« ãªã¯ãšã¹ããéããŸãã ãã®ã³ãŒããéçºãã©ã³ãã«å«ããããã«ã¯ãã³ãŒãã¬ãã¥ãŒãééããå¿ èŠãªæ°ã®ç¢ºèªãåéããå¿ èŠããããŸãã ããã§ãã§ãã¯ãšãã«ããæå¹ã«ã§ããŸãããã¹ãŠã®ãã«ããæåãããŸã§ããã« ãªã¯ãšã¹ãã¯ããŒãžã§ããŸããã
- ãã« ãªã¯ãšã¹ããããŒãžãããã³ãŒããéçºã«çµã¿èŸŒãŸããåŸã¯ããã¹ãŠã®ãµãŒããŒã空ããŠããå€éãªã©ãéœåã®ããæéãéžæããŠã奜ããªã ããã§ãã¯ãå®è¡ã§ããŸãã
ã©ãããããã§ã¹ãã£ã³ãå®è¡ããã®ã奜ããªäººã¯èª°ãããŸããã§ããã éçºè ã¯ãæ©èœãå®æããããããã«ããã·ã¥ããŠãã« ãªã¯ãšã¹ãããªãŒãã³ããããšèããŸãã ãã®æç¹ã§é·ããã§ãã¯ãéå§ããããšãããã¯ããŸãå¿«é©ã§ã¯ãªãã ãã§ãªããéçºã®é床ãäœäžããŸããã©ããããããäœãããã§ãã¯ããŠããéãéåžžã©ããã«äœæ¥ããããšã¯äžå¯èœã§ãã
å€éã«ãã§ãã¯ãå®è¡ããã®ããšãŠãæ°ã«å ¥ããŸãããæéããµãŒããŒãããããããã®ã§ãæ©ãåãããšãã§ããããã§ãã ããããæ®å¿µãªãããæ©èœã³ãŒããéçºã«å ¥ããšãéçºè 㯠CI ã§èŠã€ãã£ããšã©ãŒãä¿®æ£ããæ欲ãå€§å¹ ã«äœäžããŸãã æã®ã¬ããŒãã§èŠã€ãã£ããã¹ãŠã®ãšã©ãŒãèŠãŠããã€ãããããä¿®æ£ããã ãããšå®æçã«èããŠããŸãããJira ã«ã¯ä»ããå§ãããçŽ æŽãããæ°ããã¿ã¹ã¯ãããããã§ãã
ãã§ãã¯ããã« ãªã¯ãšã¹ãããããã¯ããå Žåã¯ãååãªã¢ãããŒã·ã§ã³ãåŸãããŸãããã«ããç·è²ã«ãªããŸã§ã³ãŒãã¯éçºã«å ¥ããªããããã¿ã¹ã¯ã¯å®äºããŸããã
ãã®çµæãç§ãã¡ã¯æ¬¡ã®æŠç¥ãéžæããŸãããå€éã«å¯èœãªéãæ倧éã®ãã§ã㯠ã»ãããå®è¡ãããã®äžã§æãéèŠãªãã®ããããŠæãéèŠãªããšã«ããã« ãªã¯ãšã¹ãã§æãé«éãªãã®ãèµ·åããŸãã ããããããã§æ¢ãŸãããã§ã¯ãããŸããã䞊è¡ããŠããã§ãã¯ã®é床ãæé©åããŠããã§ãã¯ãå€éã¢ãŒããããã« ãªã¯ãšã¹ã ãã§ãã¯ã«è»¢éããŸãã
ãã®æç¹ã§ã¯ããã¹ãŠã®ãã«ããéåžžã«æ©ãå®äºããããããã« ãªã¯ãšã¹ãã®ãããã«ãŒãšã㊠ARK ãã«ããJunit ãã¹ããã³ãŒã ã«ãã¬ããžã®èšç®ãå«ããã ãã§ããã ç§ãã¡ã¯ã³ãŒã ã«ãã¬ããžããªã³ã«ããæ€èšããŸããããã³ãŒã ã«ãã¬ããžã¯å¿ èŠãªããšèãããããã³ãŒã ã«ãã¬ããžãæŸæ£ããŸããã
åºæ¬ç㪠CI ãå®å šã«ã»ããã¢ããããã®ã« XNUMX æ¥ããããŸãã (以äžãæšå®æéã¯æŠç®ã§ãããã¹ã±ãŒã«ã«å¿ èŠã§ã)ã
ãã®åŸãç§ãã¡ã¯ããã«èãå§ããŸãããæ£ãããã§ãã¯ããŠããã ãããïŒ ãã« ãªã¯ãšã¹ãã§ãã«ããæ£ããå®è¡ããŠããŸãã?
ãã« ãªã¯ãšã¹ããéããããã©ã³ãã®æåŸã®ã³ãããã§ãã«ããéå§ããŸããã ãã ãããã®ã³ãããã®ãã¹ãã§ã¯ãéçºè ãäœæããã³ãŒããæ©èœããããšã®ã¿ã確èªã§ããŸãã ãããã圌ãã¯åœŒãäœãå£ããªãã£ãããšã蚌æããŸããã å®éãæ©èœãéçºãã©ã³ãã«ããŒãžãããåŸãéçºãã©ã³ãã®ç¶æ ã確èªããå¿ èŠããããŸãã
ãããè¡ãããã«ãåçŽãª bash ã¹ã¯ãªãããäœæããŸããã ããªããŒãž.sh:
#!/usr/bin/env bash
set -e
git fetch origin develop
git merge origin/develop
ããã§ã¯ãéçºããã®ãã¹ãŠã®ææ°ã®å€æŽãåçŽã«ãã«ã¢ãããããçŸåšã®ãã©ã³ãã«ããŒãžãããŸãã ãã¹ãŠã®ãã«ãã®æåã®ã¹ããããšã㊠premerge.sh ã¹ã¯ãªãããè¿œå ããå¿ èŠãªãã®ãæ£ç¢ºã«ãã§ãã¯ãå§ããŸããã çµ±å.
åé¡ã®å Žæãç¹å®ãã解決çãèŠã€ããŠããã®ã¹ã¯ãªãããäœæããã®ã« XNUMX æ¥ããããŸããã
ã¢ããªã±ãŒã·ã§ã³ãéçºããããŸããŸãå€ãã®ã¿ã¹ã¯ãçºçããããŒã ãæé·ããpremerge.sh ãæã ç§ãã¡ã倱æããå§ããŸããã ççŸããå€æŽãéçºã«å ¥ãããã«ããäžæãããŸããã
ãããã©ã®ããã«èµ·ãããã®äŸ:
XNUMX 人ã®éçºè
ãåæã«æ©èœ A ãš B ã®äœæ¥ãéå§ããŸããæ©èœ A ã®éçºè
ã¯ããããžã§ã¯ãå
ã§æªäœ¿çšã®æ©èœãçºèŠããŸããã answer()
ãããŠãåªç§ãªããŒã€ã¹ã«ãŠãã®ããã«ããããåãé€ããŸãã åæã«ãæ©èœ B ã®éçºè
ã¯ããã©ã³ãå
ã®ãã®é¢æ°ãžã®æ°ããåŒã³åºããè¿œå ããŸãã
éçºè ã¯äœæ¥ãå®äºãããšåæã«ãã«ãªã¯ãšã¹ãããªãŒãã³ããŸãã ãã«ããèµ·åãããpremerge.sh ãææ°ã®éçºç¶æ ã«é¢ããäž¡æ¹ã®ãã« ãªã¯ãšã¹ãããã§ãã¯ããŸãããã¹ãŠã®ãã§ãã¯ã¯ç·è²ã§ãã ãã®åŸããã£ãŒãã£ãŒ A ã®ãã« ãªã¯ãšã¹ããããŒãžããããã£ãŒãã£ãŒ B ã®ãã« ãªã¯ãšã¹ããããŒãžãããŸã...ããŒã³ïŒ éçºã³ãŒãã«ååšããªãé¢æ°ã®åŒã³åºããå«ãŸããŠãããããéçºãäžæãããŸãã
çºå±ããªããšãã¯ã å°å
ã®çœå®³ã ããŒã å
šäœãäœããåéããŠãã¹ãã«æåºããããšã¯ã§ããŸããã
ããŸããŸãç§ã¯åæããããã¯ãŒã¯ãããŒã¿ããŒã¹ãªã©ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã®ã¿ã¹ã¯ã«åãçµãããšãæãå€ãã£ãã§ãã ã€ãŸããä»ã®éçºè ã䜿çšããé¢æ°ãã¯ã©ã¹ãäœæããã®ã¯ç§ã§ãã ãã®ãããç§ãåããããªç¶æ³ã«é »ç¹ã«ééããŸããã ãã®åçããã°ãã食ã£ãŠãããŸããã
ããã¯ç§ãã¡ã«ã¯åããªãã£ãããããããé²ãæ¹æ³ãæ€èšãå§ããŸããã
éçºãäžæããªãæ¹æ³
æåã®ãªãã·ã§ã³ïŒ éçºãæŽæ°ãããšãã«ãã¹ãŠã®ãã«ãªã¯ãšã¹ããåæ§ç¯ããŸãã ãã®äŸã§ã¯ãæ©èœ A ã®ãã« ãªã¯ãšã¹ããæåã«éçºã«å«ãŸããå Žåãæ©èœ B ã®ãã« ãªã¯ãšã¹ããåæ§ç¯ããããããã³ã³ãã€ã« ãšã©ãŒã«ãããã§ãã¯ã倱æããŸãã
ããã«ã©ããããã®æéããããããç解ããããã«ã2 ã€ã® PR ãããäŸãèããŠã¿ãŸãããã 1 ã€ã® PR ãéããŸãã3 ã€ã®ãã«ããš XNUMX ã€ã®ãã§ãã¯ã®å®è¡ã§ãã æåã® PR ãéçºã«ããŒãžããåŸãXNUMX çªç®ã® PR ãåæ§ç¯ããå¿ èŠããããŸãã åèšã§ãXNUMX ã€ã® PR ã«ã¯ XNUMX åã®ãã§ãã¯å®è¡ãå¿ èŠã§ã (XNUMX + XNUMX = XNUMX)ã
ååçã«ã¯å€§äžå€«ã§ãã ããããçµ±èšãèŠãŠã¿ããšãç§ãã¡ã®ããŒã ã®å žåçãªç¶æ³ã¯ 10 åã®ãªãŒãã³ PR ã§ããããã§ãã¯ã®æ°ã¯é²è¡ã®åèšã§ãã 10 + 9 +... + 1 = 55 ã§ããã€ãŸãã10 åãåãå ¥ããããšã«ãªããŸãã PR ã®å Žåã55 ååæ§ç¯ããå¿ èŠããããŸãã ãããŠãããã¯çæ³çãªç¶æ³ã§ãããæåã«ãã¹ãŠã®ãã§ãã¯ã«åæ Œãããããã®æ°å件ãåŠçãããŠããéã誰ãè¿œå ã®ãã« ãªã¯ãšã¹ãããªãŒãã³ããªããšãã§ãã
èªåãéçºè ã§ãæåã«ãããŒãžããã¿ã³ãã¯ãªãã¯ããå¿ èŠããããšæ³åããŠãã ãããé£äººããããè¡ããšããã¹ãŠã®ãã«ããå床å®äºãããŸã§åŸ ããªããã°ãªããŸãã...ããããããã¯æ©èœããŸããã ãéçºãå€§å¹ ã«é ããªããŸãã
XNUMX çªç®ã«èããããæ¹æ³: ã³ãŒãã¬ãã¥ãŒåŸã«ãã«ãªã¯ãšã¹ããåéããŸãã ã€ãŸãããã« ãªã¯ãšã¹ããéããååããå¿ èŠãªæ°ã®æ¿èªãéããå¿ èŠãªãã®ãä¿®æ£ããŠããã«ããéå§ããŸãã æåãããšããã« ãªã¯ãšã¹ãã¯éçºã«ããŒãžãããŸãã ãã®å Žåãè¿œå ã®åèµ·åã¯ãããŸãããããã£ãŒãããã¯ã¯å€§å¹ ã«é ããªããŸãã éçºè ãšããŠããã« ãªã¯ãšã¹ããéãããããããæ©èœãããã©ãããããã«ç¢ºèªããããšæããŸãã ããšãã°ããã¹ãã倱æããå Žåã¯ãããã«ä¿®æ£ããå¿ èŠããããŸãã ãã«ããé ãããšããã£ãŒãããã¯ãé ããªããéçºå šäœãé ããªããŸãã ãããç§ãã¡ã«ã¯åããªãã£ãã
ãã®çµæãæ®ã£ãã®ã¯ XNUMX çªç®ã®éžæè¢ã ãã§ãã - ãµã€ã¯ãªã³ã°ã ãã¹ãŠã®ã³ãŒãããã¹ãŠã®ãœãŒã¹ã¯ Bitbucket ãµãŒããŒäžã®ãªããžããªã«ä¿åãããŸãã ãããã£ãŠãBitbucket çšã®ãã©ã°ã€ã³ãéçºããå¿ èŠããããŸããã
ãã®ãã©ã°ã€ã³ã¯ããã« ãªã¯ãšã¹ãã®ããŒãž ã¡ã«ããºã ããªãŒããŒã©ã€ãããŸãã å§ãŸãã¯æšæºã§ããPR ãéãããã¹ãŠã®ã¢ã»ã³ããªãèµ·åãããã³ãŒã ã¬ãã¥ãŒãå®äºããŸãã ãã ããã³ãŒã ã¬ãã¥ãŒãå®äºããéçºè
ããããŒãžããã¯ãªãã¯ãããšããã©ã°ã€ã³ã¯ã©ã®éçºç¶æ
ã«å¯ŸããŠãã§ãã¯ãå®è¡ããããããã§ãã¯ããŸãã ãã«ãåŸã«éçºãæŽæ°ãããå Žåããã©ã°ã€ã³ã¯ãã®ãããªãã« ãªã¯ãšã¹ããã¡ã€ã³ ãã©ã³ãã«ããŒãžããããšãèš±å¯ããŸããã æ¯èŒçæè¿ã®éçºã®ãã«ããåéããã ãã§ãã
競åããå€æŽãå«ããã®äŸã§ã¯ããã®ãããªãã«ãã¯ã³ã³ãã€ã« ãšã©ãŒã«ãã倱æããŸãã ãããã£ãŠãæ©èœ B ã®éçºè
ã¯ã³ãŒããä¿®æ£ãããã§ãã¯ãåéããå¿
èŠããããŸãããã®åŸããã©ã°ã€ã³ãèªåçã«ãã« ãªã¯ãšã¹ããé©çšããŸãã
ãã®ãã©ã°ã€ã³ãå®è£ ããåã¯ããã« ãªã¯ãšã¹ããããå¹³å 2,7 åã®ã¬ãã¥ãŒãå®è¡ããŠããŸããã ãã©ã°ã€ã³ã§ã¯ 3,6 ãèµ·åãããŸããã ããã¯ç§ãã¡ã«ãŽã£ããã§ããã
ãã®ãã©ã°ã€ã³ã«ã¯æ¬ ç¹ãããããšã«æ³šæããŠãã ãããããã¯ããã«ãã XNUMX åããåèµ·åããªãããšã§ãã ã€ãŸãã競åããå€æŽãéçºã«å ¥ãå¯èœæ§ãããå°ããªãŠã£ã³ããŠããŸã ååšããŸãã ãããããã®å¯èœæ§ã¯äœããããéå§åæ°ãšå€±æã®å¯èœæ§ã®éã§ãã¬ãŒããªããèšå®ããŸããã XNUMX幎éã§ç¹ç«ããã®ã¯XNUMXåã ãã ã£ãã®ã§ãããããç¡é§ã§ã¯ââãªãã£ãã§ãããã
Bitbucket ãã©ã°ã€ã³ã®æåã®ããŒãžã§ã³ãäœæããã®ã« XNUMX é±éããããŸããã
æ°ããå°åæ
ãã®éãç§ãã¡ã®ããŒã ã¯æé·ãç¶ããŸããã æ°ãããã§ãã¯ãè¿œå ãããŸããã
ç§ãã¡ã¯ããé²ããã®ãªãããªãééããç¯ãã®ãïŒããšèããŸããã ãããŠããã圌ããå®è£ ããçç±ã§ã éçã³ãŒãåæã ãŸã㯠Android SDK ã«å«ãŸãã lint ããå§ããŸããã ããããåœæ圌㯠Kotlin ã³ãŒãã®æäœæ¹æ³ããŸã£ããç¥ããŸããã§ããããŸããã¢ããªã±ãŒã·ã§ã³ã® 75% ã¯ãã§ã« Kotlin ã§æžãããŠããŸããã ãããã£ãŠãçµã¿èŸŒã¿ã®ãã®ã¯lintã«è¿œå ãããŸãã Android Studio ã®ãã§ãã¯ã
ãããè¡ãã«ã¯ãå€ãã®åé¯ãè¡ãå¿ èŠããããŸãããAndroid Studio ãååŸããDocker ã«ããã±ãŒãžåããä»®æ³ã¢ãã¿ãŒã䜿çšã㊠CI äžã§å®è¡ããããšã§ãAndroid Studio ãå®éã®ã©ãããããäžã§å®è¡ãããŠãããšæãããããã«ããŸããã ããããããã¯ããŸããããŸããã
ç§ãã¡ãããããã®ããšãæžãå§ããã®ããã®ææã§ãã èšæž¬ãã¹ã ãããŠå®è£ ãããŸãã ã¹ã¯ãªãŒã³ã·ã§ããã®ãã¹ãã ããã¯ãå¥ã®å°ããªãã¥ãŒã«å¯ŸããŠåç §ã¹ã¯ãªãŒã³ã·ã§ãããçæãããå Žåã§ããããã¹ãã¯ãã¥ãŒããã¹ã¯ãªãŒã³ã·ã§ãããååŸããããããã¯ã»ã«ããšã«æšæºãšçŽæ¥æ¯èŒããããšã§æ§æãããŸãã ççŸãããå Žåã¯ãã©ããã§ã¬ã€ã¢ãŠããééã£ãŠããããã¹ã¿ã€ã«ã«åé¡ãããããšãæå³ããŸãã
ãã ããã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ ãã¹ããšã¹ã¯ãªãŒã³ã·ã§ãã ãã¹ãã¯ãããã€ã¹ (ãšãã¥ã¬ãŒã¿ãŸãã¯å®éã®ããã€ã¹) äžã§å®è¡ããå¿ èŠããããŸãã ãã¹ããå€æ°ãããé »ç¹ã«å®è¡ãããããšãèæ ®ãããšããã¡ãŒã å šäœãå¿ èŠã«ãªããŸãã ç¬èªã®ãã¡ãŒã ãç«ã¡äžããã®ã¯åŽåããããããããããæ¢è£œã®ãªãã·ã§ã³ã§ãã Firebase Test Lab ãèŠã€ããŸããã
Firebase ãã¹ã ã©ã
ãããéžã°ããã®ã¯ãFirebase ã Google 補åã§ãããããã€ãŸãä¿¡é Œæ§ãé«ããåæ¢ããå¯èœæ§ãäœããšããæå³ã§ãã äŸ¡æ Œã¯æé ã§ããå®éã®ããã€ã¹ã®æäœã¯ 5 æéããã 1 ãã«ããšãã¥ã¬ãŒã¿ã®æäœã¯ XNUMX æéããã XNUMX ãã«ã§ãã
Firebase Test Lab ã CI ã«å®è£ ããã®ã«çŽ XNUMX é±éããããŸããã
ããããããŒã ã¯æé·ãç¶ããæ®å¿µãªãã Firebase ã¯ç§ãã¡ã倱æããå§ããŸããã åœæã圌ã«ã¯ SLA ããããŸããã§ããã Firebase ã§ã¯ããã¹ãã«å¿ èŠãªæ°ã®ããã€ã¹ã空ããŸã§åŸ ããããåžæã©ããã«ããã«ãã¹ãã®å®è¡ãéå§ãããªãããšããããŸããã åã«äžŠãã§åŸ ã€ã®ã¯æ倧XNUMXåããããéåžžã«é·ãæéã§ããã ãã¹ãŠã® PR ã§ã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ ãã¹ããå®è¡ãããé 延ã«ããéçºãå€§å¹ ã«é ãããã®åŸãæã ã®è«æ±é¡ãåèšé¡ã§è«æ±ãããŸããã äžè¬çã«ãããŒã ãååã«æé·ãããããFirebase ãæŸæ£ããŠç€Ÿå ã§äœæ¥ããããšã決å®ãããŸããã
ããã«ãŒ + Python + ããã·ã¥
ç§ãã¡ã¯ Docker ãå°å ¥ããããã«ãšãã¥ã¬ãŒã¿ãè©°ã蟌ã¿ãPython ã§ç°¡åãªããã°ã©ã ãæžããŸãããããã¯ãé©åãªã¿ã€ãã³ã°ã§ãå¿ èŠãªããŒãžã§ã³ã®å¿ èŠãªæ°ã®ãšãã¥ã¬ãŒã¿ãèµ·åããå¿ èŠã«å¿ããŠåæ¢ããŸãã ãããŠãã¡ãããããã€ãã® bash ã¹ã¯ãªãããå¿ èŠã§ãããããããªããã°ã©ããªãã§ãããã?
ç¬èªã®ãã¹ãç°å¢ãäœæããã®ã« XNUMX é±éããããŸããã
ãã®çµæããã¹ãŠã®ãã« ãªã¯ãšã¹ãã«å¯ŸããŠãåºç¯ãªãã§ãã¯ã®ããŒãž ããã㯠ãªã¹ããååšããŸããã
- ARK ã¢ã»ã³ããªã
- Junit ãã¹ãã
- 糞ãã;
- Android Studio ã®ãã§ãã¯ã
- èšè£ ãã¹ãã
- ã¹ã¯ãªãŒã³ã·ã§ããã®ãã¹ãã
ããã«ãããèµ·ããåŸãå€ãã®æ éãé²æ¢ãããŸããã æè¡çã«ã¯ãã¹ãŠããŸããããŸããããéçºè ã¯çµæãåŸ ã€æéãé·ããããšäžæºãèšããŸããã
é·ãããã£ãŠã©ããããã§ããïŒ Bitbucket ãš TeamCity ããã®ããŒã¿ãåæã·ã¹ãã ã«ã¢ããããŒããããšããã次ã®ããšãããããŸããã å¹³ååŸ ã¡æé45åã ã€ãŸããéçºè ã¯ãã« ãªã¯ãšã¹ããéããšããã«ãçµæãåŸããããŸã§å¹³å 45 ååŸ æ©ããŸãã ç§ã®æèŠã§ã¯ãããã¯å€§å€ãªããšã§ããããã®ããã«åãããšã¯ã§ããŸããã
ãã¡ããããã¹ãŠã®ãã«ããé«éåããããšã«ããŸããã
ã¹ããŒãã¢ããããŸããã
ãã«ãããã¥ãŒã§åŸ æ©ããŠããããšãå€ããããæåã«è¡ãããšã¯æ¬¡ã®ãšããã§ãã ããã«ããŒããŠã§ã¢ãè³Œå ¥ããŸãã â 倧èŠæš¡ãªéçºãæãç°¡åã§ãã ãã«ãã®ãã¥ãŒã¯åæ¢ããŸããããäžéšã®ãã§ãã¯èªäœã«éåžžã«é·ãæéãããããããåŸ ã¡æéã¯ãããã«æžå°ããŸããã
æéããããããããã§ãã¯ã®åé€
åœç€Ÿã®ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ã¯ããã®çš®ã®ãšã©ãŒãåé¡ãæ€åºã§ããŸãã
- è¡ããªãã å€æŽã®ç«¶åã«ããäœãããã«ããããªãå ŽåãCI ã¯ã³ã³ãã€ã« ãšã©ãŒãæ€åºããããšããããŸãã ãã§ã«è¿°ã¹ãããã«ããããªããšèª°ãäœãçµã¿ç«ãŠãããšãã§ããªããªããéçºãåæ¢ãã誰ããäžå®ã«ãªããŸãã
- åäœã®ãã°ã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ã¯æ§ç¯ããããããã¿ã³ãæŒããšã¯ã©ãã·ã¥ãããããã¿ã³ããŸã£ããæŒãããªãå Žåã§ãã ãã®ãããªãã°ããŠãŒã¶ãŒã«å±ãå¯èœæ§ããããããããã¯åé¡ã§ãã
- ã¬ã€ã¢ãŠãã®ãã°ã ããšãã°ããã¿ã³ãã¯ãªãã¯ããããå·Šã« 10 ãã¯ã»ã«ç§»åãããšããŸãã
- æè¡çè² åµã®å¢å .
ãã®ãªã¹ããèŠãåŸãæåã® XNUMX ã€ã®ç¹ã ããéèŠã§ããããšãããããŸããã ãããã£ãåé¡ããŸãã¯æããŠãããããšæã£ãŠããŸãã ã¬ã€ã¢ãŠãã®ãã°ã¯ãã¶ã€ã³ã¬ãã¥ãŒã®æ®µéã§çºèŠããããã®åŸç°¡åã«ä¿®æ£ã§ããŸãã æè¡çè² åµã«å¯ŸåŠããã«ã¯å¥ã®ããã»ã¹ãšèšç»ãå¿ èŠãªããããã« ãªã¯ãšã¹ãã§ã¯ãã¹ãããªãããšã«ããŸããã
ãã®åé¡ã«åºã¥ããŠããã§ãã¯ã®ãªã¹ãå šäœãèŠçŽããŸããã 糞ããã«åãæ¶ãç·ãä»ãã ãããŠãããžã§ã¯ãã®ç«ã¡äžããäžæ©å»¶æããŸãããããã¯ããããžã§ã¯ãã«ã©ãã ãã®åé¡ããã£ãã®ãã«ã€ããŠã®ã¬ããŒããäœæããããã§ããã ç§ãã¡ã¯æè¡çè² åµã«ã€ããŠã¯å¥ã ã«åãçµãããšã«åæããŸããã Android Studio ã®ãã§ãã¯ã¯å®å šã«æŸæ£ãããŸããã Docker 㧠Android Studio ã䜿çšããŠã€ã³ã¹ãã¯ã·ã§ã³ãå®è¡ããã®ã¯é¢çœããã§ããããµããŒãã§ã¯å€ãã®åé¡ãçºçããŸãã Android Studio ã®ããŒãžã§ã³ãæŽæ°ãããšãç解ã§ããªããã°ãšã®æŠããå¿ èŠã«ãªããŸãã ãŸããã©ã€ãã©ãªãããŸãå®å®ããŠãããã誀æ€ç¥ããã£ããããã¹ã¯ãªãŒã³ã·ã§ãã ãã¹ãããµããŒãããããšãå°é£ã§ããã ã¹ã¯ãªãŒã³ã·ã§ãã ãã¹ãããã§ã㯠ãªã¹ãããåé€ãããŸãã.
ãã®çµæã次ã®ãã®ãæ®ããŸããã
- ARK ã¢ã»ã³ããªã
- Junit ãã¹ãã
- èšè£ ãã¹ãã
Gradleãªã¢ãŒããã£ãã·ã¥
å³ãããã§ãã¯ããªããã°ããã¹ãŠãæ¹åãããŸããã ããããå®ç§ã«ã¯éçããããŸããã
ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã§ã«çŽ 150 ã® Gradle ã¢ãžã¥ãŒã«ã«åå²ãããŠããŸãã éåžžããã®å Žå㯠Gradle ãªã¢ãŒã ãã£ãã·ã¥ãããŸãæ©èœããããããããè©ŠããŠã¿ãããšã«ããŸããã
Gradle ãªã¢ãŒã ãã£ãã·ã¥ã¯ãåã ã®ã¢ãžã¥ãŒã«å ã®åã ã®ã¿ã¹ã¯ã®ãã«ã ã¢ãŒãã£ãã¡ã¯ãããã£ãã·ã¥ã§ãããµãŒãã¹ã§ãã Gradle ã¯ãå®éã«ã³ãŒããã³ã³ãã€ã«ãã代ããã«ãHTTP ã䜿çšããŠãªã¢ãŒã ãã£ãã·ã¥ãããã¯ãã誰ãããã§ã«ãã®ã¿ã¹ã¯ãå®è¡ãããã©ãããå°ããŸãã ãã¯ããã®å ŽåãçµæãããŠã³ããŒãããã ãã§ãã
Gradle 㯠Docker ã€ã¡ãŒãžãæäŸãããããGradle ãªã¢ãŒã ãã£ãã·ã¥ã®å®è¡ã¯ç°¡åã§ãã ãªããšãXNUMXæéã§ãããçµããããšãã§ããŸããã
Docker ãèµ·åããŠãããžã§ã¯ãã« XNUMX è¡èšè¿°ããã ãã§æžã¿ãŸããã ãã ããããã«èµ·åã§ããŠãããã¹ãŠãããŸãæ©èœãããŸã§ã«ã¯ããªãã®æéãããããŸãã
以äžã¯ãã£ãã·ã¥ãã¹ã®ã°ã©ãã§ãã
åœåããã£ãã·ã¥ ãã¹ã®å²åã¯çŽ 65 ã§ããã20 é±éåŸããã®å€ã XNUMX% ãŸã§å¢ããããšãã§ããŸããã Android ã¢ããªã±ãŒã·ã§ã³ãåéããã¿ã¹ã¯ã«ã¯ãGradle ããã£ãã·ã¥ãéãããããå¥åŠãªæšç§»çãªäŸåé¢ä¿ãããããšãå€æããŸããã
ãã£ãã·ã¥ãæ¥ç¶ããããšã§ããã«ããå€§å¹ ã«é«éåãããŸããã ããããçµã¿ç«ãŠã«å ããŠèšè£ ãã¹ãããããããã«ã¯é·ãæéãããããŸãã ããããããã¹ãŠã®ãã« ãªã¯ãšã¹ãã«å¯ŸããŠãã¹ãŠã®ãã¹ããå®è¡ããå¿ èŠãããããã§ã¯ãããŸããã ããã調ã¹ãããã«ã圱é¿åæã䜿çšããŸãã
圱é¿åæ
ãã« ãªã¯ãšã¹ãã§ã¯ãgit diff ãåéããå€æŽããã Gradle ã¢ãžã¥ãŒã«ãèŠã€ããŸãã
å€æŽãããã¢ãžã¥ãŒã«ãšããã«äŸåãããã¹ãŠã®ã¢ãžã¥ãŒã«ããã§ãã¯ããã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ ãã¹ãã®ã¿ãå®è¡ããã®ãåççã§ãã é£æ¥ããã¢ãžã¥ãŒã«ã®ãã¹ããå®è¡ããããšã«æå³ã¯ãããŸãããããã«ããã³ãŒãã¯å€æŽãããŠããããäœãå£ããããšã¯ãããŸããã
ã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ ãã¹ãã¯ãæäžäœã®ã¢ããªã±ãŒã·ã§ã³ ã¢ãžã¥ãŒã«ã«é 眮ããå¿ èŠããããããããã»ã©åçŽã§ã¯ãããŸããã åãã¹ããã©ã®ã¢ãžã¥ãŒã«ã«å±ããŠããããç解ããããã«ããã€ãã³ãŒãåæã«ãããã¥ãŒãªã¹ãã£ãã¯ã䜿çšããŸããã
é¢é£ããã¢ãžã¥ãŒã«ã®ã¿ããã¹ãããããã«ã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ ãã¹ãã®åäœãã¢ããã°ã¬ãŒãããã«ã¯ãçŽ XNUMX é±éããããŸããã
æ€æ»ãè¿ éåããããã®æªçœ®ãå¥åããã 45 åãã 15 åããããŸã§äŒžã³ãŸããããã«ãã« XNUMX ååŸ ã€ã®ã¯ãã§ã«æ®éã®ããšã§ãã
ãããçŸåšãéçºè ãã¡ã¯ãã©ã®ãã«ããèµ·åãããŠããã®ãããã°ã¯ã©ãã§ç¢ºèªã§ããã®ãããªããã«ããèµ€è²ãªã®ããã©ã®ãã¹ãã倱æããã®ããªã©ãããããªããšäžæºãæŒããå§ããŠããŸãã
ãã£ãŒãããã¯ã«é¢ããåé¡ã¯éçºã®é床ãäœäžããããããå PR ãšãã«ãã«ã€ããŠã§ããã ãæ確ã§è©³çŽ°ãªæ
å ±ãæäŸããããã«åªããŸããã ãŸã㯠Bitbucket 㧠PR ã«ã³ã¡ã³ããã倱æãããã«ããšãã®çç±ã瀺ããã¿ãŒã²ãããçµã£ãã¡ãã»ãŒãžã Slack ã«æžããŸããã æçµçã«ãçŸåšå®è¡äžã®ãã¹ãŠã®ãã«ããšãã®ã¹ããŒã¿ã¹ (ãã¥ãŒã«å
¥ããããŠãããå®è¡äžãã¯ã©ãã·ã¥ãŸãã¯å®äº) ã®ãªã¹ããå«ãããŒãžã® PR ããã·ã¥ããŒããäœæããŸããã ãã«ããã¯ãªãã¯ãããšããã®ãã°ã«ã¢ã¯ã»ã¹ã§ããŸãã
詳现ãªãã£ãŒãããã¯ã« XNUMX é±éãè²»ãããŸããã
äºå®
æè¿ã®æŽå²ã«ç§»ããŸãããã ãã£ãŒãããã¯ã®åé¡ã解決ããããšã§ãç§ãã¡ã¯æ°ããªã¬ãã«ã«å°éããŸãããç¬èªã®ãšãã¥ã¬ãŒã¿ ãã¡ãŒã ãæ§ç¯ããããšã«ããŸããã ãã¹ãããšãã¥ã¬ãŒã¿ãå€æ°ãããšã管çãé£ãããªããŸãã ãã®çµæããã¹ãŠã®ãšãã¥ã¬ãŒã¿ãŒã¯æè»ãªãªãœãŒã¹ç®¡çãåãã k8s ã¯ã©ã¹ã¿ãŒã«ç§»è¡ãããŸããã
ãã®ä»ã«ãäŒç»ãããããŸãã
- 糞ãããè¿ã (ããã³ãã®ä»ã®éçåæ)ã ç§ãã¡ã¯ãã§ã«ãã®æ¹åã«åãçµãã§ããŸãã
- PR ãããã«ãŒã§ãã¹ãŠãå®è¡ãã ãšã³ãããŒãšã³ãã®ãã¹ã ãã¹ãŠã® SDK ããŒãžã§ã³ã§ã
ããã§ãAvito ã«ãããç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ã®éçºã®æŽå²ããã©ã£ãŠããŸããã ããã§ãçµéšè±å¯ãªèŠ³ç¹ããããã€ãã®ã¢ããã€ã¹ãããããšæããŸãã
СПвеÑÑ
äžã€ã ãã¢ããã€ã¹ã§ãããšãããã次ã®ããã«ãªããŸãã
ã·ã§ã«ã¹ã¯ãªããã«ã¯æ°ãã€ããŠãã ããïŒ
Bash ã¯éåžžã«æè»ã§åŒ·åãªããŒã«ã§ãããã¹ã¯ãªãããäœæããã®ãéåžžã«äŸ¿å©ã§é«éã§ãã ããããããã¯çœ ã«ã¯ãŸãå¯èœæ§ããããæ®å¿µãªããç§ãã¡ã¯ãã®çœ ã«é¥ã£ãŠããŸããŸããã
ãã¹ãŠã¯ããã«ã ãã·ã³äžã§å®è¡ãããåçŽãªã¹ã¯ãªããããå§ãŸããŸããã
#!/usr/bin/env bash
./gradlew assembleDebug
ãããããåç¥ã®ãšãããæéã®çµéãšãšãã«ãã¹ãŠãçºå±ããããè€éã«ãªã£ãŠãããŸããããã¹ã¯ãªãããå¥ã®ã¹ã¯ãªããããå®è¡ããŠãããã«ããã€ãã®ãã©ã¡ãŒã¿ãŒãæž¡ããŸããããæçµçã«ã¯ãçŸåš bash ã®ãã¹ããã©ã®ã¬ãã«ã«ããã®ãã決å®ããé¢æ°ãæžããªããã°ãªããŸããã§ãããå¿ èŠãªåŒçšç¬Šãæ¿å ¥ããŠããã¹ãŠãéå§ããŸãã
ãã®ãããªã¹ã¯ãªããã®éçºã«ããã人件費ã¯æ³åã§ããã§ãããã ãã®çœ ã«é¥ããªãããã«ã¢ããã€ã¹ããŸãã
äœã眮ãæããããŸãã?
- ä»»æã®ã¹ã¯ãªããèšèªã æžã蟌ã¿å Python ãŸã㯠Kotlin ã¹ã¯ãªãã ã¹ã¯ãªããã§ã¯ãªãããã°ã©ãã³ã°ã§ããããããã䟿å©ã§ãã
- ãŸãã¯ããã¹ãŠã®ãã«ãããžãã¯ããã©ãŒã ã«èšè¿°ããŸã ã«ã¹ã¿ã gradleã¿ã¹ã¯ ããªãã®ãããžã§ã¯ãã®ããã«ã
ç§ãã¡ã¯ XNUMX çªç®ã®ãªãã·ã§ã³ãéžæããããšã«æ±ºããçŸåšããã¹ãŠã® bash ã¹ã¯ãªãããäœç³»çã«åé€ããå€ãã®ã«ã¹ã¿ã Gradle ã¿ã¹ã¯ãäœæããŠããŸãã
ãã³ã #2: ã€ã³ãã©ã¹ãã©ã¯ãã£ãã³ãŒãã«ä¿åããŸãã
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³èšå®ã¯ãJenkins ã TeamCity ãªã©ã® UI ã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ãªããããã¹ã ãã¡ã€ã«ã®åœ¢åŒã§ãããžã§ã¯ã ãªããžããªã«çŽæ¥ä¿åãããå Žåã«äŸ¿å©ã§ãã ããã«ããããŒãžã§ã³ç®¡çãå¯èœã«ãªããŸãã ã³ãŒããããŒã«ããã¯ããããå¥ã®ãã©ã³ãã«ãã«ããããããããšã¯é£ãããããŸããã
ã¹ã¯ãªããã¯ãããžã§ã¯ãã«ä¿åã§ããŸãã ç°å¢ãã©ããããïŒ
ãã³ã #3: Docker ã¯ç°å¢ãæŽããã®ã«åœ¹ç«ã¡ãŸãã
Android éçºè ã«ãšã£ãŠã¯ééããªã圹ç«ã¡ãŸãããæ®å¿µãªãã iOS ã«ã¯ãŸã ãããŸããã
ããã¯ãjdk ãš android-sdk ãå«ãåçŽãª docker ãã¡ã€ã«ã®äŸã§ãã
FROM openjdk:8
ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip"
ANDROID_HOME="/usr/local/android-sdk"
ANDROID_VERSION=26
ANDROID_BUILD_TOOLS_VERSION=26.0.2
# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android
&& cd "$ANDROID_HOME"
&& curl -o sdk.zip $SDK_URL
&& unzip sdk.zip
&& rm sdk.zip
&& yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses
# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}"
"platforms;android-${ANDROID_VERSION}"
"platform-tools"
RUN mkdir /application
WORKDIR /application
ãã® Docker ãã¡ã€ã«ãäœæã (ç§å¯ããæãããŸããäœæããå¿ èŠã¯ãããŸããããæ¢æã®ãã¡ã€ã«ã GitHub ãããã«ããã ãã§ã)ãã€ã¡ãŒãžãã¢ã»ã³ãã«ãããšãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããä»®æ³ãã·ã³ãåŸãããŸãããã㊠Junit ãã¹ããå®è¡ããŸãã
ãããçã«ããªã£ãŠããäž»ãªçç±ã¯ãã¹ã±ãŒã©ããªãã£ãšåçŸæ§ã® XNUMX ã€ã§ãã docker ã䜿çšãããšã以åã®ãã®ãšãŸã£ããåãç°å¢ãæ〠XNUMX åã®ãã«ã ãšãŒãžã§ã³ãããã°ããèµ·åã§ããŸãã ããã«ãããCI ãšã³ãžãã¢ã®äœæ¥ãå€§å¹ ã«æ¥œã«ãªããŸãã android-sdk ã docker ã«ããã·ã¥ããã®ã¯éåžžã«ç°¡åã§ããããšãã¥ã¬ãŒã¿ã®å Žåã¯å°ãé£ãããªããŸããå°ãèŠåŽããå¿ èŠããããŸã (ãŸãã¯ãå®æãããã®ã GitHub ããå床ããŠã³ããŒãããå¿ èŠããããŸã)ã
ãã³ããã® 4: æ€æ»ã¯æ€æ»ã®ããã«è¡ãããã®ã§ã¯ãªãã人ã ã®ããã«è¡ãããããšãå¿ããªãã§ãã ããã
éçºè ã«ãšã£ãŠãäœãå£ããã®ããã©ã®ãã¹ãã倱æããã®ãããã«ããã°ã¯ã©ãã§ç¢ºèªã§ããã®ããªã©ãè¿ éãã€æ確ãªãã£ãŒãããã¯ãéåžžã«éèŠã§ãã
ãã³ã #5: ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãéçºãããšãã¯ãçŸå®çã«ãªã£ãŠãã ããã
ã©ã®ãããªçš®é¡ã®ãšã©ãŒãé²æ¢ãããã®ããã©ã®ãããã®ãªãœãŒã¹ãæéãã³ã³ãã¥ãŒã¿æéãè²»ãããŠãããã®ããæ確ã«ç解ããŸãã ããšãã°ãæéããããããããã§ãã¯ã¯äžæ©å»¶æãããå¯èœæ§ããããŸãã ãããŠãããã»ã©éèŠã§ã¯ãªããšã©ãŒããã£ãããããã®ã¯å®å šã«æŸæ£ãããã¹ãã§ãã
ãã³ã #6: æ¢è£œã®ããŒã«ã䜿çšããŸãã
çŸåšãã¯ã©ãŠãCIãæäŸããäŒæ¥ã¯æ°å€ããããŸãã
ããã¯å°èŠæš¡ãªããŒã ã«é©ãããœãªã¥ãŒã·ã§ã³ã§ãã äœããµããŒãããå¿
èŠã¯ãªããå°é¡ã®ãéãæ¯æãã ãã§ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ ãã¹ããå®è¡ããããšãã§ããŸãã
ãã³ã #7: 倧èŠæš¡ãªããŒã ã§ã¯ã瀟å ãœãªã¥ãŒã·ã§ã³ã®æ¹ãåçæ§ãé«ããªããŸãã
ããããé ããæ©ãããããŒã ãæé·ããã«ã€ããŠã瀟å ãœãªã¥ãŒã·ã§ã³ã®åçæ§ã¯ããã«é«ãŸãã§ãããã ãããã®æ±ºå®ã«ã¯ XNUMX ã€åé¡ããããŸãã çµæžåŠã«ã¯åç©«éæžã®æ³åããããŸããã©ã®ãããžã§ã¯ãã§ãããã®åŸã®æ¹åã¯ãŸããŸãå°é£ã«ãªããããå€ãã®æè³ãå¿ èŠã«ãªããŸãã
çµæžåŠã¯ãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãå«ãç§ãã¡ã®çæŽ»å šäœãè¡šããŸãã ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ã®éçºã®å段éã®äººä»¶è²»ã®ã¹ã±ãžã¥ãŒã«ãäœæããŸããã
æ¹åããŸããŸãå°é£ã«ãªã£ãŠããããšã¯æããã§ãã ãã®ã°ã©ããèŠããšãããŒã èŠæš¡ã®æé·ã«å¿ããŠç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãéçºããå¿
èŠãããããšãããããŸãã 50 人ã®ããŒã ã«ãšã£ãŠãå
éšãšãã¥ã¬ãŒã¿ ãã¡ãŒã ã®éçºã« XNUMX æ¥ãè²»ããã®ã¯å¹³å¡ãªã¢ã€ãã¢ã§ãã ãããåæã«ã倧èŠæš¡ãªããŒã ã®å Žåãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ããŸã£ããè¡ããªãããšãæªãèãã§ããçµ±åã®åé¡ãã³ãã¥ãã±ãŒã·ã§ã³ã®ä¿®æ£ãªã©ãå¿
èŠã«ãªãããã§ãã ããã«æéãããããŸãã
ç§ãã¡ã¯ã人ã¯ãéãããããééããç¯ããæ ãè ã§ãããããèªååãå¿ èŠã§ãããšããèãããå§ããŸããã ãããã人ã ã¯èªååãããŸãã ãããã£ãŠããã¹ãŠåãåé¡ãèªååã«ãåœãŠã¯ãŸããŸãã
- èªååã«ã¯è²»çšãããããŸãã ååš©ã¹ã±ãžã¥ãŒã«ãèŠããŠãããŠãã ããã
- èªååã«é¢ããŠã¯ã人ã¯ééããç¯ããŸãã
- ãã¹ãŠããã®ããã«æ©èœãããããèªååããã®ãéåžžã«é¢åã«ãªãå ŽåããããŸãã ãªãä»ã®ãã®ãæ¹åããå¿ èŠãããã®ã§ããããããªããã®ãããªç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãè¡ãå¿ èŠãããã®ã§ãããã?
ããããçµ±èšããããšãã¢ã»ã³ããªã® 20% ã§ãšã©ãŒãæ€åºãããŸãã ããã¯ãéçºè ã®ã³ââãŒãã®æžãæ¹ãäžæã ããã§ã¯ãããŸããã ããã¯ãéçºè ãäœããã®ééããç¯ããå Žåãããã¯éçºã«çµããããèªåãã§ãã¯ã«ãã£ãŠçºèŠããããšç¢ºä¿¡ããŠããããã§ãã ãããã£ãŠãéçºè ã¯ãäœããããŒã«ã«ã§å®è¡ããŠãã¹ãããããããã³ãŒããèå³æ·±ããã®ã®äœæã«ããå€ãã®æéãè²»ããããšãã§ããŸãã
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãå®è·µããŸãã ãã ããã»ã©ã»ã©ã«ã
ã¡ãªã¿ã«ããã³ã©ã€ã»ãã¹ãããæ°ã¯èªãçŽ æŽãããå ±åãè¡ãã ãã§ãªããããã°ã©ã å§å¡äŒã®ã¡ã³ããŒã§ããããŸãã
ã¢ããªã«ã³ãã¡ã¬ã³ã¹ ä»ã®äººãããªãã®ããã«ææ矩ãªã¹ããŒããæºåã§ããããæ¯æŽããŸãã 次åã®äŒè°ããã°ã©ã ã®å®å šæ§ãšæçšæ§ã¯ã次ã®ãããã¯ã«ãã£ãŠè©äŸ¡ã§ããŸããã¹ã±ãžã¥ãŒã« ã 詳现ã«ã€ããŠã¯ã22 æ 23 ïœ XNUMX æ¥ã« Infospace ã«ãè¶ããã ããã
åºæïŒ habr.com