Engineering Managerã¨ãã¦ã®æè¡ãã©ã³ãã£ã³ã°ã¸ã®åãçµã¿æ¹ [å®è·µç·¨]
æ¬è¨äºã¯Engineering Manager Advent Calendar 2021ã®æçµæ¥ã25æ¥ç®ã®è¨äºã§ãã
ããªãã¯èª°ï¼
READYFORæ ªå¼ä¼ç¤¾ã§VP of Engineeringããã¦ããã¾ãããã¨ã²ãï¼ itohiro73 ï¼ã¨ç³ãã¾ãã2021å¹´ã¯å¯æ¥ã¨ãã¦ããã®ã³ã¼ãã¨ãã¦ã®æ´»åãå§ããã®ã§ãããæ¬è¨äºãèªãã§ï¼ï¼ï¼ãã®äººã«ã³ã¼ãã³ã°ãåãã¦ã¿ãããªã¨æããæ¹ããããããæ°è»½ã«ãã¤ãã¿ã¼ããDMããã ãããã³ã¼ãã³ã°ã¯ã¨ã³ã¸ãã¢ã®æ¹ã§ãããã§ãªãæ¹ã§ãåãä»ãã¦ãããç¡æä½é¨ããå§ãã¦ããã ãã¾ããã¡ãªã¿ã«æ¬è¨äºã¯ã³ã¼ãã³ã°ã¨ã¯å ¨ãé¢ä¿ãããã¾ããw
æ¬ã¨ã³ããªã¼ã®è¶£æ¨
å®ã¯ãå ¨ãåãé¡åã®ã¨ã³ããªã¼ã2å¹´åã®2019å¹´ã®ã¢ããã³ãã«ã¬ã³ãã¼ã§å ¬éãã¦ããã¾ããããã®å 容èªä½ã¯ãçè«ç·¨ãã¨ãã¦ã®ç«ã¦ä»ãã§èªåèªèº«ã§è¦è¿ãã¦ããªããªãããæ¸ãã¦ãããªã¨æãã¦ããã®ã§ãæ¬è¨äºãèªãåã«ã¾ãã¯ãã²ä¸éãç®ãéãã¦ããã ããã¨å¹¸ãã§ãã
ãã¦ãä¸è¨ã§è¨ãããã£ããã¨ã¯ããã¡ãã®æç« ã«éç´ããã¦ãã¾ãã
ãã®è¨äºã§æ¬è³ªçã«ä¼ãããã£ããã¨ã¯ã æè¡ãã©ã³ãã£ã³ã°ãé¸æããããã®æ¬è³ªçãªããã»ã¹ã¯ãEngineering Managerãæ¥ã 対å³ãã¦ãã課é¡è§£æ±ºã®ç©ã¿éãã¨å義ã§ãã ã¨ãããã¨ã§ããããµã¼ãã¹ã®èª²é¡ãã§ãã£ãããã¨ã³ã¸ãã¢çµç¹ã®èª²é¡ãã§ãã£ãããæè¡çãªèª²é¡ãã§ãã£ããããããã®èª²é¡ã解決ãã¦ããããã»ã¹ã®ä¸ã§ãå®éã«è§£æ±ºãã¦ãã£ããå®ç¸¾ããããã¼ã±ãã£ã³ã°ããåºåããPRããã¦ãããã¨ã§ãèªç¶ã¨èªç¤¾ã®æè¡ãã©ã³ãã£ã³ã°ã¯é¸æãã¦ãããããç§ã¯ä¿¡ãã¦ãã¾ãã
å®ã¯ãã®2å¹´åã«è¨äºãå ¬éããå°ãåã«READYFORã§Tech Brandingãã¼ã ã¨ç§°ãã¦æè¡ãã©ã³ãã£ã³ã°ãã¼ã ãç«ã¡ä¸ããã®ã§ããããããã2å¹´çµã£ã¦ã®ææãåºã¦ããã®ã§ãä»åã¯ãå®è·µç·¨ãã¨ãã¦ç´¹ä»ã§ããã°ã¨èãã¦ãã¾ãã
ã¾ãã¯ææãã
ãããããã®è¨äºãèªã価å¤ãããã®ãããããæãã¦ããã ãããã«ãå®éã«åºã¦ããå®éçã»å®æ§çãªææãããç´¹ä»ããã¦ããããã°ã¨æãã¾ãã
ï¼ãã®ææã®ã»ã¯ã·ã§ã³ãæãã®ã»ãé·ããªã£ã¦ãã¾ã£ãã®ã§ã¶ã¼ãã¨ã¹ã¯ãã¼ã«ãã¦ããã£ã¦ã æè¡ãã©ã³ãã£ã³ã°é¸æãå®è·µç·¨ãã¾ã§ä¸æ°ã«æµãè¦ãã¦ããã£ãæ¹ãè¯ãããããã¾ããã ãææåºã¦ããã ããã¨æãã¦ãããã®ã趣æ¨ãªã®ã§ï¼
2019å¹´12ææç¹ã§ã®ç¶æ 確èª
2019å¹´ã®æç¹ã§ã¯ãREADYFORã¯ããããã¨ã³ã¸ãã¢ãªã³ã°ã®åã§ãããã¯ãã伸ã°ãã¦ãããããã¨ã¨ã³ã¸ãã¢ãªã³ã°ã«æ³¨åãå§ããé ã§ãããã®æç¹ã§ã¯ã¾ã ãã©ã³ãã£ã°ã確ç«ããã¦ããããREADYFOR=ã¨ã³ã¸ãã¢ãªã³ã°ã¨ããèªç¥ã¯ç¤¾å ã§ã社å¤ã§ãã¾ã é¸æããã¦ããªãé ã§ãã
- ã¨ã³ã¸ãã¢æ£ç¤¾å¡æ°: 10人
- æè¡è¨äºã¢ã¦ãããã: 0è¨äº
- ã¤ãã³ãéå¬: 0å
- ã¡ãã£ã¢åæ: 0å
2021å¹´12ææç¹ã§ã®ã¢ã¦ãã«ã ã»ã¢ã¦ãããã
2021å¹´1å¹´éã®å®éçãªææã¨ãã¦ã¯ä»¥ä¸ã«ãªãã¾ãã
- ã¨ã³ã¸ãã¢ãªã³ã°æ¬é¨ãæ£ç¤¾å¡æ°: 27人ï¼TPM/ãã¶ã¤ãã¼å«ãï¼
- æè¡è¨äºã¢ã¦ãããã: 48è¨äº
- ã¤ãã³ãéå¬ã»ç»å£ã»ãã®ä»ã¢ã¯ãã£ããã£: 14å
- ã¡ãã£ã¢åæ: 12å
æ¡ç¨æ´»åã®ææ
2019å¹´10æã«ç§ãå ¥ç¤¾ããæç¹ã§ã¯ç§å«ãã¦ã¨ã³ã¸ãã¢æ£ç¤¾å¡ãã¾ã 10人ã§ããã2å¹´3ã¶æçµã£ã2021å¹´12æç¾å¨ãã¨ã³ã¸ãã¢çµç¹ã®æ£ç¤¾å¡ï¼TPM/ãã¶ã¤ãã¼å«ãï¼ã27人ã¨ãªã£ã¦ããã2.7åã®æé·ãéãã¦ãã¾ãã
ã¢ããã³ãã«ã¬ã³ãã¼LGTMæ°
2021å¹´Qiitaã¢ããã³ãã«ã¬ã³ãã¼ã®ä¼æ¥ã»å¦æ ¡ã»å£ä½ã®é¨ LGTMæ°ã©ã³ãã³ã°ã«ã¦ã4ä½ä»¥ä¸ã大ããé¢ãã¦ç¬¬3ä½ï¼ ããã¦ãQiitaã¢ããã³ãã«ã¬ã³ãã¼å ¨ä½ã§ã4ä½ã®æ績ã§ãã
ãã®LGTMæ°ã¯Qiitaã§æ¸ãããè¨äºã®ã¿ãã«ã¦ã³ãããã¦ãããä»åååå¼±ã»ã©ã®è¨äºãèªç¤¾ã®ã¯ã¦ãªããã°ãå人ããã°ä¸ã§æ¸ããã¦ãã¦LGTMã«ã¦ã³ãããã¦ããªããã¨ãéã¿ãã¨ãããªãã®æ績ã¨ãã£ã¦è¯ãã®ã§ã¯ãªãã§ããããã
READYFORã®ã¨ã³ã¸ãã¢ãªã³ã°ã«å¯¾ãã¦ã®ãã¸ãã£ããªå½¢ã§ã®è¨å
READYFORã§æè¡åºå ±æ´»åã®ã¢ã¦ãã«ã ã¨ãã¦ã¯ãå®éã«ãã¸ãã£ããªãã£ã¼ãããã¯ãããã ãã¦ããã客観çãªè©ä¾¡ã¨ãã¦èªèãã¦ããããªã¨èãã¦ãã¾ãã
ä¾ãã°2021å¹´1æéå¬ã®ããREADYFORãå®è·µï¼ããã³ãã¨ã³ãåé¢æ¦ç¥ãã§ã¯ãã®ããããã¸ãã£ããªåé¿ãå¤ãã£ãã§ãããã®ã¤ãã³ãã¯READYFORã§åã®æè¡ã¤ãã³ãéå¬ã ã£ããããªã®ã§ããããªã³ã©ã¤ã³éå¬ã§æ大240人ãè¶ ããæ¹ãè¦è´ãã¦ãã ããã¾ããã
ã¡ããã¨æ¦ç¥ãç«ã¦ãããä¸ã§ãæ¦è¡ãå®è¡ããã¦ã¦ããã¡ããã¡ãè¯ãéçºä½å¶ã ã£ãï¼#readyfor_meetup
— Ippo Matsui | 令åãã©ãã« (@ippo_012) February 5, 2021
è²ã å¦ã³ãå¤ãã£ãã§ãï¼ãããã¨ããããã¾ããï¼#readyfor_meetup
— ããã¿ã¤ (@kaibuki0315) February 5, 2021
ãã£ã¡ããã¡ãé¢ç½ãã£ãã§ãï¼ã¡ããã©ãã¾ã¢ããªã·ãã¯ãåå²ãããã¨ãã¦ããã¨ããã§ãã¨ã¦ãåèã«ãªãã¾ããã #readyfor_meetup
— ã ã¼ (@moobugs) February 5, 2021
ã¨ã¦ã楽ããå¦ç¿ããã¦ããã ãã¾ããï¼ï¼
— ã¾ããã (@_mamezou_) February 5, 2021
ãããã¨ããããã¾ããã
#readyfor_meetup
ãã®ã¤ãã³ããé ããé ã¾ã§ããã£ã #readyfor_meetup https://t.co/JWswnG3ZvI
— sho otani (@ozu_syo) February 8, 2021
ã¾ããREADYFORã§ã¯ä»å¹´ãããã¡ã¤ã³é§åè¨è¨ãæ´»ç¨ãã¦ã®ã³ã³ããã¹ããããä½æã»ã¢ããªã³ã°æ´»åã»å¤æ´å®¹ææ§åä¸ã»ã¨ã³ã¸ãã¢ã®è¨è¨ååä¸ã»æè¡çè² åµã®è§£æ¶ã«åãçµã¿å§ãã¦ãã¾ãã
ãã®æ´»åã®ä¸ã¤ã§ããDDD社å åå¼·ä¼ã®å ¥éç·¨ãYouTubeã§å ¬éããã¨ãã1000åãè¶ ããåçæ°ãå©ãåºãã¾ããã
ããã§ããã¸ãã£ããªåé¿ãå¤ãè¦ããã¾ããã
ãã¡ã¤ã³é§åã«ããè¨è¨ã£ã¦é£ããã¤ã¡ã¼ã¸ããã¨æãã¾ãããé常ã«ãããããã解説ããã¦ãã¾ã
— wing3298 (@wing3298) July 1, 2021
é£ãã話ãé£ããæããªãã®ã¹ãã
READYFORã¨ã³ã¸ãã¢ã»ãã·ã§ã³ Vol.3 ãDDD:ãã¡ã¤ã³é§åè¨è¨ å ¥éãã¯ããã®ä¸æ©ã https://t.co/4C3TCug6tw @YouTubeãã
DDD ã®èª¬æã§ï¼éå»ã«ä¸çªåãããããã£ãã
— é管ã¢ã¸ã£ã¤ãªã¹ã (@eutp5) December 25, 2021
æ¥åç¥èãå®ã£ã¦ï¼ã¦ããã¿ã¹è¨èªãã¢ãã«ã§è¡¨ç¾ãã¦ï¼å ¨å¡èªèãåããã¾ãããï¼è¶ ãã£ããï¼ã£ã¦ãã¨ãªã®ãã
ã¯ãªã¼ã³ã¢ã¼ããã¯ãã£ã¨ã®é¢é£ãï¼ã¹ãããªãããhttps://t.co/URuPdIevWM
ã¾ããREADYFORã§ã®DDDã«é¢ããçºä¿¡ã好æçã«åãä¸ãã¦ãã ããããã°ãè¨äºãä¸ãã£ããããã¾ããã
æè¡è¨äºã¢ã¦ããããï¼48è¨äºï¼
è¦ã¦ããã ããã¨ãããã¾ãããåã«è¨äºãéç£ãã¦ããã¨ããããã§ã¯ãªãã質ã®é«ãã¢ã¦ããããã«ãªã£ã¦ããã¨ããèªè² ãããã¾ãã tech.readyfor.jp qiita.com
ã¤ãã³ãéå¬ã»ç»å£çï¼14åï¼
- ãREADYFORãããã³ãã¨ã³ãã¨ã³ã¸ãã¢éã¾ããï¼ãªã³ã©ã¤ã³ZOOMã¤ãã³ã #01
- ãREADYFORãå®è·µï¼ããã³ãã¨ã³ãåé¢æ¦ç¥
- ãã¶ã¤ãã¼Clubhouse](https://www.clubhouse.com/event/MzAwyY5w)
- Front-End Study #4ããã¾èããã¦ã¼ã¶ã¼ä½é¨ã¨ãã¶ã¤ã³ã®ä¸çã
- ãã¶ã¤ãã¼Clubhouse2
- ãREADYFORãããã³ãã¨ã³ãã¨ã³ã¸ãã¢éã¾ããï¼ãªã³ã©ã¤ã³ZOOMã¤ãã³ã #02
- CTO / VPoE Conference 2021 / ããé§åããã»ãã·ã§ã³ / Togetterã¾ã¨ã
- YouTubeLiveé ä¿¡ãREADYFORÃãã¼ã·ãã¯ãã¨ã³ã¸ãã¢ã®çµç¹ä½ãã¨æ¡ç¨
- Developers Summit 2021 Summer ä»å¡²ããç»å£ï¼ã¢ã¯ã¼ãåè³ï¼ï¼
- ãREADYFORãããã³ãã¨ã³ããã¼ã ãã飲ã¿åº§è«ä¼ï¼
- ã¨ã³ã¸ãã¢ãªã³ã°ããã¼ã¸ã£ã¼åº§è«ä¼ 第2å READYFOR VPoE ä¼è¤åå¿ ï¼Wantedly社ã®ã¤ãã³ãç»å£ï¼
- ãREADYFORÃã³ãã¥ã¼ã³ãæ¥åã«æ´»ãããReact LT & 座è«ä¼
- ãREADYFORÃHRBrainãVPoEãèªãï¼æ¥æé·ã¹ã¿ã¼ãã¢ããã®ã¨ã³ã¸ãã¢çµç¹
- ãREADYFORãã¨ã³ã¸ãã¢æ¡ç¨ã»çµç¹éçºã®è©±ã赤裸ã å¤§å ¬éï¼
ã¡ãã£ã¢åæï¼12åï¼
- SELECKãçµç¹ã®ãä¹³åããç®æããè·ç¨®ãè¶ ããé£æºãçã¿åºããã¹ã¯ã¯ããçµç¹ãéå¶ã¨ã¯ã
- ãåæå¾è¨ãREADYFORããã«ããä¹³åãããã¼ãã«ããçµç¹ã¥ããã伺ãã¾ããã
- ãã°ãã¼é£è¼1 / ãTypeScriptãã使ããªãæã¯ãªããREADYFORã®UIãªãã¥ã¼ã¢ã«ãæ¯ããããã³ãã¨ã³ãã®æè¡
- ãã°ãã¼é£è¼2 / Next.jså°å ¥ã§è²¬åã®æå¨ãæ確åREADYFORã®ããã³ãã¨ã³ãåé¢æ¦ç¥
- ã·ã¹ãã ã¨çµç¹ã¯è¡¨è£ä¸ä½ãã¿ã¤ãã³ã°ã®è¦æ¥µããã«ã®ï½TECH TEAM BUILDERS #7 READYFOR CTO çºéæ°ã»VPoE ä¼è¤æ°
- ãã°ãã¼é£è¼3 / TypeScriptã¨OpenAPIã¹ãã¼ãã§åå®å ¨ã« READYFORãèªãâã¹ãã¼ããã¡ã¼ã¹ãâã§å¹ççãªéçºæ¹æ³
- ãã°ãã¼é£è¼4 /ããã¶ã¤ã³ã·ã¹ãã ã®çæ³ã£ã¦ä½ã ã£ãï¼ãâèããä¼âã§æ¯è¼ãã¦ããã£ãREADYFORã«è¶³ããªãé¨å
- ãREADYFOR 岡ææ°ãã誰ãããããããã¨ãå®ç¾ã§ããä¸ã®ä¸ãã¤ããããããããã¯ãã®åã§å®ç¾ã¸
- ããã°ã©ã ã¯âæ¸ããâããâä»çµã¿ã®ç解âã楽ãããã´ã¼ã«ããã³ã»ãµãã¯ã¹åºèº«éçºè ã®ãã¤ã³ãã»ãã
- ãå¼·ãã¨ã³ã¸ãã¢çµç¹ãä½ããããéæãè¸ã«ãREADYFORãåãçµãã ãçµç¹ã®ä¹³åãã¨ãã¹ã¯ã¯ããä½å¶ãã¨ã¯ï¼
- ãªãUserã¯ã©ã¹ã¯è² åµåããããã®ãâ風åºåç»âããç解ããæ å ±ã·ã¹ãã éçºã¨ã¢ããªã³ã° / Developer eXperience Day CTO/VPoE Conference 2021
- Autify: 価å¤ã®åµåºã¨ã¹ãã¼ãã¢ããã«ãæè¡çè² åµãã®è¿å´ãæ¥åãREADYFORããã¹ãèªååãé²ãããã
æè¡ãã©ã³ãã£ã³ã°é¸æãå®è·µç·¨
ãã¦ãææããªã¹ãã¢ããããã ãã§ãããªãã®éã«ãªã£ã¦ãã¾ãã¾ãããããããã§ããããããã£ã2å¹´éã§ãã»ã¼æè¡çãªå¼·ã¿ãæã£ã¦ããªãçµç¹ããããã¾ã§å¼·ã¿ã表åºãèªèãã¦ããããã¨ã³ã¸ãã¢çµç¹ã¾ã§ã©ããã£ã¦æé·ãã¦ããã®ããæ°ã«ãªãã¾ãããï¼æ¡ç¨ã«ãã¤ã³ãã¯ããã§ã¦ããã®ã§å®è³ªã¯åå¹´ãããããææã¯åºã¦ãã¦ãã¾ããæè¡çãªãã©ã³ãã£ã³ã°æ´»åã¨èªç¥ãå½¢æããã¾ã§ã«å®éã«å®è·µãã¦ãããã¨ãããããã¯ãç´¹ä»ãã¾ãã
ã¾ããã£ããã¨
ã¾ããä¸çªæåã«ãã£ã大åãªãã¨ã¯ãæè¡ãã©ã³ãã£ã³ã°ããç®æãç¶æ ãæ確åãããã¨ã§ããã
READYFORã§ã¯ãTech Brandingãã¼ã ç«ã¡ä¸ãã®éã«æ確ãªãã¸ã§ã³ã»ããã·ã§ã³ãè¨å®ãã¾ããã
ãã®ãã¸ã§ã³ã«è¿ã¥ãããã«ãããã·ã§ã³ã«åããªããã¨ã¯ãããªãã¨ããææ決å®ãããããããã¨ã¦ã大äºã ã¨èãã¾ããã
ããã·ã§ã³ã«ãããå å¤ã«ã¨ã£ã¦ãã¨ããã®ã¯ã¨ã¦ã大åã§ãã社å¤ã®äººãé äºããããã«ãå®æ ã«åããªããã¨ããã©ã³ãã£ã³ã°ããã®ã¯å ¨ãæå³ãããã¾ããã課é¡ã§ãããã¨ã¯èª²é¡ã¨ãã¦èªèããæ¹åãã¦ãããã¨ã§ããã®æ¹åããã»ã¹ãå¼·ã¿ã¸ã¨æè¯ãã¦ãããå¼·ã¿ã¯å¼·ã¿ã¨ãã¦é åã¨ãã¦çºä¿¡ãããã¨ã§ã社å ã®ã¨ã³ã¸ãã¢ã«ã¨ã£ã¦ãã社å¤ã®ã¨ã³ã¸ãã¢ã«ã¨ã£ã¦ããé åçãªå ´ã¨ãªã£ã¦ããããã®å°éãªç©ã¿éããã¨ã¦ã大åãªã®ã§ãä¸æä¸å¤ã§çºä¿¡ããããã°ãã©ã³ãã£ã³ã°ãé¸æãããã¨èãã¦ã¯æ¬æ«è»¢åã§ãã
å®éã2019å¹´ã®Tech Brandingãã¼ã ç«ã¡ä¸ãç´åã§ãã11æé ããã¨ã³ã¸ãã¢meet-upãéå¬ããããã¨ããã¢ã¤ãã¢ãç«ã¡ä¸ããåãå§ãã¦ãã¾ããããã¾ãã«åé ã®è¨äºã§æ¸ãããããªçç±ã§ä¸æ延æã¨ãã¾ããã
ããããããããã¨ããæ³ãã¯ããããã¾ã ããã«éãã¦ããªãé åã®ãã©ã³ãã£ã³ã°
ä¸ã®ä¸ã§æè¡ãã©ã³ãã£ã³ã°ã«å°ã£ã¦ããæ¹ãã¡ã¯ãã®é åãåºãã®ã§ã¯ç¡ããã¨æ³åãã¾ããã ããããå°ã£ã¦ããã®ã§ãããã
ããããããããã¨ããæ³ããããã¨ãããã¨ã¯ãæçµçã«ããããã©ã³ãã£ã³ã°ã§ããããã«ãªã£ã¦ããããã¨ãããã¨ã¯ééãç¡ãã¨æãã¾ããããããã¾ã ããã«éãã¦ããªãç¶æ ã§ããã¼ã±ãã£ã³ã°ããåºåããPRãããã¦ãã¾ãã¨ãä¸èº«ãä¼´ããªããã©ã³ãã£ã³ã°æ´»åã«ãªã£ã¦ãã¾ãã¾ãããã®æç¹ã§ããã¿ã«ã³ãã¥ããã£ç»å£ãããã°è¨äºãOSSãªã©åºãã¦ããç¡é§æ»ã«ããã ãã§ãã
å®éãå½æã¯ã¾ã READYFORã¯æè¡çãªå¼·ã¿ã¨è¨ãããã®ã¯ç¹ã«è¨èªåããã¦ããããå®éã«å æ ã¨ãã¦ã¯æè¡çè² åµãå¤ãç©ã¿éãªããããã³ãã¨ã³ãã¨ããã¯ã¨ã³ããåé¢ããã¦ãããå¯çµåãªç¶æ ãã¤ä½å¶ãæ´åããã¦ããããmeet-upãéå¬ããã¨ããã§ä½ãçºä¿¡ãããã¨ãå¾ããã¨ãã§ããªãã£ãã§ãããã
ãã¦ãå ã®è¨äºã§ã¯ããããããããã¨ããçæ³ã¨è¦æ¯ã¹ãæã«ãç¾å¨ã®ç¶æ ããè¨èªåãã¦ã¿ã¾ãããã¨è¨ã£ã¦ãã¾ããã
ããã§EMã®åºçªã§ããEngineering Managerã®è«¸æ°ã«ãããã¾ãã¦ã¯ãããããããããã¨ããçæ³ã¨è¦æ¯ã¹ãæã®ãç¾å¨ã®ç¶æ ããè¨èªåãã¦ã¿ã¾ããããããã§è¨èªåãããã®ã¯ããµã¼ãã¹ã®èª²é¡ãããããã¾ãããããã¨ã³ã¸ãã¢çµç¹ã®èª²é¡ãããããã¾ãããããæè¡çãªèª²é¡ãããããã¾ããã
ããããEMã主å°ãã課é¡è§£æ±ºã»æè¡ãã©ã³ãã£ã³ã°ã®åºæ¬çãªåãå°ãåºããã¾ãã
- çæ³ã¨ç¾ç¶ã®å·®åãè¨èªåãã
- ãã®å·®åã解æ¶ãã¦ããããã®ç®æ¨è¨å®ããã
- è¨å®ããç®æ¨ãéæããããã®ä½å¶ãã¤ããå®è·µãã
- ç®æ¨ãéæã§ããããããèªç¤¾ã®å¼·ã¿ã»ææã¨ãã¦çºä¿¡ããã
ã§ã¯ãå®éã«READYFORã§è¡ã£ã¦ãã課é¡çºè¦ã»ç®æ¨è¨å®ã»èª²é¡è§£æ±ºã¨æè¡ãã©ã³ãã£ã³ã°ã®äºä¾ãè¦ã¦ããã¾ãããã
ä½å¶ã®æ´å: è·è½åçµç¹ããã¹ã¯ã¯ããåçµç¹ã¸
READYFORã§ã¯ã2019å¹´ã®åãé ãããã¼ã ãå人ã®ç®æ¨è¨å®ã«OKRãæ´»ç¨ãã¦ãã¾ããã
2019å¹´æç¹ã®READYFORã§ã¯ã¨ã³ã¸ãã¢10åãããããããã³ãã¨ã³ããã¼ã ã¨ããã¯ã¨ã³ããã¼ã ãåããå§ããã¨ããã§ããããããããããããããã¯ãéçºã«ã¢ã¯ã»ã«ãè¸ãã§ãããã¨ããã¨ããã§ãããããããã¯ãéçºã®ããã·ã§ã³ã¨åãã¼ã ã®OKRã¨ã®æ¥ç¶ããã¾ãã§ãã¦ããªããã¨ã«æ°ã¥ãã¾ãããããã¯ã5人è¦æ¨¡ã®ã¯ã³ãã¼ã ã ã£ãã¨ã³ã¸ãã¢ãã¼ã ã10人è¦æ¨¡ã«æé·ãããã¨ã§ããã³ãã¨ã³ããã¼ã ã¨ããã¯ã¨ã³ããã¼ã ã«åããã¦ãããã¨ããçãå§ãã課é¡ã§ããã
ã¯ããçæ³ã¨ç¾å®ã®ä¹é¢ãããã§ç¾ãã¾ãããã
- çæ³: ãããã¯ãéçºã¨ãã¦è¿½ãã¹ãããã·ã§ã³ãæçã§éæããããã«ããã¼ã ã§ä¸è²«ããç®æ¨è¨å®ãããã
- ç¾å®: éçºã®ããã·ã§ã³ã¨åãã¼ã ã®OKRããã©ãã©ã§æªã¿ã®ããç¶æ ã«ãªã£ã¦ãã¾ã£ã¦ãã
ããããã¯EMã¨ãã¦ã®èª²é¡è§£æ±ºã¿ã¼ã³ãCTOãPdMãå·»ãè¾¼ã¿ãç¾å¨READYFORãæ¡ç¨ãã¦ããã¹ã¯ã¯ããä½å¶ã®ååã¨ãªããããªãã¼ã æ§æã®çµã¿ç«ã¦ããã¾ããã
ããããã¼ã¹ã«CTO @amachino ãçµå¶é£ã«å¯¾ãå ¨ç¤¾çãªã¹ã¯ã¯ããä½å¶ã®å°å ¥ãææ¡ãã2020å¹´ããæ£å¼ãªä½å¶å¶åº¦ã¨ãã¦æ¡ç¨ãããã®ãç¾è¡ã®READYFORã®ã¹ã¯ã¯ããä½å¶ã§ãã
ãããã£ãä¸é£ã®èª²é¡è§£æ±ºã¯ãREADYFORã大åã«ãã¦ãããä¹³åãã®æ¦å¿µã¨ã¨ãã«ç´¹ä»ããã¦ãããã¾ããã
ãã®æç¹ã§ããã¤ãã®èª²é¡è§£æ±ºã®å®ç¸¾ã¨ã¨ãã«ãå¼·ã¿ã¨ãã¦ã®ãã©ã³ãã£ã³ã°é¸æãç©ã¿éãªã£ã¦ãã¾ãã
ããã³ãã¨ã³ãã¨ããã¯ã¨ã³ãã®åé¢
ãã¦ãä½å¶ãã¨ã¨ã®ã£ãã®ã§ããããããã¯ãéçºã«ã¢ã¯ã»ã«ãè¸ããã§ããããï¼ãããããããã¯ç°¡åã«ã¯ããã¾ããã ãã®é ã¯ãã¾ã READYFORã®å ¨ã¦ã®æ©è½ãRailsä¸ã§ã¢ããªã·ãã¯ãªãµã¼ãã¹ã¨ãã¦å®è£ ããã¦ãããããã³ãã¨ã³ããReact on Railsã¨ãã¦Railsä¸ã«å¯çµåãã¦ããç¶æ ã§ããããã®ã¾ã¾ã ã¨ãä»å¾ã¨ã³ã¸ãã¢ãå¢ãã¦ãã£ãã¨ãã¦ãçç£æ§ãä¸ãããªãç¶æ ã¨ãªã£ã¦ãã¾ãã¾ããã¯ããæ¥ã¾ãããçæ³ã¨ç¾å®ã®å·®åã
- çæ³: ã¨ã³ã¸ãã¢ãå¢ããã°ããã³ãã¨ã³ãã¨ã³ã¸ãã¢ã¨ããã¯ã¨ã³ãã¨ã³ã¸ãã¢ãç¬ç«ãã¦çç£æ§é«ãéçºãã§ãã
- ç¾å®: ããã³ãã¨ã³ãã¨ããã¯ã¨ã³ããå¯çµåãªã¢ããªã·ãã¯ã¢ã¼ããã¯ãã£ã¼ã«ãªã£ã¦ãããã¨ã³ã¸ãã¢ãå¢ãã¦ãçç£æ§ãä¸ãããªã
ããããã®èª²é¡è§£æ±ºã¯EMã主å°ããã¿ã¼ã³ã§ãããå®éã«ãããã¯ãã®åªå äºé ã¨ãã¦ãã¯ã©ã¦ããã¡ã³ãã£ã³ã°ã®ããã¸ã§ã¯ãç·¨éç»é¢ãã®æ©è½éçºãè¨ç»ããã¦ããã®ã§ãããããã§ããã³ãã¨ã³ãã®åé¢ãåããã¦æ¨ãé²ãããã¨ãä¸é·æçãªãããã¯ãå ¨ä½ã®çç£æ§åºä¸ãã«å¯ä¸ããã¨èããå®éã«ä»ã§ã¯ããã¤ãã®æ°ç»é¢ã¯React/TypeScript/Next.jsã®ããã³ãã¨ã³ãã¨Railsã®ããã¯ã¨ã³ããåé¢ãããç¶æ ã§å®è£ ããã¦ãã¾ãã
ããã¯ã¾ãã«åé ã®ææã§ç´¹ä»ãããã¸ãã£ããªåé¿ãå¤ãã£ããããã³ãã¨ã³ãåé¢æ¦ç¥ãããã®ã¹ãã¼ãªã¼ãã®ã¾ã¾ã§ããå®éã®èª²é¡çºè¦ => ç®æ¨è¨å® => 課é¡è§£æ±º => ææã®çºä¿¡ãä¸é£ã®æµãã¨ãã¦ä¸è²«ãã¦ãããããããçºä¿¡ã®å 容ãè¦è´è ã«åºãã£ããã ã¨æãã¾ãã
è¤éãªãã¡ã¤ã³ã¨ã®å¯¾å³
READYFORã§ã¯ããµã¼ãã¹ã¨ãã¦è¡¨åºãã¦ããç»é¢æ§æããæ³åãã以ä¸ã«è¤éãªãã¡ã¤ã³ãæ±ã£ã¦ãã¾ãã
ã¯ã©ã¦ããã¡ã³ãã£ã³ã°ã«ããããããã¸ã§ã¯ããã¨ããæ¦å¿µã²ã¨ã¤ã¨ã£ã¦ãããã¾ãã¾ãªã³ã³ããã¹ãã§æ±ããã¦ãã¾ãã
ãã®ãããªè¤éãªæ¦å¿µãããã¡ã¤ã³ã«æ½ãæ·±ãã¢ãã«ãé©åã«è¸çããªãã¾ã¾å®è£ ããã¦ãã¾ãã¨ã©ããªããã¨ããã¨ããããªãã¾ããã
ãããããã¯å¤§ããªèª²é¡ã§ããçæ³ã¨ç¾å®ã®å·®åãè¨èªåãã¦ã¿ãã¨ãããªæãã§ããããã
- çæ³: è¤éãªã³ã¢ãã¡ã¤ã³ãæ·±ãåæã»ã¢ããªã³ã°ããã¦ãããå¤æ´å®¹ææ§ã®é«ãè¨è¨ã§å®è£ ããçç£æ§é«ãã³ã¼ãã«ãªã£ã¦ãã
- ç¾å®: 3700è¡ã«åã¶å·¨å¤§ãªã¢ãã«ã³ã¼ã
ãã®å·®åã¯å¤§ããã§ãããæ¢åã®ãã¼ã ã«ã¯ãããã§ãããªã½ã¼ã¹ãå°éæ§ãã¾ã ãªãç¶æ ã§ãä¸çç¸ã§ã¯ãããªããã§ãã
EMã¨ãã¦ã¯ã©ããã£ãåããããã°ããã§ããããï¼
å®éã«OOCï¼Object Oriented Conferenceï¼ã¨ããã«ã³ãã¡ã¬ã³ã¹ã®ã©ã³ãã¹ãã³ãµã¼ã»ãã·ã§ã³ã§ãã£ãã®ã¯ãããã§ãã
READYFORãå®éã«æ±ãã¦ãã課é¡ã«ã¤ãã¦å ¬è¡¨ãããã®èª²é¡ãä¸ç·ã«è§£æ±ºãã¦ããã仲éãåéããã®ã§ãã詳ããã¯ä¸ã®è¨äºã«ã¾ã¨ãã¾ããã
ãã¦ããããããããããããããã£ã¦ã©ããªã£ããã¨ããã¨ãDDDçéã§ã¯åé«ã ããé§å ããã t2kob ããã«ã¸ã§ã¤ã³ããã ãã¾ããã
ãäºäººã«ã¯READYFORã§ã¯ã¾ãã«OOCã§èª²é¡ã¨ãã¦å ¬è¡¨ããå 容ã«ã¤ãã¦åãçµãã§ä¸ãã£ã¦ãã¾ããå®éã«ãã£ã¬ã³ã¸ã³ã°ãªèª²é¡ãããã£ã´ããã«å ¬è¡¨ãã¦ãåãçµã¿ããã®ãã課é¡ã¨ãã¦èªèãã¦ãã ãã£ãããããã¸ã§ã¤ã³ãã¦ãã ãã£ããã ã¨æãã¾ãï¼å¤§æè¬ï¼ï¼ï¼ï¼ã
æè¡ãã©ã³ãã£ã³ã°ã®åãããã°ãã¼ãã£ã³ã°ããªããèªç¤¾ã®å¼·ã¿ãæé·ããã
ãã¦ãEMãåãçµãæè¡ãã©ã³ãã£ã³ã°ã®åãåæ²ããã¨ããããªæãã§ãããã
- çæ³ã¨ç¾ç¶ã®å·®åãè¨èªåãã
- ãã®å·®åã解æ¶ãã¦ããããã®ç®æ¨è¨å®ããã
- è¨å®ããç®æ¨ãéæããããã®ä½å¶ãã¤ããå®è·µãã
- ç®æ¨ãéæã§ããããããèªç¤¾ã®å¼·ã¿ã»ææã¨ãã¦çºä¿¡ããã
EMã¯æ®æ®µãã4åæãåæã§ç®æ¨è¨å®ãã¦ããã¯ããªã®ã§ãã©ãããªã1å¹´åä½ã§ææãæ¯ãè¿ãã¤ã¤ãç¿å¹´ã®å±æãå ¬è¡¨ãã¡ããã¾ãã
ããããã¨ç¿å¹´ã¯EMã¯ãã®å±æã«åãã£ã¦ç®æ¨è¨å®ã»å®è·µãã©ã®ã¿ã¡ãããããªã®ã§ãå¹´æ«ã«å度æ¯ãè¿ããã¨ã§ãããªããã©ã³ãã£ã³ã°é¸æã«ã¤ãªãããã¨ãã§ãã¦ãã¾ãã¨ããä»çµã¿ã§ãã
åé ã®è¨äºããå¼ç¨ãããããå度æãåºãã¦ãã ããã
ãã®è¨äºã§æ¬è³ªçã«ä¼ãããã£ããã¨ã¯ã æè¡ãã©ã³ãã£ã³ã°ãé¸æããããã®æ¬è³ªçãªããã»ã¹ã¯ãEngineering Managerãæ¥ã 対å³ãã¦ãã課é¡è§£æ±ºã®ç©ã¿éãã¨å義ã§ãã ã¨ãããã¨ã§ããããµã¼ãã¹ã®èª²é¡ãã§ãã£ãããã¨ã³ã¸ãã¢çµç¹ã®èª²é¡ãã§ãã£ãããæè¡çãªèª²é¡ãã§ãã£ããããããã®èª²é¡ã解決ãã¦ããããã»ã¹ã®ä¸ã§ãå®éã«è§£æ±ºãã¦ãã£ããå®ç¸¾ããããã¼ã±ãã£ã³ã°ããåºåããPRããã¦ãããã¨ã§ãèªç¶ã¨èªç¤¾ã®æè¡ãã©ã³ãã£ã³ã°ã¯é¸æãã¦ãããããç§ã¯ä¿¡ãã¦ãã¾ãã
ããã¾ã§èªãã§ããã ãã¦ããã®ããã»ã¹ã®åå¼·ããæãã¦ããã ããã§ããããï¼READYFORã§ã¯å®éã«ãããã®ãã¨ãå°éã«å®è·µãç¶ããçµæãååã«ãªã¹ããããããªææãåºããã¨ãã§ãã¦ãã¦ãã¾ãã
ã¾ããå®è·µç·¨ã«ç´°ããã¯æ¸ãã¦ããªãã§ãããã¨ã³ã¸ãã¢ãã¡ãèªçºçã«çºä¿¡ããããªããããªç°å¢ã¥ãããå ´ã¥ãããã¨ã¦ã大åã«ãªã£ã¦ãã¾ãããã®ãããã¯ã¾ãå¥ã®è¨äºã§ãã¤ãæ¸ãã¦ã¿ããããªã¨æãã¾ãã
ããã§ã¯é·ããªãã¾ããããEngineering Manager Advent Calendar 2021ã®25æ¥ç®è¨äºã¨ãã¦ã¯ä»¥ä¸ã«ãããã¨æãã¾ãã
é·ãè¨äºãæå¾ã¾ã§ã覧ããã ããããã¨ããããã¾ããï¼ã¡ãªã¼ã¯ãªã¹ãã¹ï¼
Engineering Managerã¨ãã¦ã®æè¡ãã©ã³ãã£ã³ã°ã¸ã®åãçµã¿æ¹
æ¬è¨äºã¯Engineering Manager Advent Calendar 2019ã®23æ¥ç®ã®è¨äºã§ãã
èªå·±ç´¹ä»
2019å¹´10æããREADYFORã¨ããã¯ã©ã¦ããã¡ã³ãã£ã³ã°ã®ä¼ç¤¾ã§VP of Engineeringãåãã¦ããã¾ããä¼è¤ã¨ç³ãã¾ããããã¨ã²ããã¨å¼ã°ãããã¨ãå¤ãã§ãã2005å¹´ãã12å¹´ã»ã©å¤è³ç³»éèã®ä¼ç¤¾ã§ã½ããã¦ã§ã¢ã¨ã³ã¸ãã¢ãåããã®ã¡ãFinTechç³»ã®ã¹ã¿ã¼ãã¢ãã2社ãçµã¦ç¾è·ã«å°±ãã¦ããã¾ãã
Engineering Managerã¨æè¡ãã©ã³ãã£ã³ã°
Engineering Managerï¼ä»¥éEMï¼ãåãçµãã²ã¨ã¤ã®èª²é¡ã¨ãã¦ãã¨ã³ã¸ãã¢çµç¹ãããã«æé·ããã¦ãããã¨ãã課é¡ãããã¨æãã¾ãããã®ããã«ãæ¡ç¨æ°ã伸ã°ãã¦ãããªãã¨ãããªãã£ããã人ææµåºãé²ãããã«ãªãã³ã·ã§ã³æ½çãã¨ããªãã¨ãããªãã¨æãã¾ãããã®ä¸ã®ã²ã¨ã¤ã®æ½çã¨ãã¦æè¡ãã©ã³ãã£ã³ã°ãããã¾ããä»åã¯ãã®æè¡ãã©ã³ãã£ã³ã°ã¸ã®EMã¨ãã¦ã®åãçµã¿æ¹ãè¨äºã«ãããã¨æãã¾ãã
ç§ã¨æè¡ãã©ã³ãã£ã³ã°
ç§ã¯ãã£ãªã¢ã®æã ã§Software Developerã ã£ãããProject Managerã ã£ãããTechnical Architectã ã£ãããHead of Engineeringã ã£ãããSenior Solution Architectã ã£ãããã¨ã³ã¸ãã¢ãªã³ã°æ¦ç¥ã ã£ãããVP of Engineeringã ã£ããã¨ãããããªãã¼ã«ãçµã¦ãã¦ããã®ã§ãããã²ã¨ã¤ä¸è²«ãã¦ããã®ããå ¨ã¦ã®ä¼ç¤¾ã§æè¡ãã©ã³ãã£ã³ã°ã«ã¾ã¤ããæ´»åããã¦ãããã¨ã§ãã
1社ç®ã§ã¯Technology Marketingã2社ç®ã§ã¯ã¯ãªã¨ã¼ã¿ã¼ãã©ã³ãã£ã³ã°ã3社ç®ã§ã¯dev-brandingã4社ç®ï¼ç¾è·ï¼ã§ã¯Tech Brandingã¨ãããããããéãååã§æè¡ãã©ã³ãã£ã³ã°æ´»åã«é¢ãã£ã¦ãã¦ãã¾ãã
ãªãEMãæè¡ãã©ã³ãã£ã³ã°ã«é¢ããã®ï¼ããã£ã¦æ¡ç¨ãã¼ã ãåºå ±ãã¼ã ã®ä»äºãããªãã®ï¼
ãªãèªåãé¢ãããã¨ããã¨ãåãã¦ããä¼ç¤¾ã大好ããªã®ã§ãã¨ã³ã¸ãã¢ã®çã«ããã®ä¼ç¤¾ããã®ä¼ç¤¾ã®ã¨ã³ã¸ãã¢ãªã³ã°ã大好ãã«ãªã£ã¦ãããããã¨ããæ³ããããããã§ãã
æè¡ãã©ã³ãã£ã³ã°ã¯ããã¡ããæ¡ç¨ãã¼ã ãåºå ±ãã¼ã ãé¢ãã£ã¦ããã¹ããã®ã§ããããããæè¡ãã©ã³ãã£ã³ã°ã®æ¬è³ªçãªããã»ã¹ã¯ãEMãéè¦ãªå½¹å²ãå ããã¨æã£ã¦ãã¾ãï¼ããã§è¨ãEMã¯ãCTOãVPoEãå«ããã¨ã³ã¸ãã¢çµç¹ãå¼ã£å¼µã£ã¦ãããã¼ã«ã®äººãã¡ãã¹ã¦ãæ³å®ãã¦ãã¾ãï¼ãæ¬è¨äºã§ã¯ããã主ç¼ã«ã話ãã§ããã°ã¨æãã¾ãã
ãããããã©ã³ãã£ã³ã°ã¨ã¯
ãã©ã³ãã£ã³ã°ã¨ããã¼ã±ãã£ã³ã°/åºå/PRãªã©ã®æ½çã®éãã¯ä¸ã®å³ã«ãã表ããã¦ãã¾ãã
ããã¼ã±ãã£ã³ã°ããããåºåããããPRãã¯ãèªããããã¯å¤é¨ã®åªä½ãéãã¦ãèªåã®é åãä¼ãã¦ããæ½çã«ãªãã¾ãã対ãã¦ããã©ã³ãã£ã³ã°ãã¨ã¯ãä»è ããèªãã®é åãèªç¥ãã¦ããããç¶æ ãã¤ããæ´»åãã¹ã¦ã表ãã¦ãã¾ãã
ã§ã¯ãåã«ãã¼ã±ãã£ã³ã°ãåºåãPRããã¦ããã°ãã©ã³ãã£ã³ã°ã¯é¸æãããã®ãï¼ããã§ã¯ãªãã¨æãã¾ããä¸è¨ã®çµµã®ä¾ã§è¨ãã°ãå®éã«ãé ãè¯ããã¨ããä¸èº«ãå®ç¸¾ãä¼´ã£ã¦èªç¥ããããããã®ä¿¡é ¼ãç©ã¿éãªã£ã¦åãã¦ãã©ã³ãã£ã³ã°ã¯é¸æããããã®ã ã¨æãã¾ãã
æè¡ãã©ã³ãã£ã³ã°ãé¸æããã®ã«å¤§åãªãã¤ã³ã
ã§ã¯ãä¼æ¥ãåãçµãæè¡ãã©ã³ãã£ã³ã°ã¨ã¯ãä½ããã©ã³ãã£ã³ã°ããã°ããã®ã§ããããï¼ããã¯è¨èéãç¾è ç¾æ§ã§ãããããä½ãããã©ã³ãã£ã³ã°ãã¦ããã°ãããç解ããããã«ãä¸è¨ã®æ§ãªè³ªåã«ã¾ãã¯çãã¦ã¿ãã¨è¯ãã¨æã£ã¦ãã¾ããããã§ã¯ä¸»ã«Webç³»ã®ãµã¼ãã¹ãæä¾ãã¦ããä¼ç¤¾ã®æè¡ãã©ã³ãã£ã³ã°ã主ç¼ã¨ç½®ãã¦ãã¾ãã
- èªç¤¾ã®ãµã¼ãã¹ã®å¼·ã¿ã¯ã©ãã«ããã®ããã©ãããããã®ãããã£ããè¨èªåããã¦ãããï¼
- ä¸è¨ã®èªç¤¾ãµã¼ãã¹ã®å¼·ã¿ãå®ç¾ããããã«ãã¨ã³ã¸ãã¢çµç¹å ¨ä½ã¨ãã¦ã®ã«ã«ãã£ã¼ã®å¼·ã¿ã¯ã©ãã«ããã®ãããããã¯ã©ãããããã®ãããã£ããè¨èªåããã¦ãããï¼
- ä¸è¨ã®èªç¤¾ãµã¼ãã¹ã®å¼·ã¿ãå®ç¾ããããã«ãç´°ååãããæè¡é åã§ãèªç¤¾ã®å¼·ã¿ã¯ã©ãã«ããã®ãããããã¯ã©ãããããã®ãããã£ããè¨èªåããã¦ãããï¼
- ãããã¯ãããã¸ã¡ã³ãã®æè¡
- UXãã¶ã¤ã³ã®æè¡
- UIãã¶ã¤ã³ã®æè¡
- ã¢ãã¤ã«æè¡
- ããã³ãã¨ã³ãæè¡
- ããã¯ã¨ã³ãæè¡
- ã¤ã³ãã©ã»SREæè¡
- ãã¡ã¤ã³ç¥èãã·ã¹ãã ã¸è½ã¨ãè¾¼ãæè¡ï¼è¦æ±åæãè¦ä»¶å®ç¾©ãä»æ§çå®ãè¨è¨ãçã ï¼
- éçºããã»ã¹ã®æè¡ï¼ã¢ã¸ã£ã¤ã«ãã¹ã¯ã©ã çã ï¼
- ãã¹ããã½ããã¦ã§ã¢å質åä¸ã®æè¡
- ã»ãã¥ãªãã£ã®æè¡
- çã
ä¸è¨ã®è³ªåã«ããããçãã¦ã¿ã¦ãããè¨èªåãããã¦ããªãå ´åã¯ãã¾ãã¯è¨èªåã試ã¿ã¾ãããããããã¹ã¿ã¼ãã£ã³ã°ãã¤ã³ãã§ãã
次ã«ãããããã®è³ªåã«å¯¾ãã¦è¨èªåã試ã¿ã¦ã¿ãã¨ããèªç¤¾ãµã¼ãã¹ããèªç¤¾ã®ã¨ã³ã¸ãã¢ãªã³ã°çµç¹ããèªç¤¾ã®æè¡é åãã®ããããã«å¯¾ãã¦ã大ã¾ãã«2ã¤ã®é åãåå¨ãããã¨ãè¦ãã¦ããã¨æãã¾ã
- æ確ã«å¼·ã¿ã§ããã¨è¨ããé å
- ããããããããã¨ããæ³ãã¯ããããã¾ã ããã«éãã¦ããªãé å
ãã¡ãããä¼ç¤¾ã«ãã£ã¦ãã®2ã¤ã®é åã®ã°ã©ãã¼ã·ã§ã³ã¯ãã¾ãã¾ã§ãåè ãå¤ãä¼ç¤¾ãããã°ãã¾ã ã¾ã å¾è ã®æ¹ãå¤ãä¼ç¤¾ãããã§ãããã
ã§ã¯ããããã©ããã©ã³ãã£ã³ã°ãã¦ããã°è¯ããè¦ã¦ããã¾ãããã
æ確ã«å¼·ã¿ã¨è¨ããé åã®ãã©ã³ãã£ã³ã°
æ確ã«å¼·ã¿ã¨è¨ããé åã§ã¯ããã©ã³ãã£ã³ã°ã¯æ¯è¼çç°¡åã§ããæ確ã«å¼·ã¿ã¨è¨ããã¨è¨ããã¨ã¯ãã»ã¼ééããªããã®é åã§ãªã«ãããã®å®ç¸¾ãæã£ã¦ãããã¨ã§ãããããã®å®ç¸¾ã«å¯¾ãã¦ãã²ãããä¸ã®ããã¼ã±ãã£ã³ã°ããåºåããPRããããè¿ãã¦ããã°è¯ãã®ã§ãã
ä¸èº«ã¯ä¼´ã£ã¦ããã®ã§ããããã®ãã©ã³ãã£ã³ã°æ½çã¯å¦å®ã«å¹ãã¦ãã¾ããèãããã¨ãªããæè¡ã³ãã¥ããã£ã§ã®ç»å£ãããã°è¨äºãnoteã§ã®è¨äºå ¬éãæ¡ç¨ã¤ãã³ãã§ã®PRãOSSã®å ¬éçãã©ãã©ããã£ã¦ããã¾ããããä¸èº«ãä¼´ã£ã¦ããã®ã§ããã°ãå¼·ã¿ãå®ç¸¾ãã²ããã売ãåºãã°ãèªç¶ã¨çã®ä¿¡ç¨ã»ä¿¡é ¼ã¯ç©ã¿éãªã£ã¦ãããèªç¥ã®æ¡å¤§ã«ã¤ãªããã§ãããã
æ¬ç¨¿ã§ã¯ããã«é¢ãã¦ã¯æ·±æããã¾ããããã§ã«ã¤ãã¤ããªã®ã§ããã°ã©ãã©ãèªç¥æ¡å¤§ãã¦ãã ããwã¨ããããããã¾ãããããé¡åãè¦ã¦ãããã®æ¹æ³è«ã«ã¤ãã¦ç¥ãããã¨æã£ã¦ããæ¹ã¯ãæå¾ å¤ãã«ãªã£ã¦ãã¾ãç³ã訳ããã¾ããã
ããããããããã¨ããæ³ãã¯ããããã¾ã ããã«éãã¦ããªãé åã®ãã©ã³ãã£ã³ã°
ä¸ã®ä¸ã§æè¡ãã©ã³ãã£ã³ã°ã«å°ã£ã¦ããæ¹ãã¡ã¯ãã®é åãåºãã®ã§ã¯ç¡ããã¨æ³åãã¾ããã ããããå°ã£ã¦ããã®ã§ãããã
ããããããããã¨ããæ³ããããã¨ãããã¨ã¯ãæçµçã«ããããã©ã³ãã£ã³ã°ã§ããããã«ãªã£ã¦ããããã¨ãããã¨ã¯ééãç¡ãã¨æãã¾ããããããã¾ã ããã«éãã¦ããªãç¶æ ã§ããã¼ã±ãã£ã³ã°ããåºåããPRãããã¦ãã¾ãã¨ãä¸èº«ãä¼´ããªããã©ã³ãã£ã³ã°æ´»åã«ãªã£ã¦ãã¾ãã¾ãããã®æç¹ã§ããã¿ã«ã³ãã¥ããã£ç»å£ãããã°è¨äºãOSSãªã©åºãã¦ããç¡é§æ»ã«ããã ãã§ãã
ã§ã¯ãã©ãããã°è¯ãã®ã§ããããã
ããã§EMã®åºçªã§ããEngineering Managerã®è«¸æ°ã«ãããã¾ãã¦ã¯ãããããããããã¨ããçæ³ã¨è¦æ¯ã¹ãæã®ãç¾å¨ã®ç¶æ ããè¨èªåãã¦ã¿ã¾ããããããã§è¨èªåãããã®ã¯ããµã¼ãã¹ã®èª²é¡ãããããã¾ãããããã¨ã³ã¸ãã¢çµç¹ã®èª²é¡ãããããã¾ãããããæè¡çãªèª²é¡ãããããã¾ããã
ããµã¼ãã¹ã®èª²é¡ããã¨ã³ã¸ãã¢çµç¹ã®èª²é¡ããæè¡çãªèª²é¡ãããããããã£ã¦ãã©ããã§èãããã¨ããã¾ãããï¼ãããEngineering Managerã®æ¹ã ãæ®æ®µè§£æ±ºãããã¨ãã¦ããåé¡é åã«ä»ãªãã¾ããã
ã¤ã¾ãããããã®åé¡é åã¯Engineering Managerã®ã¿ãªãããæ®æ®µåãçµãã§ããæ¥åãã®ãã®ãªã®ã§ããã¨ãããã¨ã¯ãã¿ãªããã1å¹´ãªãåæãªã4åæãªããç®æ¨è¨å®ãã¾ãããï¼ãããããåé¡é åã課é¡ã¨æã£ã¦ãã¦ãããããã¨ã³ã¸ãã¢ãã¼ã ã¯ããã解決ãããã ãã¨ããç®æ¨è¨å®ã
ã§ãããããã¯é説çãªãã§ããããããã®èª²é¡ãå ¬è¡¨ãã¦ãã¾ãã¾ãããããèªåãã¡ã¯ããããããã¨æã£ã¦ãããã ãã©ãããè¨ã課é¡ãããã¾ããã§ããããã解決ãã¦ããããã¨æã£ã¦ãã¾ãï¼ãã¨é«ããã«å®£è¨ããã®ã§ãããã解決ã®éçãã¤ãã¦ããã®ã§ããã°ãããä¸ç·ã«å ¬è¡¨ãã¾ããããããã¯ããã¼ã±ãã£ã³ã°ãã§ããåºåãã§ããPRã ã§ãããã¾ãããèªåãã¡ã®èª²é¡ãå ±æãã¦ããã ãã§ããããããã¨ã©ããªãã®ãã
ä¸ã®ä¸ã®ã¨ã³ã¸ãã¢ã®å¤§åã¯ã課é¡ã解決ãããã¦ããããããã¾ãããããã¦ãèªåãå¼·ã¿ãæã£ã¦ãã課é¡è§£æ±ºãã¾ãã¯èªåããããã伸ã°ãããã¨æã£ã¦ãã課é¡è§£æ±ºãè¦ã¤ããã¨ãã®ã©ããæãåºãã»ã©ãã£ã¦ã¿ãããªãã¾ãã
ãã®ã¢ããã¼ãã®è¯ãç¹ã¯ä»¥ä¸ã®2ç¹ã§ãã
- ããä¸è¨ã®æ§ãªã¨ã³ã¸ãã¢ã課é¡ã«èå³ãæã£ã¦ãä¼ç¤¾ãã¨ã³ã¸ãã¢çµç¹ã®ãã¸ã§ã³ã«ãèå³ãæã£ã¦ã¸ã§ã¤ã³ãã¦ãããã°æå¼·ã®æ¦åã«ãªãã¾ã
- ã©ã®ã¿ã¡EMãç®æ¨è¨å®ãã¦ãã課é¡é åãªã®ã§ãã¨ã³ã¸ãã¢ãã¼ã ã¯åãçµãå¿ è¦ãããã¾ã
ã©ã¡ãã®éããã©ã£ãã¨ãã¦ããæ°ã¶æå¾ã«ã¯ä½ãããã®å®ç¸¾ãåºãã¦ãããã¨ã§ããããå®ç¸¾ãåºãªãã£ãå ´åã¯ã¾ãé å¼µã£ã¦ãã ãããå®ç¸¾ãåºãæç¹ã§ãå®éã«è§£æ±ºããåé¡é åï¼ãµã¼ãã¹ãããããªãããçµç¹ãããããªãããæè¡ãããããªãï¼ã¨ãã®è§£æ±ºããã»ã¹ãããã¼ã±ãã£ã³ã°ããåºåããPRã ãã¦ãã¾ãã¾ãããããã®æç¹ã§ã¯ãä¸èº«ã®ããå®ç¸¾ãã¨ãªã£ã¦ããããããã®ç¹ã«ããã¦ã¯ã³ãã¥ããã£ç»å£ããããã°è¨äºå ¬è¡¨çã ãããã©ã³ãã£ã³ã°ã¨ãã¦å¹ãã¦ãã¾ããã¨ã³ã¸ãã¢ã®å¤ãã¯ãããã¨ãã課é¡ããããã£ã¦è§£æ±ºãããã¨ãã話ã大好ãã§ãããã
ãã¦ãããããããããã¨ãã姿ã«ä¸æ©è¿ã¥ããã¨ããã§ãåã³ç«ã¡æ¢ã¾ã£ã¦æ¯ãè¿ã£ã¦ã¿ã¾ããããããããããããã¨ããçæ³ã¨è¦æ¯ã¹ãæã®ãç¾å¨ã®ç¶æ ããå度è¨èªåããããµã¼ãã¹ãããã¨ã³ã¸ãã¢çµç¹ãããæè¡ãã®èª²é¡ããã¶ãåºãã¦ããã¾ããããããã¯ã¾ãã²ãããä¸è¨ã®ç¹°ãè¿ãã§ãã
ãã®ããã»ã¹ãç¹°ãè¿ãã¦ããã¨ããã¤ã®ã¾ã«ãããããããããã¨ãã姿ã«éããªãè¿ã¥ãã¦ãã¦ãããããèªç¤¾ãµã¼ãã¹ããèªç¤¾ã®ã¨ã³ã¸ãã¢çµç¹ããèªç¤¾ã®æè¡ãã®å¼·ã¿ã«å¤ãã£ã¦ãããã¨ã§ããããããã¦ãããªãã¯åéåéã«ãããã®å¼·ã¿ãä¸èº«ã®ããå®ç¸¾ã¨ãã¦ããã¼ã±ãã£ã³ã°ããåºåããPRã ãã¦ãã¦ããã¯ãã§ãã
ãã®é ã«ã¯ãã§ã«ããªãã®ç®æãã¦ããæè¡ãã©ã³ãã£ã³ã°ãå®æããçãèªç¤¾ã®ãµã¼ãã¹ãã¨ã³ã¸ãã¢çµç¹ãæè¡é åã®å¼·ã¿ãèªç¥ãã¦ããã¦ããç¶æ ãã¤ããã¦ããã¯ãã§ãã
ãããªã«ãã¾ãããã®ã ãããï¼
ãããç¾å®ã¯ãããªã«ãã¾ãããã¾ãããããã¾ã§èªãã§ããã ãã¦å¤§å¤ç³ã訳ãªãã§ãããä¸è¨ã¯ãã¹ã¦ç§ã®ä»®èª¬ã§ããä¸é¨ç§ã®ãã£ãªã¢ãéãã¦å®è¨¼ã§ããé¨åãããã¾ããããã¾ã ã«æå¾ã®ãããããããã¨è¨ã姿ã«ãã©ãã¤ãã¦æè¡ãã©ã³ãã£ã³ã°ãå®æãããã¨ãã段éã¾ã§éãããã¨ã¯ããã¾ããã
ãããããã®è¨äºã§æ¬è³ªçã«ä¼ãããã£ããã¨ã¯ã æè¡ãã©ã³ãã£ã³ã°ãé¸æããããã®æ¬è³ªçãªããã»ã¹ã¯ãEngineering Managerãæ¥ã 対å³ãã¦ãã課é¡è§£æ±ºã®ç©ã¿éãã¨å義ã§ãã ã¨ãããã¨ã§ããããµã¼ãã¹ã®èª²é¡ãã§ãã£ãããã¨ã³ã¸ãã¢çµç¹ã®èª²é¡ãã§ãã£ãããæè¡çãªèª²é¡ãã§ãã£ããããããã®èª²é¡ã解決ãã¦ããããã»ã¹ã®ä¸ã§ãå®éã«è§£æ±ºãã¦ãã£ããå®ç¸¾ããããã¼ã±ãã£ã³ã°ããåºåããPRããã¦ãããã¨ã§ãèªç¶ã¨èªç¤¾ã®æè¡ãã©ã³ãã£ã³ã°ã¯é¸æãã¦ãããããç§ã¯ä¿¡ãã¦ãã¾ãã
ãã¾ã
READYFORã§ã¯ãã誰ãããããããã¨ãå®ç¾ã§ããä¸ã®ä¸ãã¤ãããã¨ãããã¸ã§ã³ã®å ããæ³ãã®ä¹ã£ããéã®æµããå¢ãããããã®ãã©ãããã©ã¼ã ã¥ããã«åãçµãã§ãã¾ãã2019å¹´1æã®çºéCTOã®ã¸ã§ã¤ã³ãã1å¹´ã§ã¨ã³ã¸ãã¢çµç¹ã2åã«ãªããããæ¥æé·ãã¦ãã¾ããããããããã¸ã§ã³ã®å¤§ããã«å¯¾ãã¦ãã¾ã ã¾ã ã¨ã³ã¸ãã¢ã足ãã¦ãã¾ããã
READYFORã¨ããã¯ã©ã¦ããã¡ã³ãã£ã³ã° ã®ãã©ãããã©ã¼ã ã稼åãå§ãã¦ãããã§ã«8年以ä¸ãã£ã¦ãããæ£ç´ãªè©±ãã¬ã¬ã·ã¼ãã¤ã¢ããªã·ãã¯ãªã¤ããã«ãªã£ã¦ãã¾ã£ã¦ãã¾ããããã§ããããããã¨ã®å®ç¾ã®ãããã¹ã±ã¼ã©ãã«ãªã·ã¹ãã ã¸ã®å¤é·ãé²ãã¤ã¤ããµã¼ãã¹éçºãæ¨ãé²ãã¦ããããã¨èãã¦ãã¾ãã
課é¡ã解決ããã®ã大好ããªããªããä¸è¨ã®ãããªãã¼ã¯ã¼ãã«ããã¡ãã£ã¨ã§ãèå³ãæã£ãæ¹ã¯ããã²Twitter㧠itohiro73 ã¾ã§DMçã§ãæ°è»½ã«ãé£çµ¡ãã ããï¼æã ãæ±ãã¦ãã課é¡ã«ã¤ãã¦ãã£ãã°ããã«ã話ãããã¦ããã ãããã¨æã£ã¦ãã¾ãã
- å¯çµåãã¦ãã¾ã£ã¦ããããã³ãã¨ã³ãï¼Reactï¼ã¨ããã¯ã¨ã³ãï¼Railsï¼ã®åé¢ãæ¨ãé²ããReact/TypeScriptãç¨ãã¦ççµåã§å縮度ã®é«ãããã³ãã¨ã³ãã³ã³ãã¼ãã³ããè¨è¨ãã¤ã¤ãã¶ã¤ã³ã·ã¹ãã ã®æ§ç¯ããªã¼ããã¦ããããããã³ãã¨ã³ãããã¯ãªã¼ã
- æ¦ç¥çè¨è¨ãç¨ããè¤éãªãã¡ã¤ã³ã®ã¦ããã¿ã¹è¨èªã®çºè¦ãå¢çã¥ããããã³ã³ãã¯ã¹ãã®è¨è¨ãåã«å®ããã¦ããªãRuby on Railsã®è¤éãªã¢ããªã·ãã¯ãµã¼ãã¹ã®å¤§è¦æ¨¡ãªãã¡ã¯ã¿ãªã³ã°çã«åãçµãã ãã¨ã®ããããã¯ã¨ã³ãããã¯ãªã¼ã
- ããããSystem of Recordã¨å¼ã°ããããµã¼ãã¹ã®ãéã®æµããè¡ãçãå ã®æ±ºæ¸ã»ä¼è¨é åã®å ç¢ãªã·ã¹ãã ãæ§ç¯ãããããã¯ã¨ã³ãã¨ã³ã¸ãã¢
- è¨èªåããã¦ããªããµã¼ãã¹ä»æ§ãæ確ã«ãããªãã¡ã¯ã¿ãªã³ã°ã«åããããã®ãã¹ãè¨è¨ã»å®æ½ãæ¨ãé²ãããã¨ãå¾æãªQAã¨ã³ã¸ãã¢
- ä»ãããããã¯ã¨ããè å©ãã®ã¨ã³ã¸ãã¢
ã§ã¯ã§ã¯ãæ¬è¨äºã¯ä»¥ä¸ã¨ããã¦ããã ãã¾ãã
æ å ±å¼±è ãé£ãç©ã«ããæ å ±åæã«çä¸ã¯ã¾ã£ããçæã§ã¯ãªãã¨ãããã¨ãç¥ã£ã¦æ¬²ãã話 #æå°ã§ãçä¸ãããªãæ å¼±ãã¸ãã¹
æ®æ®µããè¨ã£ã話é¡ã«ã¯è¨åããªãã®ã§ãããã»ãã¨ãã«æ²ãããæ¤ããè¦ãã¦ããã®ã§ã¡ããã¨ããåèæ´»åããããã¨æãçï¼ãã¼ãã¼ãï¼ãã¨ã£ã¦ãã¾ãã
TL;DR
å«ç観ã®æ¬ å¦ãããããªæ å ±åæãæ±ãçµå¶è ããµã¼ãã¹ã®ååã絶対㫠è¨åãã¦ã¯ããã¾ãããããä¸åããã¾ãã 絶対ã«è¨åãã¦ã¯ããã¾ãããçä¸ãããåã¡ã§ã¯ãªããçä¸ãããè² ã ã§ããããä¸åããã¾ãã è² ã ã§ãã
ä½ãèµ·ãã
ä¸æ¨æ¥ï¼2019-10-19ï¼ããããããã¨ããããã°ã©ãã³ã°ã¹ã¯ã¼ã«ã¨ãã®çµå¶è ãçä¸ãã¦ãã¾ãã
ãã£ãããªå¢ãã§çãã¦ããã®ã§ä½ã®ãã¨ããããæ¹ã¯ããããã¨æãã¾ããããããªãã«ããããªãã©ã·ã¼ã®é«ã人ã§ããã°ããè¦ã¤ããããã§ãããã
ä»åã¯ãªãã©ã·ã¼ã®é«ãæ¹ã«åãã¦æ¸ãã¦ããã®ã§ãããã¦ç´°ããæ å ±ã¯åºãã¾ããããã®ããã°ãèªãã§ä½ã®ãã¨ãããããªãæ¹ã¯ããèªèº«ã®æ¤ç´¢è½åãé§ä½¿ãã¦æ¢ãã¦ã¿ã¦ãã ãããç´°ããæ å ±ï¼ç¹ã«ãµã¼ãã¹åï¼ãåºãã¦ãã¾ãã¨ãæ å ±å¼±è ãã人ãã¡ã®è¢«å®³ãå¢ãã¦ãã¾ãã®ã§ã絶対ã«è¨åãã¦ã¯ãããªãã¨èãã¾ãããã®ã¬ãã«ã®æ å ±ããã¨ã«æ¢ãã人㯠å åã«ãªãã©ã·ã¼ ãé«ãã®ã§å¤§ä¸å¤«ã§ãããï¼ãã¶ãï¼ã
åé¡ã¯ã ä»åã®åé¡ã®æ ¹åºãç解ã§ããªãã¬ãã«ã®æ å ±å¼±è ããµã¼ãã¹åããã¨ã«å½è©²ã¹ã¯ã¼ã«ãèªç¥ããçºè¦ããã¾ãã¾ã¨ç»é²ãã¦ãã¾ã ãã¨ãªã®ã§ãã
ãªãã©ã·ã¼ã®é«ã人ã¯ãå¨ãããªãã©ã·ã¼ã®é«ã人ãã¡ã«å²ã¾ãã¦çæ´»ãã¦ããå¯è½æ§ãé«ãã§ããããããã¨ãä¸ã®ä¸ã«ã¯ç¸å½ãªæ°ã®æ å ±å¼±è ããã ã¨ãããã¨ãã»ã¨ãã©èªç¥ã§ããªããããä»åã®ãããªçä¸ã«ããçµæãå®éã«æã£ã¦ããã®ã¨ã¯å ¨ãéãæ¹åã«è¡ããã¨ããªããªãæ³åã§ãã¾ãããä»åã¯ãã®ç¹ã«ã¤ãã¦ãªãã¹ãããããããç´è§£ãã¦ããããã§ãã
ä»åã®æµãããã£ã¨ã¾ã¨ããã¨
- èä½æ¨©ãæãã¦ããªãç»åãç¡æã§ã¹ã¯ã¼ã«ã®ããã°ã§ä½¿ç¨
- Twitterä¸ã§å½è©²ç»åã®èä½æ¨©ä¿æè ã«ãã£ã¦ç¡æ使ç¨ãè¨åããã
- ã¹ã¯ã¼ã«ã®çµå¶è ãããããããåé¤ãã¨ãã¾ããããã¨ãªãã©ã¤
- ãã®å¾ãåçµå¶è ããèä½æ¨©è»½è¦ã®çºè¨ããªããã
- ããã«æç« ãã½ã¼ã¹ã³ã¼ãã®çç¨ãææããã
- åçµå¶è ã¯ãæªã³ãããã¶ããè¦ããããããæçºçãªçºè¨ãç¹°ãè¿ã
- Togetterããããã°ã«èä½æ¨©çç¨ãã¾ã¨ããããçä¸
- ãã®å¾ããªãããªãã¤ã¼ãã®åµã§çãç¶ãã
- Goodpatchã®CEOã«ããè¨åãããå½è©²ã¹ã¯ã¼ã«åæ¥è ã®æ¡ç¨ãããªãæ¨ã®ãã¤ã¼ãããªããã
- åçµå¶è ã¯åçå´åçã®å ¬æ£ãªæ¡ç¨é¸èã«é¢ãããªã³ã¯ã«è¨åããGoodpatchã®å«ç観ã«é¢ãã¦åè«
- åçµå¶è ãQiitaã«èä½æ¨©ä¾µå®³é¨åã«ã¤ãã¦ã¾ã¨ãã
å ¸åççä¸æ¡ä»¶ã§ããä»åã¨ã«ããç®ç«ã£ãã®ããå½è©²çµå¶è ãå«ççã«åé¡ã®ããçºè¨ãç¹°ãè¿ããããã«æçºçãªæ 度ã§çä¸ãããã£ããã¨ã§ããããªããã®ãããªæ 度ãããã®ã§ããããæ®éã®äººã¯ç解ã«è¦ãã¿ã¾ããã ã£ã¦ãä¿¡ç¨å¤±ããããªãã§ããï¼å®éãä»åã®çä¸ã§å½è©²ã¹ã¯ã¼ã«ã«ã¯çµ¶å¯¾è¿ã¥ããããªãã¨æã£ãæ¹ãé常ã«å¤ãã¨æãã¾ãã
ãããããã®ãããªæè¦ã¨ã¯ããã¯ãã«ãçä¸ãã¦ãã¾ã£ããã¨ã§å½è©²ã¹ã¯ã¼ã«ã¯ããç»é²è ãå¢ããããã¸ãã¹ãæ¡å¤§ãã¦ããå¯è½æ§ãé«ããªã£ã¦ãã¾ã£ãã¨ç§ã¯èãã¾ãã
çä¸ããã®ã§ããã®ã¹ã¯ã¼ã«ã¯ããããçµå¶é£ã«é¥ãããããªãã®ï¼
æ®å¿µãªããããã¯ãªããªãã§ããããããããã®ã¾ã¾ã§ã¯ããããããã«å£²ãä¸ãã伸ã°ãã¦ããå¯è½æ§ãé«ãã§ãã
ããããã»ãã¨ä»åè ¹ç«ãããã®ã¯ãçä¸å ã®æ¬äººããã£ãã種æãããã¦ããã§ããããããªã®ã«çãã¦ãã¾ã£ã¦ããã®ãæ¬å½ã«ãããããæ¬äººã®ãã¤ã¼ãã«ããæ¸ãã¦ããã¾ã
ãã¤ãã¹ã¤ã¡ã¼ã¸ãæã¤ã®ã¯ããããããããé¡ã«å ãããã¤ãã¹ã¤ã¡ã¼ã¸æã£ã¦ã人ã ããªãã ããã ããããã¡ã¯ã¿ã¼ã²ããã«ãããã¦ãªãããä½ãåé¡ããªãã ããã¦é¢ç½ãããã§èªç¥ã®æ°ã®æ¹ãå¤ããã ãã
ã©ããããã¨ãªã®ï¼ãã¼ã±ããã®ã»ã°ã¡ã³ãããç解ããã
説æãåç´ã«ããããã«ããã¼ã±ãããåç´åãã¦ã2ã¤ã®ã»ã°ã¡ã³ãããåå¨ããªãã¨ä»®å®ãã¾ããæ å ±ãªãã©ã·ã¼ã®é«ã人ãã¡ã®ã»ã°ã¡ã³ãã¨ãæ å ±ãªãã©ã·ã¼ã®ä½ã人ãã¡ã®ã»ã°ã¡ã³ãã§ãã
ä»åã®é¨åã§æ¤ã£ã¦ããã»ã¨ãã©äººãã¡ã¯ãæ å ±ãªãã©ã·ã¼ã®é«ãã»ã°ã¡ã³ãã«å±ãã¦ãã¾ããããã¦ããã®å±¤ã®äººãã¡ã¯ãä»åã®é¨åãçä¸ããããã¨ã«ãã£ã¦ãå½è©²ã¹ã¯ã¼ã«ã®æ³çåé¡ç¹ãå«ççåé¡ç¹ãã¤ã¾ã³ããã«ãããã¨èãã¾ãããããããã¨ã«ãã£ã¦ããã¼ã±ããã«åå¨ããçãå½è©²ã¹ã¯ã¼ã«ã®åé¡ç¹ãèªèããå½è©²ã¹ã¯ã¼ã«ãã©ãã©ã追ãè©°ãããã¦ããã¨æ³åãã¾ãã
ã§ã¯æ¬å½ã«ãããªãã®ã§ãããããå®éã¯ãæ å ±ã¯æ¡æ£ãããã°ãããã»ã©ãå¤æ§ãªå±¤ã«æ¡æ£ããã¦ããã¾ããã¤ã¾ããæ å ±ãªãã©ã·ã¼ã®é«ãã»ã°ã¡ã³ããæ å ±ãªãã©ã·ã¼ã®ä½ãã»ã°ã¡ã³ã両æ¹ã«æ¡æ£ããã¦ããã¾ããã§ã¯æ¡æ£ãããæ å ±ã¯åæ§ã«ç解ããã¦ããã®ã§ããããï¼æ®å¿µãªããéãã¾ããæ å ±ãªãã©ã·ã¼ã®é«ãã»ã°ã¡ã³ãã«å±ãã人ãã¡ã¯ããã¨ãã¨æ¡æ£ãã人ãã¡ã¨åæ§ã«æ¤ãã¾ããããããæ å ±ãªãã©ã·ã¼ã®ä½ãã»ã°ã¡ã³ãã«å±ãã人ãã¡ã¯ãããããåé¡ã®è«ç¹ããããããã¾ãããèä½æ¨©ã¨ãå«ç観ã¨ããã¾ããã³ã¨ããªããã©ããã ãã ããã¨ããã¹ã¯ã¼ã«ã®ãµã¼ãã¹åãç®ã«å ¥ã£ã¦ãã¾ãã
å½è©²ã¹ã¯ã¼ã«ã®LPã«è¨ªããã¨ãæªãããªæè¨ãè¸ã£ã¦ãã¾ããããããæ å ±ãªãã©ã·ã¼ã®ä½ã人ãã¡ã®ä¸é¨ã«ã¯ããããã®æè¨ãã©ããé åçã«æ ããé«ãå¤æ®µã«ãé¢ããããªãã ãç»é²ããããªã£ã¦ãã¾ãã¾ãããã®ãããªã»ã°ã¡ã³ãã¯äººå£ã«å¯¾ãã¦ä¸å®ã®å²ååå¨ãã¦ãã¾ããããã¦ããã®ã»ã°ã¡ã³ãã¯ãæ®å¿µãªããä»åã®èä½æ¨©ä¾µå®³é¨åã«é¢ãã¦ãããããã®è«ç¹ãå«ççåé¡ç¹ã«ã¤ãã¦ã»ã¨ãã©ã¨è¨ã£ã¦ããã»ã©ç解ãã§ããªã人ãã¡ã§ããæ¡æ£ãããæ å ±ããä¸å¹¸ã«ãå½è©²ãµã¼ãã¹ã®Landing Pageã«ãã©ãçãã¦ãã¾ã£ã人ã¯ãå½è©²ãã¼ã¸ã®æè¨ã«å¼ãå¯ããããä¸å®ã®ã³ã³ãã¼ã¸ã§ã³ã¬ã¼ãã§ç»é²ãã¦ãã£ã¦ãã¾ãã¾ããããã¦ãããã®ç»é²æ°ã¯ãã·ã³ãã«ã« æ å ±ãæ¡æ£ãããã°ãããã»ã©ä¸å®ã®å²åã§å¢ãã¦ãã£ã¦ãã¾ã ã®ã§ãã
é«ãªãã©ã·ã¼ã®äººã¯æ£ããæ å ±ãæ¡æ£ãããã°ãããã»ã©å½è©²ã¹ã¯ã¼ã«ã«ææãä¸ããã¨ä¿¡ãã¦è¡åãèµ·ããã®ã ããå®éã¯éã®ãã¨ãèµ·ãã¦ãã¾ãã®ã§ãã
ä»å説æãããããããããããã«é«ãªãã©ã·ã¼ã»ã°ã¡ã³ãã¨ä½ãªãã©ã·ã¼ã»ã°ã¡ã³ãã¨ãã2種é¡ã«ãã£ããåé¡ãã¾ããããå®éã®ãã¼ã±ããã¯ãã£ã¨è¤éãã¨æãã¾ãããã ãçä¸ã®åå¦ã¨ãæ å ±å¼±è ã対象ã¨ããæ å ±åæã®ãã¼ã±ãããç解ããã«ã¯ãã®åç´åãæå¹ãã¨æãã¾ãã
æ å ±åæãæ±ãç¸æã«èªåã¨åã価å¤è¦³ã®å俵ã§æ¦ãã®ã¯çãæªããã
ä»åã®çä¸ã§æ¤ããé²ãã«ãã¦ããã®ã¯ãæ確ã«ãªãã©ã·ã¼ã®é«ããã¨ã³ã¸ãã¢ããã¸ãã¹ãã³ã¨ãã¦ã®å«çæãæã£ããé常ã«ã¾ã£ã¨ããªæ¹ã ã§ããã ãããããä»åã®ãããªèä½æ¨©ãèãã«ãããããªçµå¶è ã®å¯¾å¿ã«æããè¦ãããªãã«ã¯çä¸ããããã¨ã§å½è©²ã¹ã¯ã¼ã«ã®å質ãå«ç観ã«é¢ããè¦éããªãããå½è©²ã¹ã¯ã¼ã«ã®è¢«å®³è ãæ¸ããããã¨æã£ãæ¹ãå¤ãã®ã§ã¯ãªãã§ããããã
ããããä¸ã§èª¬æããéããããã¯æ®å¿µãªããå ¨ãã®éå¹æã§ãã
å½è©²çµå¶è ãããã°ã©ãã³ã°ã¹ã¯ã¼ã«ãçµå¶ãã¦ããã¨ããäºå®ãããããããå¤ãã®ã¨ã³ã¸ãã¢ãçµå¶è ããã¸ãã¹ãã³ãèªåãã¡ã¨åçã®å«ç観ãæ£ç¾©æãåæã«ãç¸æããããããã観念ããã ããã¨ããããããããããçãã ããã¨æ³åããã¨æãã¾ãï¼èªåãããã§ããï¼ããããã£ãæå³ã§ããããªæ¹ããæ³çåé¡ç¹ããä¿¡ç¨ã«é¢ããåé¡ãå«ççãªåé¡ãçªã£ã¤ãã¦ããã¨æãã¾ãã
ããããå½è©²çµå¶è ã¯ã稼ããã¨ä»¥å¤ã¾ã£ããèå³ããªããããã¾ã£ããæã«ä»ãã¦ããªãæ§åã§ãããã¡ããèªåã§ç¨®æãããã¦ããã
稼ãæ¹ãåãã£ã¦ãªããã ããã åç´ãªã¤ã©ã¹ãããç»åãªãã¦ãããµãã¦ã¦ã©ãã§ã使ãåããã¦ãã®ã«ã ã¾ããã ãããéã稼ããªãã¨ããã
é常ã§ããã°ä¿¡ç¨åé¡ã¯ãã¸ãã¹ã®æ ¹å¹¹ãæºãããã®ã§ãããå½è©²ã¹ã¯ã¼ã«ã¯ããããä¿¡ç¨ãåé¡ã¨ãªããããªåå¼ã¯ãã¦ããªã模æ§
å ã ãåå¼ãããã¨æã£ã¦ããããã®æ¹åæ§ã§ãã©ã³ãã£ã³ã°ãã¦ãªãããã
ããã¦ãã©ãããå½¼ã¯ãã¨ãã¨ã¨ã³ã¸ãã¢ã§ã¯ãªãã売ãä¸ãããããç³»ã®ãããã§ãã·ã§ãã«ããããªãã¨ã»ãã¨ç¡æµã§ããæè¡çãªå«çæãæããªããã¨ã«ãªãã®èºèºããªããã¨ã«ãã稼ããã¨ã ããèãã¦ãããããããå½¼ã¯ä»ã®ãã¸ãã¹ã«å¯¾ãã¦ãå¥ã«æçãä½ããªãã®ã§ããããçä¸ãã¦ä¿¡ç¨ã失ã£ã¦ãçããçãããªãã®ããªã¨æ³åãã¾ããããå ãã¸ãã¹ã§åé¡ã«ãªãã¬ãã«ã§ä¿¡ç¨ã失ã£ã¦ãã¾ãå¥ã®ãã¡ã¤ã³ã§ãã¸ãã¹ãå§ããã°ãããå½¼ã¯æ å ±å¼±è ãé£ãç©ã«ãã¦ç¨¼ãæ¹æ³ãç解ãã¦ããã®ã§ããã¡ã¤ã³ããªãã§ãããã¨ç¨¼ããã¨ãã§ãã¦ãã¾ããã§ãã
ããã«æå¼·ãäºå®
ä»åã®é¨åã§ç¹å¾´çã ã£ãã®ããã¹ã¯ã¼ã«å é¨ã®æ¹ã ããã®çµå¶è ã«å¯¾ãã¦å¥½æçãªæ 度ã示ãã¦ãããã¨ã§ããããããããã¹ã¯ã¼ã«ã®æºè¶³åº¦èªä½ã¯ç¸å½é«ããã ã¨æ³åãã¾ããããã¦ãå ãã¹ãã¨ãããã¨ã§äººå¿ææ¡è¡ã«é·ãã¦ããå¯è½æ§ãé«ãã§ããçä¸ãã¦ãå é¨ããã¯ä¿¡ç¨ã失ããªãèªä¿¡ãããã®ããããã¾ããã
ããä¸ç¹ãä»åç§ã注ç®ããã®ã¯ãGoodpatchã®CEOãå«ç観ã«ã¤ãã¦è¨åããéã«ãããã¾ã§ã®æªè ã¹ã¿ã³ã¹ã»ç ½ãã¹ã¿ã³ã¹ã¨ã¯ä¸è»¢ãã¦ãç¸æã®å«ç観ãéã«æ»ããæ¹åã«è»¢ãããã¨ã§ããããã¯ã¯ãããè¦ãã¨èªåãæ£ã«ä¸ãã¦ãªã«ãã£ã¨ãããæ¡ä»¶ãªãã§ãããã¹ã¯ã¼ã«å¨ç±è ã«å¯¾ãã¦å®ãã®å§¿å¢ãè¦ãããã¨ã§ãå é¨ã®å¿ èª ããºãã¼ã³ã¨ä¸ããã¾ããããã«ãã¡ãã£ã¨é«åº¦ãªè«æ¦ãç¹°ãåºãããã¨ã§ãè°è«ã®å 容ãããã¾ã§ããç解ã§ããªã人ãã¡ã«ãããã¹ã¯ã¼ã«ã®ãããã¯ãªããããã人ã¨è«æ¦ãã¦è¨ãè² ããã¦ãï¼ãã¦ãªããã ãã©...ï¼ããã£ã±ãããã人ãªãã ãã¨ããå°è±¡ãæ¤ãä»ãããã¨ãã§ãã¾ãã
å®å ¨ã«ãã»ã°ã¡ã³ãã®ã¿ã¼ã²ããï¼ä½ãªãã©ã·ã¼å±¤ï¼ã«å¯¾ãã¦ã®ã¿ãã©ã³ãã£ã³ã°ãä»æãã¦ããããã§ããã以å¤ããã¯ã©ãæãããããçããçãããªããã§ã... ãããç解ããªãã¨çä¸ã®åå¦ã«è² ãã¦ãã¾ãã¾ãã
çä¸ããã°æ²ããããããã¨æã£ã¦ããããªãã大ééãã§ã
ä¸ã®ä¸ã®ãªãã©ã·ã¼ã®é«ãæ¹ã®ã»ã¨ãã©ã¯ãä¿¡ç¨ã糧ã«ãã¦ãã¸ãã¹ããããªã£ã¦ãã¾ãããã¾ããããã°ã©ãã³ã°ãæ¦å¨ã«ãã¦æ´»èºããã¨ã³ã¸ãã¢ã®å¤ãã¯æè¡å«çã«ã¨ã¦ãææã§ããã ãããããä¿¡ç¨ãå«çæã«åãããã¨ã«å¯¾ããéæã«åå¿ãã¦ãã¾ãã¾ããããã¦ãèªåã®åå£ã§æ¦ãã°æ²ããããããã¨æã£ã¦ãã¾ãããããã¾ããããç¾ç¶ã¯ã©ããåãæªããã§ã...
æ å ±å¼±è ã®è¢«å®³è ãæ¸ããããã«ãããµã¼ãã¹åãçµå¶è ã®ååãå ¬è¡¨ãã¦åèæ´»åãããªããã°ãããªãã®ã§ã¯ï¼
æ®é ·ãªè©±ããããã¾ããããããã¯ã¾ããã£ã¦ãã¾ããããªããã¨ãæ´å²ã証æãã¦ãã¾ããé«ç¥çå¨ä½ã®ã¨ããã¤ã³ãã«ã¨ã³ãµã¼ã§ããã¾ã§æ£ã çä¸ãã¦ãã¦ããæ¹ãããã£ãããã¾ããæè¿ããã®æ¹ã®ãèªæãªã¬ãã«ã§è²»ç¨å¯¾å¹æãä½ãã§ãããé«é¡ã®ãªã³ã©ã¤ã³ãµãã³ã«é¢ããç»é²ãã人ãå¾ããããªããã¨ããåç¥ã§ããããï¼ãã¡ãããªãã©ã·ã¼ã®é«ãæ¹ã§ããã°å°ã調ã¹ãã°ãããã®ã§ããã¦è¨åãã¾ãããããããããã¨ã§ãã
ã©ããããããããï¼
ã¨ã«ãããããã£ãã±ã¼ã¹ã§ã¯æ å ±ãæ¡æ£ããªããæ å ±ã«è¨åããªãã®ãæåã®çã ã¨æã£ã¦ã¾ãã
çä¸åæ³ã¯è©±é¡ã«ãããè² ããä½ã話é¡ã«ããªãã®ãä¸çªãªãã ã¨ãããã¨ããªãã©ã·ã¼ã¨ãã¦åèãã¦ãããããã説æã®ããã«å ·ä½ä¾ãæ示ãã¦ãã¾ãã¨èªå·±çç¾ã«é¥ãã¨ããç½ ãããã¾ããã
— ãã¨ã²ã (@itohiro73) October 19, 2019
ãã ãããæ å ±æ度ã®é«ã人ãã¡ã®éã§åé¡ã®åå¨ãå ±æã§ããªãã¨ããåé¡ãããã¾ãã¦... ãªãã¨ããã¾ãæ¹æ³ãªãããªã¨èãã¦ããã§ãããç§ã®æãã¯ãªã¨ã¤ãã£ããã£ã§ã¯ #æå°ã§ãçä¸ãããªãæ å¼±ãã¸ãã¹ ã¿ãããªã¿ã°ãã¤ãã¦å ±æãããããããæãã¤ããªã...
ã¬ã®ã¥ã¬ã¼ã·ã§ã³ã¨ãã¦ã¯ã
- ãã®ã¿ã°ãè¦ãã絶対ã«åºæåè©ã«è¨åããªã
- åé¡ç¹ãäºå®ã ããå ±æãããªãã©ã·ã¼ã®é«ã人ã§ããã°ãã®åºæåè©ã«ãã©ãçããããã«ãã
- æ å¼±ãã¸ãã¹ã«ã¾ã¤ããåºæåè©ãæ¡æ£ããªãããã ãã®ã¿ã°ãªã®ã§ãç§åãã¤ã¸ã¡ã«ã¤ãã£ã¡ããã¡ã
ã¨ãã¨ããã¯ãªã¨ã¤ãã£ããªæ¹ã ããã²è¯ãã¢ã¤ãã¢ãæãã¤ãããã³ã¡ã³ããã¯ã¦ãã§å ±æãã¦ãã ããã¾ããã§ããããï¼ï¼ï¼ï¼
ãã£ã¡ããªãã¨ããªãã¤ã¼ãã¨ãè¨åã¨ããã¡ãã£ããã©ãããã...
ä»ããã§ãé ãããã¾ãããããªããæ¬å½ã«æ£ããå«ç観ãæã£ã¦ãããªãã° å ¨é¨æ¶ãã¾ãããï¼ï¼ï¼ ããä¸åããã¾ããå ¨é¨æ¶ãã¾ãããï¼ï¼ï¼
ã»ãã¨ã«ãããªã®ããªã¼ï¼
ãã£ããçä¸ãããæ¹ãæªå¾³æ¥è ã«çæãä¸ããããããããªããã¨æã£ã¦ããæ¹ããã®ããã°ãèªãã å¾ã«å½è©²çµå¶è ã®çºè¨ãããä¸å追ã£ã¦ã¿ã¦ãã ãããããã£ããã¸ã ã¼ã¨æãçºè¨ããããããã§è¦åããããã¨æãã¾ããå½è©²çµå¶è ã¯ä»åã®é¨åã«å ¨ãæãä»ãã¦ãã¾ãããããããåãã§ãã¾ããããã¦ãããã¯ãã¸ãã¹ã«ãããä¿¡ç¨ãã³ã³ãã©ã¤ã¢ã³ã¹ã®éè¦æ§ãç解ãã¦ããªãããã§ã¯ãªããããã主æ¦å ´ã«ãã¦ããªãã ããªã®ã§ãã
Eclipse Collections 10.0ã®æ°æ©è½ - Part 3 #EclipseCollections
æ¬è¨äºã¯Donald Raabæ°ã«ãã New Features of Eclipse Collections 10.0 — Part 3 - Donald Raab - Medium ãå ã«ããæ¥æ¬èªçã®è¨äºã§ããæ¥æ¬èªã§ããããããæ å ±ã¨ãªãããã«é©å®ç·¨éãã¦ãããæ¥æ¬èªè¨³ã¨ã¯éã£ã¦å¿ ãããå ã®æç« ã訳ãããã®ã§ã¯ããã¾ããï¼æ¬äººã«rewriteã®è¨±å¯ãããã£ã¦ããã¾ãï¼ãåæãåèã«ãããå ´åã¯ä¸è¨ãªã³ã¯ããã©ããã
Eclipse Collections 10.0ã®æ°æ©è½ãç¨ããã³ã¼ãä¾ãç´¹ä»ãã¦ããã¾ãã
ãµããªã¼
æ¬è¨äºã§ã¯ãEclipse Collections 10.0がリリースされました #EclipseCollections - itohiro73’s blog ã§æãã26åã®æ°æ©è½ã®ãã¡ãæå¾ã®6åãç´¹ä»ãã¾ããPart 1ã§ã¯ãæåã®10åãPart 2ã§ã¯æ¬¡ã®10åã®æ°æ©è½ãä¾ã¨ã¨ãã«ç´¹ä»ãã¾ããã
21. RichIterable.getAny
ã®å®è£
getAny
ã¡ã½ããã¯ãé åºã®ä¿è¨¼ãªãã³ã¬ã¯ã·ã§ã³ã®æåã®è¦ç´ ãè¿ãã¾ãã ãã®ã¡ã½ããã¯ããã¨ã㨠RichIterable
ã§æä¾ããã¦ãã¦ãé åºä¿è¨¼ãããã¦ããªãã³ã¬ã¯ã·ã§ã³ã§éæ¨å¥¨ã¨ãªã£ã getFirst
ã¡ã½ããã®ä»£æ¿ã¨ãªãã¾ãã
@Test public void getAny() { Interval interval = Interval.fromTo(100, 1); Integer anyList = Lists.mutable.withAll(interval).getAny(); Integer anySet = Sets.mutable.withAll(interval).getAny(); Integer anyBag = Bags.mutable.withAll(interval).getAny(); Integer anyStack = Stacks.mutable.withAll(interval).getAny(); Assert.assertEquals(Integer.valueOf(100), anyList); Assert.assertEquals(Integer.valueOf(1), anySet); Assert.assertEquals(Integer.valueOf(1), anyBag); Assert.assertEquals(Integer.valueOf(1), anyStack); }
22. ããªããã£ãã®ããã·ã¥ãã¼ã¿æ§é ã«ãããresize/rehash
ã¡ã½ããã®å·æ°ã¨æ¨æºå
ããã¯æ°æ©è½ã¨ããããã¯æ¹åã§ãããå
¨ã¦ã®ããªããã£ãã®ããã·ã¥ãã¼ã¿æ§é ã«å½±é¿ããã®ã§ããã¤ã©ã¤ãããã«å¤ãããã®ãã¨æãã¾ãã
å¤æ´ã®å¤§é¨åã¯ããã·ã¥ãã¼ã¿æ§é ã® rehashAndGrow
ã¡ã½ããã«ããã¾ãã
ãã¼ã¸ã§ã³9.2
private void rehashAndGrow() { this.rehash(this.table.length << 1); }
ãã¼ã¸ã§ã³10.0
private void rehashAndGrow() { int max = this.maxOccupiedWithData(); int newCapacity = Math.max(max, smallestPowerOfTwoGreaterThan((this.occupiedWithData + 1) << 1)); if (this.occupiedWithSentinels > 0 && (max >> 1) + (max >> 2) < this.occupiedWithData) { newCapacity <<= 1; } this.rehash(newCapacity); }
23. Iterable<BoxedPrimitive>
ããPrimitiveStack/Bag/List/Set
ã¸å¤æãããã¡ã¯ããªã¡ã½ããã®å®è£
Eclipse Collections 10.0以åã§ã¯ãããã¯ã¹ãããããªããã£ãåã® Iterable
ãããªããã£ãã³ã¬ã¯ã·ã§ã³ã«å¤æããã«ã¯ãã¾ã㯠Iterable
ã Collection
ã¾ã㯠Stream
ã«å¤æããå¿
è¦ãããã¾ããã Stream
ã®å ´åã¯ã Collectors2
ã§æä¾ããã¦ããããªããã£ãCollectorã§ããªããã£ãã®ã³ã¬ã¯ã·ã§ã³ã«å¤æããå¿
è¦ãããã¾ããã ãã¼ã¸ã§ã³10.0ããã¯ã以ä¸ã®ãããªãã¡ã¯ããªã¡ã½ãããç¨ã㦠Iterable
ããããªããã£ãã³ã¬ã¯ã·ã§ã³ãç´æ¥çæãããã¨ãã§ãã¾ãã ãã®æ©è½ã¯ãå
¨ã¦ã®ããã¯ã¹ãããããªããã£ãå Iterable
ãããå
¨ã¦ã®ããªããã£ãã®ã³ã¬ã¯ã·ã§ã³åã«å¯¾å¿ãã¦ãã¾ãã
@Test public void convertFromIterableToPrimitiveCollection() { Iterable<Integer> iterable = Interval.oneTo(5); IntInterval intInterval = IntInterval.oneTo(5); MutableIntList mIntList = IntLists.mutable.withAll(iterable); ImmutableIntList iIntList = IntLists.immutable.withAll(iterable); Assert.assertEquals(intInterval, mIntList); Assert.assertEquals(intInterval, iIntList); MutableIntSet mIntSet = IntSets.mutable.withAll(iterable); ImmutableIntSet iIntSet = IntSets.immutable.withAll(iterable); Assert.assertEquals(intInterval.toSet(), mIntSet); Assert.assertEquals(intInterval.toSet(), iIntSet); MutableIntBag mIntBag = IntBags.mutable.withAll(iterable); ImmutableIntBag iIntBag = IntBags.immutable.withAll(iterable); Assert.assertEquals(intInterval.toBag(), mIntBag); Assert.assertEquals(intInterval.toBag(), iIntBag); }
24. Multimaps
ãã¡ã¯ããªã¯ã©ã¹å
ã®'ImmutableSortedBagMultimapFactory`ã®å®è£
Multimaps
ã¯ã©ã¹ã«ã¯ããã°ãã ImmutableSortedBagMultimapFactory
ãæä¾ããã¦ãã¾ããã§ããããã¼ã¸ã§ã³10.0ã§ãã¡ãã®æ©è½ãã¤ãã«è¿½å ããã¾ããããååä»ãã«åé¡ãããç¾å¨issueãæãããã¦ãã¾ãã
25. Map
ããã©ã¡ã¼ã¿ã«ã¨ãMap
ãã¡ã¯ããªã¡ã½ããã®å®è£
Map
ããã㯠MapIterable
ã Maps
ãã¡ã¯ããªã¡ã½ããã«ããã㦠MutableMap
ãçæãããã¨ãã§ããããã«ãªãã¾ããã
@Test public void mapFactoryThatTakesMapAsParameter() { MutableMap<Integer, Integer> mutableSource = Maps.mutable.with(1, 1, 2, 2, 3, 3); ImmutableMap<Integer, Integer> immutableSource = Maps.immutable.with(1, 1, 2, 2, 3, 3); Assert.assertEquals(mutableSource, immutableSource); MutableMap<Integer, Integer> mutableOf = Maps.mutable.ofMap(mutableSource); MutableMap<Integer, Integer> mutableWith = Maps.mutable.withMap(mutableSource); Assert.assertEquals(mutableSource, mutableOf); Assert.assertEquals(immutableSource, mutableWith); MutableMap<Integer, Integer> mutableOfMI = Maps.mutable.ofMapIterable(immutableSource); MutableMap<Integer, Integer> mutableWithMI = Maps.mutable.withMapIterable(immutableSource); Assert.assertEquals(immutableSource, mutableOfMI); Assert.assertEquals(immutableSource, mutableWithMI); }
26. MultableMultimap.putAllPairs/add
ã¡ã½ãããã©ã¡ã¼ã¿ã¼ã¸ã®ã¯ã¤ã«ãã«ã¼ãåã®å°å
¥
ãã¡ãã¯ãµãã¤ã® putAllPairs
ã¡ã½ããã¨ã add(Pair)
ã¡ã½ããã®ã¸ã§ããªã¯ã¹ã®å¤æ´ã«ãªãã¾ãã Pair
åã« ? extends
ã®ã¯ã¤ã«ãã«ã¼ãåã足ããã¾ããã
boolean add(Pair<? extends K, ? extends V> keyValuePair) boolean putAllPairs(Pair<? extends K, ? extends V>... pairs) boolean putAllPairs(Iterable<? extends Pair<? extends K, ? extends V>> pairs)
使ç¨ä¾
@Test public void wildcardInMutableMultimapPutAllPairs() { MutableListMultimap<CharSequence, CharSequence> multimap = Multimaps.mutable.list.empty(); multimap.add(Tuples.pair("1-5", "1")); multimap.putAllPairs( Tuples.pair("1-5", "2"), Tuples.pair("1-5", "3")); multimap.putAllPairs( Lists.mutable.with( Tuples.pair("1-5", "4"), Tuples.pair("1-5", "5"))); Multimap<String, String> expected = Interval.oneTo(5) .collect(Object::toString) .groupBy(e -> "1-5"); Assert.assertEquals(expected, multimap); }
以ä¸ã§ã
以ä¸ã§Eclipse Collections 10.0ã®æ°æ©è½ããã¹ã¦ãç´¹ä»ãã¾ããã
Eclipse Collections 10.0ã®æ°æ©è½ã楽ããã§ããã ããã¨å¹¸ãã§ãï¼ï¼
Eclipse Collectionsã¯ã³ã³ããªãã¥ã¼ã·ã§ã³ãåãä»ãã¦ãã¾ãï¼ã©ãããå§ãã¦ãããããããããªãã¨ããæ¹ã¯itohiro73ã¾ã§DMããã ããã°åãã§ã¬ã¤ãããã¦ããã ãã¾ãã
ããã©ã¤ãã©ãªãæ°ã«å ¥ã£ã¦ããã ãã¦ãããããã«ç¥ããããã¨ããæ¹ã¯ãTwitterã§ããã·ã¥ã¿ã°#EclipseCollectionsãã¤ãã¦ã¤ã¶ããã¦ããã ãããããããã¯GitHubã¬ãã«ã¹ã¿ã¼ãã¤ãã¦ããã ããã¨ãã£ã¡ããããã³ã¾ãã®ã§ã©ãããããããé¡ããã¾ãï¼ï¼
Eclipse Collections 10.0ã®æ°æ©è½ - Part 2 #EclipseCollections
æ¬è¨äºã¯Donald Raabæ°ã«ãã New Features of Eclipse Collections 10.0 — Part 2 - Donald Raab - Medium ãå ã«ããæ¥æ¬èªçã®è¨äºã§ããæ¥æ¬èªã§ããããããæ å ±ã¨ãªãããã«é©å®ç·¨éãã¦ãããæ¥æ¬èªè¨³ã¨ã¯éã£ã¦å¿ ãããå ã®æç« ã訳ãããã®ã§ã¯ããã¾ããï¼æ¬äººã«rewriteã®è¨±å¯ãããã£ã¦ããã¾ãï¼ãåæãåèã«ãããå ´åã¯ä¸è¨ãªã³ã¯ããã©ããã
Eclipse Collections 10.0ã®æ°æ©è½ãç¨ããã³ã¼ãä¾ãç´¹ä»ãã¦ããã¾ãã
ãµããªã¼
æ¬è¨äºã§ã¯ãEclipse Collections 10.0がリリースされました #EclipseCollections - itohiro73’s blog ã§æãã26åã®æ°æ©è½ã®ãã¡ãããã«10åãç´¹ä»ãã¾ããPart 1ã§ã¯ãæåã®10åã®æ°æ©è½ãä¾ã¨ã¨ãã«ç´¹ä»ãã¾ããã
11. Bag.collectWithOccurrences
ã®å®è£
ãã®ã¡ã½ãããç¨ããã¨ãBag
ãã¼ã¿æ§é ã®ãªãã®å
¨ã¦ã®ã¦ãã¼ã¯ãªè¦ç´ ã¨ãã®åæ°ãç¨ãã¦ã³ã¬ã¯ã·ã§ã³ãå¤æãããã¨ãã§ãã¾ããå¼æ°ã«ã¯è¦ç´ ã¨ãã®åæ°ãå¥ã®ãªãã¸ã§ã¯ãã«å¤æãã ObjectIntToObjectFunction
ãæå®ãã¾ãã次ã®ä¾ã§ã¯ãè¦ç´ ã¨ãã®åæ°ã ObjectIntPair
ã®ã¤ã³ã¹ã¿ã³ã¹ã«å¤æãã¦ãã¾ãã
@Test public void collectWithOccurences() { MutableBag<String> source = Bags.mutable.with("1", "2", "2", "3", "3", "3"); MutableBag<ObjectIntPair<String>> targetBag = source.collectWithOccurrences(PrimitiveTuples::pair); MutableBag<ObjectIntPair<String>> expected = Bags.mutable.with( PrimitiveTuples.pair("1", 1), PrimitiveTuples.pair("2", 2), PrimitiveTuples.pair("3", 3)); Assert.assertEquals(expected, targetBag); }
12. ããªããã£ãã®Iterableã¸ã®reduce
ã¨reduceIfEmpty
ã®è¿½å
ä¾ãã° IntList
ã®å ´åããã® reduce
ã¡ã½ããã¯ãlong
㨠int
ãåãåã long
ãè¿ãé¢æ°ãã³ã¬ã¯ã·ã§ã³ã®åè¦ç´ ã«é©ç¨ãã¦ããã¾ããè¿ãå¤ãã¯ã¤ããã³ã°å¤æãããã¨ã«ãã£ã¦ä¾ãã° sum
ã®ãããªé¢æ°ã§ãªã¼ãã¼ããã¼ãèµ·ããã®ãé²ããã¨ãã§ãã¾ãã 空ã®ã³ã¬ã¯ã·ã§ã³ã®å ´å㯠NoSuchElementException
ãæããããããã«ãªã£ã¦ãã¾ãã
@Test public void reducePrimitiveIterables() { MutableIntList list = IntLists.mutable.with(1, 2, 3, 4, 5); long sum = list.reduce(Long::sum); Assert.assertEquals(15L, sum); Assert.assertEquals(list.sum(), sum); Verify.assertThrows( NoSuchElementException.class, ()-> IntLists.mutable.empty().reduce(Long::sum)); }
空ã³ã¬ã¯ã·ã§ã³ã®å ´åã«ãå®å
¨ã«å¯¾å¦ãããå ´åã«ã¯ã reduceIfEmpty
ã¡ã½ããã使ã£ã¦ããã©ã«ãã®è¿ãå¤ãæå®ãããã¨ãã§ãã¾ãã
@Test public void reduceIfEmptyPrimitiveIterables() { MutableIntList list = IntLists.mutable.with(1, 2, 3, 4, 5); long sum = list.reduceIfEmpty(Long::sum, 0L); Assert.assertEquals(15L, sum); Assert.assertEquals(list.sum(), sum); Assert.assertEquals(0L, IntLists.mutable.empty() .reduceIfEmpty(Long::sum, 0L)); }
13. ããªããã£ãç¨ã®<type1><type2>To<type1>Function
ã®è¿½å
ä¸ã® reduce
ã¡ã½ããã®ä¾ã§ã¯ãIntIterable
ã® reduce
ã¡ã½ãã㯠LongIntToLongFunction
ã¨ããæ°ããã¤ã³ã¿ã¼ãã§ã¼ã¹ãå¼æ°ã¨ãã¦åãåã£ã¦ãã¾ããã ãªãªã¼ã¹10.0ããã¯ãå
¨ã¦ã®ããªããã£ãåã®çµã¿åããã«å¯¾ãã¦2å¼æ°/1è¿ãå¤ã®é¢æ°åã¤ã³ã¿ã¼ãã§ã¼ã¹ãç¨æããã¦ãã¾ãã
@Test public void newLongTypeToLongFunctions() { MutableIntList intList = IntLists.mutable.with(1, 2, 3, 4, 5); LongIntToLongFunction sumFunction1 = Long::sum; long sum1 = intList.reduceIfEmpty(sumFunction1, 0L); Assert.assertEquals(15L, sum1); MutableByteList byteList = ByteLists.mutable.with((byte) 1, (byte) 2, (byte) 3); LongByteToLongFunction sumFunction2 = Long::sum; long sum2 = byteList.reduceIfEmpty(sumFunction2, 0L); Assert.assertEquals(6L, sum2); }
14. ããªããã£ãMapã¸ã®of/withInitialCapacity
ã¡ã½ããã®è¿½å
ããªããã£ãMapã®ãã¡ã¯ããªã¡ã½ããã§ã ofInitialCapacity
ã¾ã㯠withInitialCapacity
ãç¨ãã¦åæãµã¤ãºãæå®ãããã¨ãã§ããããã«ãªãã¾ããã
@Test public void ofAndWithInitialCapacity() { MutableIntIntMap map1 = IntIntMaps.mutable.ofInitialCapacity(100); MutableIntIntMap map2 = IntIntMaps.mutable.withInitialCapacity(100); Assert.assertEquals(map1, map2); }
15. RichIterable.countByEach
ã®å®è£
æ°ããã¡ã½ãã countByEach
ã¯ã groupByEach
ã flatCollect
ã¨ä¼¼ããã®ã«ãªãã¾ãããããã¯å
¨ã¦ãªãããã®é¢æ°åã¤ã³ã¿ã¼ãã§ã¼ã¹ãåãåã Iterable
ãè¿ãã¾ããcountByEach
ã®å ´åã®è¿ãå¤ã®å㯠Bag
ã«ãªãã¾ãã次ã®ä¾ã§ã¯ã3ã¤ã®ã¯ã©ã¹ï¼RichIterable.class
ã MutableList.class
ã ImmutableList.class
ï¼ãããå
¨ã¦ã®ã¡ã½ããã«å¯¾ãã¦åãååãæã¤ã¡ã½ãããæ°ãã¦ãã¾ããããã§ã¯ãªã¼ãã¼ãã¼ãããªã¼ãã¼ã©ã¤ãããã¦ããã¡ã½ãããã«ã¦ã³ãããã¾ãã
@Test public void countByEach() { MutableList<Class<?>> classes = Lists.mutable.with( RichIterable.class, MutableList.class, ImmutableList.class); Bag<String> methodNames = classes.countByEach(each -> ArrayAdapter.adapt(each.getMethods()) .collect(Method::getName)); Assert.assertEquals(8, methodNames.occurrencesOf("countByEach")); Assert.assertEquals(16, methodNames.occurrencesOf("groupByEach")); Assert.assertEquals(2, methodNames.occurrencesOf("sortThis")); }
16. UnifiedSetWithHashingStrategy.addOrReplace
ã®å®è£
UnifiedSetWithHashingStrategy
ã® addOrReplace
ã¡ã½ããã¯ãéåå
ã«åãå¤ãåå¨ããå ´åã«ç½®ãæãã¾ãã ããã¯ãå¤ãæ¸ãæããªã add
ã¡ã½ããã¨ã¯éãæåããã¾ãã
@Test public void addOrReplace() { UnifiedSetWithHashingStrategy<Integer> set = new UnifiedSetWithHashingStrategy<>( HashingStrategies.defaultStrategy()); Integer one = new Integer(1); set.addOrReplace(one); Assert.assertSame(one, set.get(1)); set.add(new Integer(1)); Assert.assertSame(one, set.get(1)); Integer otherOne = new Integer(1); set.addOrReplace(otherOne); Integer integer = set.get(otherOne); Assert.assertSame(otherOne, integer); Assert.assertNotSame(one, integer); }
17. UnmodifiableMutableOrderedMap
ã®å®è£
MutableOrderedMap
ã® asUnmodifiable
ã¡ã½ãããå¼ã³åºãã¨ã UnmodifiableMutableOrderedMap
ã¤ã³ã¹ã¿ã³ã¹ãè¿ããã¾ãã
@Test public void unmodifiableMutableOrderedMap() { MutableOrderedMap<Object, Object> map = OrderedMaps.adapt(new LinkedHashMap<>()) .asUnmodifiable(); Verify.assertInstanceOf( UnmodifiableMutableOrderedMap.class, map); }
18. ãã¥ã¼ã¿ãã«ãªããªããã£ãMapä¸ã§ã®withAllKeyValues
ã®å®è£
ãã¥ã¼ã¿ãã«ãªããªããã£ãMapã«è¤æ°ã®ãã¼ããªã¥ã¼ãã¢ãã¾ã¨ãã¦è¿½å ãããã¨ãã§ããããã«ãªãã¾ããã
@Test public void withAllKeyValues() { MutableIntIntMap map = IntIntMaps.mutable.empty() .withAllKeyValues( Lists.mutable.with( PrimitiveTuples.pair(1, 1), PrimitiveTuples.pair(2, 2), PrimitiveTuples.pair(3, 3) )) .withAllKeyValues( Lists.mutable.with( PrimitiveTuples.pair(4, 4), PrimitiveTuples.pair(5, 5) )); MutableIntIntMap expected = IntIntMaps.mutable.empty() .withKeyValue(1, 1) .withKeyValue(2, 2) .withKeyValue(3, 3) .withKeyValue(4, 4) .withKeyValue(5, 5); Assert.assertEquals(expected, map); }
19. Iterable
ããPrimitivePrimitive/PrimitiveObject/ObjectPrimitiveMap
ãçæããæ©è½ã®å®è£
Iterable
ã«2ã¤ã®é¢æ°åã¤ã³ã¿ã¼ãã§ã¼ã¹ãä¸ãããã¨ã«ãã£ã¦ããã¾ãã¾ãªããªããã£ãMapãçæãããã¨ãã§ããããã«ãªãã¾ããã1ã¤ç®ã®é¢æ°åã¤ã³ã¿ã¼ãã§ã¼ã¹ã¯ãã¼ãå°åºãã2ã¤ç®ã®é¢æ°åã¤ã³ã¿ã¼ãã§ã¼ã¹ã¯å¤ãå°åºããã®ã«ä½¿ããã¾ãããã®ã¡ã½ããã¯ãRichIterable
ã® toMap
ã¨é常ã«ä¼¼ã¦ãã¾ããéãã¯å
¨ã¦ã®ããªããã£ãMapã«å¯¾ãã¦åä½ããã¨ããç¹ã§ãã
@Test public void createPrimitiveMapFromIterable() { Iterable<Integer> integers = Interval.oneTo(5); MutableIntIntMap map = IntIntMaps.mutable.from( integers, key -> key, value -> value); MutableIntIntMap expected = IntIntMaps.mutable.empty() .withKeyValue(1, 1) .withKeyValue(2, 2) .withKeyValue(3, 3) .withKeyValue(4, 4) .withKeyValue(5, 5); Assert.assertEquals(expected, map); }
20. HashingStrategySets.of/withInitialCapacity
ã®å®è£
HashingStrategySets
ã® ofInitialCapacity
ããã㯠withInitialCapacity
ã¡ã½ãããç¨ã㦠HashingStrategySet
ãçæãããã¨ãã§ããããã«ãªãã¾ããã
@Test public void hashingStrategySetsOfOrWithInitialCapacity() { MutableSet<Object> set1 = HashingStrategySets.mutable.ofInitialCapacity( HashingStrategies.defaultStrategy(), 100); MutableSet<Object> set2 = HashingStrategySets.mutable.withInitialCapacity( HashingStrategies.defaultStrategy(), 100); Assert.assertEquals(set1, set2); }
ã¾ã ã¾ã ããã¾ã
Eclipse Collections 10.0ã«ã¯ã¾ã 6åã®æ©è½ãæ®ã£ã¦ãã¾ããããããè¨äºã¨ãã¦å ¬éãã¾ãã®ã§ã楽ãã¿ã«ã
Eclipse Collections 10.0ã®æ°æ©è½ã楽ããã§ããã ããã¨å¹¸ãã§ãï¼ï¼
Eclipse Collectionsã¯ã³ã³ããªãã¥ã¼ã·ã§ã³ãåãä»ãã¦ãã¾ãï¼ã©ãããå§ãã¦ãããããããããªãã¨ããæ¹ã¯itohiro73ã¾ã§DMããã ããã°åãã§ã¬ã¤ãããã¦ããã ãã¾ãã
ããã©ã¤ãã©ãªãæ°ã«å ¥ã£ã¦ããã ãã¦ãããããã«ç¥ããããã¨ããæ¹ã¯ãTwitterã§ããã·ã¥ã¿ã°#EclipseCollectionsãã¤ãã¦ã¤ã¶ããã¦ããã ãããããããã¯GitHubã¬ãã«ã¹ã¿ã¼ãã¤ãã¦ããã ããã¨ãã£ã¡ããããã³ã¾ãã®ã§ã©ãããããããé¡ããã¾ãï¼ï¼
Eclipse Collections 10.0ã®æ°æ©è½ - Part 1 #EclipseCollections
æ¬è¨äºã¯Donald Raabæ°ã«ãã New Features of Eclipse Collections 10.0 — Part 1 - Donald Raab - Medium ãå ã«ããæ¥æ¬èªçã®è¨äºã§ããæ¥æ¬èªã§ããããããæ å ±ã¨ãªãããã«é©å®ç·¨éãã¦ãããæ¥æ¬èªè¨³ã¨ã¯éã£ã¦å¿ ãããå ã®æç« ã訳ãããã®ã§ã¯ããã¾ããï¼æ¬äººã«rewriteã®è¨±å¯ãããã£ã¦ããã¾ãï¼ãåæãåèã«ãããå ´åã¯ä¸è¨ãªã³ã¯ããã©ããã
Eclipse Collections 10.0ã®æ°æ©è½ãç¨ããã³ã¼ãä¾ãç´¹ä»ãã¦ããã¾ãã
ãµããªã¼
æ¬è¨äºã§ã¯ãEclipse Collections 10.0がリリースされました #EclipseCollections - itohiro73’s blog ã§æãã26åã®æ°æ©è½ã®ãã¡æåã®10åãç´¹ä»ãã¾ãã
1. MultiReaderList/Bag/Set
ã«ç¹åããInterface
Eclipse Collectionsã«ã¯ãé·ããmulti-reader対å¿ã®ã³ã¬ã¯ã·ã§ã³å®è£ ãåå¨ãã¦ãã¾ãããããããã«å¯¾å¿ããã¤ã³ã¿ã¼ãã§ã¼ã¹ã¯åå¨ãã¦ãã¾ããã§ããã10.0以éã§ã¯ãããã®ã¤ã³ã¿ã¼ãã§ã¼ã¹ãå©ç¨ã§ããããã«ãªã£ã¦ãã¾ãã
@Test public void multiReaderList() { MultiReaderList<String> list = Lists.multiReader.with("1", "2", "3"); list.withWriteLockAndDelegate(backingList -> { Iterator<String> iterator = backingList.iterator(); iterator.next(); iterator.remove(); }); Assert.assertEquals(Lists.mutable.with("2", "3"), list); }
2. ããªããã£ãListããããªããã£ãStreamãçæããå®è£
æ®éã®ListããStreamãçæããã®ã¯ç°¡åã§ãããEclipse Collections 9.xã¾ã§ã¯ããªããã£ãListããStreamãçæããã®ã¯ç°¡åã§ã¯ããã¾ããã§ããã10.0ããã¯ä¸è¨ã®ããã«ããªããã£ãListããããªããã£ãStreamãç°¡åã«çæã§ãã¾ãã
@Test public void primitiveListToPrimitiveStream() { IntStream intStream1 = IntLists.mutable.with(1, 2, 3, 4, 5) .primitiveStream(); IntStream intStream2 = IntLists.immutable.with(1, 2, 3, 4, 5) .primitiveStream(); LongStream longStream1 = LongLists.mutable.with(1L, 2L, 3L, 4L, 5L) .primitiveStream(); LongStream longStream2 = LongLists.immutable.with(1L, 2L, 3L, 4L, 5L) .primitiveStream(); DoubleStream doubleStream1 = DoubleLists.mutable.with(1.0, 2.0, 3.0, 4.0, 5.0) .primitiveStream(); DoubleStream doubleStream2 = DoubleLists.immutable.with(1.0, 2.0, 3.0, 4.0, 5.0) .primitiveStream(); }
3. toMap
ã«ãããã¿ã¼ã²ããMapã®ãµãã¼ã
toMap
ã®ãªã¼ãã¼ãã¼ãã¨ãã¦ãã¿ã¼ã²ããã®Mapãå¼æ°ã¨ãã¦ã¨ãã¡ã½ããã追å ããã¾ããã
@Test public void toMapWithTarget() { MutableList<Integer> list = Lists.mutable.with(1, 2, 3, 4, 5); Map<String, Integer> map = list.toMap(String::valueOf, each -> each, new LinkedHashMap<>()); Map<String, Integer> expected = new LinkedHashMap<>(); expected.put("1", 1); expected.put("2", 2); expected.put("3", 3); expected.put("4", 4); expected.put("5", 5); Assert.assertEquals(expected, map); }
4. MutableMapIterable.removeAllKeys
ã®å®è£
Mapã«å¯¾ãã¦ãããSetã«å«ã¾ããè¦ç´ ã«å¯¾å¿ãããã¼ãåé¤ãã removeAllKeys
ã¡ã½ãããå©ç¨ã§ãã¾ãã
@Test public void removeAllKeys() { MutableMap<Integer, String> map = Maps.mutable.with(1, "1", 2, "2", 3, "3"); map.removeAllKeys(Sets.mutable.with(1, 3)); Assert.assertEquals(Maps.mutable.with(2, "2"), map); }
5 RichIterable.toBiMap
ã®å®è£
Eclipse Collections 10.0ã§ã¯ãRichIterable
ãBiMap
ã«å¤æãããã¨ãã§ãã¾ãã
@Test public void toBiMap() { MutableBiMap<String, Integer> expected = BiMaps.mutable.with("1", 1, "2", 2, "3", 3); MutableBiMap<String, Integer> biMap = Lists.mutable.with(1, 2, 3).toBiMap(String::valueOf, i -> i); Assert.assertEquals(expected, biMap); }
6 Multimap.collectKeyMultiValues
ã®å®è£
Multimapã«å¯¾ãã¦ãkeyã¨valueã®ä¸¡æ¹ã«å¯¾ãã¦functionãé©ç¨ãã¦å¤æã§ããcollectKeyMultiValues
ã¡ã½ããã追å ã«ãªãã¾ããã
@Test public void collecKeyMultiValues() { MutableListMultimap<String, String> multimap = Multimaps.mutable.list.with( "nj", "Monmouth", "nj", "Bergen", "nj", "Union"); MutableBagMultimap<String, String> transformed = multimap.collectKeyMultiValues( String::toUpperCase, String::toUpperCase); Assert.assertEquals(Multimaps.mutable.bag.with( "NJ", "MONMOUTH", "NJ", "BERGEN", "NJ", "UNION"), transformed); }
7 ã³ã¬ã¯ã·ã§ã³ãã¡ã¯ããªã«ãããfromStream(Stream)
ã®å®è£
List
ãSet
ãBag
ãStack
ã®ããããã®ãã¡ã¯ããªã¯ã©ã¹ã«ããã¦ãStreamããã³ã¬ã¯ã·ã§ã³ãçæããfromStream
ã¡ã½ãããå©ç¨ã§ããããã«ãªãã¾ããã
@Test public void fromStreamOnCollectionFactories() { MutableList<Integer> list = Lists.mutable.fromStream(Stream.of(1, 2, 3, 4, 5)); Assert.assertEquals( Lists.mutable.with(1, 2, 3, 4, 5), list); MutableSet<Integer> set = Sets.mutable.fromStream(Stream.of(1, 2, 3, 4, 5)); Assert.assertEquals( Sets.mutable.with(1, 2, 3, 4, 5), set); MutableBag<Integer> bag = Bags.mutable.fromStream(Stream.of(1, 2, 3, 4, 5)); Assert.assertEquals( Bags.mutable.with(1, 2, 3, 4, 5), bag); MutableStack<Integer> stack = Stacks.mutable.fromStream(Stream.of(1, 2, 3, 4, 5)); Assert.assertEquals( Stacks.mutable.with(1, 2, 3, 4, 5), stack); }
8 LazyIterate.cartesianProduct
ã®å®è£
ç´ç©éåãæ±ããcartesianProduct
ã¡ã½ããã¯ãã¨ãã¨ã¦ã¼ãã£ãªãã£ã¡ã½ããã¨ãã¦åå¨ãã¦ãã¾ããããSet
ã®ã¿ããã©ã¡ã¼ã¿ã¼ã¨ãã¦ã¨ã£ã¦ãããããä»ã®Iterable
ã«å¯¾ãã¦ã¯ã¯æ示çã«Set
ã«å¤æãã¦ããå¼ã³åºãå¿
è¦ãããã¾ãããä»åå°å
¥ãããæ°ãã LazyIterate.cartesianProduct
ã§ã¯ã©ã®ãããªIterable
ãããç´ç©éåãæ±ãããã¨ãã§ãã¾ãã
@Test public void cartesianProduct() { MutableList<Integer> numbers = Lists.mutable.with(1, 2, 3); MutableList<String> letters = Lists.mutable.with("A", "B", "C"); MutableList<Pair<String, Integer>> pairs = LazyIterate.cartesianProduct(letters, numbers).toList(); MutableList<Pair<String, Integer>> expected = Lists.mutable.with( Tuples.pair("A", 1), Tuples.pair("A", 2), Tuples.pair("A", 3), Tuples.pair("B", 1), Tuples.pair("B", 2), Tuples.pair("B", 3), Tuples.pair("C", 1), Tuples.pair("C", 2), Tuples.pair("C", 3)); Assert.assertEquals(expected, pairs); }
9 ããªããã£ãMapã¸ã®updateValues
ã¡ã½ããã®è¿½å
ããªããã£ãMapã«å¯¾ãã¦å
¨ã¦ã®valueãæ´æ°ãããå ´åã updateValues
ã使ããã¨ãã§ãã¾ãã
@Test public void updateValues() { MutableIntIntMap map = IntIntMaps.mutable.empty() .withKeyValue(1, 5) .withKeyValue(2, 3) .withKeyValue(3, 10); map.updateValues((k, v) -> v + 1); MutableIntIntMap expected = IntIntMaps.mutable.empty() .withKeyValue(1, 6) .withKeyValue(2, 4) .withKeyValue(3, 11); Assert.assertEquals(expected, map); }
10 MutableMultimap.getIfAbsentPutAll
ã®å®è£
MutableMultimap.getIfAbsentPutAll
ã¯ãMutableMap.getIfAbsentPut
ã¨åæ§ã®æ©è½ãæã¡ã¾ããéãã¨ãã¦ã¯ãMutableMultimap.getIfAbsentPutAll
ã§ã¯è¤æ°ã®valueãã³ã¬ã¯ã·ã§ã³ã¨ãã¦putãããã¨ãã§ããç¹ã«ããã¾ãã
@Test public void getIfAbsentPutAll() { MutableListMultimap<Integer, Integer> multimap = Multimaps.mutable.list.with(2, 1); ImmutableList<Integer> defaultValue = Lists.immutable.with(1, 2, 3); MutableList<Integer> oneValue = multimap.getIfAbsentPutAll(1, defaultValue); MutableList<Integer> twoValue = multimap.getIfAbsentPutAll(2, defaultValue); Assert.assertEquals(defaultValue, oneValue); Assert.assertEquals(Lists.mutable.with(1), twoValue); }
ã¾ã ã¾ã ããã¾ã
Eclipse Collections 10.0ã«ã¯ã¾ã 16åã®æ©è½ãæ®ã£ã¦ãã¾ããããããè¨äºã¨ãã¦å ¬éãã¦ããã¾ãã®ã§ã楽ãã¿ã«ã
Eclipse Collections 10.0ã®æ°æ©è½ã楽ããã§ããã ããã¨å¹¸ãã§ãï¼ï¼
Eclipse Collectionsã¯ã³ã³ããªãã¥ã¼ã·ã§ã³ãåãä»ãã¦ãã¾ãï¼ã©ãããå§ãã¦ãããããããããªãã¨ããæ¹ã¯itohiro73ã¾ã§DMããã ããã°åãã§ã¬ã¤ãããã¦ããã ãã¾ãã
ããã©ã¤ãã©ãªãæ°ã«å ¥ã£ã¦ããã ãã¦ãããããã«ç¥ããããã¨ããæ¹ã¯ãTwitterã§ããã·ã¥ã¿ã°#EclipseCollectionsãã¤ãã¦ã¤ã¶ããã¦ããã ãããããããã¯GitHubã¬ãã«ã¹ã¿ã¼ãã¤ãã¦ããã ããã¨ãã£ã¡ããããã³ã¾ãã®ã§ã©ãããããããé¡ããã¾ãï¼ï¼
Eclipse Collections 10.0ããªãªã¼ã¹ããã¾ãã #EclipseCollections
æ¬è¨äºã¯Donald Raabæ°ã«ãã Eclipse Collections 10.0 Released - Oracle Developers - Medium ãå ã«ããæ¥æ¬èªçã®è¨äºã§ããæ¥æ¬èªã§ããããããæ å ±ã¨ãªãããã«é©å®ç·¨éãã¦ãããæ¥æ¬èªè¨³ã¨ã¯éã£ã¦å¿ ãããå ã®æç« ã訳ãããã®ã§ã¯ããã¾ããï¼æ¬äººã«rewriteã®è¨±å¯ãããã£ã¦ããã¾ãï¼ãåæãåèã«ãããå ´åã¯ä¸è¨ãªã³ã¯ããã©ããã
ã³ã³ããªãã¥ã¼ã¿ã¼ã®çãããããã¨ããããã¾ãã
Eclipse Collections ã®10.0ã¯2019å¹´ã®7æã«ãªãªã¼ã¹ãããååã®9.2ãªãªã¼ã¹ãã1å¹´4ã¶æã¨ãªãã¡ã¸ã£ã¼ãã¼ã¸ã§ã³ã®ãªãªã¼ã¹ã¨ãªãã¾ãã9.xãã¼ã¸ã§ã³ã®ãªãªã¼ã¹ã¯é常ã«æ©è½ãè±å¯ã§ãã³ãã¥ããã£ããããããã®ã³ã³ããªãã¥ã¼ã·ã§ã³ããã£ããã§ããã10.0ã§ã¯ãããè¶ ãããã®ã«ãªãã¾ããï¼ãªãã¨ã10.0ã®ãªãªã¼ã¹ã§ã¯å®ã«18人ãã®ã³ã³ããªãã¥ã¼ã¿ã¼ãæ©è½è¿½å ããã¦ããã¦ãããçå®ã«OSSã¨ãã¦ã®æé·ãæ©ãã§ããã¾ããè²´éãªæéãè²»ããã¦Eclipse Collectionsã®æ©è½è¿½å ãå質æ¹åã«ãååããã ããã³ã³ããªãã¥ã¼ã¿ã¼çããã«æè¬ã®æ°æã¡ã§ãã£ã±ãã§ãï¼ãããã¨ããããã¾ããï¼ï¼
ã²ã¨ã¤ã®è¨äºã«ã¾ã¨ããã«ã¯æ©è½ãå¤ãããw
Eclipse Collectionsã®10.0ã¯é常ã«å¤ãã®æ°æ©è½ãå«ã¾ãã¦ãããã²ã¨ã¤ã®è¨äºã«åããã«ã¯å¤ããããããä»å¾3ã¤ã®è¨äºã«åãã¦æ©è½ã®è©³ç´°ãç´¹ä»ãã¦ããã¾ããæ¬è¨äºã§ã¯ãæ°æ©è½ã®ãµããªã¼ãç´¹ä»ããã«ã¨ã©ãã¾ãã
æ°æ©è½ã®ãµããªã¼
MultiReaderList/Bag/Set
ã«ç¹åããInterface- ããªããã£ãListããããªããã£ãStreamãçæããå®è£
toMap
ã«ãããã¿ã¼ã²ããMapã®ãµãã¼ãMutableMapIterable.removeAllKeys
ã®å®è£RichIterable.toBiMap
ã®å®è£Multimap.collectKeyMultiValues
ã®å®è£- ã³ã¬ã¯ã·ã§ã³ãã¡ã¯ããªã«ããã
fromStream(Stream)
ã®å®è£ LazyIterate.cartesianProduct
ã®å®è£- ããªããã£ãMapã¸ã®
updateValues
ã¡ã½ããã®è¿½å MutableMultimap.getIfAbsentPutAll
ã®å®è£Bag.collectWithOccurrences
ã®å®è£- ããªããã£ãã®Iterableã¸ã®
reduce
ã¨reduceIfEmpty
ã®è¿½å - ããªããã£ãç¨ã®
<type1><type2>To<type1>Function
ã®è¿½å - ããªããã£ãMapã¸ã®
of/withInitialCapacity
ã¡ã½ããã®è¿½å RichIterable.countByEach
ã®å®è£UnifiedSetWithHashingStrategy.addOrReplace
ã®å®è£UnmodifiableMutableOrderedMap
ã®å®è£- ãã¥ã¼ã¿ãã«ãªããªããã£ãMapä¸ã§ã®
withAllKeyValues
ã®å®è£ Iterable
ããPrimitivePrimitive/PrimitiveObject/ObjectPrimitiveMap
ãçæããæ©è½ã®å®è£HashingStrategySets.of/withInitialCapacity
ã®å®è£RichIterable.getAny
ã®å®è£- ããªããã£ãã®ããã·ã¥ãã¼ã¿æ§é ã«ããã
resize/rehash
ã¡ã½ããã®å·æ°ã¨æ¨æºå Iterable<BoxedPrimitive>
ããPrimitiveStack/Bag/List/Set
ã¸å¤æãããã¡ã¯ããªã¡ã½ããã®å®è£Multimaps
ãã¡ã¯ããªã¯ã©ã¹å ã®'ImmutableSortedBagMultimapFactory`ã®å®è£Map
ããã©ã¡ã¼ã¿ã«ã¨ãMap
ãã¡ã¯ããªã¡ã½ããã®å®è£MultableMultimap.putAllPairs/add
ã¡ã½ãããã©ã¡ã¼ã¿ã¼ã¸ã®ã¯ã¤ã«ãã«ã¼ãåã®å°å ¥
æ°æ©è½ã«ã¤ãã¦ã¯ãææ°ã®JavaDocãã覧ãã ããã
æ©è½å¤ã§ã®æ¹åç¹
ã©ã¤ãã©ãªæ¬ä½ã®æ©è½è¿½å 以å¤ã«ãããã¾ãã¾ãªæ¹åããªããã¦ãã¾ãã 1. ãã¹ãã«ãã¬ãã¸ã®æ¹å 2. ãã«ãã®æ¹å 3. ã³ã¼ãã®éè¤ã®åæ¸ 4. éæ¨å¥¨ãªã¯ã©ã¹ã®åé¤ 5. ã¸ã§ããªã¯ã¹ã®æ¹å 6. æ°ãããã³ããã¼ã¯ãã¹ãã®è¿½å 7. ãã®ä»ããããï¼
ãããã¨ããããã¾ã
ãã¹ã¦ã®ã³ã³ããªãã¥ã¼ã¿ã¼ã¨ã³ããã¿ã¼ã代表ãã¦... Eclipse Collectionsã使ã£ã¦ããã ããããã¨ããããã¾ãï¼ï¼ 10.0ãªãªã¼ã¹ã§ã®æ°ããæ©è½ã¨æ¹åã楽ããã§ããã ããã¨å¹¸ãã§ãã
ãããæ°æ©è½ã®è©³ç´°ã¯ä¾ãã¤ãã¦è¿½ã£ã¦è¨äºåãã¦ããã¾ãã®ã§ã楽ãã¿ã«ï¼
Eclipse Collectionsã¯ã³ã³ããªãã¥ã¼ã·ã§ã³ãåãä»ãã¦ãã¾ãï¼ã©ãããå§ãã¦ãããããããããªãã¨ããæ¹ã¯itohiro73ã¾ã§DMããã ããã°åãã§ã¬ã¤ãããã¦ããã ãã¾ãã
ããã©ã¤ãã©ãªãæ°ã«å ¥ã£ã¦ããã ãã¦ãããããã«ç¥ããããã¨ããæ¹ã¯ãTwitterã§ããã·ã¥ã¿ã°#EclipseCollectionsãã¤ãã¦ã¤ã¶ããã¦ããã ãããããããã¯GitHubã¬ãã«ã¹ã¿ã¼ãã¤ãã¦ããã ããã¨ãã£ã¡ããããã³ã¾ãã®ã§ã©ãããããããé¡ããã¾ãï¼ï¼