ããã«ã¡ã¯ã Findyã®FreelanceéçºããŒã ã®ä¹
æšç°ã§ãã ä»åã¯ èªæ
¢ã®äœæ¥ç°å¢ã倧å
¬é ã®Part3ã«ãªããŸãã ååãŸã§ã®èšäºã¯ãã¡ã â ð èªæ
¢ã®äœæ¥ç°å¢ã倧å
¬éã·ãªãŒãº Part3ã¯é¢è¥¿ç¹éãšããããšã§ã倧éªãšäº¬éœãããã«ãªã¢ãŒãã§JOINããŠãããšã³ãžãã¢ãã¡ã®äœæ¥ç°å¢ãå
¬éããŸãïŒ äœæ¥ç°å¢ã倧å
¬é ä¹
æšç° ãŸãã¯å€§éªãã JOIN ããŠããä¹
æšç°ã®äœæ¥ç°å¢ãã玹ä»ããŠãããŸãã äœæ¥ç°å¢ã®å
šäœåã¯ãããªæãã«ãªã£ãŠããŸãã ãã£ã¹ãã¬ã€3å°PC2å°ãããŠãåºã
ã¹ããŒã¹ äŒç€Ÿæ¯çµŠã® MacBook Pro 14ã€ã³ã ãããŒãçšã¹ã¿ã³ãã«èŒããŠäœ¿ã£ãŠããŸãã ãã£ã¹ãã¬ã€ã¯ããŒãPCã®ãã£ã¹ãã¬ã€ãå«ããŠ4æäœ¿ã£ãŠããŠãå·Šãããã©ãŠãžã³ã°çšã»ã³ãŒãã£ã³ã°çšã»Slackçšã»Datadogçã®ç£èŠããŒã«ã®ããã·ã¥ããŒãé²èЧçšãšããŠäœ¿ã£ãŠããŸãã ãã®ãã¹ã¯ã§ãããå·¥ååºãå¶ãç¶èŠªã«é Œãã§ãäžç·ã«æäŒãã€ã€ã倩æ¿ã®æšæããåãåºããŠãåãä»ããŠããã£ããã®ã«ãªããŸãã é³å£°ç°å¢åšãã§ãããèªå㯠Anker PowerConf S3 ãšããã¹ããŒã«ãŒãã©ã³ã䜿ã£ãŠããŸãã ã¹ããŒã«ãŒãã©ã³ïŒAnker PowerConf S3 ãã€ã¯ãè²ã
詊ããŸããããéäžã§è³ãå¡ãã®ãå人çã«å¥œããããªãã£ãã®ã«æ°ãã€ããŠããããã®ã¹ããŒã«ãŒãã©ã³ãæçšããŠããŸãã ãã¥ãŒããã¿ã³ã Zoom ãš Google Meet ã®ãã¥ãŒããšé£åããŠãããŠããã®ããæ°ã«å
¥ããã€ã³ãã§ãã ã¡ãªã¿ã«ã«ã¡ã©ã¯ MacBook ã®ã«ã¡ã©ã®æ¹ããåžè²©ãããŠããå»äŸ¡ãªWebã«ã¡ã©ããæ§èœãè¯ããšæã£ãŠããã®ã§ããã®ãŸãŸäœ¿ã£ãŠããŸãã ããŒããŒã㯠HHKB Professional2 ã䜿ã£ãŠããŠããã©ãã¯ããŒã«ã¯ Kensington ã¹ãªã ãã¬ãŒããã©ãã¯ããŒã« ã䜿ã£ãŠããŸãã HHKBã®USé
åã奜ã¿ã§ã ããŒã«ã暪å転ãããŠããã¹ã¯ããŒã«ãæ
£ãããšå¿«é© ããŒããŒãã¯å€§åŠé¢çã®é ããHHKBã奜ãã§ïŒåœæã¯å»äŸ¡çã®HHKB Lite2 for Macã§ãããïŒããã®ç»åã®ããŒããŒãã¯ç€ŸäŒäººã«ãªã£ã7幎åããããããã£ãšäœ¿ã£ãŠãããã®ã§ãã ãã©ãã¯ããŒã«ã¯åè·ã®äžåžã®æ¹ãããäžãããšããŠããã£ãŠä»¥æ¥ããã®Kensingtonã®ã¹ãªã ãã¬ãŒãã䜿ã£ãŠããŠãä»äœ¿ã£ãŠãããã®ã¯2代ç®ã«ãªããŸãã ãã©ãã¯ããŒã«ã芪æã¿ã€ãã®ãã®ãªã©è²ã
詊ããçµæããã®ããã€ã¹ã«èœã¡çããŸããã åºãç»é¢ãç§»åããã®ã«ããã©ãã¯ããŒã«ã¯ããããã§ãã ãããŠäœ¿ã£ãŠããæ€
åããã ãã£ãŠãããã®ã®1ã€ã«ãªããŸããŠãããŒãã³ãã©ãŒã® ãšã³ããã£ã²ãŒãã³ã°ãã§ã¢ ã䜿ã£ãŠããŸãã èé¢ã®éããã¶ã€ã³ãæ°ã«å
¥ã£ãŠããŸã 倧éªã« ããŒãã³ãã©ãŒã¹ãã¢å¿ææ© ãããããããžè¡ã£ãŠè²ã
ãªæ€
åã詊ããçµæããã®æ€
åãéžã³ãŸããã èããããè骚ã®ã«ãŒãã«ãã£ããããŠããã®ã§äœééãã®èªåãå¿«é©ã«åº§ããŠããŸãã åŸãã«ãã¹ã¯ãããPCãèŠããŠããŸãããããã¯ç§çšã®PCã§å·Šã®ãã£ã¹ãã¬ã€ã®å
¥ååæ¿ãããŠäœ¿ã£ãŠããŸãã ãã£ã¹ãã¬ã€ã®å¥¥ã«ããã®ãèªåã§ããŒããåãå¯ããŠçµã¿ç«ãŠãPC ååãåã
åã®äœæ¥ç°å¢ç޹ä»ã§ã¯ç§çšãšä»äºçšã§ããã€ã¹å
±çšããŠãã人ãå€ãã£ãã§ãããèªåã¯macãšwindowsã§OSãéã£ãŠãããããã©ãã¯ããŒã«ã ãšã²ãŒã ãããã¥ããã£ããããã®ã§ãæå
ã®ããã€ã¹ãå
šãå¥ã®ãã®ãçšæããŠäœ¿ã£ãŠããŸãã æåŸã«æºã®è§ã«é£Ÿã£ãŠãã奜ããªãã®ãã¡ããŸããã£ã¹ãã¬ã€ãåããŠèªåã®äœæ¥ç°å¢ç޹ä»ã¯çµãããŸãã æ»æ®»æ©åéã»ãŠãåšã»ã¬ã³ãã ã»ã«ãããã éäžž 次ã«äº¬éœãã JOIN ããŠããéäžžã®äœæ¥ç°å¢ã玹ä»ããŸãã äœæ¥ç°å¢ã®å
šäœã¯ãã®ããã«ãªã£ãŠããŸãã ãã£ã¹ãã¬ã€ãšããŒãPCãæå°éã®ã¹ããŒã¹ã§èšçœ®ããŠããŸã äŒç€Ÿæ¯çµŠã® MacBook Pro 14ã€ã³ã ãããŒãPCçšã¢ãŒã ã«èŒããŠäœ¿ã£ãŠããŸãã ãã¹ã¯ã®å¹
ã120cmã®ããããŒãPCãå®ã«æµ®ãããããšã§ã¹ããŒã¹ãç¯çŽããŠããŸãã ãã¹ã¯ã«ã¯ COFOã®æéãã¹ã¯ ãå©çšãã宿çã«ç«ã¡äžãã£ãŠäœæ¥ãããããã«ããŠããŸãã 倩æ¿ã®è£ããã°ãããã«ãªã£ãŠããããããã°ãããããã¯ã§éã«åçŽã§ãããšãããæ°ã«å
¥ã£ãŠããŸãã ãã£ã¹ãã¬ã€ã¯ HPç€Ÿã®æ²é¢ãã£ã¹ãã¬ã€ ãå©çšããŠããŸãã ãã£ã¹ãã¬ã€ã«èšçœ®ããã©ã€ãã§åžžã«æãã WQHDãUSBããæ©èœãUSB-C(USB PD) ã«å¯Ÿå¿ããŠãããããçµŠé» + USB ã±ãŒãã«1æ¬ã§åºæ¥ããšãããæ°ã«å
¥ã£ãŠããŸãã ãŠã«ãã©ã¯ã€ããªãã£ã¹ãã¬ã€ã§ããæ²é¢ã«ãªã£ãŠããããéåæãªã䜿ããŠããŸãã ã¹ããŒã«ãŒã«ã¯ã¯ã©ãŠããã¡ã³ãã£ã³ã°ã§è³Œå
¥ãã ovo ãå©çšããŠããŸãã ããããªéè²ããã¹ã¯ã«æ ããŸã ã³ã³ãã¯ããªæ¬äœã§ãé³å²ããå°ãªããæ°ã«å
¥ã£ãŠããŸãã é話ã«ã¯ eMeet Luna ãå©çšããŠããŸãã æç·/Bluetoothåæ¿å¯èœã§åãåãâ æ¬äœã«ãã€ãºãã£ã³ã»ãªã³ã°æ©èœãã€ããŠãããããã¿ã€ãã³ã°é³ãªã©ã軜æžããããšãããæ°ã«å
¥ã£ãŠããŸãã ããŒããŒãã¯åå²ããŒããŒãã® 7sPro ãå©çšããŠããŸãã ã¬ããã£ãœãããŒãã£ããã奜㿠ãHHKBã®é
åã§åå²ããŒããŒãã䜿ãããããšããèŠæãæºãããŠããããŒããŒãã§ãããŒã¹ã€ãããå€ããªãã3幎ããã䜿ã£ãŠããŸãã ãããã¹ã¯ããã«å¯Ÿå¿ããŠããã®ã§ããŒã¹ã€ããã®å€æŽãåºæ¥ããšããããæ°ã«å
¥ããã€ã³ãã§ãã çŸåšã¯ alpacaã¹ã€ãã ãã»ããããŠå©çšããŠããŸãã ããŠã¹ã¯ MX MASTER 3S ãå©çšããŠããŸãã å¢ãããåãããŠãã«ãŒãœã«ããã¬ãªãç¹ããæ°ã«å
¥ãã§ã ãã©ãã¯ãããããã©ãã¯ããŒã«ãšè©ŠããŠã¿ãã®ã§ãããçµå±ããŠã¹ã«æ»ã£ãŠããŠä»¥æ¥ããã®ããŠã¹ãå©çšããŠããŸãã æåŸã«æšããè©°ã蟌ãã ãã£ã¹ãã¬ã€ã玹ä»ããŠãäœæ¥ç°å¢ç޹ä»ãçµãããŸãã ã«ãããã»ã¬ãã¢ã³ã»å¹œéçœæžã»ãºãŒããã¢ è¥¿æ æåŸã«ã京éœãããã«ãªã¢ãŒãã§ Findyã®è»¢è·ãµãŒãã¹ ãéçºããŠãã西æã®äœæ¥ç°å¢ã玹ä»ããŸãã 劻ãšåãéšå±ã§ãªã¢ãŒãã¯ãŒã¯ãããŠãããããæºãåããåãããããã«èšçœ®ããŠããŸãã奥ã«èŠããã®ã劻åŽã®ãã¹ã¯ã§ãã ããŸãåºããªãéšå±ãªã®ã§ãäœæ¥ã¹ããŒã¹ãã³ã³ãã¯ãã§ã ãã£ã¹ãã¬ã€ã¯ DELL U2720QM ã䜿çšããŠããŸãã4K 27ã€ã³ãã®ãã£ã¹ãã¬ã€ãªã®ã§ããã1ã€ã§ãååã«äœæ¥ãå¯èœã§ãã MacBook Pro 16 ãã¹ã¿ã³ãã«èŒããŠããã¥ã¢ã«ãã£ã¹ãã¬ã€ãšããŠããŸããMacBook ã¯äž»ã« Slack å°çšãšããŠããŸãã ãã ãããã€ã³ããšããŠã¯ãç®ç·ãäžããªãããã«ãã£ã¹ãã¬ã€ãã¹ã¿ã³ãã®äžã«çœ®ããŠããããšã§ãã ç«èæ°å³ã§éŠãè©ã«è² æ
ãæããã¡ãªã®ã§ãããã軜æžã§ããªãããªãšèããŠãã®ããã«ããŠããŸãã ãŸãããã£ã¹ãã¬ã€ãšæ£å¯Ÿããããã«åº§ãããšãæèããŠããŸãã ãªã¢ãŒãã¯ãŒã¯ãå§ããåæã«ãç®ç·ãå·Šå³ã©ã¡ããã«å¯ãç¶ããŠéŠãè
°ã®çåŽã ããçããªã£ãŠããŸã£ãããšããèŠãçµéšããããã®ãããªå·¥å€«ãããŠããŸãã ãã ãå°ãç®ãç²ããããæããã®ã§ãæ¬æ¥ã§ããã°ããå°ããã£ã¹ãã¬ã€ãšã®è·é¢ãåããããšèããŠããŸãã ãããéšå±ã®åºãã®é¢ä¿ã§ããã以äžå¥¥è¡ãã®ãããã¹ã¯ã眮ãããšãã§ããªãã®ã§ããã®ç¶æ
ã§ææ
¢ããŠããŸãã ããŒããŒã㯠Keychron K2 ã䜿çšããŠããŸãã Keychron K2 ã®ããŒããŒããšæšè£œã®ããŒã ã¬ã¹ã å
ã
㯠HHKB ã䜿ã£ãŠã¿ãããªãšæã£ãŠããã®ã§ããã倿®µãé«ããŠãªããªãæãåºããŠããªãã£ããšããã«åè·æä»£ã®å
茩ã«å§ããããŠè³Œå
¥ããŸããã æ¯èŒçå®äŸ¡ã ã£ãã®ã§è©Šãã«äœ¿ã£ãŠã¿ããšããããšãŠãæã¡ãããéåžžã«æ°ã«å
¥ã£ãŠããŸãããããã3幎以äžçµã¡ãŸããã ããŠã¹ã¯ Apple ã® Magic Trackpad ã䜿ã£ãŠããŸããããŠã¹ã«å¯Ÿãããã ããã¯ãªããå人ãããã¬ãŒã³ãããŠããã£ããã®ããã£ãšäœ¿ãç¶ããŠããŸãã ãŸããæéŠããå
ã®è² æ
ãæžããç®çã§ã FILCO ã®ããŒã ã¬ã¹ã ã䜿ã£ãŠããŸããèã«åªããããšããçç±ã§æšè£œã®ãã®ãéžã³ãŸããã ä»åã¯ãã¹ã¯ã®åçãæ®ãã¿ã€ãã³ã°ã ã£ãã®ã§ããªãã¹ãããªãšããŠããŸããFindyã§ã¯ç€Ÿå
茪èªäŒãè¡ã£ãŠãããæ¥åæéäžã«ãããŒã ã§åãæžç±ãèªã¿ãšã³ãžãã¢ã®ã¬ãã«ã¢ãããå³ã£ãŠããŸããæ¥åžžçã«ã¯ããã®èŒªèªäŒçšã®æžç±ã眮ããŠãã£ããããã«èªã¿è¿ãããã§ããããã«ããŠããŸãã 賌å
¥ããŠ1幎ã»ã©çµã£ãŠããæé·ã®å
ããèŠãå§ãããæ°ã«å
¥ãã®ãµããã³ ãŸãšã ãããã§ããã§ããããïŒ ãã¯ããããŒããŒãã«ã¯ãããããã ããããããŸãããïŒ ãŸããä»åã®èšäºãéããŠæå€ã«ãã¹ããŒã«ãŒãã€ã¯ã䜿ã£ãŠããã®ãèªåã ãã§ã¯ãªãããšã«é©ããŸããã èªåã®ç°å¢ã§ãèšèŒããŸãããããã€ã¯ã®ç©çã¹ã€ããã¯ãããããªã®ã§æ¯é詊ããŠã¿ãŠãã ããïŒ çŸåšããã¡ã€ã³ãã£ã§ã¯äžç·ã«åãã¡ã³ããŒãåéäžã§ãã èå³ãããæ¹ã¯ãã¡ããã â herp.careers
ããã«ã¡ã¯ããã¡ã€ã³ãã£æ ªåŒäŒç€Ÿã§ããã³ããšã³ãã®ãªãŒããããŠãããŸã æ°çŠ( @puku0x )ã§ãã ãã®èšäºã§ã¯ã転è·ãµãŒãã¹ Findy ã®éçºããŒã ã«ãããéçºçç£æ§ã®åäžã«å¯Ÿããåãçµã¿ãã玹ä»ããŸãã 以åã®ç¶æ³ ã¢ããªã¹ã®è§£äœ éçºåºç€ã®å·æ° ã³ã³ããŒãã³ãèšèšã®å·æ° ãã¹ãã®æ¡å
CI ã®é«éå æ¹åã®å¹æ ãŸãšã 以åã®ç¶æ³ 2020幎é ã® Findy 㯠Ruby on Rails ãš React ã®ã¢ããªã¹æ§æã§äœãããŠããŸããã æ©èœã®å¢å ã«åŸãã³ãŒããè€éåãããã ãã«éçºã¹ããŒããäŒžã³æ©ãããã«ãªããŸããã ããã§ Findy Team+ ã§ç®åºããåœæã®ãªãŒãã¿ã€ã ãèŠãŠã¿ãŸãããã 2020幎ã®Findyã®ãªãŒãã¿ã€ã äžèšã®ã°ã©ãããæ¬¡ã®ããšãããããŸãã æ¹ä¿®ãæ¬çªã«é©çšããããŸã§ çŽ1é±é ããã ãã«ãªã¯ãšã¹ããã¬ãã¥ãŒããããŸã§ çŽ5æ¥ æŸçœ®ããã ãã«ãªã¯ãšã¹ãã®ã¬ãã¥ãŒå®äºãŸã§ã« çŽ2æ¥ãšåæ¥ ããã 1幎ãéããŠãã«ãªã¯ãšã¹ãæ°ã®å¹³åã2.0ãè¶
ããæ¥ãç¡ãã£ãããšãããèŠããç¶æ³ã§ãã£ãããšãæšæž¬ã§ããŸãã ã¢ããªã¹ã®è§£äœ åè¿°ã®éã Findy 㯠Rails ã¢ããªã¹ã§äœãããŠãããCI ã«ããã³ããšã³ããšããã¯ãšã³ãã®äž¡æ¹ãå«ãŸããŠããããšãããç»é¢ã®æèšã1ã€æŽæ°ããã ãã§ãé·ã CI åŸ
ã¡ãçºçããŸãã ãã®ç¶æ³ãæç Žããããã«ãFindy ã§æåã«è¡ãããåãçµã¿ã¯ãRails ã¢ããªã¹ã®è§£äœãã§ããã çŽ3ãµæãããŠããã¯ãšã³ãåŽã Rails ã® API ã¢ãŒããããã³ããšã³ãåŽã Next.js ã§åå®è£
ãããšãã倧æãããªãããžã§ã¯ãã§ããããããã«ããããã³ããšã³ããšããã¯ãšã³ãã§ç¬ç«ããŠåããããã«ãªã£ããããå
è¿°ãã CI åŸ
ã¡ã倧å¹
ã«ççž®ã§ããŸããã å®éã®å¹æã¯ note ã®èšäº ã«ãŠåŒç€Ÿ CTO ã玹ä»ããŠãããŸãã®ã§ããã¡ããæ¯éãäžèªãã ãããè»œåŸ®ãªæ¹ä¿®ã§ããã°1æ¥ã§ä¿®æ£ããã¹ããŒããå®çŸããæéã§ãŠãŒã¶ãŒã«äŸ¡å€ãå±ããåºç€ãäœã£ãã®ãã¢ããªã¹è§£äœã®å€§ããªå¹æãšèšããã§ãããã éçºåºç€ã®å·æ° 2021幎5æãã¢ããªã¹è§£äœåŸã®ããã³ããšã³ããæŽããŠãªãªãŒã¹ãããŸããã倧ããªäžå
·åããªãç¡äºã«çµãã£ããšå®å¿ããããšããã§ããããŸã æ®ã£ãŠãã課é¡ã解決ããªããã°ãªããŸããã ããã³ããšã³ãåŽã«æ®ããã課é¡ã¯æ¬¡ã®éãã§ãã ããŒãžã§ã³ã®å€ãããŒã«ã»ã©ã€ãã©ãªã倿° ã³ã³ããŒãã³ãã®æžãæ¹ãå€ã åïŒFlowïŒã¯ãããããŸãåäœããŠããªã ãã¹ããæžãããŠããªã èŠéãã®æªãããã³ããšã³ãèšèš æåã«ãäŸåã©ã€ãã©ãªã®ã¢ããããŒãã䜿ãããªããªã£ãã©ã€ãã©ãªãåé€ããŠãããŸããããŸããDependabot ãå°å
¥ã宿çã«æŽæ°ããäœå¶ãæŽããŸããã æ¬¡ã« Nx ãå°å
¥ããã¢ãã³ãªéçºç°å¢ãžç§»è¡ããŠãããŸãããNx ã¯åè·ã§å©çšããçµéšããããã³ãã³ãã²ãšã€ã§ TypeScript + React + Jest + ESLint + Prettier ãæã£ãéçºç°å¢ãäœæã§ããããç§»è¡ã¯çæéã§æžã¿ãŸãããããã§å°å
¥ãã Nx ã¯ãåŸã® CI é«éåãžã®åžç³ãšãªããŸãã Findy ã«ã¯éçºåœåãã React ãçšããããŠãããŸãããããã®æã¯ãŸã ã³ã³ããŒãã³ãã Class Component ã§æžãããŠãããŸãããä»åŸã® React ãšã³ã·ã¹ãã ã®çºå±ã«è¿œåŸããã¹ã Function Component ãžã®æžãæããåæã«é²ããŸããã Flow ãã TypeScript ãžã®ç§»è¡ã¯çŽæ¥æžãæããã®ãé£ããã£ããããäžåºŠå
šãŠã®ãœãŒã¹ã³ãŒããã Flow ã®åã¢ãããŒã·ã§ã³ãå€ããŠçŽç²ãª JavaScript ã«ãããã®åŸ TypeScript ã§æžãçŽããŸãããç§»è¡ã®æ©ã段éã§ strict: true ã§æžãããã«ãããããNull ãã§ãã¯æŒãã«ããäžå
·åã倧å¹
ã«åæžã§ãããšæããŸãã åœæã¯ API ã¬ã¹ãã³ã¹ã«å¯ŸããŠãæäœæ¥ã§åä»ããè¡ã£ãŠããŸããããAPI ã®ä»æ§ãè€éã§ãã£ããããã¥ã¡ã³ããšåæããã®ãé£ããã£ãããšãããåŸã« REST API ãã GraphQL ã«ç§»è¡ãã GraphQL Code Generator ã«ããåçæãæ¡çšãããããã«ãªããŸãã ã³ã³ããŒãã³ãèšèšã®å·æ° åœæã®å®è£
ã§ã¯ãã³ã³ããŒãã³ã㯠Container Component / Presentational Component ã®ãã¿ãŒã³ã§æžãããŠãããŸãããã¡ã³ããŒã®ç¿ç床ããã¹ãã®ãããããèæ
®ããåºæ¬èšèšã¯èžè¥²ãã€ã€ãäžèšã«ç€ºããããªããŒã¿ã®æµå
¥å
ã«çç®ããäžå±€æ§é ãžãšæ¡åŒµããŸããã ã³ã³ããŒãã³ãå ã«ã¹ã¿ã ããã¯å æ±ãããŒã¿ Page Component Params Hook ãã©ãŠã¶URL Container Component Facade Hook API ã ã¹ãã¬ãŒãžç Presentational Component Presenter Hook ãã©ãŒã åå±€ã§ã®è²¬åãæç¢ºã«ãªã£ãããšã§å®è£
æã®æ··ä¹±ãå°ãªããªã£ããšæããŸãã äœè«ã§ããæ¬èšèšã¯çè
ã Angular ã³ãã¥ããã£ããåŸãããç¥èŠã React ã¢ããªã±ãŒã·ã§ã³ã«è»¢çšãããã®ãšãªããŸããäžæè°ãªçžããããã®ã§ããã *1 ãã¹ãã®æ¡å
ãããžã§ã¯ãé²è¡äžã«ããã€ãã®äžå
·åã«ééããããšããããŸãããããããã®ã»ãšãã©ã¯ãã¹ããããã°é²ãããã®ã§ãããå°æ¥çãªå€æŽã«èããããããããã¹ãã®æ¡å
ã¯æ©æã«çæããŸããã幞ãããã¯ãšã³ãåŽã§ã¯æ¢ã«ããã¹ããæžãã®ã¯åœããåããšããæåãæ ¹ä»ããŠãããããããã³ããšã³ãã®ãã¹ãå°å
¥ã®ããŒãã«ã¯é«ããããŸããã§ããã åœæã¯ãŸã ã¡ã³ããŒå
šå¡ãããã³ããšã³ãã®ãã¹ãã«æ
£ããŠããèš³ã§ã¯ãªãã£ãããããã¹ãã®ãææ¬ãšãªããããªå®è£
äŸãå¢ãããŠããããšããå§ããŸããããŸãããŠãŒãã£ãªãã£çã®å
¥åºåã®é¢ä¿ãæãããªãã®ãããŠããããã¹ããæžããæ¬¡ã«ã³ã³ããŒãã³ãã®ã¹ãããã·ã§ãããã¹ããããããã€ã³ã¿ã©ã¯ã·ã§ã³ãã¹ããçµåãã¹ããšãã£ãããã«ç¯å²ãåºããŠãããŸããã ãŸãããã¹ããæžãã¢ãããŒã·ã§ã³ãåäžããã工倫ãšã㊠Wallaby.js ã®ãããªå¯èŠåããŒã«ãå°å
¥ããŸãããWallaby.js ã«ã€ããŠã¯æ¬¡ã®èšäºããåç
§ãã ããã tech.findy.co.jp ä»ã§ã¯å
šå¡ãåœããåã®ããã«ããã³ããšã³ãã®ãã¹ããæžãããã«ãªããŸããããã¹ãã«ãã£ãŠå®ãããŠãããšããå®å¿æãããããšãªããããã¹ããæžãããšãç¿æ
£åããããšã«ãã£ãŠããã¹ããæžããããããã«èšèšãæŽç·Žãããããšãã£ã坿¬¡çãªå¹æãåŸãããã®ãå¬ãããšããã§ããã CI ã®é«éå ã³ãŒãããŒã¹ãå¢ãããã«ãããã¹ãã®å®è¡æéãå¢ããŠãããšãCIã®åŸ
ã¡æéãé·ããªã£ãŠãããŸããCI æéã®å¢å ã¯ãªãŒãã¿ã€ã ã®å¢å ã«çŽçµãããããæ¹åã¯å¿
é ã§ããã éçºåºç€ãå·æ°ããã«ããããCI æéã®å¢å ã¯äºãæ³å®ãããŠãããã Nx ãå°å
¥ãã nx affected ã³ãã³ãã«ãã倿޿€ç¥ã«ãã£ãŠå¿
èŠãªãžã§ãã®ã¿å®è¡ããããšã§ CI ã®é«éåãå³ããŸããããžã§ãã®åå®è¡ãšãã£ã倿޿€ç¥ã ãã§ã¯é«éåãé£ãããã®ã«å¯ŸããŠã¯ Nx Cloud ãå°å
¥ãããªã¢ãŒããã£ãã·ã¥ã掻çšããé«éåã宿œããŸããã çµæã¯æ¬¡ã®éãã§ããCI æéã¯å¹³å6åã§ããã£ãã·ã¥ãããããªãå Žåã¯16ã17åãããããšããããŸãããæ©ãæã¯2ã3åã§çµããããã«ãªããŸããã ãžã§ãåäœã®è©³çŽ°ãæ¬¡ã®å³ã«ç€ºããŸãã Nx Cloudã«ããé«éåã®å
èš³ Nx Cloud å°å
¥ã«ãã300æé以äžã® CI æéãåæžã§ããŸãããããã§ã¯ããã³ããšã³ãåŽã®CIé«éåãåãäžããŸããããããã¯ãšã³ãåŽã®åãçµã¿ãèšäºã«ãããŠãããŸãã®ã§ããèå³ã®ããæ¹ã¯æ¯éãäžèªãã ããã tech.findy.co.jp æ¹åã®å¹æ ããã§ã¯ãã¢ããªã¹è§£äœãã¯ãããšããæ§ã
ãªåãçµã¿ã®ææãèŠãŠãããŸããããæ¬¡ã®å³ã¯2023幎ã«ããã転è·ãµãŒãã¹ã® Findy ã®ããã³ããšã³ããšããã¯ãšã³ãããããã®ãªãŒãã¿ã€ã ãèšæž¬ããçµæã瀺ããŠããŸãã ããã³ããšã³ã ããã¯ãšã³ã ãªãŒãã¿ã€ã ã100æéãè¶
ããŠããç¶æ³ãã倧å¹
ãªæ¹åãã§ããŸãããç¹ã«ããã³ããšã³ãã«é¢ããŠã¯ããŒãžãŸã§ã®æéã8æéãåã£ãŠããããšãããé«éãªéçºãå®è·µã§ããŠãããšèšããŸãã ããã³ããšã³ãã®ã¢ã¯ãã£ããã£ã®å€åã«ã€ããŠãèŠãŠãããŸããããã¢ããªã¹è§£äœã宿œããã2021å¹Žãšæ¯èŒãããšãè¿å¹Žã®ã¢ã¯ãã£ããã£éã¯èããå¢å ããŠããŸãã 2021幎 2023幎 ãã¡ããããã¯ã¡ã³ããŒã®å¢å ãäž»ãªèŠå ãšããŠèããããŸããïŒæ¡çšããŒã ã®çãããã€ãããããšãããããŸãïŒãããã ãã§ãªããäžäººãããã®ã¢ã¯ãã£ããã£ãå¢ããïŒ=äžäººãããã®ããã©ãŒãã³ã¹ãåäžããïŒããšãçµæã«è²¢ç®ããŠãããšæããŸãã 2021幎ïŒ1人ãããïŒ 2023幎ïŒ1人ãããïŒ 2021å¹Žåœæã®åã®ã¢ã¯ãã£ããã£ã瀺ããŠããã®ã§ãåçŽèšç®ã§éçºçç£æ§ãåã«ãªã£ãŠãããšèšããŸããïŒé 匵ã£ãç²æããããŸãã ðª ãŸãšã ãã¡ã€ã³ãã£ã§ã¯ãã¢ããªã¹ã®è§£äœããéçºåºç€ã®å·æ°ããCI ã®é«éåãã宿œããéçºçç£æ§ãåäžãããããšã«æåããŸããã æ°å¹ŽåãŸã§ã¯ãã¡ã€ã³ãã£ãéçºã¹ããŒãã«äŒžã³æ©ãã§ãããšç¥ã£ãŠé©ããæ¹ãå€ããããããŸãããããæ°å¹Žã§å€§ããæé·ã§ããã®ã¯ç€Ÿå
ã®åªç§ãªã¡ã³ããŒã®ååãã£ãŠã®ãã®ã ãšæè¬ããŠããŸãã ãããŸã§ã芧ããã ããæ¹ã¯ã ãã¡ã€ã³ãã£ã¯ãããŸã§ç¹å¥ãªããšããã£ãŠããèš³ã§ã¯ãªã ãšãæ°ä»ãã«ãªãããããšæããŸãã 1ã€1ã€ã®ç©ã¿éããä»ã®ç§éã®éçºãæ¯ããŠããŸãã æ¥ã
ã®æ¹åã倧äºã«ããŠãããŸãããã ãã¡ã€ã³ãã£ã¯ç©æ¥µçã«ãšã³ãžãã¢ãæ¡çšããŠããŸããCI/CD ãå§ããFour Keysãéçºçç£æ§ãæè¡ãã¬ã³ãã転è·åžå Žãªã©èå³ã®ããæ¹ã¯ããæ°è»œã«ã«ãžã¥ã¢ã«é¢è«ãåããŠã¿ãŠãã ããã ãã¡ã€ã³ãã£ã®æ¡çšæ
å ±ã¯ãã¡ã â herp.careers *1 : https://dev.to/puku0x/angular-react-2h4j
ããã«ã¡ã¯ããããã¯ããã°ãã¯ã @gessy0129 ã§ãã ãã¡ã€ã³ãã£ã¯æšå¹Žã«ç¶ã RubyKaigi 2024 ã§Platinum SponsorsãšããŠåè³ããŸããRubyKaigi 2018ãããããŸã§ç¶ç¶ããŠåè³ã§ããŠããã®ã¯ãæ§ã
ãªåŸ¡çžã®ãããã ãšæããŠããŸããRubyã³ãã¥ããã£ããã³ãã¡ã€ã³ãã£ãå¿æŽããŠãã ããæ¹ã«ã¯æè¬ã®æ°æã¡ã§ãã£ã±ãã§ãã Platinum SponsorsãšããŠå®æœããããš ä»å¹Žã®ãã¡ã€ã³ãã£ã¯ãããŒã¹åºå±ãšDrinkupã2件宿œãããŠé ãäºå®ã§ãã Drinkupã¯connpassäžã«ãªãŒãã³ãããŠé ããŠããŸãã findy.connpass.com findy.connpass.com ã»ãŒã»ãŒåãŸã£ãŠããŸããŸãããããã²ãåå é ãããšå¬ããã§ãïŒ ããŒã¹ã«ã¯ãFindy Team+ã®éçºãªãŒããŒã§ãã @ham0215 ãã¯ããã @yuichiro826 ãCTOã® @ma3tk ãVPoEã® @kxmxyx ãåå ããŸããåãããäºå®ã§ãã®ã§ããã²éã³ã«æ¥ãŠãã ããïŒ ããŒã¹ã¯ãã¡ãã§ãïŒ ããŒã¹å
容ã®å
šè²ã«ã€ããŠã¯ãçŸåšãæçµã®å
容ãFixãããããã®äœæ¥ã宿œäžã§ãããæåŸ
é ããã°å¹žãã§ãïŒ äžéšãå
¬éãããŠé ããŸããšãRuby Code Quizãšããã¯ã€ãºãçšæããŠãããŸããé嬿éäžã¯å
å®¹ãæ¯æ¥å€ããã®ã§ããã²æ¯æ¥ææŠãã«ããŠãã ããïŒ å幎ããã®æ¯ãè¿ã æšå¹Žã®RubyKaigiããæ©äžå¹ŽãçµéããŸããããã®éã®ãã¡ã€ã³ãã£ã®å€åããäžå¹Žåãšæ¯èŒããªããã玹ä»ããŸããäž»ã«Rubyã«é¢ä¿ããããšãã¡ã€ã³ã«ããã¯ã¢ãããããŠé ããŸããã ãããã¯ãéçºç¶æ³å€å Findy Team+ ã䜿ã£ãŠãåŒç€ŸãRubyã§éçºããŠããäž»èŠããã¯ãšã³ããªããžããªã®ç¢ºèªãããŸããã 2023幎4æãš2024幎4æã®å¯Ÿæ¯ã§ãã çŽæçã«åãããããå¢å ããŠãŸãããïŒ ã°ã©ãã ãã ãšåããã«ãããããããªãã®ã§ãå
·äœçãªæ°åã§è¡šçŸãããŠé ããŸãã ã³ãããæ°ïŒ 1.49 å PRæ°ïŒ 1.56 å ã³ããã人æ°ïŒ 1.34 å ãªãŒãã³ããããŒãžãŸã§ã®å¹³åæéïŒ 13ïŒ
åæž 人æ°ãå¢ãããšéçºæéãé·ããªã£ããææšãæªåããããšãããã®ããªïŒãšæããªããèŠãŠãããäž»èŠã¹ã¿ãããè»äžŠã¿åäžããŠããŠæ£çŽèšã£ãŠé©ããŸããã æ®æ®µã¯ããããã°ã«ãŒãã³ã°ã§èŠãããšããªãã®ã§ãªããªãã«æ°é®®ãªå³ã§ãã Ruby biz Grand prix 2023 ãœãŒã·ã£ã«ã€ã³ãã¯ãåè³ rubybiz.jp RubyKaigi 2023ã®åå ããã£ããã«Ruby bizã«ãå¿åãããŠé ããŸããŠããœãŒã·ã£ã«ã€ã³ãã¯ãè³ãåè³ããããšãåºæ¥ãŸãããæ¬åœã«ããããšãããããŸãã ä»åã®RubyKaigiã«ãåå äºå®ã® @ham0215 ããã®Rubyã«é¢ããç±ãã³ã¡ã³ãããããããããå
ãRubyãžã®è²¢ç®ãããäžå±€åŒ·ããŠãããããšèããäºãåºæ¥ãŸããã ãã®åºŠã¯ãœãŒã·ã£ã«ã€ã³ãã¯ãè³ãããã ãããšãã§ããèª ã«å
æ ã«æããŸãããšã³ãžãã¢çµç¹ã®éçºããã©ãŒãã³ã¹åäžãæ¯æŽããSaaSãFindy Team+ãããæ¥æ¬çºã®ãRuby biz Grand prix 2023ãã§åè³ãã§ããŸããããšã倧å€åã°ããéãã§ããåœç€Ÿã§ã¯ãä»ååè³ãããFindy Team+ãã ãã§ã¯ãªããå€ãã®ãããã¯ãã§Rubyã䜿ãããŠãããRubyã³ãã¥ããã£ããRuby on Railsããã¯ãããšããå€ãã®ã©ã€ãã©ãªãªã©ã®ãããã§ãŠãŒã¶ãŒãžçéã§äŸ¡å€ãå±ããããšãã§ããŠãããŸããä»åŸããRubyããžã®æ©è¿ãã®æå³ã蟌ããŠãRubyãæŽ»çšãããµãŒãã¹éçºããšã³ãžãã¢åãã®ã€ãã³ããäºäŸèšäºã®å
¬éãªã©ãè¡ããRubyã³ãã¥ããã£ã®çºå±ã«å¯äžããŠãŸãããŸãã ( エンジニア組織支援SaaS「Findy Team+」が「Ruby biz Grand prix 2023」でソーシャルインパクト賞を受賞 | ファインディ株式会社のプレスリリース ã®åè³ã³ã¡ã³ãããåŒçš) Rubyã䜿çšããæ°ãããããã¯ãFindy ToolsããªãªãŒã¹ Findy Tools ã¯æ°ã¶æã§ãããã¯ããªãªãŒã¹ãã§ããçŸåšãçå®ã«æé·äžã®ãµãŒãã¹ã§ãããããã¯ããšããŠã¯æªæçãªéšåããããŸãã®ã§ãçæ§ããã®ãã£ãŒãããã¯ãæ°å€ããèãããªãããããã¯ãã«åæ ããŠãããããšèããŠããŸããããŒã¹ãªã©ã§ãã²ãèããé ããã°å¹žãã§ãïŒ Findy Toolsã«é¢ããå
·äœçãªå
容ã¯ããã¯ããã°ã«èšèŒããããŠé ããã®ã§ãã¡ãããã²ãåç
§ãã ããïŒ tech.findy.co.jp ãããã§ãããïŒãã¡ã€ã³ãã£ã®ãã®äžå¹Žã®æ©ã¿ããã€ãžã§ã¹ãã§ãå±ãããŸããã ãã¡ã€ã³ãã£ç€Ÿã¯åŒãç¶ãRubyãšãšãã«æé·ããŠãããã°ãšèããŠãããŸãã ãããŠãäžç·ã«åãã¡ã³ããŒãçµ¶è³åéäžã§ãã èå³ãããæ¹ã¯ãã¡ããã â herp.careers ããŸã ãã¡ã€ã³ãã£ã¯4æ29æ¥ã«ãªãã£ã¹ç§»è»¢ãããŸããïŒç§»è»¢åŸã®ãªãã£ã¹ã®äŒè°å®€ã«ãRubyããããŸãïŒRubyã§ãã¡ã€ã³ãã£æ ªåŒäŒç€Ÿã倧ãããªã£ãããšããããäŒè°å®€ãµã€ãºã¯æ¯èŒç倧ããã§ãïŒ
ããã«ã¡ã¯ã2024/3/18 ãããã¡ã€ã³ãã£ã«å
¥ç€Ÿããæ¬ç°ã§ãã ãã¡ã€ã³ãã£ã§ã¯ãFindy Team+ ãšããããšã³ãžãã¢çµç¹ã®éçºçç£æ§ãå¯èŠåããéçºããŒã ããšã³ãžãã¢ãªã³ã°ã¡ã³ããŒã®ããã©ãŒãã³ã¹ãæå€§åããããã®ãµãŒãã¹ã®éçºã«æºãã£ãŠããŸãã ä»åã¯ãå
¥ç€ŸããŠäžã¶æã¡ãã£ãšãçµã£ãã®ã§ãå
¥ç€ŸããŠæ°ã¡ã³ããŒãšããŠãããªãšæã£ãããšãã玹ä»ããããšæããŸãã ãªã³ããŒãã£ã³ã°ããããããã å
¥ç€Ÿãããšåãã«ãªã³ããŒãã£ã³ã°çš Issue ãäœæãã¢ãµã€ã³ãããŠããŠããã€ãŸã§ã«ã©ãããããšãã§ããããã«ãªã£ãŠããããã«äœãããŠãã®ãããšããã®ãäžéããŸãšãŸã£ãŠããŠããããããããããã£ãã§ãã ãªã³ããŒãã£ã³ã°çš Issue ã«ã¯ã次ã®ãããªããšãèšèŒãããŠããŸãã æ°ã¡ã³ããŒããã£ããã¢ãããã¹ãäºé
ã®äžèЧ ç°å¢æ§ç¯æé ãå¿
èŠãªããŒã«ã®ã»ããã¢ããæé ãèšå®é
ç®ãªã© ã³ãŒãã£ã³ã°èŠçŽããã®å
ãšãªãææ³ æºããåãªããžããªã®åœ¹å²ããåã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ã㣠åçš®å®æããŒãã£ã³ã°ã®äžèЧããã®å
容 ãã€é ãŸã§ã«ã©ãããæ¥åãã§ããããã«ãªã£ãŠãããã®æåŸ
ã®ç®å® ã¡ã³ããŒã®çµéšãã¹ãã«ããã£ãŠããããããšãªã©ãéã¿ãŠãããŒãžã£ãŒãšåå¥ã«ããåãããããŠãã ãããªæãã«ãªã³ããŒãã£ã³ã°ã®ãŽãŒã«ãšæéãå®çŸ©ãããŠããŠã ãã®åŸã«ãããã®ãŽãŒã«ã«åããŠç¥ãã¹ãããšããã®ããã®è³æãèšèŒãããŠããæãã§ãã 忥ãããã® Issue ãèŠã€ã€ã¡ã³ã¿ãŒã®æ¹ãšå¯ã«ã³ãã¥ãã±ãŒã·ã§ã³ãåããªããç°å¢æ§ç¯ãæºãããããã¯ãã®çè§£ãã¹ããŒãææã£ãŠãã£ããã¢ããã§ããŸããã åå¥ã«ç¥ãã¹ãããšã鿬¡æããŠãããã®ã§ã¯ãªããå
šäœãšããŠäœãç¥ã£ãŠã©ãããç¶æ
ã«ãªãã¹ãããããããšãå¿
èŠã«å¿ããŠèœåçã«æ
å ±ããã£ããã¢ããããåããã§ããéåžžã«ãããããæããŸããã good first issue ããã³ãŒãã§è²¢ç®ã§ãã æ¥ãã§ãªãç°¡æãã€æ°ããåç»ãã人åãã® Issue ã good first issue ãšããã©ãã«ãä»ããŠç®¡çããŠããŠãæ°ã¡ã³ããŒã¯ãŸã good first issue ããçæããŠãéçºã®æµããæºãããããã¯ãã®ã³ãŒãããŒã¹ãçè§£ãç¿åŸããŠãããŸããç§ããã®æµãã§éçºãå§ããŸããã å good first issue ã® Description ã¯æ°ã¡ã³ããŒã§ãçè§£ã§ããããã¡ãããšæžãããŠããŠãåè¿°ã®ãªã³ããŒãã£ã³ã° Issue ã§ç޹ä»ãããŠããããã¥ã¡ã³ããèªã¿ã€ã€çè§£ããªãã Issue ã察å¿ããŠãããŸãã å®éç§ãä»ã®ãªã³ããŒãã£ã³ã°ããã°ã©ã ãåãã€ã€3é±éã»ã© good first issue ã察å¿ããŠãããŸãããã15å¶æ¥æ¥ã§ 34 PR ãåºããŠã³ãŒãã§è²¢ç®ã§ããŸããã ä»ã®ãªã³ããŒãã£ã³ã°ããã°ã©ã ããã£ãŠæ³¢ã¯ãããŸããå¹³åããŠ3PR/æ¥ãããã§ããŠããŸã ãã¡ãããªã³ããŒãã£ã³ã°æéã¯ãã£ããã€ã³ãããããããšã倧åã§ã¯ãããŸããããããããã€ã€å
¥ç€ŸããŠããã«äœãããè²¢ç®ã§ããããšã¯èªä¿¡ã«ãç¹ãããŸãããããããã©ã³ã¹ã§ã€ã³ããããšã¢ãŠãããããäž¡ç«ã§ããŸããã ã¬ãã¥ãŒããããéã ãã¡ããã¡ãéãã§ãã PR ã®ã¬ãã¥ã¢ãŒãã¢ãµã€ã³ããŠã ããã 10 å以å
ãé
ããŠã 1-2æé以å
ã«ã¬ãã¥ãŒãããŸãã ãã¡ããã¬ãã¥ã¢ãŒã®æ¹ã®ç¶æ³ã«ããããŸãããäœæ7-8å²ãããã® PR 㯠10 åãããã§ã¬ãã¥ãŒãããå°è±¡ã§ãã ã¬ãã¥ã¢ãŒäžäººåœãã4ä»¶/æ¥ãå¹³åããŠã1h以å
ã«ã¬ãã¥ãŒãããŠãŸã ããã«ã¯ããã€ãã®èŠå ããããŸãããäžçªå€§ããã®ã¯ããããµã€ãºãå°ããããŠãªãŒãã¿ã€ã ãçãããããšã§ææ»ããã³ã³ããªã¯ããé²ãããšããããšãæåãšããŠæ ¹ä»ããŠããããšã倧ãããšæããŠããŸãã ãã®ããã«ã PR ã®ç²åºŠã極åå°ãããã ã¬ãã¥ã¢ãŒã¯æ¥µååªå
ããŠã¬ãã¥ãŒãã ãšãã£ãããšã培åºãããŠããŸãã ãªããããããžãã®è©±ã¯å
æ¥éå¬ããã Qiita Conference ã§ã®åŒç€ŸCTOäœè€ã®çºè¡šã§è©³ããè§ŠããŠããŸãã®ã§ããèå³ããæ¹ã¯ãã²ãäžèªãã ããã speakerdeck.com ãŸãšã ä»ã«ãã玹ä»ãããããšã¯ãããããããŸãããä»åã¯ç¹ã«æ°ã¡ã³ããŒã«ãšã£ãŠã®éçºè
äœéšã«ã€ããŠ3ã€ããã¯ã¢ããããŠç޹ä»ãããŠããã ããŸããã å
¥ç€ŸããŠ1ã¶æçµéããŠã®ææ³ãšããŠã¯ããã¡ã€ã³ãã£ã¯éçºã¹ããŒãã倧åã«ããçµç¹æåãæ ¹ä»ããŠãããªãšæããŸããã ããè¯ããããã¯ããäœã£ãŠããå€ãã®ãŠãŒã¶ãŒã«è¯ããããã¯ããæäŸããããã«ããéçºã¹ããŒãã¯ãã®æºæ³ã«ãªããã®ã ãšæã£ãŠããŸãã ããããšã³ãžãã¢ãšããŠåã
ãçè§£ããŠäœçŸããŠããçµç¹ãªã®ã§ãç§ã«ãšã£ãŠæ°ããææŠãã§ããç°å¢ã ãšæããŠããŸãã ãã®ã¹ããŒãæãèªåãäœçŸãããããã¯ãã®æé·ãšèªåã®æé·ãéããªããè¯ããããã¯ããäœã£ãŠããããã§ãã ãã¡ã€ã³ãã£ã§ã¯äžç·ã«åãã¡ã³ããŒãçµ¶è³åéäžã§ãã èå³ãããæ¹ã¯ãã¡ããã â herp.careers
ããã«ã¡ã¯ã Findyã®Team+ãéçºããŠãã西æ( sontixyou )ã§ãã ããšã³ãžãã¢ã®æ¥åžžããšã³ãžãã¢éã®èªæ
¢ã®äœæ¥ç°å¢ã倧å
¬é Part1 ãšé¡ããŠãå
¬éããããã°ã奜è©ã§ããã ããã«ç¶ããŠãåŒç€Ÿãšã³ãžãã¢éã®äœæ¥ç°å¢ãèŠãŠãããŸãããïŒ äœæ¥ç°å¢ã倧å
¬é 西æ ç§ã¯ãçŸåšé±3æ¥ã»ã©åºç€Ÿãšæ®ãã¯ãªã¢ãŒãã¯ãŒã¯ããŠããŸãããããªç§ã®äœæ¥ç°å¢ãã玹ä»ããŸãã ãã¹ã¯ã®å
šäœåã¯ãã®ãããªæãã§ãã ãã¹ã¯ã¯æ°åæä»£ã®å
茩ããããããã§ããå¹
120cmã®ãã®ã䜿çšããŠããŸãã ãã£ã¹ãã¬ã€ã¯DELLã®27ã€ã³ã 4Kã¢ãã¿ã2æäœ¿ã£ãŠããŸãã1æã ã瞊眮ãã«ããŠããçç±ã¯ãçã¹ããŒã¹åãšéŠã®æ¯ãåãã倧å€ã ããã§ãã æšªçœ®ãã®ãã£ã¹ãã¬ã€ã§ã¯ããšãã£ã¿ãšSlackå°çšã«ãªã£ãŠããŸãã 瞊眮ãã®ãã£ã¹ãã¬ã€ã§ã¯ããã©ãŠã¶å°çšã«ãªã£ãŠããŸãããŠã£ã³ããŠãåçŽã«2æçœ®ããŠæŽ»çšããŠããŸãã ãã£ã¹ãã¬ã€ã¯ãšã«ãŽããã³ã®ã¢ãŒã ã§æ¯ããŠããŸãããã£ã¹ãã¬ã€ã®çžŠçœ®ããå®çŸããããã«æ¬ ãããªãã¢ã€ãã ã§ãããŸãããã£ã¹ãã¬ã€ã®å°åº§ããããšå Žæãåãããã§ãã Webã«ã¡ã©ã¯10幎åã«è²·ã£ãlogicoolã®ãã®ã䜿çšããŠããŸãããã€ã¯ãå
èµãããŠãããããå€ä»ããã€ã¯ã¯çšæããŠããŸãããããããè²·ãæ¿ããããã®ã§ãä¹ãæãå
ãæ¢ãäžã§ãã USBããã«ã¯ã ãµã³ã¯ãµãã©ã€ã®USBãã ã䜿çšããŠããŸãããã®ããã¯ãHDMI(4k/60Hz察å¿)1æ¬ãšUSB3.0 2æ¬ãšUSB Type-Cã®å
é»ã±ãŒãã«ãæãããšãã§ããŸãã ããŒããŒã㯠keychronã®K6 Pro ã䜿çšããŠããŸãã ããŒã¹ã€ãã㯠Keychron Silent K Pro Switch ã䜿ã£ãŠããŸããæéµæããšãŠãè¯ããããèªå®
çšãšãªãã£ã¹çšã§2å°è³Œå
¥ããŠããŸããŸããã ããŠã¹ã¯ã logicool ERGO M575S ã䜿çšããŠããŸãã æéŠãåããããã«ãã«ãŒãœã«ç§»åãã§ããŸãããã®ãããæéŠã®ç²ãã¯å
šç¶ãããŸããããŸããããŒã«ãåãå€ãããšãã§ãããããããŠã¹å
éšã®æž
æãããŒã«äº€æã楜ã
ã§ãã èªåã奜ããªãã®ããã¹ã¯ã«çœ®ãããšã§ãä»äºçµãããŸã§ã¢ãããŒã·ã§ã³ãããŒããã€ã€ä»äºãã§ããŸãã ãŸãã¯ããã£ã®ã¥ã¢ã§ããç§ã¯ æµ·æŽå å¶äœã®ãã£ã®ã¥ã¢ã奜ããªãããã¬ãã£ãã³ã§åœãŠãæªç£ããã³ã¬ãšæç«ã眮ããŠããŸãã瞊ã«é·ããã®ã¯ãã€ã©å±ã§åœãŠãç«ã®ãã€ã©ã顿ã«ãããã£ã®ã¥ã¢ã§ãã ãã¹ã¯æšªã«ã¯ãPS5ã眮ããŠããŸããä»äºçµãã£ãç¬éã«ãã²ãŒã ãã¬ã€ã§ãããããšãŠãå¿«é©ã§ãã ä»äºãå¿«é©ãã€éäžã§ããå Žæã«ãªãããã«æèããŠããã¹ã¯ç°å¢ãæŽããŠããŸãã æµç° æ¬¡ã¯æµç°( ham )ã®äœæ¥ç°å¢ã玹ä»ããŸãã ã³ããçŠã®ãšãã«ãªã¢ãŒãã¯ãŒã¯ãå§ããã³ãã³ããªã¢ãŒãç°å¢ãæŽããŸããã ç§ã®ããªã·ãŒã¯ãæ¥ã
䜿ããã®ã¯è¯ããã®ãïŒããªã®ã§ãäºç®ã®èš±ãç¯å²ã§åŠ¥åããã«èªåãè¯ããšæãããã®ãéžã¶ããã«ããŠããŸãã ãã£ã¹ãã¬ã€ã¯2æãªããšéçºå¹çãã¬ã¿èœã¡ããã¿ã€ãã®ãšã³ãžãã¢ãªã®ã§ãã¥ã¢ã«ãã£ã¹ãã¬ã€ã§ãã å³åŽã¯4Kã§31.5ã€ã³ããå·ŠåŽã¯27ã€ã³ãã§ãã 4Kãã£ã¹ãã¬ã€ã¯ããã©ãŠã¶ãZoomãGoogle Meetãªã©ã衚瀺ããŠããŸãã 27ã€ã³ããã£ã¹ãã¬ã€ã¯ãSlackãã¡ãŒã«ããšãã£ã¿ãŒãªã©æç« ãæ±ãããŒã«ã衚瀺ããŠããŸãã 4Kãã£ã¹ãã¬ã€ã¯ã¡ãŒã«ãŒãªã©ã«ãã ããã¯ãªãã®ã§ãããUSB Type-Cã§åºåãšPCæ¬äœãžã®çµŠé»ãã§ãããã®ãéžã³ãŸãããã±ãŒãã«ãå°ãªãã®ã¯æ£çŸ©ïŒïŒ ãŸãããã¡ãã®ãã£ã¹ãã¬ã€ã¯è¶³ã倧ããã£ãã®ã§ã¢ãã¿ãŒã¢ãŒã ã䜿ã£ãŠããŸãã ãã¹ã¯ã¹ããŒã¹ãæ¡ããããã«ã¢ãã¿ãŒã¢ãŒã ãè²·ã£ãã®ã§ãããã¢ãã¿ãŒã®è§åºŠãç°¡åã«å€ãããããããã¢ãã¿ãŒã®èé¢ã®é
ç·ãå€ããããã¢ãã¿ãŒåšãã®æé€ããããããªãå°å³ã«ã¹ãã¬ã¹ã ã£ãããšãè§£æ¶ãããŸããã 27ã€ã³ããã£ã¹ãã¬ã€ã¯è§£å床ãªã©ã®ã¹ããã¯ã¯å£ããŸãããæç« ãæžãå Žåã«4Kè§£å床ã ãšæåãå°ãããŠäœ¿ãã¥ããã®ã§ãå¿
èŠååãªã¹ããã¯ã ãšæããŠããŸãã ãªã¢ãŒãã¯ãŒã¯ã«ãããŠãªã³ã©ã€ã³äŒè°ã¯çåœç·ã§ãããã¡ãã®ç»è³ªãé³è³ªãæªãå Žåã¯çžæã«ã¹ãã¬ã¹ãäžããŠããŸãå¯èœæ§ããããŸãã ãã®ããã Webã«ã¡ã© / ãã€ã¯ ã¯è¯ããã®ãéžã¶ããã«å¿ãããŸããã ãŸããèªå®€ã§ã¯åããã®å
ãåœããããé¡ãæãèŠããŠããããã©ã€ããè²·ããŸãããèŠãç®ã®å°è±¡ã倧äºã§ãã æ€
å㯠Ergohuman PRO2 Ottoman ã䜿çšããŠããŸããè¶³ã䌞ã°ããããã«ãªãããã³ãã€ããŠãããã®ã«ããŸããããå
šç¶äœ¿ããªãã®ã§äžèŠã§ããw ãªãã足眮ããšäžç·ã«äœ¿ãããšã§æ€
åã®é«ã調æŽãããããããªãã®ã§ã足眮ããšã»ããã§äœ¿ãããšããå§ãã§ãã åé ã«æžãããæ¥ã
䜿ããã®ã¯è¯ããã®ãïŒãã®ããŒããŒãããå§ãŸããŸããã REALFORCE ããå§ãŸããHHKB Professional(æå
ã«ãªãã®ã§åçãªã)ã HHKB Professional Hybrid Type-S ããããŠä»ã¯ HHKB Studio ã䜿ã£ãŠããŸãã ãŸããåå²ããŒããŒãã䜿ã£ãŠããããšããããŸããã Corne Cherry V3 ã¯ããŒãå°ãªã代ããã«ã¬ã€ã¢ãŒã掻çšããã®ã§ããã䜿ãããªããæ«æããŸããã»ã»ã» HHKBã©ã€ã¯ãª 7sPro ã¯ãæ°ã«å
¥ã£ãŠããã®ã§ããããŒã®åå¿ãéãããšãå€ã
ããã¹ãã¬ã¹ãæããã®ã§HHKBã«æ»ããŸããã 髿© é±ã«2æ¥çšåºŠãªã¢ãŒãããŠãã髿©ïŒ @nokv ïŒã§ãã ãªãã£ã¹å€åãäž»äœã®ããèªå®
ã¯ã·ã³ãã«ãªç°å¢ã«ããŠããŸãã ãã¹ã¯ã®å
šäœåã¯ãããªæãã§ãã 200cmçšåºŠã®å€§ãããã¹ã¯ã劻ãšååãã€äœ¿ã£ãŠããŸãã 劻ã¯ãªã¢ãŒãã¯ãŒã¯ãå€ããããMTGã被ã£ãéã¯ã©ã¡ãããç§»åããªããšãããªããªã©äžäŸ¿ãªããšããããŸãããäœæ¥ã®åéã«äŒè©±ããããããªãã¬ãã·ã¥ã§ããã®ã§1ã€ã®ãã¹ã¯ã«ããŠè¯ãã£ããšæããŠããŸãã èªåã®äœæ¥ç°å¢ã¯MacBook Proãšå€éšãã£ã¹ãã¬ã€ã瞊䞊ã³ã«é
眮ããã·ã³ãã«ãªãã¥ã¢ã«ãã£ã¹ãã¬ã€æ§æã§äœæ¥ããŠããŸãã 以åã¯ãã1æãã£ã¹ãã¬ã€ãããæšªã«é
眮ããŠããŸããããéŠãç®ã«è² è·ãããããšæããããçŸåšã®æ§æã«ããŸããã å€éšãã£ã¹ãã¬ã€ã¯ DELLã®27ã€ã³ãã®4Kã¢ãã¿ ã䜿ã£ãŠããŠãPCãžã®çµŠé»ãã±ãŒãã«1ã€ã§å¯èœãªç¹ããæ°ã«å
¥ãã§ãã ãšãã£ã¿ãGitHubãªã©é²èŠ§é »åºŠã®é«ããã®ã¯å€éšãã£ã¹ãã¬ã€ã«è¡šç€ºããéŠãžã®è² è·ã軜æžããããèŠç¹ããªãã¹ãäžãããªãããã«ããŠããŸãã ããŒããŒãã¯NuPhyã® Halo75 ã§ãã¹ã€ããã¯Night Breezeã䜿ã£ãŠããŸããæéµæãšé鳿§ã®ãã©ã³ã¹ãè¯ããé·æé䜿çšããŠãç²ãã«ããã®ãæ°ã«å
¥ã£ãŠããŸãã MacBook Proæ¬æ¥ã®é
çœ®ã«æ
£ããŠãããããããŠã¹ããã©ãã¯ããããå¥ã§çšæããããšã¯ãªãããããå°åž«ã¹ã¿ã€ã«ã«ããŠããŸãã æ€
åã¯Herman Millerã® ã»ã€ã«ãã§ã¢ ã䜿ã£ãŠããŸããæ€
åã®éžæã¯äœã®è² è·ã«çŽçµããã®ã§æ©èœæ§ã®é«ããéèŠããŸãããããã«å ããŠæ®æ®µã¯hamãããšåãããã«è¶³çœ®ãã䜿ã£ãŠããŸãã æ§æ Œçã«ãã®ãå€ããšèœã¡çããªãã®ã§ãå¿
èŠæäœéã®ãã®ã ããé
眮ããŠäœæ¥ã«éäžã§ãããããªç°å¢ãäœã£ãŠããŸãã ãŸãšã ãããã§ããã§ããããïŒ çŸåšããã¡ã€ã³ãã£ã§ã¯äžç·ã«åãã¡ã³ããŒãåéäžã§ãã èå³ãããæ¹ã¯ãã¡ããã â herp.careers
ããã«ã¡ã¯ã Findy Freelance ã®éçºããŒã ã§ãšã³ãžãã¢ãããŠãã 2bo ã§ãã ãã®èšäºã§ã¯ç§ãéçºçç£æ§ãäžããããã«éçºãããåã«èããŠããããšã«ã€ããŠæžããŸãã ããã§ãéçºãããåããšããã®ã¯æ¬¡ã®ãããªã¿ã€ãã³ã°ãæããŸãã PdMãªã©ããæ°èŠæœçã®ä»æ§ã«ã€ããŠçžè«ãåãããšã 起祚ãããéçºIssueãæåã«ç¢ºèªãããšã èªåãIssueãäœæãããšã ãªããã®ã¿ã€ãã³ã°ã§èããããšãããšãéçºãé²ããäžã§ã®æ¹åæ§ãééããå¯èœæ§ãæžããåŸããè»éä¿®æ£ãããããããããã§ãã ãªããã®èšäºã«ãããŠã¯ãéçºçç£æ§ããéçºææç©ã®æäŸäŸ¡å€ãæå
¥ãªãœãŒã¹ã§å²ã£ããã®ããšããŸãã ãããé 匵ã£ãŠéçºãããŠããããããããã¹ãããšã®æ¹åæ§ã倧ããééãããšæäŸäŸ¡å€ã0ã«è¿ã¥ãããéçºçç£æ§ãäœäžããŸãã ç¹ã«éçºãé«éãªããŒã ã§æ¹åæ§ã誀ããšé«éã«ééã£ãæ¹åãžé²ãã§ããŸãããšã«ãªããŸãã ãã®ãããªäºæ
ãé¿ããæäŸäŸ¡å€ãå°ãã§ãäžããããã«èããŠããããšãèšããŸãã ãªãããã€ãã ããã€ãããïŒ éçºããå¿
èŠããããïŒããªããŠæžãæ¹æ³ã¯ãªããïŒ ã·ã³ãã«ã«ã§ããªããïŒ ãªãªãŒã¹ãåå²ã§ããªããïŒ å®äŸã®çŽ¹ä» ãããžã§ã¯ãã®æŠèŠ è«æ±ãããŒã®çè§£ èšèšã®èŠçŽãã«ããã·ã³ãã«å ã¹ã³ãŒãã®æ±ºå®ãšãªãªãŒã¹ã®åå² çµããã« ãªãããã€ãã ããã€ãããïŒ å€§åæã«ã¯ãªãã®ã§ããããŸãã¯ä»¥äžãèããŸãã ãªãïŒãªããã®æ©èœãå¿
èŠãªã®ãïŒãŠãŒã¶ãŒã¯ãªããã®æ©èœãã€ããã®ãïŒ ãã€ïŒãã€ãã®æ©èœã䜿ãã®ãïŒãã®ãšããŠãŒã¶ãŒã¯ã©ãããç¶æ³ã«ããã®ãïŒ ã ãïŒã©ããã屿§ã®ãŠãŒã¶ãŒãïŒãŠãŒã¶ãŒã瀟å
ã«ããå Žåãã©ã®éšçœ²/圹å²ã®äººãïŒ ãããã®æ
å ±ã¯ãããããããšã« PdM ããæ®æ®µæäŸããŠããããŠããŸããããããªããèªåã§ãèããããã«ããŠããŸãã ãšã³ãžãã¢ã®èŠç¹ãããèããããšã§ããããå®çŸããããã®å¥ã®åœ¢ã®æ©èœãã¢ãããŒããè¯ãã®ã§ã¯ãªãããšææ¡ã§ããããšããããŸãã ããšãææ¡ãæ¡çšãããªãã£ããšããŠãçŸè¡æ¡ã®åŠ¥åœæ§ã確èªã§ãããããæ¹åæ§ãééããå¯èœæ§ãæžããããšãã§ãããšèããŠããŸãã éçºããå¿
èŠããããïŒããªããŠæžãæ¹æ³ã¯ãªããïŒ æäŸäŸ¡å€ã極åå€ããªããŸãŸãæå
¥ãªãœãŒã¹ãæžãããã¢ãããŒãããªããæ¬¡ã®ããšãèããŸãã æ¢ã«åãæ©èœãååšãããããŸãã¯å
šãåãã§ã¯ãªããã®ã®å®è³ªçã«åãæäŸäŸ¡å€ãæã€æ©èœããããïŒ æ¢åã®æ©èœãå©çšããŸãã¯çµã¿åãããŠå®çŸã§ãããïŒ å€éšãµãŒãã¹ãã©ã€ãã©ãªãã€ããããšã§å®çŸã§ãããïŒ äŸãã°ãç»é¢Aã§æ
å ±ã®è¡šç€ºè¿œå ãèŠæãããéããã®æ
å ±ããã§ã«è¡šç€ºããŠããç»é¢Bããããããç»é¢Aãžã®çŽæ¥è¿œå ã§ã¯ãªããç»é¢Bãžã®ãªã³ã¯ãèšããã ãã§ååãšããã±ãŒã¹ããã£ããããŸãã ãã®ããã«èŠææ©èœãã®ãŸãŸã§ãªããŠãå¿
èŠååãã¿ããã°åé¡ãªããšããã±ãŒã¹ã§ã¯ãéçºãªãœãŒã¹ãæžãããããšããããŸãã ã·ã³ãã«ã«ã§ããªããïŒ æ©èœãè€éã«ãªããšãã®åŸã®ã¡ã³ããã³ã¹ãæ¹ä¿®ã®å·¥æ°ãå¢å ããããäœãçŽããçºçãããããŠããŒã¿ã«ã§èŠããšçç£æ§ãèœã¡ããšããããšãèµ·ããã¡ã§ãã ãã®ããæ¬¡ã®ããšãèããŸãã è€æ°ã®é¢é£æ§ã®ãªãç°ãªãç®çãæ
ãæ©èœã«ãªã£ãŠããªããïŒ ãã®å Žåãã§ã¯ãŒã¯ãããŒãåŠçã®åå²ãå¢ããããšã«ãªã£ãŠããªããããŸãã¯ããããæ¥µåæžãããŠéçºã§ããªããïŒ é床ã«èªååãæœè±¡åããããšã§ãªã«ãããŠãããããããªããªã£ãããã€ã¬ã®ã¥ã©ãŒã±ãŒã¹ã«å¯Ÿå¿ãã¥ãããªã£ãŠããªããïŒ ç§ã¯éå»ã«ã·ã³ãã«ãããããªãŒãã¿ã€ã ãåªå
ããŠæ©èœè¿œå ãããããšããããŸãããã®æã¯æ¬æ¥ç°ãªãç®çããã€æ¢åæ©èœã«ä»ãè¶³ãåœ¢ã§æ©èœè¿œå ãããŸããã æåã®ãªãªãŒã¹ãŸã§ã®ãªãŒãã¿ã€ã ã¯ççž®ã§ããŸããããåŠçã®åå²ãšããŒã¿ã®ãã¿ãŒã³ãå¢ããŠã¡ã³ããã³ã¹ãšããŒã¿éèšããã¥ãããªããçµå±ã¯äžããäœãçŽãããšã«ãªããŸããã ããŒã¿ã«ã§èãããšæåããã·ã³ãã«ã«å¥ã®æ©èœãšããŠèšèš/éçºãããã»ããããã£ããšèããŠããŸãããã®åçãèžãŸããŠã®å
容ã«ãªããŸãã ãã ããç¹ã«ãã³ãã£ãŒäŒæ¥ã«ãããŠã¯ã©ãããŠããªãªãŒã¹ãŸã§ã®ãªãŒãã¿ã€ã ãçãããªããã°ãªããªãç¶æ³ããããšæããŸãã ãã®ããå®å
šã«åŠå®ã§ããããšã§ããªãã§ãããåã«ãã®ã»ããæ¥œã ãããšããçç±ã§ã¯ãããªãæ¹ããããšèããŠããŸãã ãªãªãŒã¹ãåå²ã§ããªããïŒ ãŠãŒã¶ãŒãžã®äŸ¡å€æäŸãèããŠç«æ¡ãããæœçãæ©èœããæ¬åœã«æå¹ãã©ããã¯å®éã«æäŸããŠã¿ãªããšããããŸããã ãŸãã倧ããªæœçã®å Žåã¯å¿
é ãªãã®ãšå¿
é ã§ã¯ãªããããã°å¬ãããšãããã®ãæ··åšããã¡ã ãšèããŠããŸãã ããããã¹ãŠã®å
容ãã€ãã£ãŠãããªãªãŒã¹ããå ŽåãæåŸ
éãã®çµæãåŸãããªãã£ããšãã«æå
¥ããéçºãªãœãŒã¹ãç¡é§ã«ããŠããŸãå¯èœæ§ããããŸãã ãããé¿ãããããä»åã®éçºã§äžçªå®çŸãããããšã¯ãªã«ãïŒãèããŠããã£ãšãéèŠãªãã®ããæ®µéçã«ãªãªãŒã¹ããããšãèããŸãã ããããMVP(Minimum Viable Product)ãéçºããšã«èãããããªã€ã¡ãŒãžã§ãã æ¬¡ã®ã¡ãªããããããšèããŠããŸãã ãŠãŒã¶ãŒã«çŽ æ©ãäŸ¡å€æäŸãã§ãã 广ããŠãŒã¶ãŒã®ãã£ãŒãããã¯ãæ©ãåŸããã çµæãçŽ æ©ãåŸããããããè»éä¿®æ£ãæ€éã®å€æãæ©æã«ã§ãã ãªãªãŒã¹ãããéçºããªã¥ãŒã ãæžãããããèŠç©ããã®ãã¬ãæžããã ãšã³ãžãã¢ã®ã¢ãããŒã·ã§ã³ã®èгç¹ããããæ©æã«ãªãªãŒã¹ããããšã§éçºè
ã®ã¢ãããŒã·ã§ã³åäžã«ã€ãªãããããããã¹ãŠäœã蟌ãã§ç¡é§ã«ãªã£ãå Žåã®ã¢ãããŒã·ã§ã³äœäžãåé¿ãããããšèããŠããŸãã å®äŸã®çŽ¹ä» ããããã¯ãããŸã§ç޹ä»ããèãæ¹ãå®éã«æŽ»ããããè«æ±ãããŒã®ã·ã¹ãã åããããžã§ã¯ãã®äºäŸã玹ä»ããŸãã ãããžã§ã¯ãã®æŠèŠ Findy Freelanceã§ã¯ãŠãŒã¶ãŒã®çšŒååŸãµããŒããšããŠè«æ±æžã®äœæä»£è¡ãšæ¥åå§èšå ±é
¬ã®ä»£ç城åãè¡ã£ãŠããŸãã ãã®ããããŠãŒã¶ãŒåã
ã®çšŒåç¶æ³ã確èªããå
容ã«å¿ããŠè«æ±æžãäœæããŠäŒæ¥ã«éä¿¡ããå¿
èŠããããŸãã ãããã®äœæ¥ã®å€ãã¯æäœæ¥ã§è¡ãããŠããŸããããµãŒãã¹å©çšè
ã®æ¡å€§ã«äŒŽãéçšã®éçãèŠãããããè«æ±ãããŒãã·ã¹ãã åãããããžã§ã¯ããç«ã¡äžãããŸããã è«æ±ãããŒã®çè§£ ç§ã¯éçºãªãŒããŒãšããŠãããžã§ã¯ããéäžããåŒãç¶ããŸããããã®æç¹ã§è«æ±æ¥åã®ãã¡ã€ã³ç¥èãã»ãšãã©ãããŸããã§ããããã®ããPdMã«ãã¢ãªã³ã°ããªããè«æ±ãããŒã®å³ãäœæããã©ã®åœ¹å²ã®äººãã©ã®ã¿ã€ãã³ã°ã§äœãããã®ããææ¡ããŸãããã€ãŸãããªãããã€ãã ããïŒãã®èгç¹ã確èªããŸããã æ
å ±ãæŽçããããšã§ãšã³ãžãã¢ãŠãŒã¶ãŒãäŒæ¥æ
åœè
ã瀟å
ã®å¶æ¥æ
åœè
ããã³çµçãªã©å€ãã®ã¹ããŒã¯ãã«ããŒãé¢äžããŠãããšããããŸããã以åŸã®éçºã§åã
ã®èŠç¹ãæèã§ããå
ãèŠæ®ããªããèµ·æ¡æãããããã«äŸ¡å€ã®ãã仿§ã«ç¹ããããšãã§ããŸããã èšèšã®èŠçŽãã«ããã·ã³ãã«å 次ã«ãèšèšã®èŠçŽããè¡ããŸããããããžã§ã¯ãåŒãç¶ãåã¯ãæäœæ¥ã§ç®¡çãããŠããæ
å ±ããã®ãŸãŸããŒã¿ããŒã¹ã«ç§»ã圢ã§èšèšãé²ãã§ããŸããã äŸãšããŠãFindy Freelanceã®å¥çŽã¹ããŒã äžãäŒæ¥ãšãã¡ã€ã³ãã£éã®å¥çŽæ¡ä»¶ããšããŠãŒã¶ãŒãšäŒæ¥éã®å¥çŽæ¡ä»¶ãã®2çš®é¡ã®å¥çŽæ
å ±ãå¿
èŠã§ãã åœåã¯ãããã1ã€ã®ããŒãã«ã§ç®¡çããèšèšã§ããããæ¬æ¥ã¯å¥ã®æ
å ±ã§ãããããããã®å¥çŽå€æŽã®ã¿ã€ãã³ã°ãç°ãªããããå¥ã®ããŒãã«ã§ç®¡çããããšã«ããŸããã ããã«ããããŒãã«ãšã¢ãã«ã¯ã©ã¹ã®åœ¹å²ãæç¢ºã«ãªããã·ã³ãã«ã«ãªããŸããã ãŸãã2çš®é¡ã®å¥çŽæ
å ±ããããããã€å€æŽãããã®ãã管çã§ããããã«ãªããŸããã èšèšã®èŠçŽãã«ã¯æéãããããŸãããããã®åŸã®æ¹ä¿®ãéçšã³ã¹ããèæ
®ãããšãèŠçŽããŠè¯ãã£ããšèããŠããŸãã ã¹ã³ãŒãã®æ±ºå®ãšãªãªãŒã¹ã®åå² ãããžã§ã¯ãåŒãç¶ãæãã·ã¹ãã åã«å¿
é ãªæ©èœãšäŸ¿å©ãªæ©èœãIssueã«æ··åšããŠããŸããã ãã£ããã·ã¹ãã åãããªããšå€ãã®èŠæãç©ã¿äžãã£ãŠããŸããããã¹ã³ãŒããäžæç¢ºã§ããã ãã®ãããPdMãäžå¿ã«é¢ä¿è
ãšåè°ããŠã¹ã³ãŒããæ±ºããŸããã æ©æã®éçšéå§ãç®æããå¿
é æ©èœã®ã¿ãæåã«ãªãªãŒã¹ããŸãããäŸãã°ãæ¬¡ã®æ©èœã¯æåã®ãªãªãŒã¹ããé€å€ããŸããã 瀟å
管çç»é¢ã®å©äŸ¿æ§åäž ããã·ã¥ããŒãã®äœæïŒååãªãªãŒã¹ã§ã¯BigQueryããã®ããŒã¿åç
§ã§ä»£æ¿ïŒ ãŠãŒã¶ãŒããã°ã€ã³ããŒãžããå ±åãã皌åæéã®ç¢ºèªïŒå ±åæã«ãŠãŒã¶ãŒãžã¡ãŒã«éä¿¡ããŠããããïŒ ãããã®æ©èœã¯å®éçšåŸã«å¿
èŠæ§ã忀èšããããšã«ããŸãããã¹ã³ãŒããæ±ºå®ãããªãªãŒã¹ãåããããšã§éçšéå§ãŸã§ã®ãªãŒãã¿ã€ã ãççž®ããŸããã ãŸããå®éçšãããããšã§çºèŠããå¿
èŠãšãªãæ©èœãæ¹ä¿®ããããæåãããã¹ãŠäœãããŸãªããŠããã£ããšèããŠããŸãã çµãã㫠以äžãéçºãããåã«ç§ãèããŠããããšãšãã®å®äŸã§ãã誰ãã®åèã«ãªãã°å¹žãã§ãã ããã«æžããŠãããããªããšã¯æ®æ®µããèããŠãããšããæ¹ãå€ãã®ã§ã¯ãšæããŸãã èªãã§ãã ãã£ãæ¹ã
ãéçºã«éããŠèããŠããããšãªã©æ¯éã³ã¡ã³ããããã ãããšå¬ããã§ãã ãŸãããã¡ã€ã³ãã£ã§ã¯ãšã³ãžãã¢é åã®ãããã¯ãã®éçºããããããéçºãšã³ãžãã¢ãæäŸäŸ¡å€ãèããã«ãããèªç¶ãšãŠãŒã¶ãŒã®èŠç¹ã«ãã£ãŠèããããšãããããç°å¢ã§ãããšæããŠããŸãã ãšã³ãžãã¢ãžã®äŸ¡å€æäŸã«å°ãã§ãèå³ãæã£ãŠããã ããæ¹ã¯ããã²ã«ãžã¥ã¢ã«é¢è«ã®ãç³ã蟌ã¿ããåŸ
ã¡ããŠãããŸãã ãã¡ã€ã³ãã£ã®æ¡çšæ
å ±ã¯ãã¡ãâ herp.careers ãŸãããã¡ã€ã³ãã£ã®éçºã¡ã³ããŒãç»å£ããã€ãã³ãã4/24ïŒæ°ŽïŒ12:00~13:00ã§å®æœããŸãïŒ éçºçç£æ§ãéçºã®ããã©ãŒãã³ã¹åäžã«ãèå³ããæ¹ã¯connpassããŒãžããæ¯éãç³ã蟌ã¿ãã ããïŒ developer-productivity-engineering.connpass.com
ããã«ã¡ã¯ã Findy ã§ Tech Lead ãããããŠããã£ãŠãæžç°ã§ãã å
æ¥ãåŒç€Ÿãã Findy Tools ããªãªãŒã¹ãããŸããã ä»åã¯ããã®Findy Toolsãã©ã®ããã«ããŠéçºãããã®ããéçºã®èæ¯ã工倫ç¹ãªã©ã玹ä»ããŠãããŸãã ããã§ã¯èŠãŠãããŸãããïŒ Findy Toolsã®æŠèŠ çŽ¹ä» Findy Tools ã¯éçºããŒã«ã«ç¹åããã¬ãã¥ãŒãµã€ãã§ãã第äžè
ã®èŠç¹ã§å®éã«ããŒã«ã®éžå®ãããäŒæ¥ã®çã®å£°ãéããããšã§ãããŒã«éžå®ã«é¢ããäžå®ãè§£æ¶ããå°å
¥æ€èšã«å¿
èŠãªæ
å ±ãæäŸããŸãã ãFindy ToolsããéçºããŒã«ã®å°å
¥æ€èšãããŠãããŠãŒã¶ãŒãå©çšãããšãå®éã«ããŒã«éžå®ããã倧æäŒæ¥ãã¡ã¬ãã³ãã£ãŒäŒæ¥ã®æè¡è²¬ä»»è
ããšã³ãžãã¢ã«ããã¬ãã¥ãŒãéããããšãã§ããå°å
¥æ€èšãã¹ã ãŒãºã«ãªããŸãã ãŸããéçºããŒã«ãæ²èŒãããã³ããŒã«ã¯ãå®éã®å©çšäŒæ¥ã®å£°ã掻ãããã³ãã¥ããã£ããŒã±ãã£ã³ã°ã«ããæ°èŠé¡§å®¢ã®ç²åŸããèªç¥åäžããæåŸ
ããã ããŸãã ã·ã¹ãã æ§æ ã·ã¹ãã æ§æã¯æ¬¡ã®éãã«ãªã£ãŠããŸãã Ruby on Rails React Next.js App Router bulma GraphQL AWS S3 CloudFront Aurora Fargate äžã§æããæ§æã«ç¹ã«åŒ·ããã ããã¯ãªããæ¢åè³ç£ã®æµçšãããããã£ãããšãšããªãã¬ã€ã¹ã倿Žãããããšããçç±ã§ãã®æ§æã«ãªã£ãŠããŸãã APIãšããã³ããšã³ããççµåã§èšèšããã©ã¡ããäžæ¹ãäœãçŽããããããããGraphQLãçšããããšã§queryãã®ãã®ã倿ŽããããšãªããåŒã³åºãå
ã®ãšã³ããã€ã³ããåãæ¿ããããšã§ã¢ããªã±ãŒã·ã§ã³ã®æ¯ãèããå€ããã«APIãåãæ¿ããããšãã§ãããããªæ§æã«ããŠããŸãã éçº ã¹ã±ãžã¥ãŒã«ãšãªãœãŒã¹ ä»åã®éçºã¯Î±çãβçãš2åã«åããŠæ®µéçã«ãªãªãŒã¹ããŸããã αçã¯2023幎9æãã2023幎10æã§éçºã2023幎11æäžæ¬ã«ãªãªãŒã¹ãβçã¯2023幎11æãã2024幎1æãŸã§éçºãã2024幎1æäžæ¬ãããã«ãªãªãŒã¹ããŠããŸãã éçºãªãœãŒã¹ã¯Î±çã¯1人ãβçã¯2024幎ã«å
¥ã£ãããããã2人ã§ãããã«å ããŠã€ã³ãã©æ
åœ1人ã§éçºãããŸããã åºæ¬çã«Î²çãªãªãŒã¹ãŸã§ã¯ã¢ããªã±ãŒã·ã§ã³åŽã®1人ã§éçºããŠããŸããã æ°èŠãµãŒãã¹ãåœãããã©ããã¯å®éã«äžã«åºããŠã¿ãªããšããããªãã®ã§ããæå°éã®ãªãœãŒã¹ã§æéã§ãªãªãŒã¹ããããšããæ¹éã§ããã éçºã®ãã€ã³ã æ¢åè³ç£ãæŽ»çš æå°éã®ãªãœãŒã¹ã§ãæéã§ãªãªãŒã¹ãããšããæ¹éã ã£ãã®ã§ããŸããå
šãŠã1ããäœãããšããéžæè¢ã¯å¯èœãªéãé¿ããŸããã 幞ãåŒç€Ÿã«ã¯æ¢ã«éçšãããŠãã·ã¹ãã ããããããããã®æµçšã決ããŸããã å
·äœçã«ã¯æ¬¡ã®å
å®¹ãæµçšããŸããã ã¢ããªã±ãŒã·ã§ã³ã®å®è¡åºç€ãŸããã®å
±éã³ãŒã ãã¬ãŒã ã¯ãŒã¯ã®åçš®èšå®ãã¡ã€ã«ãèšèšææ³ ãããã€ãCIã®ã¯ãŒã¯ãããŒã®ã³ãŒã å
±éã³ãŒããåçš®èšå®ãã¡ã€ã«ãèšèšææ³ã¯æ¢åã®åãµãŒãã¹ã§ã»ãšãã©ãçµ±äžãããŠãããã³ããããŠå°ãããã£ããããã«äœ¿ãããããªç¶æ³ã«æŽåãããŠããŸãã ãŸããããã€ãCIãŸããã¯å
šãŠGitHub Actionsã«çµ±äžãããŠããããã¡ããã¯ãŒã¯ãããŒã®ãã¡ã€ã«ãã³ããããŠå°ããããã ãã§ããã«äœ¿ããããã«ãªã£ãŠããŸãã ãããã®æ¢åè³ç£ãæµçšããããšã§ãã³ãŒããæžãããã¹ãã§å®ããåäœç°å¢ã«ãããã€ããæäœéåããã®ã確èªã§ããç°å¢ãããã«ã»ããã¢ããã§ããŸããã ãŒãããã¢ããäœãããã§åããã®ãçšæããããšã¯éåžžã«éèŠã§ããåããã®ãã¡ã³ããŒãšå
±æããŠç¢ºèªããããšã§ãèªèã®éœéœ¬ãé²ããäœèšãªä¿®æ£äœæ¥ãæžããããšãåºæ¥ãŸãã ããŒã¿æå
¥ãç°¡ç¥å ããŒã¿æå
¥ã¯éçºã®äžã§ãæéãåãããäœæ¥ã®1ã€ã§ãã ã¬ãã¥ã¯ãŒã®æ¹ããé ããã¬ãã¥ãŒããŒã¿ããåçš®ãã¹ã¿ãŒããŒã¿ãããŒã¿ããŒã¹ã«æå
¥ããå¿
èŠããããŸãã αçã®æç¹ã§ã¯ããŒã¿æå
¥ãç°¡ç¥åããããã«ãå
šãŠã®ããŒã¿ãseedã§æå
¥ããããšã«ããŸããã æ¬æ¥ã§ããã°ããŒã¿æå
¥çšã®ç®¡çç»é¢ãäœãã®ããã¹ããªã®ã§ãããαçã®ãªãªãŒã¹åã«1人ã§éçºããŠãç¶æ³ã§ç®¡çç»é¢ãäœããããªãªãœãŒã¹ã¯ãããŸããã§ããã æ©èœã®åæšéžæ åæãªãªãŒã¹ã®ç®çã¯å€ãã®ãŠãŒã¶ãŒãç²åŸããããšã§ã¯ãªããããµãŒãã¹ãåãå
¥ãããããã©ãããå¯èœãªéãæ©ãæ®µéã§å€æãããããšã«ãããŸãã ãã®ãããããµãŒãã¹ãåãå
¥ãããããã©ããã®å€æã«å¿
èŠã®ãªãæ©èœããåæãªãªãŒã¹ã®ã¹ã³ãŒãããå€ããŸããã å
·äœäŸãæãããšãβçãªãªãŒã¹ãŸã§ã¯ç»åã¢ããããŒãã®æ©èœãå€ããŸããã ã¬ãã¥ãŒããŒã¿ãã¢ãã¿ãŒç»åãªã©ãã¢ããããŒãåºæ¥ãããã«ãããã£ãã®ã§ãããç»åã¢ããããŒããå®çŸããããšãããšãè²ã
ãšèããªããšãããªãããšããããŸãã ç»åã®ã¢ããããŒãå
ã¯ã©ãããã®ãïŒåé€ã¯èš±å¯ããã®ãïŒç»åãµã€ãºã¯ã©ããŸã§èš±ãã®ãïŒãªã©ãªã©è²ã
åºãŠããŸãã ä»åã¯ç»åã®ã¢ããããŒããèš±å¯ãããéå¶ããŒã ãçšæããç»åãS3ã«çŽæ¥ã¢ããããŒãããŠããããžã®ãã¹ãseedã«çŽæ¥æžãããšã§ç»åãã¡ã€ã«ã®ç®¡çãåçŽãç°¡ç¥åããŸããã ãã®æ©èœãç°¡ç¥åããã ãã ãšè¯ããŠ1,2æ¥çšåºŠã®éçºå·¥æ°åæžã«çãŸããšæããŸãããããããã®ãããªåæšéžæãããã€ãããããšã«ãã£ãŠãçµæçã«åæã1ã¶æçšåºŠã®å·¥æ°åæžã«ç¹ãããŸããã ãã®æ©èœãåæžããŠå€§éã«å·¥æ°åæžããšãã£ããã®ã§ã¯ãªãããããã ãªåæžã®æææ±ºå®ã倧éã«è¡ãããšã«ãã£ãŠå®çŸããŠããã®ã§ãã ãã¹ãã³ãŒã è²ã
ãªåæšéžæã®æææ±ºå®ã®äžã§ããã¹ãã³ãŒãã ãã¯åããã«å¿
ãçšæããŠããŸããã ãæéãç¡ããããã¹ããæžããªãã®ã§ã¯ãªãããã¹ããæžããªãããæéãç¡ãããšããã®ã¯äºå®ã§ãçµæçã«ãã¹ããå®ã£ãŠãããŠãããããã§ãäœèšãªããšã«æéãåãããã«ããããããšã«éäžã§ããã®ã§ãã ãã¹ãã³ãŒãã®ãé°ã§ãαçãªãªãŒã¹ä»¥éã«æ¬çªç°å¢ã§çºçããäžå
·åãé害ã¯èšæ¶ããŠããã ãã§ããçæã§æ°ããããçšåºŠã§ããã 管çç»é¢ãå
補 αçã®ãªãªãŒã¹ã«ãããããã®ãµãŒãã¹ãäžã«åãå
¥ãããããããšã確èªã§ãããããβçã®ãªãªãŒã¹ã«åããŠçæããŸããã αçããβçã«åããŠäœãå®çŸãããã®ããæ€èšããŠããéãéçºãããã®ããªããŠæéãæãŠäœããŠããã®ã§ç®¡çç»é¢ãå
補ã§å®è£
ããããšã«ããŸããã åçš®ãã¹ã¿ãŒããŒã¿ãã¬ãã¥ã¯ãŒã®æ¹ããé ããã¬ãã¥ãŒããŒã¿ãªã©ãéå¶ã§ç®¡çãããããŒã¿ã¯å€æ°ãããŸãã ãããã®å€æŽã®ãã³ã«seedã®åå®è¡ãããŒã¿ã®å€æŽãäŸé ŒãããããªãããŒã«ããŠããŸããšããšã³ãžãã¢ãæ©èœè¿œå ã®äœæ¥ã«éäžã§ããªããªã£ãŠããŸããŸãã βçãªãªãŒã¹ããã¯ãšã³ãžãã¢ãä»ããã«ããŒã¿ã®è¿œå ã倿Žãéå¶ã¡ã³ããŒã ãã§å®çµåºæ¥ãããã«ããŸããã 管çç»é¢ã®ç»é¢æ°ã¯25åçšåºŠã§ãAPIãšããã³ããšã³ã蟌ã¿ã§1人ã§2ã3é±éçšåºŠã§éçºããŸããã 管çç»é¢ã¯SSRãå¿
èŠãªãã®ã§çŽç²ãªReactã®SPAã§ãCSSãã¬ãŒã ã¯ãŒã¯ã« Bulma ãæ¡çšããŸããã 管çç»é¢ãçšæã§ããããšã«ãã£ãŠãβç以éã®éçºæã«éå¶ã¡ã³ããŒããã®ããŒã¿ç®¡çåšãã®äŸé Œãç¡ããªãã®ã§ãéçºäœæ¥ã«éäžã§ããããã«ãªããŸããã åçç¹ Findy Toolsã®éçºã§ã¯ããã£ã¬ã³ãžæ ãšããŠNext.jsã®App Routerãæ¡çšããŸããã æ¢åãããã¯ãã«çšããããŠããPages Routerããã®ç§»è¡ãæ€èšŒããçãããããŸããããä»åã¯äžæããããªãã£ããšåçããŠããŸãã 誀解ãäžããªãããã«èšããšãNext.jsã®App Routerèªäœã¯æªããã®ã§ã¯ãããŸããã äœãäžæããããªãã£ãããšãããšãæ¢åè³ç£ã®æµçšãããçµæãå©çšããŠããã©ã€ãã©ãªãApp Routerã«å¯Ÿå¿åºæ¥ãŠããããæ³å®ããŠãã以äžã®å·¥æ°ãåãããŠããŸã£ãããšã§ãã åŒç€Ÿã§ã¯App RouterãåããŠæ¡çšããã±ãŒã¹ã§ããã瀟å
ã«ããŠããŠãèç©ããŠããªãã£ããããåé¡è§£æ±ºã«æéãããã£ãŠããŸããŸããã ä»åŸãä»ãµãŒãã¹ã§ã®App Routerã®æ¡çšæã«ä»åã®ããŠããŠã掻çšã§ããããã«ãªã£ããšæããŸãããä»åã®ãããªéçºã¹ããŒããåªå
ãããã±ãŒã¹ã§æ¡çšããã¹ãã§ã¯ãªãã£ãããªãšæããŸãã ãŸãšã ãããã§ããã§ããããïŒ æ°èŠãµãŒãã¹ã®éçºæã«ã¯ãªãœãŒã¹ãã¹ã±ãžã¥ãŒã«ã«å€§ããªå¶çŽã課ããããŸãããã®ãããªç¶æ³äžã§ããã¹ãããšãããã¹ãã§ã¯ãªãããšã®åæšéžæã®æææ±ºå®ãéåžžã«éèŠã«ãªã£ãŠããŸãã å幎è¿ã1人ã§éçºãããŠãã Findy Tools ã§ãããã¿ãªããŸã®ãããããããµãŒãã¹ãé èª¿ã«æé·ããŠãããä»ã§ã¯éçºã«çæããŠãããšã³ãžãã¢ã®äººæ°ãå¢ããããšãã§ããŸããã ä»åŸãFindy Toolsãããè¯ããµãŒãã¹ã«ããŠããããã«ãåŒãç¶ãéçºãé²ããŠãããŸãã çŸåšããã¡ã€ã³ãã£ã§ã¯äžç·ã«åãã¡ã³ããŒãåéäžã§ãã èå³ãããæ¹ã¯ãã¡ããã â herp.careers
Findy Team+ã§ããã³ããšã³ããšã³ãžãã¢ãããŠãã å·æ( @peijun333 )ã§ãã Findy ã§ã¯ãããã³ããšã³ãã®ã³ãŒãå質ãšå®å®æ§ã確ä¿ããããã« Jest ãªã©ã®ãã¹ããã¬ãŒã ã¯ãŒã¯ãç©æ¥µçã«æŽ»çšããŠããŸããéåžžãJest 㯠CLI ããå®è¡ããŠãã¹ãçµæãã³ã³ãœãŒã«ã§ç¢ºèªããŸãããã³ãã³ããçšæããæéãããã¹ãçµéã®ãããã°ã®ããã«éœåºŠ console.log ãªã©ã§ãã®å
容ã確èªããªããã°ãªãããšãŠãäžäŸ¿ã§ãã ããã§ãä»åã¯ãã¹ãã®èªååãšãªã¢ã«ã¿ã€ã ãªãã£ãŒãããã¯ãæäŸãã JavaScript ã®çµ±åãã¹ãããŒã«ã§ãã Wallaby.js ã玹ä»ããŸããWallaby.js ãå°å
¥ããããšã§ãéçºå¹çã®åäžãæåŸ
ã§ããŸãã Wallaby.js ãšã¯ïŒ åææ¡ä»¶ VS Code ã§ãã¹ãã®ä¿®æ£ Wallaby.js ã¯ãªãã¡ã¯ã¿ãªã³ã°ã«åŒ·ã ã¹ãããã·ã§ãã ã®æŽæ° ãŠããããã¹ãã«ããããããã°æ©èœã®çŽ¹ä» Wallaby.js ã䜿ã£ãŠã¿ãŠ æåŸã« Wallaby.js ãšã¯ïŒ Wallaby.js is an integrated continuous testing tool for JavaScript. It runs your tests immediately as you change your code (you donât even have to save the file) and displays various results (including the code coverage, error and console messages) right inside your code editor, next to your code. Wallaby.js is great for doing JavaScript TDD (Test-driven development) or BDD (Behavior Driven Development), but it works great for other approaches as well. å
¬åŒããã¥ã¡ã³ããã Introduction: What is Wallaby.js? Wallaby.js 㯠JavaScript ã®çµ±åãã¹ãããŒã«ã§ã次ã®ãããªæ©èœããããŸãã ãªã¢ã«ã¿ã€ã ãªãã£ãŒããã㯠Wallaby.js ã¯ããã¹ãã®å®è¡ã«æåã®ã¹ããããäžèŠãªãããã³ãŒãã倿Žãããšãªã¢ã«ã¿ã€ã ã§çµæããã£ãŒãããã¯ããŠãããŸãã ãšãã£ã¿å
ã§ã®ãã¹ãçµæè¡šç€º Wallaby.js ã¯ãã³ãŒããšãã£ã¿ãŒå
ã«ãã¹ãçµæã衚瀺ããŠãããŸãããšã©ãŒãã«ãã¬ããžæ
å ±ãªã©ããã³ãŒãã®é£ã«çŽæ¥è¡šç€ºãããããããšãã£ã¿ããé¢ããããšãªãããã¹ãçµæã確èªã§ããŸãã ãããã°æ©èœ Value Explorer ã䜿çšããããšã§ãä»»æã®å Žæã§å€ã調æ»ããåŒã³åºãå
ã®ã³ãŒã«ã¹ã¿ãã¯ã確èªã§ããŸãããŸããã³ã³ãœãŒã«ãã°ããšãã£ã¿äžã«è¡šç€ºããæ©èœãåããŠããããããã°ããã»ã¹ãã¹ã ãŒãºã«ããŸãã ãŸãããµããŒãããŠããã³ãŒããšãã£ã¿ãšãã¹ããã¬ãŒã ã¯ãŒã¯ã è±å¯ ã§å°å
¥ããšãŠã容æã§ãã Wallaby.js 㯠OSS éçºã§ã¯ç¡æã§å©çšã§ããŸãããåçšå©çšã®å Žåã¯ ææ ã§ãããã¡ã€ã³ãã£ã§ã¯ããã³ããšã³ããéçºããã¡ã³ããŒã«ã¢ã«ãŠã³ããçºè¡ããŠããŸãã åææ¡ä»¶ ããããå®äŸã亀ããŠæ©èœã玹ä»ããŸããå®äŸã«äœ¿ã£ãåäœç°å¢ã¯ä»¥äžã®éãã§ãã VS Code VS Code äžã« Wallaby.js ã®æ¡åŒµæ©èœ ãã€ã³ã¹ããŒã«ããå¿
èŠããããŸã VS Code 以å€ã®ã³ãŒããšãã£ã¿ ããµããŒããããŠããŸããä»å㯠VS Code ã䜿ã£ã玹ä»ã«ãªããŸã React version 18.2.0 Jest version 29.6.1 React Testing Library version 14.0.0 Wallaby.js ã®å°å
¥ã«é¢ããè©³çŽ°ãªæé ãèšå®æ¹æ³ã«ã€ããŠã¯ã å
¬åŒããã¥ã¡ã³ã ãåç
§ããŠãã ããã VS Code ã§ãã¹ãã®ä¿®æ£ Wallaby.js 㯠ãµããŒããããŠãããšãã£ã¿ äžã§åäœããŸããä»å㯠VS Code ã§æ®æ®µãã¹ããæžããŠããæ§åã玹ä»ããŸãã 以äžã¯ãGraphQL ãçšããŠãŠãŒã¶ãŒããŒã¿ãæ£ããååŸã§ããŠããã確èªãããã¹ãã®äŸã§ãã + expect(result.current.users).toStrictEqual([{ id: '1', name: 'name' }]); - expect(result.current.users).toStrictEqual([{ id: 1, name: 'name' }]); id ã number å€ã§ã¯ãªã string ã® '1' ã§ããã¹ããªã®ã§ãããäžèšåç»ã®äŸã§ã¯èª€ã£ãçµæãæžããŠããŸãã Wallaby.js ã§ã¯ãã®ããã«ãã¹ãçµæãã³ãŒããšãã£ã¿äž(VS Code ã®äŸ)ã«ãªã¢ã«ã¿ã€ã ã«åæ ãããŸãã äºæ³ãããçµæãšå®éã®çµæãç°ãªãå Žåãèµ€è²ã®ããã¹ãã§ãšã©ãŒæã衚瀺ãããŸããããã«ã«ãŒãœã«ãåãããããšã§ãå
·äœçã«å·®åå
容ã VS Code äžã§ç¢ºèªã§ããŸãã - Expected - 1 + Received + 1 Array [ Object { - "id": 1, + "id": "1", "name": "name", }, ] ãŸããVS Code äžã§ã¯å·ŠåŽã®äœçœã«åè§ã®ãã¹ãã«ãã¬ããžã€ã³ãžã²ãŒã¿ãŒã èµ€è² ãã ç·è² ã«å€ãã£ãæ§åã確èªã§ããããšæããŸããããã«ããèŠèŠçã«ãã¹ãã®ã«ãã¬ããžã確èªã§ããŸãã 詳现: Editor Code Coverage Indicators ãã®æ©èœã®ã¡ãªããã¯ããšãã£ã¿äžã§ãã¹ãã®æäœãå®çµã§ããããã«ãªã¢ã«ã¿ã€ã ã«åªããŠããç¹ã§ãããã¹ãã®å®è¡ãçµæã倱ææã®ãšã©ãŒåå ã®è¿
éãªç¹å®ãããã²ãŒã·ã§ã³ãå·®åãã¥ãŒãªã©ããã¹ãŠããšãã£ã¿äžã§è¡ãããšãã§ããŸãã Wallaby.js ã¯ãªãã¡ã¯ã¿ãªã³ã°ã«åŒ·ã ç¹ã«ãªãã¡ã¯ã¿ãªã³ã°ã§ã¯ã Wallaby.js ã®æ©èœã® 1 ã€ã§ããããªã¢ã«ã¿ã€ã ã«ãã¹ãçµæããã£ãŒãããã¯ãããæ©èœããçºæ®ãããŸãã 以äžã¯ ãŠãŒã¶ãŒããŒã¿ãã空㮠name ãåãé€ããããšã確èªãããã¹ãã®äŸã§ãã ãã¹ãçµæãšé¢æ°ã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã®ãŸãŸã§ãããžãã¯ã®ã¿ããªãã¡ã¯ã¿ãªã³ã°ããŠããŸãããã¡ãã®äŸã®ããã«ããªã¢ã«ã¿ã€ã ã«ãã¹ãã倱æãããªãã¡ã¯ã¿ãªã³ã°åŸãã¡ã€ã«ãä¿åãããšããã¹ããæåããŸããã ãã®ããã«ãªã¢ã«ã¿ã€ã ã«ãã¹ããèœã¡ãŠãããã®ã§ã颿°ã®åœ±é¿ç¯å²ãããããããããã¹ãçµæããããã«ãã£ãŒãããã¯ãããããšã§å¹çãããªãã¡ã¯ã¿ãªã³ã°ãå¯èœã§ãã ã¹ãããã·ã§ãã ã®æŽæ° 次ã«ã¹ãããã·ã§ãããã¹ãã®æŽæ°ã«ã€ããŠç޹ä»ããŸããã¹ãããã·ã§ãããã¹ããšã¯ãUI ãäºæãã倿ŽãããŠããªããã確ããããã¹ãã§ããFindy Team+ã§ã¯ @testing-library/react ã䜿ã ã³ã³ããŒãã³ãã®ã¹ãããã·ã§ãããæ®åœ±ããå¿
èŠã«å¿ããŠå·®åãæŽæ°ããŠããŸãã ã¯ããã« Wallaby.js ã䜿ããã« Jest ã®ã¹ãããã·ã§ãã ãæŽæ°ããæé ãã¿ãŠã¿ãŸãããã æ¬¡ã®äŸã¯ title ãš description ã衚瀺ããã³ã³ããŒãã³ãã®ã¹ãããã·ã§ãããã¹ãã§ãã import { render } from "@testing-library/react" ; import { TestComponent } from "./test.component" ; const props = { title: "title" , description: "description" , } ; describe ( "TestComponent" , () => { it ( "衚瀺確èª" , () => { const { asFragment } = render ( < TestComponent { ...props } /> ); expect ( asFragment ()) .toMatchSnapshot (); } ); } ); å®è£
ã³ãŒã type Props = { title: string ; description: string ; } ; export const TestComponent = ( { title , description } : Props ) => { return ( <> < div > { title } </ div > < div > { description } </ div > </> ); } ; @testing-library/react ã® render 颿°ã䜿ãã¹ãããã·ã§ãããæ®åœ±ããŠããŸãããã®ãã¹ããåããŠå®è¡ãããšæ¬¡ã®ãããªã¹ãããã·ã§ãããã¡ã€ã«ãäœæãããŸãã // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`TestComponent è¡šç€ºç¢ºèª 1`] = ` <DocumentFragment> <div> title </div> <div> description </div> </DocumentFragment> `; 仿§ã®å€æŽã«ãããdescription ã衚瀺ããã¿ã°ã <span> ã¿ã°ã«å€æŽããŠã¿ãŸãã - <div>{description}</div> + <span>{description}</span> ãããŠãã¹ããå床å®è¡ãããš UI ã®å·®åã«ãããã¹ãã倱æããŸãã â TestComponent âº è¡šç€ºç¢ºèª expect ( received ) .toMatchSnapshot () Snapshot name: `TestComponent è¡šç€ºç¢ºèª 1` - Snapshot - 2 + Received + 2 < DocumentFragment > < div > title </ div > - < div > + < span > description - </ div > + </ span > </ DocumentFragment > 12 | const { asFragment } = render( < TestComponent { ...props } /> ); 13 | > 14 | expect(asFragment()).toMatchSnapshot(); | ^ 15 | }); 16 | }); 17 | ⺠1 snapshot failed. ä»å㯠description ã衚瀺ããã¿ã°ã¯ div ã§ã¯ãªã span ã¿ã°ãæ£ããã®ã§ã¹ãããã·ã§ãããæŽæ°ããå¿
èŠããããŸãã Jest ã§ã¹ãããã·ã§ãããæŽæ°ããã«ã¯ --updateSnapshot ã -u ãªãã·ã§ã³ãäœ¿ãæŽæ°ããŸãã (ãŸã㯠ãŠã©ããã¢ãŒãã§å¯Ÿè©±çã«æŽæ°) 以äžã®æé ãèžãããšã§ã¹ãããã·ã§ããã®æŽæ°ãå®äºããŸãã ä»å㯠1 ãã¡ã€ã«ã®ã¿ã®ä¿®æ£ã§å€æŽå·®åã軜埮ãªãã®ã§ãããè€æ°ã®ãã¹ãã倱æããå Žåãç®çã®ãã¹ããèŠã€ããæéãšæéãããããŸãããŸãããšãã£ã¿ããã¿ãŒããã«ã«ç§»åãã³ãã³ããå®è¡ããå¿
èŠããããããã³ã³ããã¹ããåãæ¿ããå¿
èŠããããå€ãã®æéãæ¶è²»ãããŸãã æ¬¡ã« Wallaby.js ã䜿ã£ãã¹ãããã·ã§ããã®æŽæ°ãã¿ãŠã¿ãŸãããã ãšã©ãŒã«ã«ãŒãœã«ãåãããå·®åã確èªããåŸãå³äžã®ã«ã¡ã©ã¢ã€ã³ã³ãã¯ãªãã¯ããã ãã§ãã 倱æãããã¹ãããšãã£ã¿ã§ç¢ºèªããã¹ãããã·ã§ãããçŽæ¥æŽæ°ããã ããªã®ã§ãç®çã®ãã¹ããèŠã€ããæéãæéãããããŸããã ãŠããããã¹ãã«ããããããã°æ©èœã®çŽ¹ä» Wallaby.js ã«ã¯ Value Explorer ãšããæ©èœããããŸãããããæŽ»çšããããšã§ããããã°äœæ¥ãå¹çåã§ãæåã§ã®ãã°åºåäœæ¥ã倧å¹
ã«åæžã§ããŸãã ãŸãããã¹ãå®è¡ãã°ã«èšé²ãããŠããå€ã«å¯ŸããŠãåŒã³åºãå
(å®è£
ã³ãŒã)ã® Call Stack ã調ã¹ãããšãã§ããŸãã Value Explorer ã䜿çšããããšã§ãæšæºåºåãã³ãŒãã«ä»èŸŒãŸããšããããã°äœæ¥ãå¯èœã«ããŸããã䜿ãæ
£ããŠãã console.log ã䜿ã£ããããã°ã Wallaby.js ã¯å¯Ÿå¿ããŠããŸãããšãã£ã¿äžã«ãã°ã®çµæã衚瀺ã§ãããããã³ãŒããšãã°ãåæã«ç¢ºèªããªãããããã°äœæ¥ãè¡ãããšãã§ããŸãã Wallaby.js ã¯å€æ§ãªãã°ã®ç¢ºèªæ¹æ³ããããåœèšäºã§ã¯ç޹ä»ããããªãã®ã§æ°ã«ãªãæ¹ã¯ãã§ãã¯ããŠã¿ãŠãã ããã Introduction: Advanced Logging Wallaby.js ã䜿ã£ãŠã¿ãŠ Wallaby.js ã䜿ã£ãŠã¿ãŠç¹ã«ãªã¢ã«ã¿ã€ã ã«ãã¹ãçµæããã£ãŒãããã¯ãããç¹ã¯ãšãŠã䟿å©ã ãšæããŸãããWallaby.js ãå°å
¥ããåã¯ãã¡ã€ã«åäœããã¹ãã±ãŒã¹åäœã§ããã¹ããå®è¡ãããå¿
èŠãããæéãããã£ãŠããŸãããããªã¢ã«ã¿ã€ã ã«ãã¹ãçµæãåæ ããŠãããã®ã§å®è£
ã«éäžããŠéçºãé²ããããšãã§ããŸãããªãã¡ã¯ã¿ãªã³ã°ã§ã¯ããªãã¡ã¯ã¿ãªã³ã°ã®ååŸã§ã€ã³ã¿ãŒãã§ã€ã¹ãä¿ãããŠãããããšãã£ã¿äžã®ãã¹ãã«ãã¬ããžã€ã³ãžã²ãŒã¿ãŒãã確èªã§ããç¹ã¯ Wallaby.js ã®åŒ·ã¿ã ãšæããŸããã FAIL PASS ãŸãã Smart Start ãšããæ©èœã«ãããã³ãŒãã®å€æŽã«ãã圱é¿ãåããç®æã®ã¿èªåçã«ãã¹ããå®è¡ãããã®ã§ããšãŠãé«éã«ã¹ãã¬ã¹ããªãŒã§åäœããŠãããŸããFindy Team+ã®ããã«å€§èŠæš¡ãªãããžã§ã¯ãã§ãé«éã«åäœããŠãããã®ã¯éåžžã«åŒ·ã¿ã ãšæããŸãã æåŸã« ä»åã®èšäºã§ã¯ãJavaScript ã®çµ±åãã¹ãããŒã«ã§ãã Wallaby.js ã«ã€ããŠç޹ä»ããŸããã Wallaby.js ã®å°å
¥ã«ãããéçºããã»ã¹ã®å¹çåãã³ãŒãã®å質ã»å®å®æ§ã®åäžãæåŸ
ã§ããŸããæ¯éãWallaby.js ãæŽ»çšããŠãããã¹ã ãŒãºãªããã³ããšã³ãéçºãå®çŸããŠã¿ãŠãã ããã çŸåšããã¡ã€ã³ãã£ã§ã¯äžç·ã«åãã¡ã³ããŒãåéäžã§ãã èå³ãããæ¹ã¯ãã¡ããã â herp.careers
ããã«ã¡ã¯ããããã¯ããã°ãã¯ã @gessy0129 ã§ãã ãã®ãã³ããã¡ã€ã³ãã£ã«å
¥ç€ŸããŸããã®ã§ãå
¥ç€Ÿãšã³ããªãŒããããŠããã ããŸãã ãæéã®ãããšãã«ã芧ããã ããã°ãšæããŸãã ãã¡ã€ã³ãã£ã«å¯Ÿããæ³ããšæ°æã¡ æ¹ããŠããã®åºŠããã¡ã€ã³ãã£æ ªåŒäŒç€Ÿã«æ£åŒã«åå ããããšãšãªããŸããã ãããããããã æšå¹Žããããã€ãã®noteèšäºãå·çãããŠããã ãããšããã§ããããŸãããããã«çµ¡ãã€ã€ãä»åã®æ°æã¡ãç¶ŽããããšæããŸãã åèèšäºïŒ ANDPADを退任しました|げっしー 2024年目標と決意と挑戦と|げっしー çžå€ããããèªèº«ã®æ²ããããã·ã§ã³ã¯ã ååŸæ°ã¡ãŒãã«ãã幞ãã®é£éãçã¿åºã ãšããäºã ãšæã£ãŠããŸãã éå»ã®åšç±äŒæ¥ã§ãVPoEãéçºæ¬éšé·ãšããŠé·ãéå€åãããŠããŸããã ãã®äžã§ããã®ã¥ããã«éäžããŠãããšã³ãžãã¢ãã¡ãæ¯ããŠããäºãšããã®ã¯çžåœãªããããã§ããã ãšã³ãžãã¢ãã¡ã幞ãã«æ¥ååºæ¥ãç°å¢ãæŽãããããé£éããŠããããã«ããããšã ããã¯ãšãŠã楜ããã£ãã§ãã â» ãã¡ããVPoE ãšããŠã®æ¥åã¯ããã ãã§ã¯ãªãã§ãã ãã®é åãæŽã«æ·±ããææŠãããšã³ãžãã¢ãå¿æŽããŠãããããšããæãã匷ãŸããŸããã ãããŠããã®æ³ããé«ãŸã£ãæãå€ãã®éžæè¢ã®äžãããã¡ã€ã³ãã£ãšåºäŒããŸããã ãã¡ã€ã³ãã£ã®ããã·ã§ã³ãããžã§ã³ãããªã¥ãŒã«å
±æããããã¯éåžžã«å€§ããªåºäŒãã§ãããšæããŠãããŸãã ãšã³ãžãã¢ã®å¯èœæ§ãæ¡ããã¹ã¿ãŒãã¢ããã®ãšã³ã·ã¹ãã ã«è²¢ç®ã§ããããšãé¡ã£ãŠããŸãã ããããšããŠãããš ãã¡ã€ã³ãã£ã¯è²ããªäºæ¥ãå±éããŠãŸãã ãšã³ãžãã¢ã®è»¢è·ãæ¯ãã転è·äºæ¥ ããªãŒã©ã³ã¹ãšã³ãžãã¢ãæ¯ããããªãŒã©ã³ã¹äºæ¥ åœå
å€ã®ãšã³ãžãã¢ãšäŒæ¥ãã€ãªããã°ããŒãã«äºæ¥ 掻èºãããšã³ãžãã¢ãæ¯ããTeam+äºæ¥ æè¡éžå®ãæææ±ºå®ããµããŒãããToolsäºæ¥ ãªã©ãªã©ããããŸãã ãããã®äºæ¥ããã¹ãŠãææŠãããšã³ãžãã¢ã®ãã©ãããã©ãŒã ãäœãäžãããšã³ãžãã¢ã®å¯èœæ§ãåºããããšã«ã€ãªãããšèããŠãããŸãã ãããŠãCEOã®å±±ç°ãããCTOã®äœè€ãããããã®é åã§ææŠããããšããŠããããšã«æéãåããŠãããŸãã ããã§ãçŽ æŽãããã¡ã³ããŒãšå
±ã«ãææŠãããšã³ãžãã¢ãå¿
èŠãšãããµãŒãã¹ãç©æ¥µçã«æäŸããŠãããããšæã£ãŠãããŸãã ãããããŸã ãŸã ãã¡ã€ã³ãã£èªäœããææŠãããšã³ãžãã¢ãææŠããããšã³ãžãã¢ã«ç©æ¥µçã«éžã°ããç¶æ³ã«ãããšã¯èšããªãã®ã§ã¯ãªãããšèããŠãããŸãã ããã¯ããã¡ã€ã³ãã£ã«ãšã£ãŠãåã«ãšã£ãŠããããªã 䌞ã³ä»£ ã ãšæã£ãŠãããŸãã ããã¡ã€ã³ãã£ã«çžè«ããã°ãªããšããªãããšããç¶æ³ãäœãäžããããšãã§ããã°ãšèããŠãããŸãã æåŸã« ãã¡ã€ã³ãã£ã®å¯Ÿå€æŽ»åã«ãç©æ¥µçã«åå ããŠããäºå®ã§ããããŸãã ãã®éã¯ãçæ§ããããããé¡ãããããŸãïŒ çŸåšããã¡ã€ã³ãã£ã§ã¯äžç·ã«åãã¡ã³ããŒãåéäžã§ãã èå³ãããæ¹ã¯ãã¡ããã â herp.careers
Findyã§ãšã³ãžãã¢ãããŠããæŸæïŒ @shakemurasan ïŒã§ãã 以åãåŒç€Ÿã®æ æ²¢ããRailsã®CIã®ãã¹ãå®è¡æéã10åãã5åã«é«éåãã話ããšããèšäºãæçš¿ããŸããã tech.findy.co.jp æ¬èšäºã§ã¯ãã®å°ãåã®ã話ãããããRSpecã®å®è¡æéèªäœã«ãŸã ãŸã ãã£ã䌞ã³ãããç¹ã«Factoryåšãã®åé¡ãTestProfãšããgemãæŽ»çšããŠè§£æ¶ããŠãã£ã話ãšãªããŸãã åœæã®RSpecã®å®è¡æéç¶æ³ TestProfãšã¯ TestProfã§ã®åæçµæ æ¹å1. é¢é£ããã¬ã³ãŒããè€æ°ä»¶äœæããŠããFactoryãïŒã¬ã³ãŒãã«æžãã æ¹å2. ãã¹ãã§å¿
èŠæå°éãªã¬ã³ãŒãã®ã¿ãäœæãã RSpecã®å®è¡æéã®æ¹åçµæ èå¯ åœæã®RSpecã®å®è¡æéç¶æ³ ãããŸã§ã«ããã¹ãå®è¡æéã®ççž®ã®ããã®åãçµã¿(CIåŽã§ã®ãã·ã³ã®äžŠåèµ·åããã³äžŠåå®è¡)ã¯ããŠããããããŸã§ã¹ãã¬ã¹ã®ããç°å¢ã§ã¯ãããŸããã§ãããç°æ§ã«å®è¡æéãèŠããŠãããã¹ããååšããããšã¯ã¡ã³ããŒéã§èªèããŠãããäœãšãªãåå ã®ã¢ã¿ãªã¯ã€ããŠãããã®ã®ã䞊åå®è¡å°å
¥ã§å¿«é©ãªç°å¢ãåŸãããŠããã®ã§ããã¹ã軜éåã®åªå
床ãèœã¡ãŠããç¶æ³ã§ããã ãããããããããšãã¹ãå®è¡æéã¯äŒžã³ãŠããã䞊åå®è¡ã®å°å
¥åœåã¯10åçšåºŠã ã£ããã®ãã15åãè¶
ããã±ãŒã¹ãç®ç«ã€ããã«ãªã£ãŠããŸããããããããã¹ã軜éåã«çæãããããšãã話ã«ãªããå®éã«å¯Ÿå¿ããŠããããšã«ãªã£ãã®ã§ããã æŽã«äžŠååãæšé²ããããšããæ¡ããã®æç¹ã§ãã£ãã®ã§ãããããããåè¿°ã®ãç°æ§ã«å®è¡æéãèŠããŠãããã¹ãããåå ã§ãã·ã³ããšã®ãã¹ãå®è¡å®äºæéã«åºŠãé£ããã©ãããçããŠããããŸãã¯ããã解決ããªããã°ãªããªããããšãªããŸããã TestProfãšã¯ ãã¹ã軜éåã«ããã£ãŠããŸãã¯äœãšãªãã¢ã¿ãªãã€ããŠãããšããã«æ¬åœã«åå ãããã®ã枬å®ããããšã«ããŸãããè§£æ/枬å®ã«éããTestProfã䜿ããããšããããšã¯æ§ã
ãªèšäºãä»äŒæ¥æ§ã®ããã¯ããã°äºäŸããç¥ã£ãŠããã®ã§ããããæ¡çšããããšã«ããŸããã github.com TestProfã«ã¯æ§ã
ãªæ©èœãããã®ã§ãããã¢ã¿ãªãã€ããŠããã®ã¯ãã¹ãããŒã¿çæåšãã ã£ããããFactoryProfãšããFactoryåšãã®è§£ææ©èœã䜿ã£ãŠããŸããFactoryProfãçšããããšã§ãFactoryå¥ã® ç·åŒã³åºãåæ° / ç·å®è¡æé / 1åãããã®å®è¡æé ããããã¬ããŒãã£ã³ã°ã§ãããã®æ©èœãçšããŠæ¹åã«çæããŸããã â» ãã®åŸã®ç« ã§ç»å Žãããã¡ã€ã«åãModelãFactoryã¯ä»®åã«çœ®ãæããŠããŸãããæ°å€ã¯å®éã®ãã®ãæ²èŒããŠããŸã TestProfã§ã®åæçµæ ãŸã倧åæãæéãããã£ãŠãããã¹ãã±ãŒã¹ã®ç¶æ³ãèŠãŠã¿ãŸãã spec Before After Reduce Worst1 78.37s ??? ??? Worst2 75.71s ??? ??? Worst3 48.76s ??? ??? Worst4 48.16s ??? ??? Worst5 88.01s ??? ??? Total of worst 339.01s ??? ??? å®ã«ãã¹ãã±ãŒã¹5æ¬ã§5å39ç§ãè¶ããŠããç¶æ³ã§ãããã¯ã¡ãã£ãšèŸããª.... ãšããã®ãããããŸãããããããäžçªéãããã¹ãã±ãŒã¹ã®ã¿ãæå®ããŠFactoryProfã®è§£æããããŠã¿ãŸãã FPROF=1 bin/rspec spec/models/worst_spec.rb:2244 ãããšæ¬¡ã®ãããªã¬ããŒããåŸãããŸãã [TEST PROF INFO] Factories usage Total: 1586 Total top-level: 8 Total time: 01:32.432 (out of 01:59.446) Total uniq factories: 12 total top-level total time time per call top-level time name 309 0 80.7570s 0.2613s 0.0000s full_item 103 0 0.8972s 0.0087s 0.0000s shop_user 103 0 90.3245s 0.8769s 0.0000s item_like 103 0 88.4511s 0.8587s 0.0000s shop ... ... ... ãã®çµæãèŠããšã item_like shop ãåŒã³åºãåæ°ãš1åãããã®å®è¡æéãããã1s匱ãšé·ãããšãããããŸããããããæ®µéçã«æ¹åã®æãæã£ãŠãããŸãã æ¹å1. é¢é£ããã¬ã³ãŒããè€æ°ä»¶äœæããŠããFactoryãïŒã¬ã³ãŒãã«æžãã ããã§å®éã®ã³ãŒããèªãã§Factoryéã®äŸåé¢ä¿ãèŠãŠã¿ããšæ¬¡ã®ãããªç¶æ³ã§ããã item_like -- create --> shop â¬-- create --> full_item â-- create --> full_item â-- create --> full_item ãã¹ãã®èŠä»¶ã¯å²æãããŠããã ãã®ã§ããããã¹ããå®è¡ããããã§ full_item ã¯3ä»¶ãå¿
èŠãªããæäœ1ä»¶ã¯shopã«ã¶ãäžãã£ãŠããã°ååãšããç¶æ³ã§ããã item_like ãšããã®ã¯ãã以å€ã§ãçµæ§è²ã
ãªãšããã§äœ¿ãããŠããFactoryã§ãã»ãšãã©ã®ãã¹ãã¯æäœ1ä»¶ã®shopãã¶ãäžãã£ãŠããã°åé¡ãªãç¶æ³ã§ããã ããã§ã item_like ã®Factoryãä¿®æ£ã㊠full_item ã1ä»¶ã ãã«éå®ããŠåè§£æãããšãããæ¬¡ã®ãããªçµæãåŸãããŸããã [TEST PROF INFO] Factories usage Total: 659 Total top-level: 8 Total time: 00:36.813 (out of 01:14.075) Total uniq factories: 11 total top-level total time time per call top-level time name 103 0 32.7865s 0.3183s 0.0000s shop 103 0 27.1212s 0.2633s 0.0000s full_item 103 0 0.8971s 0.0087s 0.0000s shop_user 103 0 34.5748s 0.3357s 0.0000s item_like ... ... ... åçŽã« full_item ã®çæåæ°ã1/3ã«æžããããã«æ¯äŸããŠå®è¡æéãçŽ1/3ã«å§çž®ã§ããŸããã æ¹å2. ãã¹ãã§å¿
èŠæå°éãªã¬ã³ãŒãã®ã¿ãäœæãã å¥ã®éãããã¹ããè§£æããŠãããšãå
±éããŠåãåé¡ãèŠããŠããŸãã [TEST PROF INFO] Factories usage Total: 3157 Total top-level: 582 Total time: 02:05.161 (out of 04:30.214) Total uniq factories: 48 total top-level total time time per call top-level time name 322 6 6.2221s 0.0193s 0.1149s user_profile 276 70 74.0465s 0.2683s 5.2776s shop 230 0 63.5779s 0.2764s 0.0000s full_item ... ... ... 次ã«çç®ããã®ã¯ã full_item ã®å®è¡æéã®é·ãã§ãã1åããã 0.2764s ãšããããšã§ãããªã«é·ãæããªããããããŸããããåŒã³åºãåæ°ãéåžžã«å€ãã塵ãç©ããã°ãã®ãã¹ãã§ã¯230ååŒã°ã㊠63.5779s ã¯ç¡èŠã§ããªãå®è¡æéã«ãªã£ãŠããŸãã ãŸããŸãã³ãŒããèªãã§ã¿ããšã full_item ã¯é¢é£ããããŒã¿ãå
šéšçãã§äœã.... ãšããFactoryã«ãªã£ãŠããŸããã item ãšããã¢ãã«èªäœãã·ã¹ãã ã®äžã§ã³ã¢ãªãã¡ã€ã³ã®ã¢ãã«ãšãªã£ãŠãããéåžžã«å€ãã®é¢é£ãæã¡ãããã®ãªã®ã§ããããããã倧éšåã®ãã¹ãã«ãããŠã¯ãããŸã§å®å
šãªç¶æ
ã® item ã¯èŠããªããšããç¶æ³ã§ããã ããã§ã shop çææã®ããã©ã«ã㯠full_item ã§ã¯ãªã item ãšããã¹ãªã ãªFactoryã䜿ãããã«åãæ¿ããå床解æãããŠã¿ãããšã«ããŸããã [TEST PROF INFO] Factories usage Total: 2697 Total top-level: 582 Total time: 01:06.857 (out of 02:53.458) Total uniq factories: 47 total top-level total time time per call top-level time name 322 6 4.7178s 0.0147s 0.0844s user_profile 276 70 29.5793s 0.1072s 4.0465s shop 230 0 10.8307s 0.0471s 0.0000s item çµæã1åããã 0.2764s ããã£ãŠãã full_item ããã 0.0471s ã§æžã item ã«åãå€ãã£ãããšã§ããã®ãã¹ãã®å®è¡æéã¯ååã«ãŸã§å§çž®ã§ããããã«ãªããŸããã RSpecã®å®è¡æéã®æ¹åçµæ ä»ã«ãTestProfãçšããŠçްããªæ¹åã¯å
¥ããŠãããæçµçã«ã¯ãŒã¹ã5ã®ãã¹ãå®è¡æéã¯æ¬¡ã®ããã«å€åããŸããã spec Before After Reduce Reduce Rate Worst1 78.37s 17.55s -60.82s -77.6% Worst2 75.71s 15.73s -59.97s -79.22% Worst3 48.76s 8.28s -40.48s -83.01% Worst4 48.16s 7.84s -40.31s -83.72% Worst5 88.01s 18.1s -69.9s -79.43% Total of worst 339.01s 67.5s -271.51s -80.08% 339.01s ãã 67.5s ã«å§çž®ããããã®ææªå€ã ã£ããã¹ã5æ¬ã«éå®ããŠèšããšãå®è¡æéã8å²ä»¥äžåæžã§ããŸãããããã«äžèšã®ãã¹ã以å€ã§ãä»åæ¹åããFactoryã¯äœ¿ãããŠããããã§ãããããã¹ãã®ç·å®è¡æéã«ãå¹ããŠããããã§ãã èå¯ ä»åãTestProfãçšããŠãäœãšãªãéãããã ãããšæã£ãŠãããšãããæ³å®ä»¥äžã«ç¡é§ãªããšãããŠããããšãããããŸããã ããšããããããã©ã«ãã§å
šéšå
¥ãã®ãã¹ãããŒã¿äœã£ãŠãããïŒããšããã®ã¯ããšãããã°ãããã¡ã§ãããæŽå²ã®é·ãã³ãŒãããŒã¹ã ãšæ°ã¥ãã«ããããã«æããŸããã ãæšæž¬ãããªãèšæž¬ããããšããèšèããããŸãããå®éã«èšæž¬ããŠæã¡æããã³ãã€ã³ãã«æã£ãŠããããšã§ãçå®ã«æ¹åããŠããæèŠãåŸãããŠåšå²ã«ã説æããããã£ãã®ãåŠã³ã§ãã ãŸããä»åFactoryã®æåã倧èã«å€æŽããããšã§å®è¡æéåæžãå®çŸããŠããŸãããããã¯åžžæ¥é ã¿ããªããã¹ãã³ãŒããããªãæåãæžããŠããŠãããããããšããã®ã倧ããã§ããã·ã¹ãã ãå£ããªãããšãæ
ä¿ãããããäžå®ãšæŠãããã«æã
ã¯ãã¹ããæžãããã§ããããã¹ãèªäœã®ãªãã¡ã¯ã¿ãªã³ã°ã«ããã¹ãã³ãŒããæå¹ã§ãããšããããšã¯åŠã³ã«ãªããŸããã ãã¡ã€ã³ãã£ã¯ç©æ¥µçã«ãšã³ãžãã¢ãæ¡çšããŠããŸããCI/CDãå§ããFour Keysãéçºçç£æ§ãæè¡ãã¬ã³ãã転è·åžå Žãªã©èå³ã®ããæ¹ã¯ããæ°è»œã«ã«ãžã¥ã¢ã«é¢è«ãåããŠã¿ãŠãã ãã :) ãã¡ã€ã³ãã£ã®æ¡çšæ
å ±ã¯ãã¡ãâ herp.careers
ããã«ã¡ã¯ã Findy ã§ Tech Lead ãããããŠããã£ãŠãæžç°ã§ãã Findy 瀟㮠Tech Blog ãéèšã㊠1 ã¶æçšåºŠãçµãšããšããŠããŸãã ãã®ããã°ãéããŠåŒç€Ÿã®æè¡æ
å ±ã ãã§ãªã瀟å
ã®ãšã³ãžãã¢ã®ããšããã£ãšç¥ã£ãŠã»ãããšèããçµæãä»åãã èªæ
¢ã®äœæ¥ç°å¢ã倧å
¬é ãšé¡ããŠã瀟å
ã®ãšã³ãžãã¢ã®äœæ¥ç°å¢ãšãããã«å¯Ÿããèãæ¹ãæããªã©ãçºä¿¡ããŠããäºã«ãªããŸããã åŒç€Ÿã®ãªãã£ã¹ã¯æ±äº¬ã«ãããŸãããåã¯åæµ·éãåã¯çŠå²¡ãŸã§é éå°ããã®ãã«ãªã¢ãŒãã§ JOIN ããŠãããšã³ãžãã¢ã倿°åšç±ããŠãããŸãã ãšã³ãžãã¢ã®å€ããåèªã®èªå®
ããäœæ¥ããŠããããã£ãšèªåã«ãšã£ãŠã®æé«ã®ç°å¢ãæŽããŠããã¯ãã§ãïŒ ããã§ã¯ãåŒç€Ÿãšã³ãžãã¢éã®èªæ
¢ã®äœæ¥ç°å¢ãèŠãŠãããŸãããïŒ äœæ¥ç°å¢ã倧å
¬é æžç° ãšããããã§ååã¯çŠå²¡ãã JOIN ããŠãã Tech Lead ã®æžç°ã®äœæ¥ç°å¢ãã玹ä»ãããŠããããŸãã äœæ¥ã¹ããŒã¹ã®å
šäœåã¯ãããªæãã§ã åºæ¬çã«ã¯ DELLã®32 ã€ã³ãã® 4K ã¢ãã¿ ã䜿ããã¯ã©ã ã·ã§ã«ã¢ãŒãã§äœæ¥ãããŠããŸãã ã¹ããŒã«ãŒ ã¯ã¢ãã¿ã®ã¢ãŒã éšåã«æ¥ç¶ããŠãããã€ã€ãã³ãç¹ããŠãã¿ã³äžåã§åºååãæ¿ããå¯èœãªã®ã§ãæ®æ®µã¯ã¹ããŒã«ãŒã䜿ãéãã«ãããæã¯ã€ã€ãã³ã䜿ãããšããããšãç°¡åã«åæ¿å¯èœã§ãã Web ã«ã¡ã© ãš ãã€ã¯ ã¯å¥é賌å
¥ããŠå€ä»ãã§å©çšããŠããŸãããªã¢ãŒãã§ã®äœæ¥ãã¡ã€ã³ãšãªããããæ åãé³å£°ç°å¢ã¯æäœéã®ãããŒãšæãæè³ããŸããã ãã¹ã¯ã¯ bauhutte ãšããã¡ãŒã«ãŒã® æéãã¹ã¯ ã䜿ã£ãŠããŸãã ãã®æéãã¹ã¯ã¯é»åã§ãã¿ã³äžã€ã§é«ããèªç±ã«å€æŽã§ããæšªå¹
ã奥è¡ãã倧ããã®ã§è²ã
ãªäœæ¥ã·ãŒã³ã«åãããŠå©çšããããšãåºæ¥ãã®ã§éåžžã«ããããã§ãã ãããŠå®å¿ãšä¿¡é Œã®ãã°éæ£ãå®ããCI ãéããšããéèŠãªãªãªãŒã¹ã®åã«ç¥ããæ§ããŸãã æå
åšãã¯ãããªæã ããŒããŒã㯠HHKB Professional HYBRID Type-S ã䜿ã£ãŠããŸãã ä»ãŸã§è²ã
ãªããŒããŒãã詊ããŸããããã®çµæãå人çã«äœæ¥çµäºåŸã®æå
ã®ç²ããäžçªå°ããæããã®ã¯ãã®ããŒããŒãã§ããã ç¹æ®ãªããŒé
åã§ãããæ
£ãããã³ãŒããæžãããã³ãã³ãã©ã€ã³ãå©ãããããããããŒããŒãã ãšæããŸãã ããŠã¹ã¯ Apple ã® Magic Trackpad ã䜿ã£ãŠããŸããããŠã¹ã«å¯Ÿããæãã¯ãªããŠãæ£çŽ Mac ã®ã·ã§ãŒãã«ããã¢ã¯ã·ã§ã³ã䜿ããã°äœã§ãããã§ããæ©ããã«ããã¢ãªã³ã°ã«å¯Ÿå¿ããŠæ¬²ããã§ãã ãŸããå€ããçš®ãšããŠã¯æã®çãã¬çšå
·ãæå
ã«çœ®ããŠãŸãã äºã®çºç«¯ã¯æ Œã²ãŒãããŠãæã«æã£ãŠããããæãåããªããŠãã人é¡ã¯è¬æãšå°æãæã£ãŠããã䜿ã£ãŠãªããªïŒããšæãããã®äºæ¬ã®æãéããããã«è²·ããŸããã ãªã¢ãŒãäŒè°äžãšããã³ãŒããèããŠãæãšããã£ãšããã§æãéããŠãŸããããã§éãã ããŠããè¬æãšå°æãã¹ã ãŒãºã«åãããã«ãªããããŒããŒãã®ã¿ã€ãã³ã°ãä»ãŸã§ãããã¹ã ãŒãºã«ãªã£ãæ°ãããŸãã äœæ¥çš BGM 㯠HomePod mini ãš Apple Music ã®åããæã䜿ã£ãŠããŸãã iPad ã HomePod mini ãšãã¢ãªã³ã°ãããŠããµãã¹ã¯ã«ã¯æ°æ²ããµã³ãã©ãã©ãã©ã远å ãããŸãã äœæ¥ã¹ããŒã¹ã®æšªã«ã¯è¶£å³ã®ãã©ã¢äœæã¹ããŒã¹ããåŸãã«ã¯æ¬æ£ãšãã©ã¢ã±ãŒã¹ãšç©ã¿ãã©ã èªåã®å¥œããªãã®ã«å²ãŸããŠãããšããã®ã¯ãæ¯æ¥ïŒäººã§é»ã
ãšäœæ¥ããç°å¢ãšããŠã¯æ³å以äžã«éèŠã ãšæããŸãã æ¯æ¥éšå±ã«ç± ãã£ãŠ1人ã§äœæ¥ããŠããã®ã§ãäºæã«å
¥ããã®ã§é£œããæ¥ãªãç°å¢ãäœãããšã倧äºã ãšæããŸãã çé 鿣®ãããã«ãªã¢ãŒãã®çéïŒ @shoota ïŒã§ãã ãã«ãªã¢ãŒã㯠2017 幎å€ããã§ 7 幎ç®ã«ãªããŸãã ãŸãã¯ã¡ã€ã³ã®ãã¹ã¯ããã èªå®
ã«åãä»ãã®ãã¹ã¯ MacBook Pro 16â ãããŒãçšã¹ã¿ã³ãã«èŒãããã¥ã¢ã«ãã£ã¹ãã¬ã€ã§äœæ¥ãããŠããŸãã MacBook ãã£ã¹ãã¬ã€ã¯åºæ¬çã«ã¯ Slack å°çšã§ãã»ãŒãã¹ãŠã®äœæ¥ã¯ å€éšãã£ã¹ãã¬ã€ + ä»®æ³ãã¹ã¯ãããã§ããªããŠããŸãã å€éšãã£ã¹ãã¬ã€ã¯ DELL ã® 4K ããã¢ãã¿ãŒ ã«ä»äºçšã® MBP ãšå人çšã® Mac mini ãç¹ãã§ããŠãç»é¢ãåãæ¿ãããšæ¥ç¶ããŠããããŒããŒããèªåã§åãæ¿ããã®ãæ°ã«å
¥ã£ãŠããŸãã ãã¹ã¯ã©ã€ãã Amazon Alexa ã«æ¥ç¶ãããã¹ã¯å·ŠåŽã® Amazon Echo ããé³å£°æäœã§ããããã«ããŠããŸãããã¹ã¯ããé¢ããããšã«ã©ã€ãã®æ¶ãå¿ãã«æ°ã¥ãã®ã§ãé ãããã§ã声ã§ã©ã€ãã®ãªã³ãªããã§ããã®ã䟿å©ã§ãã Echo 㯠Spotify ãªã©ã®é³æ¥œåçãããããä»ã®å®¶é»ã®æäœã«ã䜿ã£ãŠããŸãã ãã¹ã¯å³åŽã¯ Anker ã®ç¡æ¥å°ã¿ã€ãã®å
é»åš ã§ iPhone ã®ã¹ã¿ã³ãã€è¡šç€ºãããŠããŸãã ãã®é£ã«ã¯ iPad mini ããããŠããŠãã¡ãã£ãšããã¡ã¢ãããããäœæ¥ãããªãããªã³ã©ã€ã³ã€ãã³ããèŠãããããšãã«äœ¿ã£ãŠããŸãã å
šäœçã«é»ã§çµ±äžããã®ã奜ãã§ããã©ãã¯ããã ã ããçœãªã®ã§ããããé»ã®æ¹ã«è²·ãæ¿ãã¡ãããããªãšæã£ãŠããŸãã ããŒããŒã㯠Keychron ã®åé¢åŒããŒããŒã Keychron Q11 QMK Custom Mechanical Keyboard ããã€ã³ãããã€ã¹ã¯ Magic Trackpad2 ã§ãã åé¢åŒããŒããŒã è©ãããã²ã©ããªããããã®ã§åé¢åŒããŒããŒãããã£ãšäœ¿ã£ãŠããŸãããQ11 ã¯ããŒã¹ã€ããããšäº€æãããããŒãããã®ã«ã¹ã¿ãã€ãºãç°¡åã§ã倿©èœãªã®ã§ããªãæ°ã«å
¥ã£ãŠããããŒããŒãã§ãã ããŸã¯èµ€è»žã¹ã€ãããšæšæºä»æ§ã®ããŒãã£ãããªã®ã§ãããããããŒãã£ãããå€ããããªããšæã£ãŠãããšããã§ãã ãŸããã«ãªã¢ãŒããšããŠã¯ãããªé話ã®å質ã倧äºã«ãããïŒèªå®
ã§ã¯åã©ããã¡ã®å£°ãªã©ã®ç°å¢é³ãæ··ãããããã®ã§ãèªåãé³é¿ã¯ãã£ãããšçšæããŠããŸãã ãã€ã¯ã¯æåæ§ã® Yeti Nano ã§èªåã®å£°ã ããå
¥ãããã«ã¹ã¿ã³ãèšçœ®ããŠããŸãã Yeti 以åã¯ãããã»ããã䜿ã£ãŠããŸãããããããããç©çã¹ã€ããã§ãã¥ãŒãã§ãããããšããã ããã§ãã æ¥ã«ãããã¿ããããšãã«ãœãããŠã§ã¢ãã¥ãŒãã¯éã«åããªãã®ã§ éã«åºååŽã¯åšãã®é³ãèãããªããšäžäŸ¿ãªã®ã§ããªãŒãã³ã€ã€ãŒã¿ã€ããæçšããŠããŠãããŸã¯ shokz ã® OPENFIT ã䜿ã£ãŠããŸãã æåæ§ãã€ã¯ æåŸã«ãã¹ã¯ã®åŸãã« DIY ã§äœã£ãã³ããã¯æ£ãããã®ã§ãèªæ
¢ããŠãã«ç޹ä»ããããšæããŸãã èªåã奜ããªãã®ãéãããã®ã«å²ãŸããŠä»äºãããã®ã奜ããªã®ã§ãã³ããã¯ïŒãã¶ã 800 åããããããŸããããæ°ãåããŸãããïŒãã²ãŒã ã°ããºããæ°ã«å
¥ãã®ãŠã€ã¹ããŒããããŠããŸãã å®å
šçãå«ããè·éèšç®ãããŠèšèšå³ãã€ãããéšæã®åãåºãããçµç«ãŠãåãä»ããŸã§ã²ãšãã§ãããŸããã ã ããã 2 äžå匷ãããã§ãã¹ãŠæããå
æ¥ã®é床 5 以äžã®å°éã§ã ã³ããã¯ã¯ 1 åãèœã¡ãŸããã§ããã 2023 幎äžåæã®ç·äŒã Fine-day ã§ MVP ãåè³ ãããšãã®ãããã£ãŒã食ã£ãŠããŸãã DIYæ¬æ£ãšMVPãããã£ãŒ ä»äºå Žã§ãããªããèªåããããåºãã€ã€ãä»äºã«ãããèªåãªãã®ãå¿«é©æ§ / åçæ§ããæ±ãããã¹ã¯ã«ä»äžãã£ãŠãããšæã£ãŠããŸãã äž»èšïŒãããïŒ çŠå²¡ãããªã¢ãŒãã§ããã³ããšã³ãã®éçºãããŠããäž»èšïŒ @nesskazu ïŒã§ãã ãã¹ã¯ã®å
šäœåã¯ãã®ãããªæãã§ãã ãã¹ã¯å
šäœ 4k ãã£ã¹ãã¬ã€ã 2 æé
眮ãã³ãŒãã£ã³ã°ããªãããããã°ã§ããããã«ããŠããŸãã ããŒãã£ã³ã°æã«ããã¥ã¡ã³ãçãåç
§ã§ããã®ã䟿å©ã§ãã ãµãã¢ãã¿ãŒã¯ãããã°ãããããwebçã®é²èЧæ§ãè¯ããã瞊é
眮ã«ããŠããŸãã ã³ãŒãã£ã³ã°ãšãããã°ã®ç»é¢é
眮 Thunderbolt ã±ãŒãã«ã§äŒç€Ÿæ¯çµŠ PC ãšç§çš PC ã§å
šãŠã®æ©åšã®æ¥ç¶ãåãæ¿ããããã«ããŠããŸãã ãããã³ã°ã¹ããŒã·ã§ã³ã«ã¯ CalDigit TS3 Plus Dock ã䜿çšããŠããŸãã Thunderboltã±ãŒãã«1æ¬ã§PCåæ¿ ãããã³ã°ã¹ããŒã·ã§ã³ ããŒããŒãã¯éé»å®¹éç¡æ¥ç¹æ¹åŒãã¡ã«ãã«ã«ãªã©ãããã詊ããŠããŸãããã èªåã¯ããŒã¹ãããŒã¯ã®æ·±ãããŒããŒãã¯èŠæïŒç²ãã&ã¿ã€ããã¹å€ãïŒãªããšãããã£ãã®ã§ããŒã¹ãããŒã¯ãæµ
ãããŒããŒãã䜿ã£ãŠããŸãã MX Keys mini ããæ°ã«å
¥ãã§ããããéäžãããã£ã¿ãªã³ã°ãçºçããã Touch ID ãæ¬²ããã£ãã®ã§çŸåšã¯ Apple Magic Keyboard ãæçšããŠããŸãã ãŸããåãæ¿ããå
é»ã®æéããªããããæç·ã§æ¥ç¶ããŠããŸãã Apple Magic Keyboard ãªã¢ãŒãã¯ãŒã¯ãšããããšãããããŒãã£ã³ã°ãçžæãšèªååæ¹ã«ãšã£ãŠå¿«é©ãªãã®ã«ãªãããã«æ§ç¯ããŠããŸãã ãã€ã¯ã¯åšå²ã®é³ãæŸãã«ãããã€ãããã¯ãã€ã¯ïŒSHURE MV7ïŒãæ¡çšããŠããŸãã ã«ã¡ã©ã¯ãªãã¹ãç®ç·ã®é«ãã«åãããã«ãã£ã¹ãã¬ã€éã®ã¹ããŒã«ãŒã®äžã«èšçœ®ããŠããŸãã ãã€ã¯ãšã«ã¡ã© ããŒãã£ã³ã°ã BGM ã®é³ã¯ OWNDAYS ã® HUAWEI Eyewear ã§èããŠããŸãã æ®æ®µã¡ã¬ãä»ããŠãã人ã§ããã°ã¡ã¬ããå€ããã ãã§ã¹ããŒã«ãŒãçããŠããã®ã§äŸ¿å©ã§ãã ããŒãã£ã³ã°ã®ãã³ã«ã€ã€ãã³ãè£
çãããããå¿
èŠããªããªããŸããæè¿é»æ± æã¡ãæªãæŒäŒã¿ã«å
é»ããå¿
èŠããããã Eyewear2 ã®è³Œå
¥æ€èšäžã§ãã Eyewear ã䜿ãåããŠããäŒã¿ã®æ¥ã«ããã³ã³ã¿ã¯ãã䜿ããªããªããŸããã Eyewear æãå®¶ã§ããã°éæ£ã®ãå®ããåŸãããèŠå®ã£ãŠãããŠããŸãïŒ ãã°éæ£ãå®ã ãã®ããã«ä»äºãããããã§äžäŸ¿ãªç¹ãæé€ããå¿«é©ã«äœæ¥çãã§ããããã«æèããŠãã¹ã¯ãæ§ç¯ããŠããŸãã ãŸãšã ãããã§ããã§ããããïŒ çŸåšããã¡ã€ã³ãã£ã§ã¯äžç·ã«åãã¡ã³ããŒãåéäžã§ãã èå³ãããæ¹ã¯ãã¡ããã â herp.careers
ããã«ã¡ã¯ãããã°ãã¯ã éçºçç£æ§ã®å¯èŠåã»åæããµããŒããã Findy Team+ ã®ããã³ããšã³ã ãªãŒããããŠãã @shoota ã§ãã Findy Team+ã¯ãšã³ãžãã¢çµç¹ã®éçºçç£æ§ãå¯èŠåããéçºããŒã ããšã³ãžãã¢ãªã³ã°ã¡ã³ããŒã®ããã©ãŒãã³ã¹ãæå€§åããããã®æ¯æŽãããŠããŸãã ãããŠïŒåœç¶ã®ããšãªããïŒFindy Team+ ãäœã£ãŠããèªåãã¡ããããŒã ãå人ã§ããã°ããŒãã£ã³ã°ãããŠãããŒã ãèªåèªèº«ã®åãæ¹ããšã³ãžãã¢ãªã³ã°çµç¹ã®å¥åº·ãã§ãã¯ãããŠããŸãã ä»åã¯ãã㪠Findy Team+ã®éçºããŒã ã®ãã¡ãããã³ããšã³ãããŒã ãã©ã®ãããªéçºç°å¢ã»éçºã€ã³ãã©ã§åããŠãããã®æŠèŠãã玹ä»ããããšæããŸãã ããã³ããšã³ãæè¡ã¹ã¿ãã¯ãšCIé«éå æè¡ã¹ã¿ã㯠ãŸãã¯ããã«ããã³ããšã³ãã®æè¡ã¹ã¿ãã¯ãç°¡åã«ç޹ä»ããŸããäžè¬çãªSPAæ§ç¯ã®æè¡ã¹ã¿ãã¯ãæ¡çšããŠãããããã»ã©ç¹å¥ãªãã®ã§ã¯ãªãããšããçè§£ããã ãããšæããŸãã React React Router Redux TypeScript GraphQL Apollo Client GraphQL Codegen Emotion Storybook Testing Jest @testing-library/{react,jest-dom,user-event} reg-suit Linter / Formatter ESLint Stylelint Prettier ãããŸã§ã¯ããããäžè¬çãªSPAã®æ§æã§ãããFindy ã®ããã³ããšã³ãã¯ã¢ãã¬ã管çããŒã«ã§ãã Nx ãå©çšããããšã§é«éåãå³ã£ãŠããŸãã Nxã®æ©èœè©³çްã«ã€ããŠã®èª¬æã¯ããã§ã¯çç¥ããŸããããããããŒãžã«ãSmart Monoreposã»Fast CIããšããéããCIã®é«éåãç°¡åã«ç®¡çã§ãããšãããæå€§ã®ç¹åŸŽã𿩿µã ãšæã£ãŠããŸãã Nxã§CIãé«éåãã Nxã¯å
éšã«è€æ°ã®ãããžã§ã¯ããæã€ããšãã§ããäžã€ããããã®äŸåé¢ä¿ãèªåã§è§£æããŸãã ãã®ããããžã§ã¯ãã®äŸåé¢ä¿ããããšã«ããã«ãªã¯ãšã¹ãã§ã®ã倿Žããããããžã§ã¯ãããšããã®ã倿ŽéšåãäŸåããŠãããããžã§ã¯ããã®ã¿ã®ãã¹ããå®è¡ããææ®µãæäŸããŠããŸãã ããã«ãã£ãŠéçºè
ãéçºããŠãããã®ã«é¢ä¿ã®ãªãéšåã¯çç¥ãããããCIãé«éåããŸãã ãã以å€ã®å€æŽã«ã€ããŠãNx Cloudã«ãã£ãã·ã¥ãæ®ã£ãŠããã°ãã®çµæãæ¡çšããŠãã¹ãçããã¹ãããCIãé«éã«å®äºããŸãã CIã®å®è¡çµæãèŒããŠã¿ãŸããã GitHub Actionsã®æ§å å
±éã®hooksãä¿®æ£ããŠã3段ç®ã®ãã«ãªã¯ãšã¹ãã§ã¯ã»ãŒå
šãŠã®ãã¹ããå®è¡ïŒãããŠæ°ãã«ãã£ãã·ã¥ïŒããŠããããã20å以äžã®ãã¹ãæéãããã£ãŠããŸãã äžæ¹ã§ãã®ä»ãã¿ãŠã¿ããšãæ°ããç»é¢ãªã©ã®éåžžéçºã®å Žåã¯å€æŽå
容ããããžã§ã¯ãå
ã§å®çµããŠããã®ã§ãCIã®å®è¡æéã¯æ°åã§çµãã£ãŠããŸãã ãŸãåã«CIãé«éåããã以å€ã«ããNxã¯éçºçç£æ§ã®åäžã«å¯äžããŠãããŸãã ãã㯠ããã«ãªã¯ãšã¹ãã¯ã§ããã ãå°ããäœããããšããéçºæåããCIæéããšããæ°å€ã§å¯èŠå ããŠãããããšã§ãã åè¿°ã®éããã«ãªã¯ãšã¹ãã®å€æŽã®äŸåé¢ä¿ãå°ããã»ã©CIã¯æ©ãçµãããŸãã®ã§ãéã«ãã«ãªã¯ãšã¹ããåºç¯ãªç¯å²ã§å€§ãããªã£ãŠããŸãã»ã©CIæéãé·ããªããŸãã ãã«ãªã¯ãšã¹ãã®ç²åºŠã倧ãããšã1) CIãé
ããªãã2) ã¬ãã¥ãŒäŸé ŒãããŸã§ã®æéã空ããŠå¿ããã¡ã«ãªãã3) ã¬ãã¥ãŒéãå€ããŠæéãããããšããæªåŸªç°ã«é¥ããŸãã ããã§ãã«ãªã¯ãšã¹ããäœãåŽã¯ã©ãã«ããããé¿ããããšããååŠãåããCIãé«éã§ããã°äœæ¥å
容ã«éäžããã¬ãã¥ãŒææã®åå¿ãä¿®æ£ã楜ã«ãªã£ãŠããã®ã§ãã ãã«ãªã¯ãšã¹ã / ã¬ãã¥ãŒã«åå¿ãã åè¿°ã®éãNxã®äŸå管çãåºç€ãšããŠCIãé«éåããŠããŸãããFindy ã§ã¯ã¬ãã¥ãŒäŸé Œãã¬ãã¥ãŒã³ã¡ã³ããªã©GitHubã§ã®ããåããSlackã«ç§»æ€ããŠã³ãã¥ãã±ãŒã·ã§ã³ã®ããªã¬ãŒãéç¥ããŠããŸãã å®éã®Slackã®ç»é¢ã¯ãèŠãã§ããŸãããã以äžã®ãããªã¿ã€ãã³ã°ã§Slackã«ç¶æ³ã宿³ãããã¬ãã¥ãŒäŸé Œãæ¥ãå Žåã¯éç¥ããããŸãã ãã«ãªã¯ãšã¹ããäœã£ãæ ãã«ãªã¯ãšã¹ãã«ã³ã¡ã³ããããæ ãã«ãªã¯ãšã¹ããApproveãããæ ãã«ãªã¯ãšã¹ããããŒãžïŒã¯ããŒãºïŒããæ ãŸãGitHubæšæºã®Slackã¢ã©ãŒãæ©èœã䜵çšããŠããŠãã¬ãã¥ã¯ãŒã«ã¢ãµã€ã³ããããŸãŸã®ãã«ãªã¯ãšã¹ããããã°1æéããšã«éç¥ãããŸãã ããã«ãã£ãŠãã¬ãã¥ãŒäŸé Œã«æ°ã¥ããªãã£ããç¶æ³ãæžãããã¬ãã¥ãŒãæŸçœ®ãã¿ã®ãšãã«ã¯ããªã«ãäºæ
ãããã®ããªïŒäœæ¥ã«å
¥ããªãç¶æ³ããªïŒããšå¯ããããã¬ãã¥ã¯ãŒã倿Žãããªã©ã®å¯ŸåŠãã§ããŸãã ãã®Slack Appã¯åŒç€Ÿããã¯ãªãŒãã® github-to-slack-notification ãããŒã¹ã«æ§ç¯ãããŠããŸãã Findy謹補ã®Slackéç¥App ãã«ãªã¯ãšã¹ããåé¡ãã Findy Team+ ã¯ãéçºã¡ã³ããŒãéçºããŒã ããªããžããªããã«ãªã¯ãšã¹ãã®ã©ãã«ãæ¥æãã«ã¬ã³ããŒæ
å ±ãªã©ã®è€æ°ã®æ¡ä»¶ããã£ã¡ã³ã·ã§ã³ãšããŠãå人ãããŒã ã®ãªãŒãã¿ã€ã ãã¢ã¯ã·ã§ã³æ°ãªã©ã®ããã©ãŒãã³ã¹ãèšæž¬ã§ããŸãã ãã«ãªã¯ãšã¹ãã¯æ©èœéçºããªãã¡ã¯ã¿ãªã³ã°ããã°ä¿®æ£ãããã¥ã¡ã³ããŒã·ã§ã³ãªã©å
å®¹ãæ§ã
ã«ãªã£ãŠããŸããããããã©ãŒãã³ã¹ãã©ã®ãããªéšåã§çºæ®ãããŠããããåé¡ããã®ã¯éåžžã«å°é£ã§ãããTeam+ã§ã¯ãã«ãªã¯ãšã¹ãã®ã©ãã«ãå©çšããŠäžå®ã®åé¡ãã§ããããã«ããŠããŸãã ãããäžæ¹ã§ãããã«ãªã¯ãšã¹ãã«ã©ãã«ãã€ããŠããããšããäœæ¥ãå®åžžçã«ããã¹ãŠã®ãšã³ãžãã¢ããæŒããªããééããªãã宿œããŠããã®ã¯ãã«ãªã¯ãšã¹ãã®åé¡ä»¥äžã«å°é£ãªããšã§ãããã SlackãèŠè¿ããšå
¥ç€Ÿ3æ¥ç®ã®èªåããããªãæ¬è³ªãã€ããŠããŸãã ã©ãã«éçšã«ã€ããŠæ°ã¥ãshoota ããæã£ãŠãããšããç§ã«ããããŸããã Findy Team+ã®ããã³ããšã³ãã®ãã«ãªã¯ãšã¹ãã¯èªåã§ã©ãã«ãã€ããŠããŸãã ããããgitäžã®å
šãŠã®ã³ããã㯠Conventional Commits ã«åãããã commit lint ã§å¶çŽãèšããŠããŸãã ãããŠãã«ãªã¯ãšã¹ãã®ã¿ã€ãã«ãConventional Commitsã®åœ¢åŒã«ããããã«ã«ãŒã«åããŠããã®ã§ããã«ãªã¯ãšã¹ãã®ã¿ã€ãã«ã«ã¯ãããã®æ¥é å¥ãå¿
ãããããããæ€ç¥ããŠGitHub Actionsã§åé¡ã察å¿ãããã®ã«ã©ãã«ãã€ããããã«ããŠãŸãã ãã«ãªã¯ãšã¹ãã®çš®é¡ã¯ãã¿ã€ãã«ããèªåã§åé¡ãããŠãã ãããã€ãã å°ããªãã«ãªã¯ãšã¹ããç¡äºã«ããŒãžããããããããã€ããŠãããŸããTeam+ ããã³ããšã³ãã¯ãGitHub Actionsã® schedule cronãå©çšããŠäžæ¥ã«2å宿ãããã€ãããŠããŸãã gitã¯git-flowãããŒã¹ã«ããéçšããã€ã€ããã«ãªã¯ãšã¹ããã³ãã¬ãŒãã«ãªãªãŒã¹æã«å¿
èŠãªç¢ºèªé
ç®ãå
¥åããæ¬ãèšãããªãªãŒã¹æã«ã¯ãã®ç¢ºèªé
ç®ãèªåçæããããã«ãªã£ãŠããŸãã ãŸãã¯gitã®éçšãããŒãç°¡åã«å³åŒåããŠã¿ãŸããã ãã©ã³ãéçš â» ã®éšåã¯ãªãªãŒã¹çšãã«ãªã¯ãšã¹ãã®commit hashãmasterããdevelopãžç§»åããããã®æäœã§ãåºæ¬çã«ã¯å·®åã¯çºçããªããã®ã§ã developãã©ã³ãã宿éã§ãªãªãŒã¹çšãã©ã³ãã«æŽŸçããŠãã¹ããŒãžã³ã°ã«ãããã€ããŸãã ãã®ãšãã®äž»ãªãã§ãã¯é
ç®ãšããŠã ããã¯ãšã³ãã§å
è¡ãããã«ãªã¯ãšã¹ãããªããïŒããå Žåã¯ãã®ãã«ãªã¯ãšã¹ãã®ãªã³ã¯ïŒ APIã¬ã¹ãã³ã¹ã®å€åããšã©ãŒãã³ããªã³ã°ãåŸæ¹äºææ§ãªã©ãéçºè
ã®ã¿ã確èªã§ãã確èªé
ç®ããªãã å®è£
æ©èœãšæ³å®ä»æ§ã®åèŽãªã©ãæ©èœãªãªãŒã¹ã®ããã®QAãå¿
èŠã§ãªãã ããã«ãªã¯ãšã¹ããã³ãã¬ãŒãã§èšèŒããããã«ããŠããããªãªãŒã¹ãã«ãªã¯ãšã¹ãã«ã¯ããããã¹ãŠãåæããŠç°¡æçãªãªãªãŒã¹å€å®ãè¡ã£ãŠããŸãã ãŸãšã ä»å㯠Findy Team+ ã®éçºãããŒã«çŠç¹ãããŠãŠããã€ãã®èŠçŽ ãã玹ä»ããŸããã ãã以å€ã«ãããŸããŸãªããŒã«ããµãŒãã¹ãå©çšããŠå質ãšã¹ããŒããäž¡ç«ãããããã®éçºåºç€ãæã£ãŠããŸãããã²ãšããšã§ã¯ãäŒããã«ãããã®ãããã®ã§ããããããã詳现ãªèšäºã§ã玹ä»ããŠè¡ããã°ãšæããŸãã ã¹ããŒããæèããããã³ããšã³ãé åã®éçºç°å¢ãšããŠé«ãã¬ãã«ã§æŽåããå¯èŠåããŠæ¹åããããã«å¿ãããŠããŸãã èªåã®éçºèœåãã¹ããŒãããã«ã«çºæ®ããããšããæ¹ã¯ããã²äžã®æ¡çšæ
å ±ãããããã ããã herp.careers
ããã«ã¡ã¯ããã¡ã€ã³ãã£æ ªåŒäŒç€Ÿã§æ©æ¢°åŠç¿ãšã³ãžãã¢ãããŠããŸãsasanoshouta( @Edyyyyon )ã§ãããã®èšäºã¯ãèšèªåŠçåŠäŒç¬¬30å幎次倧äŒïŒNLP2024ïŒã«ç€Ÿã§åããŠãã©ããã¹ãã³ãµãŒãšããŠåå ããŠããŸããã®ã§ããã®åå å ±åã«ãªããŸãã NLP2024ãšã¯ïŒ èšèªåŠçåŠäŒç¬¬30å幎次倧äŒïŒNLP2024ïŒã¯ïŒ2024幎3æ11ïœ15æ¥ã®æéïŒ5æ¥éã®æ¥çšã§éå¬ããããŸãïŒãã¥ãŒããªã¢ã«ã¯3æ11æ¥ååŸ1æã«éå§ïŒæ¬äŒè°ã¯3æ11æ¥ååŸ4æåãã14æ¥ååŸ7æãŸã§ã®4æ¥éã§ãïŒçŸåšïŒçŸå°ãšãªã³ã©ã€ã³ã®ãã€ããªããéå¬ã®åœ¢æ
ã§æºåãé²ããŠããŸãïŒçŸå°ãšãªã³ã©ã€ã³ã®äž¡æ¹ããåå ãïŒçºè¡šã»èŽè¬ã»è°è«ãããããšãã§ããŸãïŒ *1 å€§äŒæŠèŠã¯åŒçšæã®éãã§ãä»å¹Žã¯ç¥æžããŒãã¢ã€ã©ã³ãã®ç¥æžåœéäŒè°å Žã§éå¬ãããŸããã åå ã®èæ¯ ä»åååå ãšãªããŸãããã¹ãã³ãµãŒããã«è³ã£ãèæ¯ã¯ä»¥äžã®éãã§ãã æ©æ¢°åŠç¿ãããŒã¿ãµã€ãšã³ã¹ãåããšããããŒã¿ç³»è·çš®ã»çéãžã®èªç¥æ¡å€§ãæã¡æãè¶³ããŠãããããã®è¶³ããããšããŠã®ã¹ãã³ãµãŒã ãã¡ã€ã³ãã£ã§ãããŒã¿ç³»è·çš®ãçµ¶è³åéããŠããããããããæ©æ¢°åŠç¿ãããŒã¿ãµã€ãšã³ã¹ã«ãåãçµãã§ããäŒç€Ÿã§ãããšã®èªç¥ãåºããããŠããªãã®ã§ããäœãïŒãªãïŒã©ã®ããã«åãçµãã§ããã®ãïŒããç¥ã£ãŠé ããã ããšã³ãžãã¢éçºãæ¯æŽããäŒæ¥ãã§ããããšãã¢ããŒã«ã§ããŠããäžæ¹ã§ãå®ã¯å
éšã§ããŒã¿æŽ»çšã»æ©æ¢°åŠç¿ã䜿ã£ãŠããäºã®èªç¥ãåºããããŠããªãèæ¯ãããããŸãã¯ç¥ã£ãŠé ããããšèšãäºã§ãä»åã¹ãã³ãµãŒãšããŠåå ããŠããŸããã äŒå Žã®é°å²æ° åè¿°ã®éããåŒç€Ÿã§ã¯NLP2024ãå«ãåŠäŒãžã®åå çµéšãå
šããªãã£ãã®ã§ãéå»ã®NLP202X幎床ã®é°å²æ°ããä»ç€Ÿããã®éå»åå èšäºãåèã«æºåãé²ããŠããŸããããŸããç§èªèº«ãä»ååè¡ããã¡ã³ããŒã®äžã«ãåŠäŒåå çµéšè
ãæ°åããäºããããæ®æ®µåŒç€Ÿãåå ããã«ã³ãã¡ã¬ã³ã¹ã€ãã³ããªã©ãããå°ããã£ã¡ããšããæºåãé²ããŠããŸãããããåœæ¥äŒå Žã«çããŠã¿ããšæ³åããŠãããããã©ãã«åå ã§ããããªé°å²æ°ã§ãããïŒçè
ãæåŸã«åå ããŠããé ã®åŠäŒãX幎åã§ãçé¢ç®ãªé°å²æ°ã®å°è±¡ããã£ãçºããæãæµããŠåå ããããé°å²æ°ã«ãªã£ãŠããã®ã¯é©ããŸãããïŒ ãã¹ã¿ãŒã»ãã·ã§ã³ã®é°å²æ° åŒç€Ÿã¹ãã³ãµãŒããŒã¹ ãã¡ãã®ç»åã®ãæ²ç€ºã¹ããŒã¹ãå°ããã®å¯ãããªããŒã¹ããã¡ã€ã³ãã£ã®ã¹ãã³ãµãŒããŒã¹ã«ãªããŸãããã¹ã¿ãŒã®çšæãéã«åããªãã£ãçºãèŠèã®çãšããŠåŒç€Ÿã®ããŒã¿ç³»è·ç𮿡çšè³æãå°å·ããŠæ²ç€ºããŠããŸããã åŒç€Ÿã¹ãã³ãµãŒããŒã¹ã®é°å²æ° ã©ãããŠãããªã«å¯ãããªã£ãŠããŸã£ãã®ããšèšããšãããšããšçè
ããã¹ã¿ãŒæºåæ
åœã ã£ããã§ãããçŽåã®äœèª¿äžè¯ã«ããäœæ¥ãé²ããäºãã§ãããæ¢ããªãæºåæéãéãå»ã£ãŠããŸã£ãçºã§ãããããããªãåŽé¢ã¯ãããŸãããæ²¢å±±ã®æ¹ãšã話ã§ããã®ã§äŒžã³ãããšæããŠæ¬¡ååå æããã¯æ²ç€ºç©ãäœã£ãŠåå ããããšæããŸãã ã¹ãã³ãµãŒããŒã¹ã§ã話ããããš ä»åã¯ãåŒç€ŸããŒã¿ãœãªã¥ãŒã·ã§ã³ããŒã ã®æ¡çšè³æãããæ©æ¢°åŠç¿ã«ããåãçµã¿äºäŸãããã€ãæåããã¢ãã¿ãŒã«æåœ±ããªããããããæ¹ã«åŒç€Ÿã®ããŒã¿æŽ»çšå
ãšãã®å®çŸæ¹æ³ã«ã€ããŠç޹ä»ããããŠããã ããŸããããŸããèšèªåŠçåŠäŒãšèšãäºããããå®éã«ç€Ÿå
ã§ãæ€èšããŠããNLPãåãå
¥ããä»åŸã®æ¹åæ§ãåæ ãããã®ã«ãªã£ãŠããŸããæ¡çšè³æãã2ã€æç²ããŠç°¡åã«ç޹ä»ããŸãã 1ã€ç®ã¯ãLLMãçšãããã£ãªã¢ãµããªã®äœæãã§ããð LLMãçšãããã£ãªã¢ãµããªã®äœæ 1幎ã»ã©åã®åãçµã¿ã«ãªããŸãããOpenAI APIå
¬éåŸã«æŽ»çšæœç第1匟ãšèšãäºã§ã1é±éã§ã®ãªãªãŒã¹ãç®æšã«äœæããæ©èœã«ãªããŸãã è·åçµæŽæžãªã©ã®æ
å ±ãå
¥åãããšããããèŠçŽããŠäºã€åãã€ããŠããããšèšã£ãæ©èœã§ããã ç§ã®å Žåã¯ããAIã®éè¡åž«ããAIã®ãã©ãŒã³ã³ãµã«ã¿ã³ãããšèšãååãã€ããŠãããŸããã 2ã€ç®ã¯ãè¡åãã°ã掻çšããè»¢è·ææ¬²ãå¿åã®æ€ç¥ãã§ããð è¡åãã°ã掻çšããè»¢è·ææ¬²ãå¿åã®æ€ç¥ ãã¡ãã®æ©æ¢°åŠç¿ã¢ãã«ã¯ãè»¢è·ææ¬²ãé«ãã«ãé¢ãããããããã£ãŒã«äžè»¢è·ææ¬²ãäœããŸãŸã«ãªã£ãŠããŸã£ãŠããæ¹åãã®æ©èœãšããŠã䜿ãããšãã§ããŸãããã©ã¡ãããšããã° è»¢è·æŽ»åã®ææ¬²ããªãã®ã«ã¹ã«ãŠããéãããŠãã äºã§ã®ç
©ãããã軜æžããé²åŸ¡ã®åœ¹å²ãæã£ãæ©èœãšããŠéçšããŠãããã®ã«ãªããŸãã ãããã£ãŒã«ã®ã¹ããŒã¿ã¹ã¯è»¢è·ææ¬²ãé«ããŸãŸã«ãªã£ãŠããããå®éã«ã¯ è»¢è·æŽ»åãå®äºãããŸãŸã¹ããŒã¿ã¹ã倿Žããã®ãå¿ããŠããŸã£ãŠãã ãšããã±ãŒã¹ããã£ããããŸãã ããããæ¹ã«ãã¹ã«ãŠãã远æããŠããŸããšè»¢è·ãµãŒãã¹ãšããŠã®äžä¿¡æã«ç¹ãããããªãã®ã§ãäºåã«äºé²ã§ãããã®ã¯åºæ¥ãéãäºé²ããããã«ããŠããŸãã ããŒã¹ã«ç«ã£ãŠã¿ãŠ åœåæ³å®ããŠãããããå€ãã®æ¹ãããŒã¹ã«æ¥ãŠãã ãããçè
ãããŒã¹ã«ç«ã£ãŠæèŠäº€æããããŠé ããŸãããããŒã¹ã«èãã«æ¥ãŠé ããçæ§ããããšãããããŸããã ãã¡ã€ã³ãã£èªäœãã ãšã³ãžãã¢ã«ç¹åããäžé転è·ãµãŒãã¹ãäžå¿ã«äºæ¥ãå±éããŠãã ãäºãšãåŠäŒã«åå ãããŠããæ¹ã
ã®å±æ§ãã æ©æ¢°åŠç¿ã»ããŒã¿ãµã€ãšã³ã¹ãçæ¥ãšãããŠãã瀟äŒäººåå ã®æ¹ 倧åŠã»å€§åŠé¢å€§åŠããåŠçåå ã®æ¹ ã®2屿§ã®æ¹ã
ãã¡ã€ã³ã§ãã£ãäºãšçžãŸã£ãŠãã ãã¡ã€ã³ãã£æ ªåŒäŒç€Ÿ ããšã äœãããŠããäŒç€ŸãïŒ ãã®ç¥å床ã«ã¯ããªãã®äŒžã³ä»£ãæããŸãããäžæ¹ã§ãå®å
šã¢ãŠã§ãŒã ã£ãèš³ã§ããªããã ã¹ãã«åå·®å€ã®äŒç€Ÿ ããšããŠèªç¥ããã ããŠããæ¹ãå€ãã£ãã§ããããŒã¿çéã§ã®æ©èœãšãµãŒãã¹ã»äŒç€Ÿåã®ç¹ã蟌ã¿ã«ãŸã ãŸã 課é¡ãæ®ãã€ã€ããæ©æ¢°åŠç¿ã»ããŒã¿ãµã€ãšã³ã¹ã®çéã«ãäžå®åãçµã¿ãå±ããããŠããäºãæããããŸããã å人çãªèŽè¬ã»ãã·ã§ã³ã®ææ³ ã¹ãã³ãµãŒãšããŠããŒã¹ã«ç«ã€åãããã¡èŽè¬è
ãšããŠã»ãã·ã§ã³ãããã€ãèãããä»ç€Ÿã¹ãã³ãµãŒããã®äŒæ¥ããŒã¹ã«ãéªéããŠã話ã䌺ãããŠããã ãããããã®ã§ãã¡ã¢ããŒã¹ã«ã¯ãªããŸããå人çãªææ³ãæžãé£ããŠãããŸãð ãªãŒã©ã«ã»ãã¹ã¿ãŒã»ãã·ã§ã³ããããã«å
±éããŠèšããã®ã¯ãå€§åæ LLMã«é¢ããç ç©¶çºè¡šã§ãã äºãã»ãšãã©ã§ããã ã ãããšèšã£ãŠã OpenAI API ããã®ãŸãŸäœ¿ã£ãŠç ç©¶ãããŠãããããµãŒãã¹å®è£
ããŠã³ã¢æ©èœãšããŠããäŒæ¥ãããç ç©¶ãã»ãšãã©ãªããããªå°è±¡ã§ããã ãªã¯ã«ãŒãããããµã€ããŒãšãŒãžã§ã³ããããªã©ã®ããã¹ãããŒã¿ãæœ€æ²¢ã«æã¡åãããŠããèšç®è³æºãè±å¯ãªäŒæ¥ã§ããäžéšããã»ã¹ã«åãå
¥ããããŠãããšãèãããŸããã 瀟å
åãã«ãå
šç€Ÿã®æ¥åå¹çåãç®çãšããŠRAGãæç« åã蟌ã¿(embedding)ã䜿ããLLMã®åŒ±ç¹ã§ããhallucinationãäœæžããä»çµã¿ãåãå
¥ãããåãåããbotãå®è£
ã»éçšããŠããã æ§ã
ã話ã䌺ã£ãæãçŸåšã®LLMçéã®ãã¬ã³ãã§ã¯ããåãåããbotã®ãããªæŽ»çšããã¬ã³ããšãªã£ãŠãããã§ïŒå人ã®èŠè§£ïŒããã®ãããªæµãã¯ãã°ããç¶ããããªé°å²æ°ãæããã äžæ¹ã§ãå¢ããè¥å¹²å€±éããæã¯ãããŸãããã èªç€Ÿå°çšã®LLMãã¹ã¯ã©ããã§éçºãã ãšããäŒæ¥ããã®ã話ãããã€ã䌺ããŸããã ãChatGPTãšãClaude3ãšãäœäŸ¡æ Œã§é«æ§èœãªAIãåºãŠãããä»åŸããã®æµãã¯å€ãããªãã¯ããªã®ã«ãªãïŒã ãšæããã話ãèãããŠã¿ãŸããã èªç€Ÿã§LLMãäœã£ãŠããäºã§ãGAFAMOãæäŸããLLMã®èŠçŽãå€ãã£ãæã®ãªã¹ã¯ãããžã«ãªã ãšã®æ¹éã§ãç ç©¶ããããŠããªããšã®äºã ã©ã®äŒæ¥ããã«ãå
±éããŠããã®ã¯ã1ã€èªç€Ÿã®LLMãäœããŠãããšçšéã«åãããŠæè»ã«ã«ã¹ã¿ãã€ãºãã§ããç¹ããå
補åã®ã¡ãªããã®1ã€ãšã®äºã§ããã çºã«ãªã£ãã»ãã·ã§ã³ å
šãŠã®ã»ãã·ã§ã³ãè峿·±ãèããããããããææ¥äœ¿ãããã®ãã¡ã倿°ã§ããããå人çã«1çªå匷ã«ãªã£ãã»ãã·ã§ã³ãå
±æããŸããå
šäœã®çºè¡šã¹ã±ãžã¥ãŒã«ã¯ ãã¡ã ããã æç« ã®ãã£ã³ã¯ã«åºã¥ãç¥èã°ã©ããæŽ»çšããRAGïŒç£ç·ç ããïŒ å
è«æã¯ ãã¡ã ãã RAGã䜿ã£ãŠLLMã®åç粟床ãé«ããçºã®åãçµã¿ã¯ããã€ããããŸãããLLMã«äžããããã¯ãšãªã«contextãä»äžããçºã«ç¥èã°ã©ããDBãšããŠæ§ç¯ããŠãããç¥èã°ã©ãããã®æ
å ±æ€çŽ¢ããã»ã¹ãRAGã«çµã¿èŸŒãããšèšããã®ã§ãããåŒç€Ÿã§ãRAGãçšãã質ååçbotãäœã£ãŠéçšãããããŠããããªãŒãœããã¯ã¹ã«é¡äŒŒåºŠèšç®ããäžäœNä»¶ããåçãäœæãããšèšãã·ã³ãã«ãªæ§æãåã£ããããŠããŸãããã¡ãã®ç ç©¶ã«ããéããã¯ãšãªã®æèã¯ãã¹ãŠé¡äŒŒåºŠã§æž¬ãããšã¯éããªãããšèšãäºãçæããŠããã®ã§ããã¡ãã®ç ç©¶ãåèã«ããŠã¿ãããšæããŸããã åå ããŠã¿ãŠã®ææ³ åããŠèšèªåŠçåŠäŒã«ã¹ãã³ãµãŒãšããŠåå ããŠã¿ãŠããã¯ãããŒã¿ç³»è·çš®ã»çéã§ã®èªç¥æ¡å€§ã®äŒžã³ä»£ãããäºã匷ã宿ããŸããã ãã®çç±ã¯ããã€ããããšæããŸããããããŸã§ä»åã®ããã«ããŒã¿ç³»è·çš®ã®æ¹ãéãŸãåŠäŒãã«ã³ãã¡ã¬ã³ã¹ã«ç©æ¥µçã«åå ããŠãããŠãªãã£ãæã倧ãããšæããŸããã ãã¡ããããã ãã§ã¯ãªãã瀟å
ã§ãããŒã¿ã掻çšããåãçµã¿ã¯æ²¢å±±åãããããããå§ãŸã£ããããŠããæäžãªã®ã§ãããããåãçµã¿ããã£ãšç©æ¥µçã«çºä¿¡ããäºã§ãããå€ãã®æ¹ã«ãã¡ã€ã³ãã£ãç¥ã£ãŠé ããããªãšæããŸãã ãã¡åå è
ãšããŠããçãæéã§ãŸãšãŸã£ãæ°ã®NLPã«é¢ããç ç©¶çºè¡šãèªåã®äºæã§æããæ©äŒã¯äžã
ãªãã£ãã§ãããå€çš®å€æ§ãªåãçµã¿ãäŒæ¥ãããšã話ã§ããŠãšãŠãè¯ãåºæ¿ã«ãªããŸãããããã«è©ŠããããªããŠããŠã沢山åŸãããšãã§ããŸããããå¿ããªããã¡ã«çŸåšã®åãçµã¿ã®åèã«ãããŠããã ãããšæããŸããã ä»åŸã¯ãèšèªåŠçåŠäŒãã¯ããåŠäŒãžã®ã¹ãã³ãµãŒããã¹ã¿ãŒçºè¡šãªã©ã«ãåãå
¥ããŠãããŸãã®ã§ãã©ããã§èŠãããéã¯äœåãããããé¡ãããããŸãã ãããã« ãã¡ã€ã³ãã£ã§ã¯ãæ©æ¢°åŠç¿ãšã³ãžãã¢ã»ããŒã¿ãµã€ãšã³ãã£ã¹ãã»ããŒã¿ã¢ããªã¹ããçµ¶è³æ¡çšäžã§ãã以äžã®ããŒãžããå¿åé ããŸãã®ã§ãèå³ã®ããæ¹ã¯æ¯éã«ãžã¥ã¢ã«é¢è«ãªã©ã§ã話ããŸãããã findy-code.io findy-code.io *1 : â» NLP2024å
¬åŒããŒãž ããæç²
1. ã¯ããã« Findyã§ããŒã¿ãšã³ãžãã¢ãšããŠåããŠãã ã²ããïŒ hiracky16 ïŒã§ãã ãã®èšäºã§ã¯Findyã§åãçµãã§ããããŒã¿åºç€ã«ã€ããŠç޹ä»ããŸãã Findyã§ã¯2023幎ããããŒã¿ãšã³ãžãã¢ãæ¡çšãæ¬æ Œçã«ããŒã¿åºç€æ§ç¯ã«çæããŠããŸãã ãããŸã§ã¯BigQueryïŒGoogle CloudïŒãäžå¿ãšããããŒã¿èç©ã»å©æŽ»çšãããŠããŸããã ä»åŸãã£ãšããŒã¿åæãæ©æ¢°åŠç¿ãªã©ã®ããŒã¿å©çšãå éããããã«ããŒã¿ãããžã¡ã³ããäžå¯æ¬ ã ãšèããŠãããããŒã¿ãšã³ãžãã¢ãæ¡çšããŠããŸãã ãŸã 1人ç®ã®ããŒã¿ãšã³ãžãã¢ããžã§ã€ã³ããŠããå幎éãããã®åãçµã¿ã§ãããçŸæç¹ã®ã¢ãŒããã¯ãã£ãæè¡ã¹ã¿ãã¯ã䌞ã³ããã屿ãªã©ãèšããŸãã 1. ã¯ããã« 2. ãããŸã§ã®ããŒã¿åºç€ã®äŒžã³ãã 3. çŸç¶ã®ããŒã¿åºç€ã¢ãŒããã¯ã㣠3.1. æ¬çªç°å¢ã®IaCåãšéçºç°å¢ã®æºå 3.2. ããŒã¿ããŒãç³»ã®ããŒã«å·æ° 3.3dbtããDataformãžã®å€æŽ 3.4. ããŒã¿ã4å±€ã§ç®¡ç 4. ä»åŸããããããš 4.1. å
šäœãçµ±æ¬ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã®å°å
¥ 4.2. ããŒã¿åºç€ã®å©çšè
æ¡å€§ã«åããã«ãŒã«ãšæš©é 4.3. è€æ°éšéãŸããã ããŒã¿åºç€ã®èšèšãæ§ç¯ 5. çµããã« 2. ãããŸã§ã®ããŒã¿åºç€ã®äŒžã³ãã åãå
¥ç€Ÿããåã®ã¢ãŒããã¯ãã£ããããªæãã§ãã ãããã¯ãã®RDSããEmbulkã䜿ã£ãŠ1æ¥1åå¿
èŠãªããŒã¿ãBigQueryãžè»¢éããŠããŸããã ãããã¯ãã®ããŒã¿ã ãã§ãªãGAã€ãã³ãããŒã¿ãèç©ããŠããŸããã æšå¹ŽããTransformã®ããŒã«ã«dbtãå°å
¥ããŠãã宿çã«å®è¡ãããã¯ãšãªãåŸã
ã«dbtãžç§»è¡ããŠããç¶æ
ã§ããã ããŒã¿å©çšã§èšããšå®æçã«èŠãã¹ãæ°å€ã¯Looker Studioã§å¯èŠåããããGASããBigQueryãžã¯ãšãªçºè¡ããŠã¹ãã¬ããã·ãŒãã§è¡šç€ºããŠããŸãã ãŸãå¥Google Cloudãããžã§ã¯ãã«ããæ©æ¢°åŠç¿çšã®ããŒã¿ã»ããã«ã³ããŒããããŠããŸããã äžèšãèžãŸããŠçŸå Žã®èª²é¡æãã¢ãŒããã¯ãã£å³ãèŠãŠã®å®¢èгçãªäŒžã³ããããŸãšããŠã¿ãŸããã Embulkãªã©ããŒã¿ããŒãç³»ã®ãžã§ãã倱æããå Žåã®ãªã«ããªã«è² è·ãããã£ãŠãã dbtã䜿ã£ãã¯ãšãªãå¢ããªã ã¹ãã¬ããã·ãŒããšGASã§å®è¡ããŠããã¯ãšãªã®æ£ç¢ºæ§ãæ
ä¿ã§ããŠããªã ããŒã¿ãœãŒã¹ã®å€æŽã«å¯Ÿãã圱é¿ç¯å²ãèŠç©ãããªãïŒããŒã¿ãªããŒãžã远ããªãïŒ ããŒã¿åºç€ã𿩿¢°åŠç¿çšã®æ€èšŒç°å¢ããªãããæ°èŠéçºãã¢ããããŒãã«ããŒãã«ããã æ©æ¢°åŠç¿ã®ãããžã§ã¯ããšããŒã¿åºç€ã®ãããžã§ã¯ããå¥ã«ãªã£ãŠããããŒã¿é®®åºŠãç°ãªã 3. çŸç¶ã®ããŒã¿åºç€ã¢ãŒããã¯ã㣠3.1. æ¬çªç°å¢ã®IaCåãšéçºç°å¢ã®æºå ãŸãåãæãã£ãã®ãæ¬çªç°å¢ã®IaCåã§ããã äžèšã«ç€ºããã¢ãŒããã¯ãã£å³ãæžãåã«æ¬çªç°å¢ã®äž»èŠãªãªãœãŒã¹ãTerraformã«ã€ã³ããŒãããŠã³ãŒã管çã§ããããã«ããŸããã ãã®éçšã§äžèŠãªãªãœãŒã¹ãæŽçã§ããæ¬åœã«å¿
èŠãªãã®ã ããèŠæ¥µããããšãã§ããŸãã ããŸãã«ã³ã¹ãåæžã«ãç¹ãããŸãã äžéãTerraformãžã®æžãèµ·ãããå®äºããããããšã¯éçºç°å¢ã®Google Cloudãããžã§ã¯ããäœãTerraformãé©çšããã ãã§ãã ããŒã¿ã«é¢ããŠã¯1æ¥1åãData Transferã§ããŒã¿ã»ããããšã³ããŒããŠããŸãã éçºç°å¢ã«æ¬çªç°å¢çžåœã®ããŒã¿ãšGoogle CloudãªãœãŒã¹ãæã£ãã®ã§ãåŸã«ç޹ä»ããDataformã䜿ã£ã宿å®è¡ã¯ãšãªã®éçºãå¢ãããŠããŸãã ããã«ãã£ãŠæ¬çªç°å¢ã«ãŠæ€èšŒçšããŒãã«ãã§ããããééããŠããŒãã«ãæ¶ããŠããŸããªã©ã®åé¡ãæžããããšæããŸãã 3.2. ããŒã¿ããŒãç³»ã®ããŒã«å·æ° ããŒã¿ãåã蟌ãããŒã«ãšã㊠trocco ãš Datastream ãæ¡çšããŸããã troccoã¯ããšããšå¥ããŒã ã§ç®¡çããŠãããã®ã«çžä¹ããããŠããã圢ã§äœ¿ã£ãŠããŸãã MAããŒã«ãä»ã®ã¯ã©ãŠããµãŒãã¹ãšãã£ãæ§ã
ãªããŒã¿ãœãŒã¹ã«å¯Ÿå¿å¯èœãªããéå®ããŠããŸãã ãŸãããŒãã ãã§ãªãReverse ETLã«ã圹ç«ã£ãŠãããäœã£ãããŒã¿ããŒããå¥ãµãŒãã¹ã«èªã¿èŸŒãã§æŽ»çšããŠããŸãã Datastreamã¯CDCã®ãµãŒãã¹ã§ãµãŒãã¬ã¹ãªã®ã§éçšã«æéãããããªãç¹ã§Embulkã®ä»£ããã«æ¡çšããŸããã äžæ¹ã§ãªã¢ã«ã¿ã€ã ã«ãœãŒã¹ãå€ããããéèšã®ãã³ã«æ°å€ãå€åãããããåé¡çºçæã®åå 調æ»ãå°é£ã«ãªããŸããã çŸç¶éçšäžã§ã«ããŒã§ããŠããŸãããåçŸæ§ãšèª¬æã®å®¹æããåäžãããã¹ãéèšã«äœ¿ã£ãããŒã¿ãå¥ã§æã€ã¹ããæ©ãã§ãããšããã§ãã ãŸãã¹ãã¬ããã·ãŒãäžã§ç®¡çããŠãããã¹ã¿ããŒã¿ã«ã察å¿ãã¹ãBigQueryã®å€éšããŒãã«ãšããŠæ±ã£ãŠããŸãã 3.3dbtããDataformãžã®å€æŽ ããŒã¿å€æã®ããã®ããŒã«ãdbtãã Dataform ãžå€æŽããŸããã dbtã¯Dataformã«æ¯ã¹ãŠéçºã掻çºã§ãã©ã€ãã©ãªãå
å®ããŠããããæ¡çšããŸããã ãã®åæã§dbtã«ã¯ãšãªãç¥èãéçŽãããã¹ãBigQueryã®ãŠãŒã¶ãŒãå·»ã蟌ã¿å©çšãä¿ããŠããŸãããããªããªãã¢ãã«ïŒããŒãã«ïŒã®æ°ãå¢ããŸããã§ããã çç±ãšããŠ2ã€ã®ããŒãã«ããããŸããã 1ã€ç®ãBigQueryã§ã¯ãšãªãèšè¿°åŸãšãã£ã¿ãéããdbt çšã«æžãè¶³ãäžæéããã£ãŠããŸãããšã倧ããªããŒãã«ã«ãªã£ãŠããããšã 2ã€ç®ã¯dbtåŽã®å¶çŽïŒäž»ã«ã¢ãã«åã®äžæå¶çŽïŒãããŒã¿åºç€åŽã®èšèšããå®ããã«ãŒã«ãæ°è»œã«ã³ããããã¥ããç¶æ³ãäœã£ãŠããŸããŸããã ãããã®ããŒãã«ãã¯ãªã¢ãã¹ãDataformã®å©çšãæ€èšããŸããã Dataformã¯ãã©ãŠã¶ã§å®çµãBigQueryã®ã¡ãã¥ãŒã«ããããå€å°ããŒã«éã®ç§»åã³ã¹ã軜æžãããŸãã ãã€Dataformã«ã¯ã¢ãã«åã®äžæå¶çŽããªãBigQueryãšåæ§ã«ããŒã¿ã»ããéã§è¢«ããªããã°ååã®ã¢ãã«ããããžã§ã¯ãã«è€æ°ååšããŠãåé¡ãããŸããã å°å
¥ããçµæãã¢ãã«æ°ã¯dbtãããžã§ã¯ãã«æ¯ã¹ãŠ3åã»ã©ã§ããŠãããå®éã«äœ¿ãããããšãã声ãããã®ã§äžå®æåã ã£ãã®ããªãšæã£ãŠããŸãã Dataformããdbtãžä¹ãæãã話ã¯èŠèãããããšããããŸãããdbtããDataformãžã®ã±ãŒã¹ã¯èŠãããšãªãã®ã§äžå®æéçµã£ãããŸãæ¯ãè¿ãã®èšäºãæžãããšæããŸãã 3.4. ããŒã¿ã4å±€ã§ç®¡ç åèã«ããã®ã¯dbtã®ãã¹ãã©ã®1ã€ã§ãããHow we structure our dbt projectsãã§ãã dbtãããŒã«ãšããŠã¯äžæ¡çšã«ããŸããããèãæ¹ã¯å©çšãããŠããã£ãŠããŸãã ð docs.getdbt.com åœå3å±€ïŒlake/warehouse/martïŒã§äœãããšããŠããŸããããããŒã¿ãœãŒã¹ã«å¯ŸããŠçŽæ¥ã¯ãšãªããããšãããšBigQueryäžã§äžéœåãªããšããããŸããã äŸãã°Datastreamã§è»¢éããŠããæ¥æã®ããŒã¿ããã¹ãŠDATETIMEåã«ãªã£ãŠããŸããTimeZone ãèæ
®ããèšç®ãã§ããŸããã§ããã æ¯åTIMESTAMPåã«å€æããåŠçãwarehouseå±€ã«æžãããã®ãå³ããã®ã§stagingå±€ãèšããŠå倿ãªã©ã®ç°¡åãªå€æãããããšã«ããŸããã 4. ä»åŸããããããš 4.1. å
šäœãçµ±æ¬ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã®å°å
¥ çŸåšãããŒã¿æœåºãšèªã¿èŸŒã¿ã¯troccoãDatastreamã§è¡ãããŸãããDataformã«ãã倿ã¯ãã®èªã¿èŸŒã¿ãçµãã£ãé ãèŠèšãã£ãŠå®è¡ããŠããŸãã ããtroccoã«ããããŒã¿ããŒãã倱æããéã«Dataformã«ãã倿ãå®è¡ãããŠããŸãã®ã§ãããŒã¿ãé²èЧããæ¹ãå€ãããŒã¿ãèŠãŠããŸãå¯èœæ§ããããŸãã ãŸãçŸç¶troccoãDataformããããã§ãšã©ãŒæ€ç¥ã®ä»çµã¿ãåããŠãããæ¥åžžæ¥åã®ç£èŠã«äžå®ã³ã¹ããããã£ãŠããŸãã ããŒã¿ã®æœåºããæäŸãŸã§ã®æµããå¹ççã«ç®¡çã»ç£èŠããéçšã³ã¹ãããããã«è¡ãããã«ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã®å°å
¥ãä»åŸå¿
èŠã§ãã 4.2. ããŒã¿åºç€ã®å©çšè
æ¡å€§ã«åããã«ãŒã«ãšæš©é ãã£ããäœã£ãã®ã§ãã£ãšæ°ããããŒã¿åºç€ã䜿ã£ãŠãããããã®ã§ãããã«ãŒã«ããªããšãã£ããã®èšèšãè
æããŠããŸããŸãã äŸãã°GASããçŽæ¥ã¯ãšãªãçºè¡ããããšã¯SQLã®å
容ãGASã«éããŠããŸãã¡ã³ããã§ããªããªã£ãŠããŸãã®ã§æ°ç°å¢ã§ã¯çŠæ¢ããŠãããããšèããŠããŸãã 4å±€ã®ã¢ãŒããã¯ãã£ãéçºäžæèããªããŠã¯ãªããªãã«ãŒã«ãªã®ã§ããªãå¿
èŠãªã®ãçç±ãšãšãã«äœãã€ããã§ãã ãŸããé©åãªæš©éãå
¬éç¯å²ã®èšå®ãå¿
èŠã§ãã ã©ã®ããŒã ãã©ã®ç¯å²ã®ããŒã¿ã»ãããæ±ãããšãã§ãããæŽçããªããšäºæãã¬å€æŽãããŠããŸããªã©ã®äºæ
ã«ã€ãªãã£ãŠããŸããŸãã çãå®å¿ããŠäœ¿ããããŒã¿åºç€ã«ããããã«ãé©åãªæš©éèšå®ãã«ãŒã«äœããæ¥åã ãšèããŠããŸãã 4.3. è€æ°éšéãŸããã ããŒã¿åºç€ã®èšèšãæ§ç¯ æåŸã«å£®å€§ãªè©±ãããŠçµããããã§ãããè€æ°éšéã§ã®ããŒã¿åºç€éçšãä»åŸãã£ãŠã¿ãããšèããŠããŸãã å®ã¯ä»ãŸã§èª¬æããŠããã®ã¯åŒç€Ÿã®äžäºæ¥éšå
ã§ã®è©±ã§åŒããŒã ã§ã¯ä»äºæ¥éšãšã¯ããŸããŸã é¢ãããŠããªãç¶æ³ã§ãã ãšã³ãžãã¢é åã®äºæ¥ããã£ãŠããäºæ¥éšéã®ãã¡ã€ã³ã¯è¿ãã®ã§ããŒã¿æèã§ã³ã©ãã¬ãŒãã§ããããšã¯ãããšèããŠããŸãã ãŸãäºæ¥éšå¥ã§äœ¿ããããã¹ã¿ãæ°ã
ååšããŠããå
±éåãããšæšªæããŠããŒã¿å©çšã§ããåå£ãæŽããšèããŠããŸãã ãã®ããã«ã¯è€æ°äºæ¥éšã®ããŒã¿åºç€ã管çããããã®èšèšãã«ãŒã«ãšéçºã»éçšãæ
åœããããŒã¿ãšã³ãžãã¢ãå§åçã«è¶³ããŠããŸããã 5. çµãã㫠以äžãããå幎éã§æŽãã€ã€ãããã¡ã€ã³ãã£ã®ããŒã¿åºç€ã¢ãŒããã¯ãã£ãšæè¡ã¹ã¿ãã¯ã®ç޹ä»ã§ããã ããããããšã«ãæããŸããããããŒã¿ã®æ»å®ã«ãããŠãšã³ãžãã¢ãè¶³ããŠããªãç¶æ³ã§ãã ãšã³ãžãã¢ã®ããã®ããŒã¿ãã©ãããã©ãŒã ãäœãããã«ããå°ãã§ãèå³ãæ¹§ããæ¹ã¯ã«ãžã¥ã¢ã«é¢è«ãåŸ
ã¡ããŠãããŸããð herp.careers
ããã«ã¡ã¯ã Findyã§Tech LeadãããããŠããã£ãŠãæžç°ã§ãã æšå¹Ž(2023幎)ã Findy Team+ ã«ãŠã4åã§3ã¶æã»ã©ãããŠå€§èŠæš¡ãªããã³ããšã³ãã®èšèšå·æ°ãè¡ããŸããã Findy Team+ã¯ãšã³ãžãã¢çµç¹ã®ããã©ãŒãã³ã¹åäžãæ¯æŽããSaaSãµãŒãã¹ã§ã2020幎ããéçºãã¹ã¿ãŒãããŸããã 3幎以äžã®éãæ©èœéçºãè¡ã£ãŠãµãŒãã¹ã䌞ã°ããŠããŸããããåæã«æ§ã
ãªèª²é¡ãçããŠããŸããã ä»åã¯ããã«è³ããŸã§ã®çµç·¯ãšãå®éã«è¡ã£ãããšã玹ä»ããŸãã ãªãããã³ããšã³ãã®èšèšå·æ°ã決æããã®ã åœæãèªåã¯ä»ã®ãããã¯ãã®éçºããŒã ã§ã³ãŒããæžããŠããã®ã§ãããããæ¥Findy Team+ã®éçºããŒã ãžç°åããããšã«ãªããŸããã ç°ååŸã«2é±éã»ã©Findy Team+ã®ããã³ããšã³ãã®éçºãããã®ã§ãããããããšã«æ°ã¥ããŸãã ã³ãŒãèšèšãæã£ãããè€éãããããªã ç°åååŸã§çè§£ã®ããããããã«ãªã¯ãäžãããŸã§ã®æéã«å·®ãããããã«æããã®ã§ãFindy Team+ã§ã®èªåã®çç£æ§ã®æ°å€ãæ¯èŒããŠã¿ãããšã«ããŸããã ãããšãç°ååãšæ¯ã¹ãŠèªåã®ã¢ãŠããããã®éãåå以äžãŸã§äžãã£ãŠããããšãæããã«ãªããŸããã æèŠå€ãšå®éã®çç£æ§ã®æ°å€ãäžèŽãããããã©ããããã«äœãåé¡ãããã®ã§ã¯ïŒãšãã仮説ãç«ãŠãŸããã ç°åååŸã§ã®å€åãæŽãåºããŠã¿ãçµæãã³ãŒãã®èšèšã«åé¡ãããé«ãããšãçªãæ¢ããŸããã ããããã³ãŒãã®èšèšãå·æ°ãããã«ããããã«ã¯å€§ããªã³ã¹ããšæéãæãããŸãã ãã®å€§ããªã³ã¹ãããç°åååŸã®çç£æ§äœäžã®æèŠå€ã ãã§åšãã®äººéãçŽåŸãããããšã¯äžå¯èœã§ãã ããã§ãä»ã®ã³ãŒãã®èšèšã®åé¡ç¹ãæŽãåºããŠãäœãã©ãåé¡ã§çç£æ§ãäœãã®ãå
·äœçãªæŽãåºãã«çæããŸããã åé¡ç¹ã®æŽãåºã é床ãªå
±éå ãŸãå
šäœçã«é床ãªå
±éåãè¡ãããŠããŸããã äŸãäžãããšãã°ã©ããããŒãã«ã«æ°å€ã衚瀺ããéã«è¡šç€ºããcomponentå
ã§ãããŒã¿ååŸãåæã«è¡ã£ãŠããŸããã ãããªã£ãŠããŸã£ãå Žåãã°ã©ããããŒãã«ã®èŠãç®ã¯åãã ãã©è¡šç€ºããããŒã¿ãç°ãªãå Žåã«å¯Ÿå¿ã§ããªããªããŸãã ãã®ãããªè€æ°è²¬ä»»ãæã£ãã³ã³ããŒãã³ãã幟ã€ãååšããŠãããããã³ãŒããªãŒãã£ã³ã°ãããŒã¿ã®æµãã远ãããšãéåžžã«å°é£ã«ãªã£ãŠããŸããã ããŒã¿ã®ååŸãšæç»ã¯è²¬åãç°ãªãåŠçãªã®ã§åããŠå®è£
ããã¹ãã§ããã åŠçã«äžè²«æ§ããªã APIã®åŒã³åºãã«é¢ããã«ãŒã«ãååšããŠããããè€æ°åæããè²ã
ãªã¿ã€ãã³ã°ã§åŒã³åºãããŠãããããŒã¿ã®æµãã远ãããšãéåžžã«å°é£ã«ãªã£ãŠããŸããã åè¿°ããé床ãªå
±éåããã®åé¡ãåŒãèµ·ãããŠããã1ã€ã®componentå
ã§å
šãŠã®ããšãåŠçããããšããŠããŸããã ããŒã¿ååŸãšæç»ãå¯çµåã§å®è£
ãããŠããã®ã§ããã®éšåã¯å
±éåããŠãã®ã§componentå
ã§ããŒã¿ååŸããŠæç»ããŠããã©ããã®éšåã¯å
±éåããŠãªãããããŒã¿ãpropsçµç±ã§è²°ã£ãŠããŠãããšãã£ããããªç¶æ³ãå€çºããŠããŸããã ããã«ãããã©ãããããŒã¿ãåã£ãŠããŠããã®ãæ¢ãã«è¡ãäœæ¥ãå€çºããã³ãŒããªãŒãã£ã³ã°ã«å¿
èŠä»¥äžã®æéãåãããŠãããããªç¶æ³ã§ããã ãã¹ãã³ãŒããæžãã«ãã é床ãªå
±éåã«ããããŒã¿ã®ååŸãšæç»ãåæã«è¡ãããŠããããã責åã®åæ
ãã»ãšãã©ã§ããŠããªãç¶æ³ã§ããã ãã®ããããã¹ãã³ãŒããæžãã«ããç¶æ³ã«ãé¥ã£ãŠããŸããã æç»ã«å°ä»»ããã¹ãcomponentã®äžã§ããŒã¿ååŸãããŠããããã§ãããŒã¿ååŸéšåã®ã¢ãã¯ãçšæããªããã°ãã¹ããã§ããããã¹ãã³ãŒããå¿
èŠä»¥äžã«è¥å€§åããŠããŸããã èšèšå·æ°ã«å¯Ÿããèªèåãããšåæåœ¢æ ã¡ã³ããŒãšã®èªèåãã Tech LeadãCTOãããã£ãŠã»ããããšèšã£ãŠäœæ¥ããŠãããããšã¯æ¯èŒçç°¡åã§ãããèªåãã¡ã§ãããããšæ±ºæããŠããããšã¯äŸ¡å€ã倧ããéããŸãã ããçšåºŠã®åé¡ç¹ãæŽãåºãããšãåºæ¥ãã®ã§ããããå
ã«ã¡ã³ããŒãšæèŠäº€æãããããšã«ããŸããã ãã®æã¡ã³ããŒå
šå¡ãäžåã«éããŠè©±ãã®ã§ã¯ãªããã¡ã³ããŒ1人ãã€æéãåã£ãŠè©±ãããããšã決ããŸããã ã¡ã³ããŒå
šå¡ãäžåã«ä»ããŠãã®æã®è©±ããããšã声ã倧ããã¡ã³ããŒã®æèŠãåæ ãããã¡ã ãšèããããã§ãã çã«èªåãã¡ã§ãããããšæ±ºæããŠè²°ãããã£ãã®ã§ã1人ãã€æéãåã£ãŠæ¬é³ãèãããšã«ããŸããã ããã³ããšã³ãã®ã¡ã³ããŒå
šå¡ãš1on1ã§è©±ãèããŠã¿ãçµæãçŸè¡ã®èšèšã«å¯ŸããæèŠãšæèŠå€ãã»ãŒäžèŽããŠããŸããã ãã£ãšãªãã¡ã¯ã¿ãå
¥ãããã£ããã©ããã®èŠæš¡ãŸã§æ¥ããšãªãã¡ã¯ã¿èªäœã«æéãæãããããŠããŸã æ©èœè¿œå ã«æéãåããªããªã£ãŠããŸãã®ã§ããªãã¡ã¯ã¿ããããããŠãèšãåºããªãã£ã ä»ã®èšèšã®ç¶æ
ã®ãŸãŸãæŽã«éçºã¹ããŒããäžããŠããã®ã¯é£ãã ããããå
ã®éçºã¹ããŒããæŽã«å éããããã«ããããã³ããšã³ãã®èšèšå·æ°ã¯å¿
èŠäžå¯æ¬ ã§ãããšããŒã å
šäœã§çµè«ãåºãŸããã çµå¶é£ãšã®åæåœ¢æ ããã§çµå¶é£ãPdMã®ã¡ã³ããŒãšãèšèšå·æ°ã«å¯Ÿããåæåœ¢æãäœãã«è¡ããŸããã å
šäœçã«äœãçŽãå¿
èŠããããããæ°èŠéçºãå¯èœãªéãã¹ãããããŠãäžå®æéãäœãçŽãã«éäžããå¿
èŠããããŸãã ããã«é¢ããŠã¯å€§ããªå察æèŠãåºãããšããªããæ¯èŒçã¹ã ãŒãºã«äºæ¿ãåŸãããšãå¯èœã§ããã è°è«ããã®ã¯ãã©ã®ãããã®æéãæ°èŠéçºã¹ããããããã©ãããããã§ãã ãªã倧ããªå察æèŠãåºãªãã£ãããšèšããšã 以åã«ãåæ§ã®ã·ã¹ãã ã®èšèšå·æ° ãè¡ã£ãããšããããããã«å¯Ÿããæåäœéšã倧ããã£ãããã§ãã 確ãã«å€§ããªã³ã¹ãã¯æãããŸãããæ¯èŒçæ©ã段éã§ãã®ã³ã¹ããååã§ãããšããæåäœéšãããããªãã¡ã¯ã¿ãèšèšå·æ°ã«å¯Ÿããæµææãæ¯èŒçäœãç¹ã¯åŒç€Ÿã®è¯ãç¹ã§ãã éå»ã®æåäœéšãšçŸåšã®ç¶æ³ãæ¯èŒããæããã³ã¹ããšååæéãæç€ºã§ãããããæ¯èŒçã¹ã ãŒãºã«äºæ¿ãåŸãããšãå¯èœã«ãªããŸããã çæåã®æºå æ°èšèšã®æ¹éãåºãã æ°èšèšã®åºæ¬æ¹éãšããŠãå€å°åé·ãšãªã£ãŠãæ§ããªãã®ã§å
±éåãæå°éã«çããããšãšããŸããã æåããå
±éåããŠå®è£
ããã®ã§ã¯ãªããå®è£
åŸã«å
±éåããã¹ããã©ãããè°è«ãããã®è°è«ãéã£ããã®ã ãåŸããå
±éå察å¿ããããšã«ããŸããã ãŸããã³ãŒãã®è²¬åãæç¢ºã«ããå¿
èŠä»¥äžã®ããšã1ã€ã®ãã¡ã€ã«å
ã§å®è¡ããªãããšã培åºããŸããã æŽã«componentãšããžãã¯ãåé¢ããããšãåºæ¬ãšããäŸåé¢ä¿ãåæ¹åã«ãããŸããã ããŒã¿ååŸãšæç»ã®åŠçãæç¢ºã«åããæç»ã«å¿
èŠãªããŒã¿ã¯å
šãŠpropsãªã¬ãŒã§åãåãããšã矩åä»ããŸããã propsãªã¬ãŒãé·ããªããšãã©ããªãå¯èœæ§ããããŸããã責åãæ··åšããŠãã¹ãã³ãŒããæžãã¥ãããªãããšãšæ¯ã¹ãããã·ãšãã倿ã§ãã å°ããªç»é¢ãæ°èšèšã§1ã€ã ãäœãçŽããŠã¿ã æ°èšèšã®æ¹éãããçšåºŠèŠããŠããã¿ã€ãã³ã°ã§ãç°¡åãªç»é¢ã1ã€ã ãäœãçŽããŠãã¡ã³ããŒã«æ¹éãå±éããããšã«ããŸããã æ¹éãæåãå£é ã§èª¬æããããããå®éã®ã³ãŒããèŠãŠã³ã¡ã³ãããŒã¹ã§èª¬æããæ¹ãçè§£ããããããã§ãã ããããæ°èšèšã«å¯ŸããæèŠãã¡ã³ããŒããè²°ãã1ã¶æçšåºŠã§æ¹éãåºãŸããŸããã å®éã®äœãçŽãã®æµããæ±ºãã å®éã«æ¬çªç°å¢ãåããŠããã倿°ã®ã¯ã©ã€ã¢ã³ããå©çšããŠããç¶æ³ã ã£ãã®ã§ã次ã®3ã€ã倧ååã«æ²ããŸããã çŸç¶ã®æ©èœãç¶æãã çŸç¶ã®ã¹ã¿ã€ã«ãç¶æãã å®å
šã«ç§»è¡ãã ããŒãžåäœã§äœãçŽããé²ããAPIã¯æ¢ã«å©çšããŠãããã®ã䜿ãåãããšã決å®ããŸããã äœãçŽãã®æµã åºæ¬çãªäœãçŽãã®æµãã¯æ¬¡ã®éãã«ãªããŸãã åãç»é¢ãå¥URLã§å®è£
æ¢åç»é¢ã®ã³ãŒãã«æãå ããã®ã¯åºæ¬NG äžæçã«åãç»é¢ãç°ãªãURLã§å
¬éããã æ¢åç»é¢ãšç°ãªãã³ãŒãã§å®è£
ããŠããã®ã§ãPullrequestãã¬ã³ã¬ã³mergeã§ãã æ°èšèšã§ã®å®è£
ãå®äºåŸãæ¬çªç°å¢ã§åäœç¢ºèªãè¡ã åäœç¢ºèªãOKã§ããã°æ§èšèšã®URLã®ã«ãŒãã£ã³ã°ãæ°èšèšã®ç»é¢ã«åãã æ°ç»é¢ã§äœãããäžå
·åãçºçããå Žåã¯ãã«ãŒãã£ã³ã°ãæ»ãããšã§ããã«åãæ»ããå¯èœ äžå®æéæ§åãèŠãŠãåé¡ãªããããªãæ§å®è£
ã®ã³ãŒããå
šåé€ ãã®æµãã«ãããæ§å®è£
ã®ç»é¢ã®ããšãæ°ã«ããããšãªãæ°èšèšã®Pullrequestãmergeããããšãå¯èœã«ãªããåé¡ãçºçããŠãåãæ»ãã容æã«ãªããŸãã æ¯ãè¿ã çµæãšããŠæ°èšèšã®ã³ãŒããžã®ç§»è¡å®äºåŸã®ããŒã å
šäœã®çç£æ§ããå幎æ¯ã§2.5åçšåºŠãŸã§äžãããŸããã äœãçŽãããªãã¡ã¯ã¿ãèšèšå·æ°ãææ¡ããåã«ããŸãæèŠå€ãšå®éã®æ°å€ãèŠæ¯ã¹ãã¡ã³ããŒãšèªèåãããããããšãéèŠã§ãã ãŸããçµå¶é£ãå§ããšããæ±ºè£æš©ããã人éãçŽåŸãããããã«æ°åã¯å¿
èŠäžå¯æ¬ ã§ãã æåäœéšãããã°æ¬¡ã®ææ¡ã¯æã£ã以äžã«ã¹ã ãŒãºã«é²ã¿ãŸãããäžçªæåã®æåäœéšãäœãããšã¯éåžžã«é£ãããã®ã§ãã å°ãããŠãããã®ã§æ°åãåºããå°ããªæåäœéšãå€ãè©°ãããšãéèŠã§ãã ãŸãšã ãããã§ããã§ããããïŒ ãªãã¡ã¯ã¿ãäœãçŽããèšèšå·æ°ãæ€èšããŠããæ¹ã®åèã«ãªãã°å¹žãã§ãã çŸåšããã¡ã€ã³ãã£ã§ã¯äžç·ã«åãã¡ã³ããŒãåéäžã§ãã èå³ãããæ¹ã¯ãã¡ãããâ herp.careers
ããã«ã¡ã¯ããã¡ã€ã³ãã£ã§ Findy Team+ ïŒä»¥äžTeam+ïŒãéçºããŠããENDïŒ @aiandrox ïŒã§ãã ç§ãå
¥ç€Ÿããã®ã2023幎2æã ã£ãã®ã§ãããæ°ãã€ããã1幎éãéããŠããŸããã ãã£ãããªã®ã§ãèªåããã®1幎ã§ãã£ãããšãæããããšãéããŠãã¡ã€ã³ãã£ã®éçºçµç¹ã«ã€ããŠç¥ã£ãŠããã ããããšæããŸãã 1幎ã§ãã£ãããš Team+ã®ç»é¢ããŒã¹ã§æ¯ãè¿ã å
¥ç€Ÿãã1幎1ã¶æïŒ2023/2/1~2024/2/29ïŒã®ã¢ãŠããããã«ã€ããŠã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã ãã«ãªã¯äœææ°ïŒ1229ä»¶ïŒ4.8ä»¶/æ¥ïŒ ã³ããããããªãŒãã³ãŸã§ã®å¹³åæéïŒ4.2h ãªãŒãã³ããããŒãžãŸã§ã®å¹³åæéïŒ10.3h ã¢ãŠããããéèªäœã¯ããšã³ãžãã¢ã®äžã§ã¯å€ãã®éšé¡ã ãšæããŸãããã ãç»åäžéšã®ã¢ã¯ãã£ããã£ã®æšç§»ãèŠããšãããéãããšãŠãã°ãã€ãããããŸãã éçºã®ä»ã«ãäžèšæ¥åãæ
åœããŠããã®ãšãå€éšé£æºãµãŒãã¹ã®API調æ»ãQAãªã©ã®ãã«ãªã¯ãšã¹ãã䌎ããªãã¿ã¹ã¯ãããããã§ãã åãåããå¯Ÿå¿ ã¢ã©ãŒãèª¿æ» éå®³å¯Ÿå¿ ãªãŒãã¿ã€ã ã«é¢ããŠã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã å€ãå€ã®åœ±é¿ãåããŠããŸããããã以å€ã®ç®æã§ã¯å
¥ç€ŸåœåããçŸåšã®æ¹ããªãŒãã¿ã€ã ãæžå°ããŠããŸããçŸåšã¯ãéçºã«éäžããŠãããšãã®ãªãŒãã¿ã€ã ã¯ããçšåºŠå®å®ããããã«ãªããŸããã æ¥é ããéçºã®ããã©ãŒãã³ã¹ãäžããããã«æèããã®ã¯ä»¥äžã®ç¹ã§ãã äºåã«èšèšã¬ãã¥ãŒãã¿ã¹ã¯ãèŠãŠãããããã«ãã descriptionã§ã¿ã¹ã¯ã®æµããæžããŠãã ã¬ãã¥ãŒåŸã®ãªãŒãã¿ã€ã ãççž®ãã äºåã«èšèšã¬ãã¥ãŒãã¿ã¹ã¯ãèŠãŠãããããã«ãã èšèšã«é¢ããŠã¯ãã€ã·ã¥ãŒå
ã§ç¢ºèªããããšãããã°ãäºåã«Draftãã«ãªã¯ãäœæããŠã¬ãã¥ãŒããŠããã£ããããŸãã ããã«ãã£ãŠãææ»ããæžããããšãã§ããŸããããŸããäºåã«èŠãŠãããããšã§ã¬ãã¥ã¢ãŒã®è² è·ãäžããããšãã§ããŸããã descriptionã§ã¿ã¹ã¯ã®æµããæžããŠãã ãã«ãªã¯ã现ååããé¢ä¿äžãdescriptionãæžãæéãå¢ããŸããã¬ãã¥ã¢ãŒã®è² è·ãšèªåã®æéã®éãåã£ãçµæãèªåã¯ãããã®ãã©ãŒãããã䜿ã£ãŠããŸãã ã¿ã¹ã¯1 â ã¿ã¹ã¯2 âã€ãã³ã³ â ã¿ã¹ã¯3 ã¬ãã¥ãŒåŸã®ãªãŒãã¿ã€ã ãççž®ãã åºæ¬çã«ã¯ããã¡ã€ã³ãã£ã®ãšã³ãžãã¢ã¯ã¬ãã¥ãŒäŸé Œããã¬ãã¥ãŒãŸã§ãçéã§ããããããå
¥ç€Ÿåœåã¯èªåãã¬ãã¥ãŒãåããŠããåã¬ãã¥ãŒäŸé ŒããããŸã§ã«æéãããã£ãŠããŸããããã®ãããã¬ãã¥ãŒããããšãã«å¥ã®ãã«ãªã¯ã§äœæ¥ãããŠãããšããŠããã¬ãã¥ãŒãžã®å¯Ÿå¿ãåªå
ããããã«ããŸããã ãŸãããã«ãªã¯ãããã«ããŒãžããå¿
èŠããªãã£ããšããŠããã¬ãã¥ã¢ãŒã®ã«ã¬ã³ããŒã®äºå®ãèŠãŠã¬ãã¥ãŒäŸé Œãåå¥ã§ã¡ã³ã·ã§ã³ããããã«ããŸããã ãã¡ã€ã³ãã£ã§ã¯çéã¬ãã¥ãŒisæ£çŸ©ã®äŸ¡å€èгãããã®ã§ãå§ã¯ããŸããªãâŠâŠã¯ãã ãããžã§ã¯ãããŒã¹ã§æ¯ãè¿ã ãã®1幎ã§ãäž»ã«ä»¥äžã®ãããžã§ã¯ãã«é¢ãããŸãããã©ããTeam+ã®æ ¹å¹¹ã®æ©èœã§ãã¢ãŒããã¯ãã£ã®çè§£ãæ·±ãŸããŸããããŸããåŸåã¯ãããžã§ã¯ãã®ãªãŒãã«ææŠã§ããŸããã ãã«ãªã¯ã®ã¬ãã¥ãŒããžãã¯ã®å€æŽ å€èšèªåå¯Ÿå¿ ã®ããã¯ãšã³ãå
šè¬ãšããã³ããšã³ãå°ã GitHub飿ºãOAuth AppããGitHub Appã«ç§»è¡ Bitbucket Cloud飿º ã®ããã¯ãšã³ã æ¯ãè¿ã£ãŠã¿ããšããã®1幎ã¯é£æºåŠçãã¡ã€ã³ã§éçºããŠããããã§ãã ãããžã§ã¯ãã®äžã§ããµãŒãã¹ã«å¿ããŠã©ãããã¢ãŒããã¯ãã£ã«ãããã ãšããæ¢åã®èšèšã ãšç¡çãããç®æãªã©ãæ¹ä¿®ãã€ã€é²ããããŠããŸããèšèšãã©ããããèããã®ã¯èªåã奜ããªã®ã§ããããã£ãããšãä»»ããŠããã ãã壿ã¡ãçžè«ãããŠããããã®ããšãŠãããçµéšã«ãªããŸããããããŠããã§ã«è¥å¹²èšèšã®ã€ãã¿ãæããŠããŸãããããæ¬¡ã«æŽ»ããã®ã âŠâŠã ãŸãããããžã§ã¯ãã®é²ãæ¹ã«ã€ããŠãåŠã³ããããŸãããTeam+ã§ã¯ã倧ããã®éçºã¯ãPdMãäŒç»ãè¡ãâãšã³ãžãã¢ãšããåããã€ã€ä»æ§ããŸãšããâéçºâQAâãªãªãŒã¹ãšããæµãã«ãªã£ãŠããŸãã ãã®ãããèª¿æ»æ®µéããPdMãšèªèã®ããåãããè¡ãã€ã€ãéçºçæåŸã«åºãŠããæžå¿µç¹ãªã©ã¯é©å®PdMã«å
±æããããã«ããŸããããŸããQAã§ãéçºè
QAãšQAããŒã ã«ããQAãã©ãæ
åœããŠããããªã©ã調æŽããããã«ããŸãããçµæãšããŠãããããã®ãããžã§ã¯ãã«åçç¹ã¯ãããã®ã®ãéœåºŠãªã«ããªãŒã§ãããããªéçºäœå¶ã«ã¯ã§ããŸããã ã€ãã³ãåå ç¹ã«èšæ¶ã«æ®ã£ãŠããã®ã¯ä»¥äžã®ã€ãã³ãã§ããä»ãŸã§ã¯å°èŠæš¡ã®ãªãã©ã€ã³ã€ãã³ãã«å
¥ã£ãããšããããã®ã®ãå€§èŠæš¡ãªã«ã³ãã¡ã¬ã³ã¹ã«ã¯åå ããããšããªãã£ãã§ãã ãã¡ã€ã³ãã£ã§ã¯ããšã³ãžãã¢ç³»ã€ãã³ããžã®ã¹ãã³ãµãŒãç©æ¥µçã«èªç€Ÿã€ãã³ããéå¬ããŠããã®ã§ãéå¶ãæäŒãã€ã€åå ããæ©äŒãLTãªã©ç»å£ãããŠããã ãæ©äŒãåŸãããã§ãã RubyKaigi 2023 RubyKaigiã¯ãã£ãšæ°ã«ãªã£ãŠããã®ã§ãããæçµŠãåãã®ã¯ããŒãã«ãé«ãã2023幎ã«åããŠåå ããŸãããæã£ãŠãããããæè¡çãªããŒãã«ã¯äœããããããªããšãããã®éãæ¥œãããŸããããŸããã«ã³ãã¡ã¬ã³ã¹äžã®ã€ãã³ããå€ãããããã亀æµãã§ããã®ã貎éãªçµéšãšãªããŸããã2024ãè¡ãã®ã§ãåºäŒã£ãæ¹ã¯ãããããé¡ãããŸãã ãŸãã After RubyKaigi ã§åããŠã®LTãããŸãããååå ã®ããã·ã§ã³ã§ãããŸããããæ¬¡åã¯æè¡çãªããšã詊ããŠã¿ããã¿ãããªã®ãããããã§ãã éçºçç£æ§ã«ã³ãã¡ã¬ã³ã¹ 2023幎ããã¡ã€ã³ãã£ã§ã¯2åã®éçºçç£æ§ã«ã³ãã¡ã¬ã³ã¹ãäž»å¬ããŸãããç§ã¯Team+ãéçºããŠããã®ãããããã¡ã€ã³çè§£ãæ·±ããããã«åå ããŸãããç¹ã«åœ¹å²ããªããäžåå è
ãšããŠæ¥œããŸããŠããã ããŸããã dev-productivity-con.findy-code.io ãã¡ãã®ã«ã³ãã¡ã¬ã³ã¹ã¯ãéçºçç£æ§ã«é¢ããçè«çãªã»ãã·ã§ã³ãå€ãã£ãã§ããæžç±ãªã©ã§ãªããšãªãé ã«ããããšãã€ãªãã£ãããä»ãŸã§å人ã®ãšã³ãžãã¢ã«èãããããšã«ã€ããŠã®è»¢æçãªè©±ãããããããããèãæ¹ãããã®ãããšæ°ä»ããåŸããããŸããã ç¹ã«ãSLIãæ±ºããããšã§èš±å®¹å¯èœãªäžå
·åã®éïŒãšã©ãŒããžã§ããïŒã決ãŸãã®ã§ãããã¯éåžžã®éçšã®é害ããŠã³ã¿ã€ã ãšããŠäœ¿ã£ãŠãããããææŠçãªåãçµã¿ã«ãã£ãŠã®ããŠã³ã¿ã€ã ãšããŠäœ¿ã£ãŠããããšããèãæ¹ãç®ããé±ã§ããã findy.connpass.com ãã¡ãã®ã€ãã³ãã§ã¯ãå
·äœçãªåãçµã¿ãäžå¿ã«èããŸãããå
šç€Ÿçã«æåãæ ¹ä»ãããããã«ã©ããããããšãã£ãåèæŽ»åã®åãçµã¿ãå°è±¡ã«æ®ã£ãŠããŸãã çµå¶å±€ã»ããžãã¹éšéãžã®çè§£ä¿é²ãä¿ããã¹ããŒã¯ãã«ããŒãå·»ã蟌ã¿ã€ã€ææãåºããŠäŸ¡å€ã瀺ãããšãç©ã¿éããŠããŸãããåãçµã¿ãæ³¥èããã£ãŠãããããªãäžã§ãTeam+ã¯ææã»äŸ¡å€ã瀺ãããã®ããŒã«ãšããŠäœ¿ãããŠããããšãæããŸããã ãã®ä»ãªãã©ã€ã³ã€ãã³ã ãã¡ã€ã³ãã£äž»å¬ã®ã€ãã³ããäžå¿ã«ãããŸããŸãªãªãã©ã€ã³ã€ãã³ãã«åå ããŸãããããŒã ãªã®ã§å®å¿æããããæ°è»œã«è¡ããããã£ãã§ãã ãªãã©ã€ã³ã€ãã³ãã®ãããšããã¯ããªã³ã©ã€ã³ã§ã¯è©±ãã¥ããå
容ãèããããšãšåŸåã®äº€æµã ãšæã£ãŠããŸããã€ãã³ããéããŠãããããªãšã³ãžãã¢ã®æ¹ãšè©±ãããšãã§ããŸããããã®äžã§ã¯ãTeam+ã䜿ã£ãŠãããšã³ãžãã¢ã®æ¹ããããçã®å£°ãèããã®ãããã£ãã§ããæ©èœã®èŠæã ã£ãããTeam+ãžã®æè¬ãªã©ãããã ããŠãæ¥é ã®éçºã®ã¢ãããŒã·ã§ã³ã«ãªããŸããã 1幎ã§å€ãã£ãããš çµç¹ã®æ¡å€§ å
¥ç€Ÿæã¯ç€Ÿå¡æ°ã120人ãããã§ããããçŸåšã¯200人ãè¶
ããŸããããšã³ãžãã¢ãå¢ããŠãä»å¹ŽããTeam+ã®ãšã³ãžãã¢ã¯2ããŒã äœå¶ã«ãªããŸãããããŒã ç·šæãšããŠã¯ãå€éšãµãŒãã¹é£æºã«æ³šåããããŒã ãšãã®ä»ã®æ©èœãéçºããããŒã ã§ãã qiita.com ãŸããBizãµã€ãã®äººæ°ãå¢ããŠããã«åŸã£ãŠäºæ¥å
šäœã®å¢ããæããŠããŸããã¡ã³ããŒãã©ãã©ãå
¥ç€Ÿããçéãªã³ããŒãã£ã³ã°ã§ããã«ç«ã¡äžãã£ãŠããŠæ¬åœã«å°æ¬ã§ãã ãããŠãèªåãäœã£ãŠãããããã¯ãã®äŸ¡å€ãããããã®äººã«ç¥ã£ãŠããããŠããã®ãçŽç²ã«å¬ããã§ãã çµç¹ã®æ¡å€§ã«äŒŽã£ãŠèª²é¡ãçãŸãã åçŽã«äººæ°ãå¢ããéçºããŒã ãšããŠã§ããããšãå¢ããŸããããã®äžã§ãããŒã ã®æ§æãããããžã§ã¯ãã®é²ãæ¹ã«ã€ããŠã¯ææ¢ãã®ç¶æ
ã§ãã çŸåšãããŒã ãªãŒããŒãäžå¿ã«ãããããªããæ¹ã詊ãã€ã€ãããããªããæ¹ãæ¢ã£ãŠããŸããæ¹åãµã€ã¯ã«ãåããŠãããªããããã®æã
ã«é©ããããŒã ã»éçºäœå¶ã§é²ããŠãããããã«ãããã§ãããã®ããã«ããèªåã®èŠç¹ãããããããã¢ã€ãã¢ãåºããŠããããã§ãã ãã®ä»ã«ã¯ã以äžã®ãããªèª²é¡ãåºãŠããŸãããããã¯çŸåšæéãåã£ãŠå¯Ÿå¿ããŠãããšããã§ãã Bizãµã€ãã®å¢å ã«äŒŽãããšã³ãžãã¢ãžã®ãããã¯ãã«å¯Ÿããæè¡çãªè³ªåãå¢å ããã¥ã¡ã³ãã®äžè¶³ / æŽæ°ãããŠãªã 1幎ã§å€ãããªãããš æ ¹æ¬çãªç€Ÿé¢šã¯å€ãã£ãŠããªãã§ãã ååãã»èª å®ã»ããŒã ã¯ãŒã¯ã»ã¹ããŒãã»No.1 ã®ããªã¥ãŒéããèªåèªèº«ããããããšèšã£ãããšã¯ã©ãã©ããã£ã¬ã³ãžãããŠããããŠããŸãã ä»ã®ã¡ã³ããŒã«ãµããŒãããŠããã ããªãããGitHub App, Bitbucket飿ºããªãŒãã§ãã èªåäž»å°ã§é£æºåšãã®èšèšã®å·æ°ãGitHub Actionsã«ããOpsæ¹åã«ãã£ã¬ã³ãžã§ãã ãISUCONã«åºãŠã¿ããããš1on1ã§èšã£ãŠã¿ããšããã瀟å
ã®æå¿ããŒã ã§åºå Žã§ããïŒ ã¬ãèšäº ïŒ ä»åŸã®1幎ã«åããŠ åºæ¬çã«ã¯ãçééçºããªãããããã¯ããæé·ãããã®ãäžçªã®ç®æšã§ãããã®ããã«ããèªåèªèº«ãæé·ããããšæã£ãŠããŸãã èªåãã§ããå¹
ãåºããŠãããã ããã¯æè¡ã«ã€ããŠãããã ããæè¡ä»¥å€ã«ã€ããŠãã§ãããããããããšã«æ°ããããšã«ææŠããããšãæè¿ãããŠããçµç¹ãªã®ã§ãããŸããŸãªææŠãããŠããããã§ããæè¡çã«ã¯ãèšèšåšãã®åŒãåºããå¢ããããšãã€ã³ãã©ãããã³ããšã³ãã®ã¿ã¹ã¯ããã£ãšããªããããã«ãªãã®ãç®æšã«ããŠããŸãã çµç¹ã®æ¡å€§ã«äŒŽã£ãŠçãŸããŠãã課é¡ã®è§£æ¶ããããã éçºçç£æ§ãé«ãããããã¯ããäœã£ãŠããããããããã¡ã®ããŒã ã¯çç£æ§ãé«ããïŒãšèžã匵ã£ãŠèšããç¶æ
ã§ãããã§ãã ä»ã®ã¡ã³ããŒã¯ã¡ã€ã³ã®ãããžã§ã¯ããé²ãã€ã€èª²é¡è§£æ¶ã®åãçµã¿ãããŠããã®ã§ãèªåããããªé¢šã«åããããã«ãªãã®ãç®æšã§ããçŸç¶ã¯ããããžã§ã¯ãããããšãã£ã¡ã§ãã£ã±ãã«ãªã£ãŠããã®ã§ãããªãã¬ãã«ã¢ãããç®æããŸãã çºä¿¡ãé 匵ããã èªåããã£ãããšããã®ãšãã«èããããšãæ®ããŠããããæ°æã¡ããããŸããçµæãšããŠããã¡ã€ã³ãã£ã®ããšãç¥ã£ãŠãããããšã«ãã€ãªããã®ã§ãäžæ¹Winã«ãããã§ãã ãã®èšäºãããã§ãããããã¯ããã°ã掻çšããŠãããããªããšãçºä¿¡ããŠãããããããªãšæã£ãŠããŸãããªã®ã§ããããªããšãæ°ã«ãªããšãã£ããã®ãããã°ãæèŠããã ãããšãããããã§ãã æåŸã« çŸåšããã¡ã€ã³ãã£ã§ã¯äžç·ã«åãã¡ã³ããŒãåéäžã§ãïŒ èå³ãæã£ãæ¹ã¯ããã²ã«ãžã¥ã¢ã«é¢è«ã§è©±ãèãã«æ¥ãŠãã ããïŒ æ¡çšæ
å ±ã¯ãã¡ãâ herp.careers
Findyã§EMãããŠããæ æ²¢ïŒ @nipe0324a ïŒã§ãã ä»åã¯ãFindyã®ãšããRailsã®CIã®ãã¹ãå®è¡æéã10åãã5åã«é«éåãã話ãã玹ä»ããŸãã ãCIã®ãã¹ãå®è¡æéãé
ã...ã ãCIã®å®è¡æéãçãããã!!ã ãšæããŠããæ¹ã¯ãã²ã芧ãã ãããŸãã Findyã§ã¯2024幎2æçŸåšã1人ããã1æ¥4ãã«ãªã¯ãå¹³åã§äœã£ãŠããŸããéçè§£æãèªåãã¹ããªã©ã峿ã«è¡ãCIç°å¢ããªããšã¹ããŒãæã®ããéçºãã§ããªããªããããCIãé«éã§åãã¿ã¹ã¯ãå®äºãããå¿
èŠããããŸããæ©èœãå¢ãããã¹ãã±ãŒã¹ãæ¡å
ããããšã§CIã®é«éåãæ±ããããããã«ãªããŸããã ãŸããå人çã«ã¯ãCIã¯é
ããŠã10åãçæ³ã¯5å以å
ã§çµããã®ã1ã€ã®ç®å®ã«ããŠããŸãããããããã®ã¹ããŒãæã§CIãå®äºãããšãããã«ãªã¯äœã£ãŠã¬ãã¥ãŒäŸé Œãããããã¬ãã¥ãŒã³ã¡ã³ãããã£ãŠå¯Ÿå¿ããããšãã£ãããšããµã¯ãµã¯ã§ããŸãïŒ 1. CIãã¹ãå®è¡æéã®é«éåã®çµæ 2. ãã¹ãå®è¡æéã®é«éåã®åææ¡ä»¶ 3. ä»åã®ãã¹ãå®è¡æéã®é«éåã§å®æœããããš 3.1. äžèŠãªã«ãã¬ããžã¬ããŒãã®äœæããªãã 3.2. ãã¹ãå®è¡ã®äžŠå床ãé«ãã 3.3. ãã¹ãå®è¡æéã®åããæžãã 4. æåŸã«GitHub Actionsã®ã³ã¹ãã«ã€ã㊠5. CIãã¹ãå®è¡æéã®é«éåã®ãŸãšã 1. CIãã¹ãå®è¡æéã®é«éåã®çµæ æåã«ãã¹ãå®è¡æéã®é«éåã®çµæã玹ä»ããŸãã åŒç€Ÿã§ã¯ããœãŒã¹ã³ãŒããGitHubã§ç®¡çããŠããã®ã§ãCIããŒã«ããããªãGitHub Actionsã䜿ã£ãŠããŸãã GitHub Actionsã®ã䞊ååã®ä¿é²ããããã¹ãå®è¡ã®åãããæžããããšã§ãCIã®ãã¹ãå®è¡æéãçŽ2åã®1ã«ããŸããã 察å¿åïŒçŽ10å 察å¿åŸïŒçŽ5å ãŸããè²»çšå¯Ÿå¹æãããã£ããšèããŠããŸãã æéã®GitHub Actionsã®ã³ã¹ãã2äžåãããå¢å 1ã¶æãããã®CIåŸ
ã¡æéãçŽ7æ¥åæžã 2. ãã¹ãå®è¡æéã®é«éåã®åææ¡ä»¶ ããããæ¢åã§ããCIäžã®ãã¹ãã¯ãã5å°ã®ãã·ã³ããã€ã1ãã·ã³ããã4ã³ã¢ããš20䞊åã§ãã¹ããå®è¡ããŠããŸããã ãã¹ãã20䞊åã§å®è¡ããããã«ãGitHub Actionsã®ã¯ãŒã¯ãããŒã§æ¬¡ã®ãããªãã¯ããã¯ã䜿ã£ãŠããŸããã 5å°ã®è€æ°ãã·ã³ã§ãã¹ãå®è¡ GitHub Actionsã®matrixã䜿ã5å°ã®ãã·ã³ãåãã 察象ã®ãã¹ããã¡ã€ã«ã5å°ã®ãã·ã³ã«åæ£ãããç°¡æãªshellã¹ã¯ãªããã䜿ã 4ã³ã¢ã§ãã¹ãå®è¡ 4ã³ã¢ã®Ubuntu Runnerãå©çšããïŒåèïŒ ãã倧ããªã©ã³ããŒã®æŠèŠ ïŒ parallel_tests ã䜿ã£ãŠCPUã³ã¢æ°ã®äžŠå床ã§ãã¹ãå®è¡ã§ããããã«ãã ãã®ãããªå¯Ÿå¿ãããŠããããžã§ã¯ãèŠæš¡ã®æ¡å€§ãšãšãã«CIã®ãã¹ãå®è¡æéãé
ããªã£ãŠããã®ã§ããããªãæ¹åã宿œããŸããã 3. ä»åã®ãã¹ãå®è¡æéã®é«éåã§å®æœããããš ä»åã®ãã¹ãå®è¡æéã®é«éåã«ããããå
·äœçã«ã¯æ¬¡ã®3ã€ã宿œããŸããã äžèŠãªã«ãã¬ããžã¬ããŒãã®äœæããªãã ãã¹ãå®è¡ã®äžŠå床ãé«ãã ãã¹ãå®è¡æéã®åããæžãã ãããã广ããã£ãã®ã§ãããããã¹ãå®è¡æéã®åããæžããããä»ã®å¯Ÿå¿ãšã®çžä¹å¹æããã¿ã ãããã¹ãå®è¡æéã倧ããæžããããšãã§ããŸããã 3.1. äžèŠãªã«ãã¬ããžã¬ããŒãã®äœæããªãã 察å¿åã®ãã¹ãã®ã¯ãŒã¯ãããŒãèŠããšããã¹ãå®è¡åŸã«ãPost coverage reportããšãããžã§ãã§ã«ãã¬ããžã¬ããŒãããã«ãªã¯ã«ã³ã¡ã³ãããŠããŸããã ããã¯ãèªåãã¹ããæ¡å
ãããšãã«äœ¿ãããŠããã®ã§ãããæ¢ã«ãã¹ãã«ãã¬ããžã¯90%以äžã«ãªã£ãŠããããã»ãŒå¿
èŠãªããããªãªãŒã¹ãã«ãªã¯ä»¥å€ã§ã¯å®è¡ããªãããã«ããŸããã ããã§ããã¹ãã®å®è¡æéã30ç§ãããæ©ããªããŸããã 3.2. ãã¹ãå®è¡ã®äžŠå床ãé«ãã æ¬¡ã«ããã·ã³å°æ°ã5å°ãã10å°ã«å€æŽããããšã§ã䞊å床ã20ãã40ãš2åã«é«ããŸããã ãã·ã³å°æ°ã®å¢å ã¯æ¢åã§ä»çµã¿ãæã£ãŠããã®ã§ã倿Žã¯æ¬¡ã®ããã«å®æœã§ããŸããã # .github/workflows/test.yml strategy: fail-fast: false matrix: - ci_node_total: [5] - ci_node_index: [0, 1, 2, 3, 4] + ci_node_total: [10] + ci_node_index: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] steps: # çç¥ - name: Run tests env: CI_NODE_TOTAL: ${{ matrix.ci_node_total }} CI_NODE_INDEX: ${{ matrix.ci_node_index }} run: | TEST_FILES="$(find ./spec -type f -name "*_spec.rb" | xargs ./scripts/ci/rspec_split_files.sh)" bundle exec parallel_rspec -- --format progress --color -- $TEST_FILES ããã§ãã¹ãå®è¡æéã2-3åã»ã©æ©ããªãã6-7åãããã«ãªããŸããã 3.3. ãã¹ãå®è¡æéã®åããæžãã æåŸã«ããã¹ãå®è¡æéã®åããæžããåãçµã¿ãããŸããã ãã¹ãã®äžŠå床ã2åã«ããã®ã«ãããŸãã¡ãã¹ãå®è¡æéãæ©ããªããŸããã§ããããã®ãããã©ããããã«ããã¯ã«ãªã£ãŠãããã調ã¹ãŠã¿ããšããã¹ãå®è¡æéã®åããããã«ããã¯ã«ãªã£ãŠãããã§ããã 以äžã®äŸã§ããšãã Test (10, 8) ãã2m25sãªã®ã«æ¯ã¹ãŠãã Test (10,3) ãã5m30sãšãªã£ãŠããããã¹ãå®è¡æéã®å·®ãæå€§3åã»ã©ãããŸãã ããã«ã詳现ãã¿ãŠãããšãããã·ã³ããšã®ãã¹ãå®è¡æéã®åãããšããã·ã³å
ã®ã³ã¢ããšã®ãã¹ãå®è¡æéã®åããã®äž¡æ¹ãçºçããŠããŸããããã®ãããæ¬¡ã®å¯Ÿå¿ãããŠãã¹ãå®è¡æéã®åããæžãããŸããã ãã·ã³ããšã®ãã¹ãå®è¡æéã®åãã®å¯Ÿå¿ ãã·ã³ãžã®ãã¹ããã¡ã€ã«ã®æ¯ãåãããã¡ã€ã«åãããã¹ããã¡ã€ã«ã®ãµã€ãºé ã«å€æŽ ããã¡ã€ã«ãµã€ãº â ãã¹ãå®è¡æéããšèããŠãæéãããããã¹ããã¡ã€ã«ãåããªãããã«å€æŽ ã³ã¢ããšã®ãã¹ãå®è¡æéã®åãã®å¯Ÿå¿ ãã·ã³å
ã§ã³ã¢ããšã«ãã¹ããã¡ã€ã«ãå²ãåœãŠãããŠå®è¡ãããŠããã®ã§ãæéãããããã¹ããã¡ã€ã«ãå²ãåœãŠãããŠããã³ã¢ã®å®è¡æéãããã£ãŠãã ãã¡ã€ã«åäœãããã£ã³ã¯åäœã§ãã¹ããå®è¡ããããã«ã parallel_tests ã parallel_split_test ã«çœ®ãæãïŒâ»parallel_testsãšäœè
åãïŒ # .github/workflows/test.yml - name: Run tests env: CI_NODE_TOTAL: ${{ matrix.ci_node_total }} CI_NODE_INDEX: ${{ matrix.ci_node_index }} run: | - TEST_FILES="$(find ./spec -type f -name "*_spec.rb" | xargs ./scripts/ci/rspec_split_files.sh)" + TEST_FILES="$(find ./spec -type f -name "*_spec.rb" -exec ls -l {} + | sort -n -k 5 | awk '{print $9}' | xargs ./scripts/ci/rspec_split_files.sh)" echo $TEST_FILES - bundle exec parallel_rspec -- --format progress --color -- $TEST_FILES + bundle exec parallel_split_test $TEST_FILES --format progress --color ããã§ãã·ã³ãšã³ã¢ã®ããããã§ãã¹ãå®è¡æéã®åããæžå°ãã5å以å
ã«ãã¹ããå®äºããããã«ãªããŸããã 4. æåŸã«GitHub Actionsã®ã³ã¹ãã«ã€ã㊠䞊å床ã2åã«å¢ãããŸããããã³ã¹ãã¯ãããŸã§é«ããªã£ãŠããŸããã GitHub Actionsã®æéã¯ãOS x vCPUæ° x åãããã®æéãã§èª²éãããŸãïŒåèïŒ GitHub Actionsã®èª²éã«ã€ã㊠ïŒãä»åã¯ã䞊å床ã2åã«å¢ãããŸããããBillable timeã¯30åååãã40åããããš1.2ã1.3åããããªã®ã§ãã³ã¹ãã1.2ã1.3åãããã®å¢å ã«ãªã£ãŠããŸãã 1ã¶æåäœã ãšãã ãã£ãã2äžåãããã®ã³ã¹ãå¢å (â»1)ã«ãªããŸãããCIåŸ
ã¡æéã7æ¥åãããåæž(â»2) ãã§ããŸãããå¿
ãããCIåŸ
ã¡æéãã ãã§ã¯ãªãã§ããããšã³ãžãã¢ã®äººä»¶è²»ãèãããšè²»çšå¯Ÿå¹æã¯é«ãã®ã§ã¯ãšèããŠããŸãã â»1. 4coreã®åãããã®æé $0.016 x (倿ŽåŸã®Billable time 40å - 倿Žåã®Billable time30å) x æéCIãã¹ãå®è¡åæ° 700å x çºæ¿150å â»2. åŸ
ã¡æéã®åæžæé 5å x æéCIãã¹ãå®è¡åæ° 700å ÷ (60å x å¶æ¥æé 8æé) 5. CIãã¹ãå®è¡æéã®é«éåã®ãŸãšã æåŸã«ãŸãšãã§ãã ä»åã¯ãFindyã®Railsãããžã§ã¯ãã§ãCIã®ãã¹ãå®è¡æéã10åãã5åãš2åã®1ã«é«éåãã話ãã玹ä»ããŸããã å
·äœçã«ã¯ã次ã®ãã¯ããã¯ã§é«éåãå®çŸããŸããã äžèŠãªã«ãã¬ããžã¬ããŒãã®äœæããªãã ãã¹ãå®è¡ã®äžŠå床ãé«ãã ãã¹ãå®è¡æéã®åããæžãã ãŸããè²»çšå¯Ÿå¹æãããã£ããšèããŠããŸãã æéã®GitHub Actionsã®ã³ã¹ãã2äžåãããå¢å 1ã¶æãããCIåŸ
ã¡æéãçŽ7æ¥åæžã ãªã«ããåèã«ãªãå
容ãããã°å¬ããã§ãã æåŸã«ãåŒç€Ÿã®ãšã³ãžãã¢ã次ã®ãããªã¹ã©ã€ããå
¬éããŠããã®ã§èå³ãããã°ã芧ãã ãããŸãã speakerdeck.com ãŸããFindyã¯ç©æ¥µçã«ãšã³ãžãã¢ãæ¡çšããŠããŸããCI/CDãå§ããFour Keysãéçºçç£æ§ãæè¡ãã¬ã³ãã転è·åžå Žãªã©èå³ã®ããæ¹ã¯ããæ°è»œã«ã«ãžã¥ã¢ã«é¢è«ãåããŠã¿ãŠãã ãã :) Findyã®æ¡çšæ
å ±ã¯ãã¡ãâ herp.careers
ããã«ã¡ã¯ïŒFindy CTOã®äœè€( @ma3tk )ã§ãã æ¬æ¥ããFindyã§ããã¯ããã°ãå§ããããšã«ããŸãããFindyã¯ãææŠãããšã³ãžãã¢ã®ãã©ãããã©ãŒã ãã€ããããšããããžã§ã³ãæ²ããŠããŸãããæšå¹Žæ§ã
ãªæ¹ãšã話ãããé¢è«ãããŠããã ãäžã§ãFindyã®éçºçµç¹ã®è¯ããäŒããããŠããªããšãã課é¡ã«æ°ã¥ããŸããã Findyã®éçºçµç¹ã¯ãã«ãžã¥ã¢ã«é¢è«ãªã©ãéããŠç¥ã£ãŠããã ããšããšãŠãé¢çœãããšèšã£ãŠããã ããã®ã§ããããã®é¢çœããäºåã«ãäŒãã§ããŠããªãããšããããŸãããä»åã®ããã¯ããã°ã¹ã¿ãŒãããã®èª²é¡ã解決ããããã®äžæ©ã«ãªãã°ãšæãéå§ããŸããã ååã¯ã倧äºã«ããŠããããšãšéçºããªã·ãŒã®èгç¹ããFindyã®éçºçµç¹ã®ç޹ä»ãããããšæããŸãã Findyã®éçºçµç¹ã§äžçªå€§äºã«ããŠããããšã¯5ã€ã®ããªã¥ãŒ Findyã®éçºçµç¹ã¯ã次ã®5ã€ã®ããªã¥ãŒã倧äºã«ããŠããŸãã Findyã®5ã€ã®ããªã¥ãŒã¯ç€Ÿå
ã«ããã¡ã³ããŒãå¿
ãæèãããã®ã«ãªã£ãŠããŸãã äŸãã°ã次ã®ãããªåœ¢ã§æèããŠããŸãã ååãâŠã¯ãœã³ãŒããšåŒã°ãã«ã䌞ã³ããããšåŒã¶ãäºçްãªèšèé£ãã§ãååããªèšèãéžã¶ããšã§çµç¹å
šäœã®é°å²æ°ãè¯ããã èª å®âŠé¡§å®¢ã«å¯ŸããŠã®åãåãæ¹ã¯ãã¡ããã瀟å
ã®ã¡ã³ããŒéã§ã®ã³ãã¥ãã±ãŒã·ã§ã³ããµãŒãã¹ã«å¯ŸããŠãèª å®ã§ããç¶ãã ããŒã ã¯ãŒã¯âŠåäººã®ææä»¥äžã«ããŒã ã§è¯ãåãçµã¿ãè¡ããããŒã ãè·çš®ã®å£æ ¹ãè¶
ããŠååãåãããšã倧äºã«ãã ã¹ããŒãâŠã¹ã¿ãŒãã¢ããã ããããã¹ããŒãæãæã£ãŠåãçµããæè¡ã«ã¹ããŒãã¯å¿
èŠã§ãããæè¡ã®é²åã«åžžã«è¿œåŸãç¶ãã No.1âŠNo.2ãç®æããŠãNo.1ã«ã¯ãªããªããåžžã«No.1ãç®æãããšã§ãèªåãã¡ã®æé·ãä¿é²ãã ãã¡ãããã以å€ã«ãæ§ã
ãªèгç¹ã§5ã€ã®ããªã¥ãŒãäœçŸããããšã倧äºã§ãã éçºããªã·ãŒ ããªã¥ãŒãäœçŸããã ãã§ã¯ãªããåãFindyã®éçºçµç¹ãšããŠã®æè¡ã«å¯Ÿããèãæ¹ããããŸãã æè¡ã¯ã¢ãã³ãåœããå çéé¡§å®¢äŸ¡å€æäŸ ãšã³ãžãã¢ãã¿ãŒã²ãããŠãŒã¶ãŒ ä»ãŸã§ãã®3ã€ã倧äºã«ããªããéçºãç¶ããŠããŸããã â»ä»åŸçµç¹ã®ç¶æ³ãªã©ã«åãããŠå€ããå¯èœæ§ããããŸãã 1. æè¡ã¯ã¢ãã³ãåœããå æè¿ã§ã¯å€ãã®ã¹ã¿ãŒãã¢ãããã¢ãã³ãªæè¡ãç°å¢ãæ§ç¯ããŠããããšãçããã¯ãªãã§ãããFindyããªãã¹ãææ°ã®æè¡ã«è¿œåŸããªããéçºãé²ããŠããŸããGitHub CopilotãTypeScriptãNxãRuby on RailsãGraphQLãTerraformãªã©æ§ã
ãªæè¡ã掻çšããŠããŸã(å·çæçŸåš)ã äŸãã°åçš®ã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã«é¢ããŠã¯ã»ãŒãã¹ãŠã®ãããã¯ãã§ææ°ããŒãžã§ã³ãå©çšããŠããŸããäžéšææ°ããŒãžã§ã³ã«è¿œåŸã§ããªããã®ã¯ãã©ã€ãã©ãªã®ææ°ããŒãžã§ã³å¯Ÿå¿ãã§ããŠããªããªã©ã®äŸåé¢ä¿ã§ããã«ã¢ããããŒããé£ããããã§ãã ãã ãå€ãã®å ŽådependabotãæŽ»çšãææ°ã®ããŒãžã§ã³ã«ã¢ããããŒããããå®çŸã§ããç¶æ
ã«ããŠããŸããããã¯ããŠããããã¹ããå
å®åããããããžã§ã¯ãã«ãã£ãŠã¯ãã¹ãã«ãã¬ããž95%匷ããããŠã«ãã¬ããžã ãã§ã¯ãªããã¹ãã®å
容ããã°ãçºçãã«ãããããªæå³ãæã£ãå®ãããã¹ãã«ãªã£ãŠãããã©ããã確èªããŠããŸãã ãŸããCI/CDãæŽåããŠããããã¹ããéããªããšããŒãžã§ããªãããã«ããŠããŸããããã«ãããäºæãã¬ãã°ããã°ã¬ãªã©ãæ€ç¥ã§ãããªãªãŒã¹åŸã®ãã©ãã«ã倧ããæžãããŠããŸããå®ãããã¹ããæžãç¶ããCI/CDç°å¢ãæŽåããããšã§æ°ããã¢ããããŒãããã£ãŠããã¹ãã§å®ãããããããŒãžããããªã«ãèµ·ãããããããªãããšããç¶æ³ãæžããåããã§ããŠããŸãã ãã®ããã匷æ°ã§ãïŒã¢ããããŒãå
容ã確èªããäžã§ïŒãã¹ããéã£ãŠããã°å³ããŒãžããšããããšãã§ããç°å¢ã«ãªã£ãŠããŸãã ã©ããªããã°ã©ãã³ã°èšèªããã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã䜿ãã«ãããææ°ã®ããŒãžã§ã³ã«è¿œåŸããããšã§ã»ãã¥ãªãã£ãšéçºå¹çã®äž¡æ¹ã®èгç¹ã§ã»ãã¥ã¢ãã€é«å質ãªç¶æ
ãä¿ãŠãŠããŸãã 2. çéé¡§å®¢äŸ¡å€æäŸ ã¢ãã³ãªæè¡ã掻çšããŠãããããããåããæäŸããæè¡ã¯åžžã«çéã§ããããŠé¡§å®¢ã«äŸ¡å€ãå±ãããã®ã§ããã¹ãã ãšèããŠããŸãã å
ã»ã©è¿°ã¹ãããã«ãFindyã¯ãã¹ãã«ãã¬ããžã®é«ããšCI/CDç°å¢ãæã£ãŠããç°å¢ã§ãã顧客ã«äŸ¡å€ãæäŸããŠãããäžãäžãã°ãå«ããã®ã§ãã£ããšããŠããããã«ä¿®æ£ãã§ããç¶æ
ã§ãããŸããã»ãŒãã¹ãŠã®ãããã¯ãã§ããã³ããšã³ããšããã¯ãšã³ãäž¡æ¹ã§æ¯æ¥ãªãªãŒã¹äœæ¥ãè¡ãããããªãªãŒã¹äœæ¥ã®èªååãè¡ããããã«CI/CDãæŽåããŠããŸããã ãããŠæ°æ©èœéçºãæ©èœæ¹ä¿®ãªã©ã®æ¯ãè¿ãã«ãããŠããèªåãã¡ãFindy Team+ãæŽ»çšããéçºãµã€ã¯ã«äžã®èª²é¡ãããéšåãç¹å®ããã®åé¡ã察åŠã解決ããããšã§ãFindyã®éçºçµç¹ã«ãããŠå¹çã®è¯ãéçºã¹ã¿ã€ã«ãç¶ç¶ã§ããŠããŸãã Findyã®ãã«ãªã¯æ°ãšãªãŒãã¿ã€ã ã®å€å äŸãã°2020幎1æã®Findyã®éçºçµç¹ã«ãããŠã¯ããã«ãªã¯ãäœã£ãŠããããŒãžãããŸã§ã«3ã7æ¥(70æéã150æé)ã»ã©ããã£ãŠããŸãããã2024幎2æçŸåšã§ã¯ã5.2æéãš13.4ã28.8åã»ã©é«éåã§ããŠããŸãã Findyã®éçºè
æ°ãšäžäººãããã®ãã«ãªã¯äœææ° ãŸããäžäººãããã®ãã«ãªã¯éãã1æ¥0.7ä»¶ãã4.7ä»¶ãš6.7åã»ã©å¢å ããŠããŸããéçºäººå¡ã3.3人ãã26.6人ãš8åã®äººæ°èŠæš¡ã«å¢ããŸãããããŒã¿ã«ã§1æ¥2.8ä»¶ã»ã©ããåºãŠããªãã£ããã«ãªã¯éãã1æ¥129ä»¶ãš46åã«å¢å ããŠããŸãã éåžžã人æ°ãå¢ãããšçç£æ§ã¯äœäžåŸåã«ãããŸããã³ãã¥ãã±ãŒã·ã§ã³ã³ã¹ãã倧ãããªãã調æŽã³ã¹ãããããããã§ããããããFindyã®éçºçµç¹ã¯äººãå¢ããŠãããŸãåããããªãªã³ããŒãã£ã³ã°æœçããã³ãã¥ãã±ãŒã·ã§ã³ã³ã¹ããäžãããããªæœçãå¢ãããéçºçç£æ§ãé«ãç¶ããŠããŸããã ãã®çµæãæ°ããæ©èœã远å ããã¹ããŒãããªã«ããèµ·ãã£ãæã«åãæ»ãã¹ããŒããé«ãç¶æ
ãå®çŸã§ãã顧客䟡å€ã远æ±ã§ããããã«ãªããŸããããŸããããã ãã§ã¯ãªãGitHub Copilotããšã³ãžãã¢åžæè
å
šå¡ã«è²žäžããŠããç¶æ³ã§ãã£ããããªãã¹ãéçºçç£æ§ãé«ãããšã³ãžãã¢ã§ãã£ãŠãKPIãKGIãªã©ã®çµæææšã«è²¢ç®ã§ãããããªåãæ¹ãåžžã«æš¡çŽ¢ãç¶ããŠããŸãã 3. ãšã³ãžãã¢ãã¿ãŒã²ãããŠãŒã¶ãŒ Findyã®éçºçµç¹ã¯éçºçç£æ§ãé«ãç¶æ
ã ããããããã©ããªææãåºãã¹ããªã®ãããèããããšãã§ããPdMãšã®é£æºãåããããç¶æ³ã«ãªã£ãŠããŠããŸãã æã
Findyã¯ãææŠãããšã³ãžãã¢ã®ãã©ãããã©ãŒã ãã€ããããšããããžã§ã³ã®å
ããšã³ãžãã¢ãææŠããããç°å¢ãã€ãããå€ãã®ãšã³ãžãã¢ã®æ¹ã«ãšã£ãŠæšªã§äŒŽèµ°ã§ãããããªååšãšããŠããç¶ããããšæã£ãŠããŸãã ãšã³ãžãã¢ã«åããäºæ¥å±éãããŠããããããšã³ãžãã¢ã§ããèªåãæ¬²ãããã®ãçã¿åºããè¯ãããããæ¬åœã«æ¬²ãããã®ãææ¡ãããè°è«ããªããéçºã§ããç°å¢ã§ãã ããã«ããããã¯ããããŒãžã£ãŒããã¶ã€ããŒãšé£æºãåãã ãã§ã¯ãªããå¶æ¥ã¡ã³ããŒã«ããã£ãŒãããã¯ãããããéã«ãã£ãŒãããã¯ããŠããããããç°å¢ã§ããå¶æ¥ã¡ã³ããŒããšã³ãžãã¢ã®ããšãç¥ãããšå¯Ÿå€ã®ãšã³ãžãã¢ãŠãŒã¶ãŒã«äŸ¡å€æäŸãã§ããçµæãšããŠèªåã®ææã«ãç¹ãããŸãããšã³ãžãã¢ãåçŽã«èšããããã®ãäœãã®ã§ã¯ãªããé¡§å®¢ãæ¬åœã«æ¬²ãããã®ã¯ãªããªã®ããç¥ããããªãŠãŒã¶ãŒã€ã³ã¿ãã¥ãŒã«ååžãããã瀟å
ã®å¶æ¥ã¡ã³ããŒãšé£æºãããŠé¡§å®¢ã®è§£å床ãäžããããšã«ããã£ã¬ã³ãžããŠããŸãã Findyã«é¢ããå
šãŠã®ã¡ã³ããŒããäºãã«ã³ãã¥ãã±ãŒã·ã§ã³ãåãç¶ããã¡ãªãããçãŸããããããšã³ãžãã¢ãšããŠã¯çã«å±ããµãŒãã¹éçºãã§ããããšãæå€§ã®é
åã§ãã Findyã®ããããã®ãšã³ãžãã¢ãªã³ã°ãšã¯ïŒ Findyã¯é«å¹çã§åžžã«CI/CDç°å¢ãšãŠããããã¹ããå
å®ããç¶ãã1人ãããã®çç£æ§ãäžãããããªåãæ¹ãããŠããŸãããçŽè¿ã§ããå¹çããéçºãã§ããç°å¢ãæ±ããŠå
¥ã£ãŠããã ããŠããæ¹ãäœåãFindyã«ãžã§ã€ã³ããŠããŸããããããã人ãå¢ããŠããã£ãšå¹çããéçºãã§ããããã«éçºçç£æ§ãé«ãç¶ãããããã®ã¢ãŠãããããåºããçŽæ¥çã«è²¢ç®ãé£ããKPIã売äžãªã©ã®ã¢ãŠãã«ã ã«è²¢ç®ã§ããç¶æ
ãäœãææŠãç¶ããããšæããŸããé£ããããšãããããŸãããããã«ææŠã§ããçµç¹ãFindyã«ã¯ãããŸãã Findyã¯çŸåš5ã€ã®äºæ¥ãå±éããŠããŸããããããããããã«å€ãã®äºæ¥ãéããŠãšã³ãžãã¢ã«äŸ¡å€ãæäŸããŠããææŠãããšã³ãžãã¢ã®ãã©ãããã©ãŒã ãã€ãããããšãå®çŸããŠãããããšæã£ãŠããŸããä»åŸã®æ°å¹Žã§ãšã³ãžãã¢èŠæš¡ã2-3åã«ãªããæ°äºæ¥ã®ç«ã¡äžããäºæ¥é飿ºãã€ããŒããªã³ã°ããŒã ã®çµæãèªèšŒåºç€ãã€ã³ãã©åºç€ã®æ§ç¯ãªã©äŒç€Ÿã»æè¡çã«é¢çœããã§ãŒãºã«å
¥ã£ãŠãããŸãã ããããäžç·ã«ã¿ããªã§æé«ã®éçºãããŠãããããšæã£ãŠããŸãã®ã§ãèå³ã®ããæ¹ã¯æ¯éãé£çµ¡ãã ããïŒ Findyã®æ¡çšæ
å ±ã¯ãã¡ãâ herp.careers ãããã« ä»åã¯Findyã®éçºçµç¹ã®ç޹ä»ãããŸããã é¢è«ã颿¥ãã€ãã³ããªã©å«ãæ§ã
ãªæ©äŒã§ãäŒãã§ããããšã楜ãã¿ã«ããŠããŸãïŒ