ã¯ããã« ãã®èšäºã¯2023幎1æã«ãæ ªåŒäŒç€Ÿãã€ãã ããžã¿ã«ãã¯ãããžãŒæŠç¥æ¬éšïŒä»¥äžãããžæŠãïŒå
ã§å®ãããã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ãã«ã€ããŠããã®èæ¯ãå«ããŠç޹ä»ããèšäºã§ãã ãã®èšäºã®ãã€ã³ã ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ãšã¯ãã³ãã¥ãã±ãŒã·ã§ã³ãåãããã§å®ã£ãŠã»ããããšãå¿ãããŠã»ããããšããŸãšããè³æ é¢å¿ã®ãã人ã«éãŸã£ãŠãããã¡ã³ããŒã®å£°ãèããªããããã ã¢ããåŒã«æ±ºããŠãã£ã ã¬ã€ãã©ã€ã³ã§ã¯ããªãŒãã³ã³ãã¥ãã±ãŒã·ã§ã³ããã¢ãžãªãã£ã®é«ãããç®çæèãã®3ã€ãå¿
èŠãªå¿ãããšããŠæ²ããŠãã ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ã®å¹æã«ã€ããŠã¯ãåæã«äžåºŠã®å®æçãªã¢ã³ã±ãŒãããšãããšã§æž¬å®ãã èæ¯ 2019幎æ«ããã®ã³ããçŠãçµãŠãã³ãã¥ãã±ãŒã·ã§ã³ã®åãæ¹ã¯å€ãããŸããã åšå®
ã¯ãŒã¯ãäžè¬åããä»ãŸã§ã¯åœããåã®ããã«é¡ãšé¡ãçªãåãããŠäŒè©±ããŠãããã®ãããã£ãããããã«ããŒãã£ã³ã°ãªã©ããªã³ã©ã€ã³äžã§ã®äŒè©±ãã¡ã€ã³ã«ãªã£ãŠãããŸããã çããã¯ã瀟å
ã³ãã¥ãã±ãŒã·ã§ã³ããããããªã£ããšæããŸããïŒ ä»ãŸã§ããã³ãã¥ãã±ãŒã·ã§ã³ãåãããããªã£ããšæããæ¹ãéã«åãã«ãããªã£ããšæããæ¹ãæ§ã
ããã£ãããã®ã§ã¯ãªãã§ããããã ãã®ãããªæèŠã®å·®ã¯ãçããã®ã³ãã¥ãã±ãŒã·ã§ã³ã®ãåžžèããç°ãªãããšã§çãŸããŠããŸãã ãªãã«ã¯ãã³ãã¥ãã±ãŒã·ã§ã³ãåãã¥ãããªã£ãŠããŸã£ããããã«ãä»äºã®å¹çãèœã¡ããšæãã人ãããã§ãããã æ¥åžžã®ã³ãã¥ãã±ãŒã·ã§ã³ã®ã¢ã€ã¢ã€ã«ãã£ãŠãä»äºã«ãã€ãã¹ã®åœ±é¿ãåºããªããŠããšãŠãå¿äœãªãããšã§ãããã ããã§ããããžæŠãå
ã«ãã㊠ã³ãã¥ãã±ãŒã·ã§ã³ã®åãæ¹ã«å¯Ÿããç®ç·ãåããã ãããã ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ ããšãããã®ãäœæããããšã«ããŸããã ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ãšã¯ æã
ãäœæãããã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ããšã¯ããã®åã®éã ã³ãã¥ãã±ãŒã·ã§ã³ããšãããã«å®ã£ãŠã»ããããšãå¿ãããŠã»ããããšããŸãšãã è³æã§ãã ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ãéããŠãããžæŠãå
ã® ã³ãã¥ãã±ãŒã·ã§ã³ãæé©åããåŸæ¥ã®æ¥åã®çç£æ§ãåäžããããéšçœ²ãè¶ããã³ã©ãã¬ãŒã·ã§ã³ã匷åããŠãã ããšãç®æããŠããŸãã ãããŸã§ãã¬ã€ãã©ã€ã³ãã§ãã®ã§ãããã«éåãããããšèšã£ãŠçœ°åãããããã§ã¯ãããŸããã ãã ãå
šå¡ãå¿
ãäžåºŠã¯ç®ãéããã§ããã ãããã«æ²¿ã£ãŠã³ãã¥ãã±ãŒã·ã§ã³ãåã£ãŠããã ããããšããäœçœ®ã¥ãã«ãªã£ãŠããŸãã ã¬ã€ãã©ã€ã³ã®è©³ããå
容ã¯åŸã»ã©ã玹ä»ããŸãããã¬ã€ãã©ã€ã³ã¯å€§ããã ã³ãã¥ãã±ãŒã·ã§ã³ã®ææ®µã®éžã³æ¹ ããšã äŒè°éå¬/åå æã®ã«ãŒã« ãã®2軞ããã¢ãããŒããããŠããŸãã ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ã®äœãæ¹ ãããžã§ã¯ãã®é²è¡ã¯äºåå±ã§è¡ããŸããã ãã ããã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ã®äœæã¯ãããžæŠãå
šäœã«æšé²ã¡ã³ããŒã®åéãããã èå³ã®ãã£ã人ãéãŸããããžã§ã¯ããäŒç»ããããŠãããžã§ã¯ãã¡ã³ããŒã®å£°ãèããªããæ°äž»çã«é²ããŠãããŸããã ãããžæŠãã¯ãšãŠã人æ°ã®å€ãäºæ¥éšãã€ãããžæŠãã®äžã§ãããããã®éšçœ²ã«åãããŠããŸãã ãããããšãæ¢ã«ããããã®éšçœ²ã«ãããç¹æã®ã³ãã¥ãã±ãŒã·ã§ã³æåãéžæãããŠãããŸãã ãŸãã圹è·ãä»äºå
容ã«ãããæãæ¹ã®éããåœç¶ãããŸãã ã§ããã ãå€ãã®äººã䜿ããããã¬ã€ãã©ã€ã³ã«ãããããå®éã«è²ã
ãªéšçœ²ã®ç€Ÿå¡ã®æ¹ã«ãã¢ãªã³ã°ããé²ããŠãããŸããã éãŸã£ããããžã§ã¯ãã¡ã³ããŒã¯å
šéšã§11人ãéšçœ²ã圹è·ããã©ãã©ã§ãã åéããããŠããã«äºæ³ããŠãããããå€ãã¡ã³ããŒãéãŸããŸããã®ã§ãæ¥éœç· ãåããæ©ããŸããã ãã®éãŸãæ¹ããã 瀟å¡ã®ã³ãã¥ãã±ãŒã·ã§ã³ã«é¢ããé¢å¿ïŒèª²é¡ïŒã®å€§ãã ãæããŸããã ã¬ã€ãã©ã€ã³ã¯ãŸãäºåå±ã§çŽ æ¡ãäœæãããã®åŸãããžã§ã¯ãã¡ã³ããŒã3人ãã4人ã®ã°ã«ãŒãã«åããããã2åãã€èš8åã®ãã£ã¹ã«ãã·ã§ã³ã§æèŠãåºããŠãããããããåèã«è©°ããŠãããŸããã ãããžã§ã¯ãã¡ã³ããŒã¯ã³ãã¥ãã±ãŒã·ã§ã³ã«é¢å¿ã®é«ãã¡ã³ããŒã§ããããããã£ã¹ã«ãã·ã§ã³ã§ã¯éãæèŠãããããèãããšãã§ããŸããã ãããã§ãå€ãã®äººã«äœ¿ã£ãŠããããããã¬ã€ãã©ã€ã³ã«ãªã£ãã®ã§ã¯ãšæããŸãã 宿ããã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ã®çŽ¹ä» ãã€ãããããžæŠãå
ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ã®æ§æã¯ãã®ããã«ãªã£ãŠããŸãã â»ç¬¬1ç宿åŸããæ¹å®ãããŠããã2023幎4ææç¹ã®å
容ãã玹ä»ããŸãã å¿
èŠãªå¿æã ã³ãã¥ãã±ãŒã·ã§ã³æ¹æ³ ã·ãã¥ãšãŒã·ã§ã³ããšã®ã³ãã¥ãã±ãŒã·ã§ã³æ¹æ³ äŒè°ã®ã«ãŒã«ãšã³ã â äŒè°ç®çããšã®ã«ãŒã« â¡äŒè°ã®ã³ã WebäŒè°ã®ã«ã¡ã©ã«é¢ã㊠ããžæŠå
ã§ã®ãã£ããå©çšã«ã€ããŠã®ã¬ã€ãã©ã€ã³ ã¬ã€ãã©ã€ã³ã®æŠèŠ ã¯ããã«ããã®ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ã®ç®çãé©çšç¯å²ãªã©ãèšèŒããŠããŸãã ãããŸã§ãã¬ã€ãã©ã€ã³ãã®ããã匷å¶åã¯æã¡ãŸããã ãŸããé©çšç¯å²ã¯ãããžæŠãå
ãšããŠããŸãããæŽ»çšã§ãããã§ããã°ãããžæŠãå€ã®éšçœ²ã瀟å€ã®æ¹ãšããåãããéã«ãå©çšããã ãããšãOKãšããŠããŸãã å¿
èŠãªå¿æã ãŸãã¯ãã³ãã¥ãã±ãŒã·ã§ã³ããšãããã§ã®åºæ¬çãªå¿æãã«ã€ããŠèšåããŠããŸãã æã
ã¯ã ãªãŒãã³ã³ãã¥ãã±ãŒã·ã§ã³ ãã ã¢ãžãªãã£ã®é«ã ãã ç®çæè ãã®3ã€ãå¿
èŠãªå¿ãããšããŠæ²ããŸããã ããããåžžã«æèããŠããã°ãèªç¶ãšã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ã«æ²¿ã£ãè¡åãããããã«ãªãã¯ããšãããã®ã§ãã ã³ãã¥ãã±ãŒã·ã§ã³æ¹æ³ æã
ã¯ã³ãã¥ãã±ãŒã·ã§ã³ã®çš®é¡ãšããŠã ãã£ãã ãã çãäŒè©± ãã äŒè° ãã ã€ã¶ããã»ã¡ã¢ ãã®4ã€ããããšæŽçããŸããã ããããã®å®çŸ©ãšãã€ã©ã®ããã«äœ¿ãã®ããããããšããããšã説æããŠããŸãã ã·ãã¥ãšãŒã·ã§ã³ããšã®ã³ãã¥ãã±ãŒã·ã§ã³æ¹æ³ ç¶ããŠãããå°ãçŽæçã«ã³ãã¥ãã±ãŒã·ã§ã³æ¹æ³ã䜿ãåããããããã«ãå³è§£ããŸããã ããã§ã¯ãç·æ¥åºŠããšãéèŠåºŠãã®2è»žã§æŽçããŠããŸãããäœãç·æ¥ïŒéèŠïŒãšã¿ãªãããã«ã€ããŠã¯ãå人ãéšçœ²ã«ãã£ãŠæèŠãç°ãªããŸãã®ã§ããããŠå
·äœçã«ç€ºãããçŸå Žã«å€æããã ãã圢ãšããŠããŸãã äŒè°ã®ã«ãŒã«ãšã³ã äŒè°ã¯ã©ãããŠãæéãææãããŠããŸãããããªãã¹ãæžãããããšèããŠããŸãããã©ãããŠãå¿
èŠãªäŒè°ã¯ãããŸãã ãã®äŒè°ã®æéããªãã¹ã質ã®é«ããã®ã«ãããããäŒè°ã®ã«ãŒã«ãå®ããŸããã ãŸããäŒè°ã®ç®çã«å¿ããŠå®ãã¹ãã«ãŒã«ã¯ç°ãªããšèããäŒè°ã®ç®çå¥ã«ã«ãŒã«ã決ããŠããŸãã ã«ãŒã«ãšã¯å¥ã«äŒè°ã®ãã³ãããšããŠããªãã©ã€ã³ãšãªã³ã©ã€ã³ãæ··åšããäŒè°ã®éã«å¿ãããŠã»ããããšã«èšåããŸããã ãŸããã¢ãžã§ã³ããè°äºã¡ã¢ã®äœæãã«ãŒã«ãšããŠãããŸãã®ã§ããã®ãã³ãã¬ãŒããäœæããŸããã WebäŒè°ã®ã«ã¡ã©ã«é¢ã㊠WebäŒè°ã®ãé¡åºããã«ã€ããŠããçšåºŠæ±ºãããã£ãæ¹ããããšãããæèŠã®ããšãããžæŠãå
šäœã«ã¢ã³ã±ãŒããåã£ãäžã§ãã«ã¡ã©ãªã³ããæšå¥šããšããŸããã ããžæŠå
ã§ã®ãã£ããå©çšã«ã€ããŠã®ã¬ã€ãã©ã€ã³ ã³ãã¥ãã±ãŒã·ã§ã³æ¹æ³ã®äžã§ãç¹ã«å€ã䜿ãããããã«ãªã£ãããã£ãããã«ã€ããŠã ã¡ã³ã·ã§ã³ã®åŸã«ãæ§ããã€ãã ã å®åå¥ãšããŠã®ããç²ãæ§ã§ãããã€ãã ãªã©ã人ã«ãã£ãŠãã©ãã©ã«ãªã£ãŠããŸã£ãŠããŸããã ãã¡ããäœèšãªæ°é£ããªãã³ãã¥ãã±ãŒã·ã§ã³ããšããããã«ãã¬ã€ãã©ã€ã³ãå®ããŸããã ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ã®å¹ææž¬å® ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ãäœæããããã§äœãã£ã±ãªãã«ããŠããŸããšããã£ããäœã£ããã®ã®å¹æããããããã£ãããªãã§ããããã®æã
ã«åãããŠæ¹è¯ãéããŠãããããã®ã«ããŠãããããšããæãããããŸãã ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ã®å¹æãã©ã®ããããã£ããã«ã€ããŠã¯ãåæã«äžåºŠã®å®æçãªã¢ã³ã±ãŒãããšãããšã§æž¬å®ããäºå®ã§ãã ãŸãããããšã¯å¥è»žã§ãã¬ã€ãã©ã€ã³äœæã«ååããŠããã£ããããžã§ã¯ãã¡ã³ããŒã«åéšçœ²ã«ãããç¶æ³ããŠã©ããããŠããããå®éã®èæã¬ãã«ã§ã®ç¶æ³ãèããŠãããã°ãšèããŠããŸãã ããšãã ä»åã®ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ã®äœæã«ã€ããŠã¯ããããžæŠãå
ã§ãããã£ãåãæ±ºããè¡ãããšãããŸããªãã£ããããæ°é®®ã§ææŠçãªåãçµã¿ã ã£ããšæããŸãã ãããžã§ã¯ãã¡ã³ããŒããã®æèŠãéããŠãé£ã®éšçœ²ã§ãããªãæåãéãããšãããããŸããããæå€ãšç€Ÿå
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã«ã€ããŠèª²é¡ãæã£ãŠãã人ã¯å€ãããããšãçºèŠã§ããã ä»åã®ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ããå°ãã§ããã€ãããããžæŠãå
ã§ã®åããããã«ã€ãªããã°ãããªãšæããŸãã æçš¿ ããžã¿ã«ãã¯ãããžãŒæŠç¥æ¬éšã®ã³ãã¥ãã±ãŒã·ã§ã³ã¬ã€ãã©ã€ã³ãäœæããŸãã!! 㯠ãã€ãããšã³ãžãã¢ããã° ã«æåã«è¡šç€ºãããŸããã
ã¯ããã« çããããã«ã¡ã¯ã æ¬æ¥ã¯ã¯ãªã¹ãã¹ã§ããïŒç§ã¯å¹Œãé ã«äž¡èŠªããã¯ãªã¹ãã¹ãã¬ãŒã³ããšããŠãã人çã²ãŒã ããè²·ã£ãŠããã£ãããšããããŸãã ãããªããã«ã±ããããçŸåšã¯ããŒãã²ãŒã ãè¶£å³ã§ããŠãåœç€Ÿã®ããŒãã²ãŒã éšã«ãæå±ããŠãããŸãã ãã€ããã®ããŒãã²ãŒã éšã§ã¯ãæ¥ååŸãäžå®æã«ããŒãã²ãŒã äŒãéå¬ããŠãã¿ããªã§ã¯ã€ã¯ã€ãã£ãŠããŸãã ãããŠãé話äŒé¡ãä»åãåœç€Ÿããäžè©±ã«ãªã£ãŠããæç€Ÿã®ãåæã«ãããé売åã®ãæ
ã·ã¹ããããããšããããŒãã²ãŒã ããæäŸããã ããŸããã å®äœéšãåºã«äœæãããããªã¢ã«ãªæ
ã·ã¹ã®é°å²æ°ãå³ãããããŒãã²ãŒã ãšããäºã§ããã®ã§ãæ©ééãã§ã¿ãã¬ããŒãããéãããŸãïŒ ãæ
ã·ã¹ããããããšã¯ïŒ ãæ
ã·ã¹ãããããã¯ã転è·ããŠããã°ããã®æ
ã·ã¹ç€Ÿå¡ãšããŠãäŒæ¥ã®æ
å ±ã·ã¹ãã éšéã® ãããããã ã ãã©ãã« ã远äœéšã§ããããšãã³ã³ã»ãããšããã4人çšã®ããããã²ãŒã ã§ãã ãã©ãã«ãŸã¿ãã®1ãæã«ãã£ãã察å¿ããŠä¹ãåããããå¹³ç©ã«éããã€ã€ãä»è
ã®ãµããŒããããå€ãã§ãã人ããâæ
ã·ã¹ã®éïŒåè
ïŒâãšãªããŸãã éã³æ¹ ã«ãŒã« åºæ¬çã«ã¯æçªã®ãã¬ã€ã€ãŒããã€ã¹ãæ¯ã£ãŠã³ããé²ãããããããããšãªããŸãã 倧ããªéããšããŠãåãã¬ã€ã€ãŒã¯5ã¿ãŒã³ä»¥å
ã«ãŽãŒã«ããªããã°ãããŸããã ïŒ1ã¿ãŒã³ã1é±éãšãã5é±éïŒ1ãæéïŒä¹ãåãäºã«èŠç«ãŠãããŠããŸããïŒ éäžã§æ¢ãŸã£ãã€ãã³ãã¿ã€ã«ã«å¿ããŠã€ãã³ããçºçããã¡ã³ã¿ã«ãäœåãå€åããŠããã®ã§ããããã®ã¡ã³ã¿ã«ã®ç¶æ
ã«å¿ããŠæ¬¡ã®ã¿ãŒã³ã«æ¯ããã€ã¹ã®çš®é¡ãå€ãããŸãã â»ã¡ã³ã¿ã«ãããããã«ãªããšãµã€ã³ãã®ç®ã®æåŸ
å€ãäžããããªããªãé²ããªããªã£ãŠããŸããŸãããæ¥µéç¶æ
ã§ã¯"7"ãåºãããšãïŒïŒ ç¹å®ã®æ¡ä»¶ãæºããããšã«ãããã€ãã³ããçºçããéã«ãä»è
ã«ååãä»°ãããšãã§ããããŠãŒã¶ãŒã³ãã¥ããã£ãã«æå±ããããšã«ãªããŸããååãããŠãŒã¶ãŒã¯ååã«å¿ããŠãæ¯æŽåæ°ããåŸãããšãã§ããŸãã æçµçã«ãŽãŒã«ã§ããäººïŒ 1ãæä¹ãåãã人 ïŒã®äžã§ããã å¹³ç©ã«éãã ïŒäœåãå€ãïŒã ä»è
ã®ãµããŒããããå€ã ã§ããïŒæ¯æŽåæ°ãå€ãïŒäººã âæ
ã·ã¹ã®éïŒåè
ïŒâ ãšãªããŸãã æºå åãã¬ã€ã€ãŒã¯ããããå人ããŒããåæå€ã«èšå®ããã â å人ããŒã ãã¬ã€ã€ãŒã®ç¶æ
ã管çããããŒãã§ãã ã»ã¿ãŒã³æ° ã»ã¡ã³ã¿ã« ã»æ¯æŽåæ° ã»äœå ã®4é
ç®ããããã²ãŒã ã§çºçããã€ãã³ããè¡åã«ãã£ãŠå€åããŠãããŸãã ã€ãã³ãã¿ã€ã«ãè£é¢ã«ããŠããããã®ã³ãŒã¹ãäœãã â ã€ãã³ãã¿ã€ã« ãã¹ã«æ¢ãŸã£ãéã«çºçããã€ãã³ããèšèŒãããŠããŸãã ã»ç€Ÿå¡ã®ç«¯æ«ãããã«ãŠã§ã¢ãçºèŠããã ã»åŸæ¥å¡ã®IDãšãã¹ã¯ãŒããæŒæŽ©ãã ãšãã£ãã€ã³ã·ãã³ãã ã»å€åãšã³ãžãã¢ã«çžè«ãããããªããæããã ã»æ¬éšé·ã«å«ã®ãwitchã®èšå®ãé ŒãŸãã ãšãã£ãããããªãã€ãã³ããªã©ãèšå®ãããŠãããåé¿ãããã¹ãæã£ãŠããªãå Žåã¯ã¡ã³ã¿ã«ãäœåã«ãã¡ãŒãžãåããããšã«ãªããŸãâŠã ã¢ã€ãã ã«ãŒããåãã¬ã€ã€ãŒã«7æãã€é
ãã â ã¢ã€ãã ã«ãŒã ã€ãã³ããåé¿ããããã¡ã³ã¿ã«ãªã©ãå埩ãããããããã«äœ¿çšããã¢ã€ãã ãšãªããŸãããã ã»ã¡ãŒã«èª€é信察çããŒã« ã»å€èŠçŽ èªèšŒãœãªã¥ãŒã·ã§ã³ ãšãã£ããã€ã³ã·ãã³ãã«å¯Ÿå¿ã§ããããªãœãªã¥ãŒã·ã§ã³ã ã»çŒèç¡æåž ã»ããŒã« ãšãã£ããããããªããè§£æ¶ã§ããïŒïŒïŒã¢ã€ãã ãªã©ãè²ã
ãªãã®ããããŸãã ã€ãã³ãã®äžã«ã¯ããããããã°åé¿å¯èœããšãã£ãèšèŒããããã®ãããã該åœããã¢ã€ãã ã«ãŒãã䜿çšããããšã§åé¿ã§ããŸãã ãŸããã²ãŒã åŸåã§ã¯ãã¢ã€ãã ãæšãŠãäºã«ãã£ãŠãµã€ã³ãã®åºç®ã«ãã©ã¹ããŠã³ããé²ããããšãã§ããŸãããã®éããã®ã¢ã€ãã ããå¿
èŠãªãçç±ãã宣èšããå¿
èŠããããŸãã ããã§æºåå®äºã§ãïŒ ã²ãŒã ã®é²ãæ¹ ã¹ã¿ãŒããã¬ã€ã€ãŒããæèšåãã«ïŒã¿ãŒã³ãã€è¡ããå
šå¡ãïŒã¿ãŒã³ãã€å®æœããŸãã ã¿ãŒã³ã¯ä»¥äžã®ããã«é²è¡ããŸãã ã¿ãŒã³é²è¡ å人ããŒãã®ã¿ãŒã³æ°ãé²ããŸãã ã¢ã€ãã ã«ãŒãäœ¿çš äœ¿çšã§ããã¢ã€ãã ã«ãŒããããã°ããã®ã¿ã€ãã³ã°ã§äœ¿çšããããšãã§ããŸãã ãµã€ã³ãæ¯ã£ãŠç§»å èªåã®ã¡ã³ã¿ã«ã«åã£ããµã€ã³ããæ¯ããåºããã¹åé²ã¿ãŸãã ã€ãã³ãã®åŠç æ¢ãŸã£ããã¹ã®ã€ãã³ãã¿ã€ã«ãéããã€ãã³ãã®åŠçãè¡ããŸããã€ãã³ããåé¿ã§ããã¢ã€ãã ã«ãŒããããã°ããã®ã¿ã€ãã³ã°ã§äœ¿çšããŸãã å
šå¡ã5ã¿ãŒã³çµãã£ãã¿ã€ãã³ã°ã§åè
å€å®ãè¡ããŸãã ãŽãŒã«ãŸã§é²ãã人ã®äžã§ãå人ããŒãã®ãäœåãïŒãæ¯æŽåæ°ãã®å€ã倧ãã人 ã âæ
ã·ã¹ã®éïŒåè
ïŒâ ãšãªããŸãã ãã£ãŠã¿ã ã¯ããŸã ãããã£ãããããããã®èª²é·ããã®äžèšã§ãä»åã® ããæ
ã·ã¹ãããããã§éãŒãã®äŒã ãäŒç»ãããŸããã ãããŠç¿æ¥ã«ã¯ããžã¿ã«ãã¯ãããžãŒæŠç¥æ¬éšå
šäœã«åå è
åéã®æçš¿ãè¡ãããŸããããããã¯ãŒã¯ã軜ãïŒ å¹žããªããšã«å€ãã®æ¹ããåå ã®ç³èŸŒãããã ããç¡äºãé嬿±ºå®ãšãªããŸããã ããããšãããããŸãïŒ åœæ¥ ãšããæ¥ã®æ¥ååŸãäŒç€Ÿã®äŒè°å®€ã§éå¬ããŸããã å®æã§æ¥åãåãäžããŠäŒè°å®€ãžè¡ããšãæ¢ã«äººãéãŸã£ãŠãããã¿ããªã§è»œãèªå·±ç޹ä»ãè¡ã£ãåŸãã²ãŒã ãå§ããäºã«ãªããŸããã ã²ãŒã ã«ã¯åå ããªããã©å°ãã ãèŠåŠãâŠãšããæ¹ã«ãã¡ãã»ãæ¥ãŠããã ããŠããŠããããã話ã®èŒªãåºããå Žé¢ããããå
šäœãšããŠãã¡ããã¡ãããé°å²æ°ã§ããã ïŒç§å«ãïŒã¿ããªåããŠè¡ãã²ãŒã ã ã£ãã®ã§ãèª¬ææžãèŠãªãããããããããšæºåãè¡ããåæ°ãããããšã²ãŒã ãé²ã¿ãŸããã ã€ãã³ãã¿ã€ã«ã«æ¢ãŸãã ãçªç¶ãå
šç€Ÿãã¬ã¯ãŒã¯ç°å¢ã®å°å
¥ããããããŠã³ã§éããŠããã ãšããã€ãã³ããçºçããéã«ã¯ã ããïœã³ããåæã®ããããã§ããããâŠããããŠãã¯ã³ãã以åããäžéšãã¬ã¯ãŒã¯ãå°å
¥ããŠããããä»ã«æ¯ã¹ããå€åãã·ã ã£ããšæããŸããã©âŠãã ãšãã£ããåœç€Ÿã®æ
ã·ã¹ã§ã®åºæ¥äºã亀ããªããããªã¢ã«ãªçµéšãå
ã«ããäŒè©±ãè¡ããããã ã¢ã€ãã ã«ãŒããæšãŠãéã«ã¯ ãã®ã¢ã€ãã ãå¿
èŠã§ã¯ãªãçç± ã宣èšããå¿
èŠãããã®ã§ããã ããŠãã§ã¯å
šéšExcelã§ç®¡çããã®ã§ããããžã§ã¯ã管çããŒã«ã¯ãããŸããïŒïŒã ãšãã£ãç匟çºèšã§åšãããç·ããã³ããåããããšãçµå§ãªããªãã®çãäžãããèŠããŠããŸããã 1ã²ãŒã 30åçšåºŠã§çµãããããã¡ã³ããŒãå€ããŠè€æ°åéã¶ããšãã§ããŸããããè²ã
ãªãããã話ãåœç€Ÿæ
ã·ã¹ã®è©±ãªã©ã話ãããå察é¢ã§ãäŒè©±ã匟ãã§ããŸããã ææ³ æ¬è³ªçã«ã¯ãããããªã®ã§ããµã€ã³ãã®åºç®æ¬¡ç¬¬ã®ãšããã倧ããã®ã§ããããã®ãããã§åããŠã®äººã§ã楜ããéã¶ããšãã§ãããšæããŸãã 人ã«ãã£ãŠã¢ã€ãã ã«ãŒããæšãŠãŠåºç®ãããŒã¹ãããã¿ã€ãã³ã°ããæšãŠãéã®èšãèš³ã«æ§æ ŒãåºãŠããŠãããæ·±ããã®äººãç¥ãããšãã§ããæ°ãããŸãã ãªã¢ã«ã«åºã¥ããã€ãã³ãïŒã€ã³ã·ãã³ãïŒã«å¯ŸããŠããããïŒãœãªã¥ãŒã·ã§ã³ïŒãããã°åé¿å¯èœããšãã£ãåé¿çãèšèŒãããŠããã®ã§ã å®éã®ãœãªã¥ãŒã·ã§ã³ã«å¯Ÿããç解床 ãäžããããœãªã¥ãŒã·ã§ã³ãå°å
¥ããŠããªãæã® ãªã¹ã¯çã«ã€ããŠæèããŠåŠã¶äºãã§ãã ãšæããŸãã æ¥œããåŠã¹ãŠãæ
ã·ã¹ã®é°å²æ°ããªããšãªããããè¯ãããŒãã²ãŒã ã§ããïŒ ãããã« ä»åããæ
ã·ã¹ããããããã£ãŠã¿ãããšãã圢ã§èšäºãæžãããŠããã ããã®ã§ãããæ
ã·ã¹ããããã«éãããããŒãã²ãŒã ã¯ãã¬ã€ã¹ã¿ã€ã«ã«åäººã®æ§æ ŒããšãŠãããåºããšæã£ãŠããŸãã èªå以å€ã®æ¹ã®èãæ¹ã«è§ŠããããããåããŸããŠã®æ¹ã®"人ãšãªã"ããªããšãªãããã£ãããæ®æ®µäžç·ã«æ¥åããŠããäººã®æå€ãªäžé¢ãèŠããããšãã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ãšããŠéåžžã«åªç§ã ãšæ¹ããŠæããŸããã ç¹ã«ä»åã®æ
ã·ã¹ããããã¯ãã·ã¹ãã ç³»ã®æ¥åãããŠãã人ãã¡ã§è¡ã£ãäºããããã€ãã³ãã¿ã€ã«ã®ã€ã³ã·ãã³ãã§äžåäžæããããã¢ã€ãã ã«ãŒããæšãŠãçç±ã®èŠããã«ã¿ããªã§ç¬ã£ãããšãåæ°ãããããšèŠªçŠãæ·±ããããšãã§ããŸããã ãŸããæ¥œããã§ãããã¡ã«æ
ã·ã¹ã«ã€ããŠã®çè§£ãå°ãæ·±ãŸããšãã£ãåŠã³ãçãŸããã®ã§ãæ
ã·ã¹ãªããããããã£ãŠæ¹ã«ãæ¯ééãã§ããã ãããããŒãã²ãŒã ã§ããã 以äžããèªã¿ããã ãããããšãããããŸããã æçš¿ ãæ
ã·ã¹ãããããããã£ãŠã¿ã話 㯠ãã€ãããšã³ãžãã¢ããã° ã«æåã«è¡šç€ºãããŸããã
ã¯ããã« æ°ä»ããããã12æã§ããïŒãã£ãšããéã®1幎éã§ãã⊠æè¿ã¯å·ãèŸŒãæ¥ã
ãç¶ããŠããŸãããã¿ãªããŸäœèª¿ã¯ãããã§ããã ãã¡ãã®èšäºã¯ä»å¹Ž4æã«å
¥ç€Ÿããã·ã¹ãã éšçœ²ã®äžã§ãã åºå¹¹ã·ã¹ãã ãæ
å ±ã·ã¹ãã ã®ç®¡çãéçš ããè¡ã£ãŠããéšçœ²ã«é
å±ãããæ°å4äººã§æžããŠããŸãã ã»æç³»åºèº«ã§ITè·ã«èå³ãããæ¹ ã»ITè·ã§ãéçºä»¥å€ã®æ¥åã«èå³ãããæ¹ äžèšã«åœãŠã¯ãŸãæ¹åãã«ãã€ããã®åºå¹¹/æ
å ±ã·ã¹ãã ã«é¢ããä»äºã«ã€ããŠãŸãšããŸããã ã瀟å
SEãšã¯äœããããã瀟å¡ã®1æ¥ã®ã¹ã±ãžã¥ãŒã«ããªã©ãåºå¹¹/æ
å ±ã·ã¹ãã æ
åœãªãã§ã¯ã®è©±ãçãæ²¢å±±ãªã®ã§æåŸãŸã§èªãã§ããã ãããå¬ããã§ãïŒ äžè¬çã«ç€Ÿå
SEãšã¯ïŒ 瀟å
SEãšã¯ 瀟å
ã®ã·ã¹ãã ã管çãããã ã·ã¹ãã é¢é£ã§ç€Ÿå
ã§çºçããäŸé Œãåé¡ã解決ããŠãããä»äº ã§ãã ã客ãããšãªãã®ã¯åŒç€Ÿã®ç€Ÿå¡ãå¶æ¥ãçµçãªã©éã·ã¹ãã è·ã®äººã倧åã§ãã 瀟å
ã®äººãã¡ã䜿çšããã·ã¹ãã ã«äžå
·åãã§ãããæ¹è¯ããŠã»ãããšããäŸé Œãåºããšãã«ç§ãã¡ã®åºçªããã£ãŠããŸãã 瀟å
ã§ãã€ãããã¹ãŠã®ã·ã¹ãã ãéçºããŠããããã§ã¯ãªãã®ã§ããã³ããŒãšããã·ã¹ãã ãéçºããŠãããæ¹ãã¡ã«æ¹ä¿®äŸé Œãããããšãå€ãã§ãã ãã®ãããã客æ§ãšããæå³ã§ã¯åŒç€Ÿå
ã®äººã§ãããäžç·ã«ä»äºãããããŒãããŒãšããŠã¯ãã³ããŒã®äººãæããããŸãã ãã客æ§ïŒç€Ÿå
ã®äººïŒã®èŠæãæ±²ã¿åã£ãŠããã³ããŒã®æ¹ãã¡ã«äŒããããšããã®ã¯éåžžã«éèŠãªæ¥åã®äžã€ã§ãã åºç€ãæ¯ããã çžã®äžã®åæã¡ ãã§ãããç«å Žã®éã人ãã€ãªãã æ¶ãæ© ãã®åœ¹å²ãæ
ã£ãŠããã®ãç§ãã¡ã®ä»äºã§ãã æ°å4人ã«ã€ã³ã¿ãã¥ãŒ é
å±ãããŠãã2ãæãæ°åã®ç§ãã¡ãæ®æ®µã©ããªæ¥åãããŠããã®ããæ¥åãããŠããŠæããããšãªã©ã赀裞ã
ã«çããŸããïŒ â M.Hãã(åºå¹¹ã·ã¹ãã æ
åœ) (1)çŸåšã©ã®ãããªæ¥åãè¡ã£ãŠããŸããïŒ ã瀟å
äŒèšã·ã¹ãã ã®ä¿å®ã»éçšããæ
åœããŠããŸããã·ã¹ãã ã«ãšã©ãŒãã§ãŠããªããã¡ãŒã«ã§ãã§ãã¯ãããããæ¡ä»¶ã®ãªãªãŒã¹æºåã®ãããé¢ä¿è
ã«é£çµ¡ãåãä»äºãä»»ããŠããã£ãŠããŸãã ãŸããé±ã«ïŒåããäŒè°ã®é²è¡ãè°äºé²äœæãè¡ã£ãŠããŸãã çŽè¿ã§ã¯ãããžã§ã¯ãã®ãã¹ã仿§æžã®äœæãã¬ãã¥ãŒã®äžéšããæäŒããããŠããã ããŸããã (2)ã©ããªäººãåºå¹¹ç³»éšçœ²ã«åããŠãããšæããŸããïŒ å ±é£çžããã£ããã§ããŠãç¶æ³ææ¡ãåŸæãªäººãåããŠãããšæããŸããæ±ãã·ã¹ãã ãå€ãããã«äººãå°ãªãå°æ°ç²Ÿéãªéšçœ²ã§ãã ãªã®ã§ãåšãã®äººã®ä»äºéãå¯ããŠæ°é£ããã§ãã人ããç¡é§ãçºçããªãããå¹çåãæèããããšãåŸæã§ãã人ã飿ºã確èªãé¢åããããããšãªãè¡ãããšãã§ãã人ãåããŠããã®ããªãšæããŠããŸãã â Y.Nãã(åºå¹¹ã·ã¹ãã æ
åœ) (1)çŸåšã©ã®ãããªæ¥åãè¡ã£ãŠããŸããïŒ H.Mãããšåºæ¬çã«ã¯åæ§ã®æ¥åãããŠããŸãã ãã®ä»ã«ãçµçããã®è³ªå察å¿ããç³è«æžé¡ã®äœæãªã©ãããŠããŸãã (2)é
å±åã«æ±ããŠããåºå¹¹ç³»éšçœ²ã®ã€ã¡ãŒãžãæããŠãã ããããŸãã€ã¡ãŒãžãšã®ã®ã£ããã¯ãããŸãããïŒ ãã¹ãèš±ãããªããšããæå³ã§ç·åŒµããéšçœ²ãšããã€ã¡ãŒãžã匷ããããŸããã ãªããªãç ä¿®ã§åºå¹¹ç³»ã·ã¹ãã ã¯ãäŒç€Ÿã®æ¥åãšçŽæ¥é¢ããã·ã¹ãã ãã§ããã åºå¹¹ã·ã¹ãã ã忢ããå Žåã¯ãäŒç€Ÿå
šäœã«åœ±é¿ããã®ã§äŒç€Ÿãžã®åœ±é¿åºŠã倧ãããšäŒºã£ãŠããããã§ãããã®ãããèªä¿¡ããã人ã§ãªããšé£ããéšçœ²ã ãšèããŠããŸããã å®å®çšŒåããã®ãåœããåã®ã·ã¹ãã ã§ãã以äžããã¹ãèš±ãããªããšããéšçœ²ã€ã¡ãŒãžã¯å€ãã£ãŠããŸããã ããããé
å±åŸãã¹ãèš±ãããªãããããäœäºãèªä¿¡ãæã£ãŠãã人ãããå¿é
ã«ãªã£ãŠãã¡ããšç¢ºèªã§ããäººã®æ¹ãå€ããšããã€ã¡ãŒãžã«å€ãããŸããã ç§ãã¡ã®éšçœ²ã¯ãè€æ°äººã§æ¥åã®ç¢ºèªããããªã©å¿é
æ§ãªäººããå®å¿ã§ããå Žæã§ãããšçŸåšã¯èããŠããŸãã â Y.Sãã(æ
å ±ã·ã¹ãã æ
åœ) (1)çŸåšã©ã®ãããªæ¥åãè¡ã£ãŠããŸãã ãå
šç€ŸåãäŒèšã·ã¹ãã ããšãã·ã¹ãã è·åããã¬ããžå
±æããŒã«ããæ
åœããŠããŸãã åè
ã¯å
šç€Ÿåããšããããšãããéåžžã«å€§ããªãµãŒãã¹ã§ããã²ãã£ãã®ç§ãäžæäžå€ã§ç®¡çã§ããã·ã¹ãã ã§ã¯ãªãã®ã§ããŸãã¯ã·ã¹ãã ã®äœ¿çšãããŒãå
éšçãªæ©èœã«ã€ããŠåŠãã§ãããšããã§ãã åŸè
ã¯ã¢ã«ãŠã³ãçºè¡äŸé Œã®å¯Ÿå¿ãéçšæ¹åãè¡ã£ãŠããŸããéçšæ¹åã§ã¯ãã¢ã«ãŠã³ãçºè¡ã®æµãã§äœåã«ããã£ãŠããæéãçãããããŠãŒã¶ãŒãããèšäºãå
±æããããããããã®çµ±å¶ãèããŠããŸãã åãåãã察å¿ã¯ã©ã¡ããå
±éããŠæ
åœããŠããããµãŒãã¹ãå©çšããŠãã瀟å¡ã®æ¹ã
ã®ãå°ã£ãããããããªäœ¿ãæ¹ããããããšãã£ãåãåããã調æ»/æ€èšŒããè¿çããŠããŸãã (2)é
å±åã«æ±ããŠããåºå¹¹ç³»éšçœ²ã®ã€ã¡ãŒãžãæããŠãã ããããŸãã€ã¡ãŒãžãšã®ã®ã£ããã¯ãããŸãããïŒ ã€ã¡ãŒãžãšã®çžéãã/ãªãã§ãçãããŸãïŒ ã€ã¡ãŒãžãšçžéãªãã£ãã®ã¯æ¥åå
容ã§ããSEãšããè·çš®ã§ã¯ãããã®ã®ãã³ãŒãã£ã³ã°ã¯ã»ãšãã©è¡ããŸãããç§ã®å Žåã¯çç¡ã§ãã ã¡ã€ã³ã§è¡ãæ¥åã¯ãã³ããŒãããšç€Ÿå
ãŠãŒã¶ãŒã®éãåãæã€ããšãå®éã«ã話ãããŠããéäžã«èªèéœéœ¬ã解決ããããšãããã°ãäŒè°ã®ã¢ãŒã«ã€ããèŠçŽããŠäžã€ãã€åãæ±ºãã確èªããããšããããŸãã éã«ã€ã¡ãŒãžãšã®ã£ããããã£ãã®ã¯å
茩瀟å¡ã®æ¹ã
ã®äººæã§ãã é
å±åã¯åºãé°å²æ°ãªã®ããªãšæã£ãŠããã®ã§ãããã話奜ããªæ¹ãå€ãã®ãå°ãé©ãã§ãããä»äºäžã§åæãšã®çµ¡ã¿ããªãã®ã§ãäžäººã§é»ã
ãšäœæ¥ããã®ããªâŠãšéããŠããŸãããã課ã®å
茩ãäžåžã®æ¹ãšã®éè«ã亀ããªããæ¥œããä»äºãã§ããŠããŸãã ã話ãããæ©äŒãå€ããšãæ¥åäžã§åãããªãããšãå°ã£ãããšããã£ããšãã«çžè«ããããã®ã§ãšãŠããããããã§ãâŠïŒ â R.Tãã(æ
å ±ã·ã¹ãã æ
åœ) (1)çŸåšã©ã®ãããªæ¥åãè¡ã£ãŠããŸãã ãWebããŒã¿ããŒã¹ãœããããšããã€ããã°ã«ãŒã瀟å¡ã®æ
å ±ãäžå
管çããID管çã·ã¹ãã ããæ
åœããŠããŸãã ãŠãŒã¶ãŒ(瀟å¡)ããã®åãåãã察å¿ã§ã¯ãã·ã¹ãã ã®ä»æ§ãããã¥ã¢ã«ã§ç¢ºèªããããå®éã«åãããŠã¿ãŠãææ¢ãã§ããèªåãåŠã³ãªãã察å¿ããŠããŸãã äžæ¹ã§ç°åã«äŒŽã瀟å¡ãçµç¹ã®æ
å ±ã®æŽæ°ãäŒéè·å¯Ÿå¿ã埩è·å¯Ÿå¿ãªã©ãããªã人äºã«è¿ãæ¥åãè¡ã£ãŠããŸãã (2)æ¥åãè¡ãäžã§æèããŠããããšã»æ°ãä»ããŠããããšã¯ãããŸããïŒ ïŒçªæèããŠããããšã¯ãèªåã®å€æã ãã§é²ããªãäºãã§ãã ç§ãæ
åœããŠããã·ã¹ãã ã¯äººã®æ
å ±ãæ±ã£ãŠããã®ã§ãã£ãšããã ãããšããå€æã§ ééã£ãæ
å ±ãåã蟌ãã§ããŸã£ãããããŒã¿ããŒã¹ãå£ããŠããŸããããªããšããã㰠瀟å¡ã®æ¥åã«çŽæ¥åœ±é¿ãåºãŠããŸããŸãã ãã®ããä»ã¯å°ãã§ãäžå®ãªããšããã£ããå
茩ã«è³ªåã確èªãããŠããŸãã ãã èªåããå
茩ã«ç¢ºèªãã«è¡ããªã©ã®ç©æ¥µæ§ã¯å¿ããªãããã«ãããã§ãïŒ ãããã ã£ãã§ããããã æ
åœããã·ã¹ãã ãæ¥åã®å
容ã¯ç°ãªããŸãããåºå¹¹/æ
å ±ã·ã¹ãã ãšãããã€ããã®äžæ¢ãæ
ãã·ã¹ãã ã®æ
åœãšããŠã4人ãšã匷ã責任æãæããªããæ¥åãããŠããããšãããããŸããã å
茩ãžã®ã€ã³ã¿ãã¥ãŒãš1æ¥ã®ã¹ã±ãžã¥ãŒã« ãããŸã§ã¯ãäžè¬çãªç€Ÿå
SEã®ä»äºå
容ããæ°äººç®ç·ã§æã£ãããšãæ°ä»ããããšã«ã€ããŠãŸãšããŸããã ãã³ãŒãã£ã³ã°ãããªãã·ã¹ãã è·ãã®æ¥åã«ã€ããŠãªããšãªãã€ã¡ãŒãžã§ããŸããã§ããããïŒ æ¬¡ã¯åºå¹¹/æ
å ±ã·ã¹ãã æ
åœãšããŠçµéšãç©ãã å
茩æ¹ã課é·ã»éšé·ã«ãååããã ããïŒæ¥ã®ã¹ã±ãžã¥ãŒã«ãæ¥åã®äžã§å€§åã«ããŠããããšãªã©ã䌺ããŸããã å
茩瀟å¡ã€ã³ã¿ãã¥ãŒ â N.Tãã(åºå¹¹ã·ã¹ãã æ
åœ) 嵿š©ç®¡çã·ã¹ãã ã®ä¿å®ã»éçšãè¡ã ïŒæ¥ã®ã¹ã±ãžã¥ãŒã« æå» äœæ¥ ã³ã¡ã³ã 9:05 åºç€Ÿ(åšå®
ã®å Žåã¯PCèµ·å) 9:15 æ¥åéå§ åºæ¬çã«ã¯åå¶æ¥æ¥ã®æ®äœæ¥ããã¡ãŒã«ãã§ãã¯ããå
¥ããŸãã察å¿ãå¿
èŠãªäºè±¡ãçºçããŠããå Žåã¯ããã¡ãã®ç¢ºèªãåªå
ããŠå®æœããŸãã 10:00ïœ11:00 æ¹ä¿®ããã°ã©ã ã®æ€èšŒç°å¢ãªãªãŒã¹ã®ããã«å¿
èŠãªæžé¡ã®ç¢ºèª 11:00ïœ12:00 æŒã®äºå®ã«åãããŠæ©ãã®ãæŒäŒæ© 12:00ïœ14:30 ãµãŒããŒã®æäŸã¡ã³ããã³ã¹äœæ¥ã宿œ æ¥äžã«åæ¢ãããã®ã§æéå³å®ã§è¡ã£ãŠããŸãã 15:00ïœ16:00 鱿¬¡ã®ãããžã§ã¯ãé²æå ±åäŒè°ãšéé±ã§ã®ä¿å®æ¡ä»¶ã®é²æç¢ºèªäŒè° ãããžã§ã¯ãããšã«å
é±ã«å®æœããæ¡ä»¶ã®èª¬æãšãæ¥é±ã«ãããŠå®æœããäºå®ã®å ±åãããŸãããŸãããã®æ¥ã¯éé±ã§å®æœããŠãããäžå
·å管çã·ã¹ãã ã§ã®ãã±ããããšã®ç¢ºèªãã宿œããŸããã 16:00ïœ17:45 ã¿ã¹ã¯æŽçãšå¯Ÿå¿ 10æããã®äŒè°å
ã§è©±é¡ã«äžãã£ãå
容ãªã©ã«ã€ããŠã¢ã¯ã·ã§ã³ãå¿
èŠãªãã®ãã察å¿ããŠãããŸãã ãã€ããã§åããŠããŠæãããš ã¹ãã«ãåŸãããã®ç°å¢ãæŽåãããŠããŠãããéåžžã«ãããããç¹ã ãšæããŠããŸãã äŒç€Ÿçµè²»ã§ã®å€éšç ä¿®ãç©æ¥µçã«åããããã«æšå¥šãããŠãããèªéšçœ²ã§ã¯æ¥åãžãã©ã¹ã«ãªããããªåé(çŽæ¥ã鿥åãã)ã«ã€ããŠãæ¥åæéå
ã§å匷æéã確ä¿ããããæ±ããããŠããŸãã K.Sãã(æ
å ±ã·ã¹ãã æ
åœ) å
šç€Ÿå¡ãå©çšããã¡ãŒã«ããŒã«ã®ç®¡çåã³Microsoft補åå
šè¬ã®ç®¡çã»å°å
¥ ïŒæ¥ã®ã¹ã±ãžã¥ãŒã« æå» äœæ¥ ã³ã¡ã³ã 08:50ïœ09:15 åºç€Ÿ æ©ãã«æ¥ãŠåªé
ãªæéãéããã¿ã€ãã§ãã 09:15 æ¥åéå§ 09:15ïœ11:00 ã¡ãŒã«ç¢ºèª/ã¹ã±ãžã¥ãŒã«ç¢ºèª/å®äŸäœæ¥ ãŸãç§ã¯ã¡ãŒã«ç¢ºèªãšãã®æ¥ã®ã¹ã±ãžã¥ãŒã«ã確èªããŸãããã®åŸãå®äŸäœæ¥(å°å
¥ããŠãããµãŒãã¹ã®å®æçãªã¡ã³ããã³ã¹ããåãåããã®å¯Ÿå¿)ã宿œããŸãã 12:00ïœ13:00 äŒè° 瀟å
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã«ã€ããŠã®äŒè°ã«åå ããŸããã 13:00ïœ15:00 äŒè° Microsoft補åã«ã€ããŠã®äŒè°ã«åå ããŸããã 15:00ïœ16:00 äŒè° å®è¡äžæ¡ä»¶ã«ã€ããŠã®äŒè°ãè¡ããŸããã 17:00ïœ17:45 å®äŸäœæ¥ çµæ¥åã«ã¡ãŒã«ç¢ºèªã»è¿ä¿¡ãšãåŸæ¥å¡ã®æ¹ããåããå°å
¥ããŠãããµãŒãã¹ã«ã€ããŠã®èšå®äŸé Œã確èªã察å¿ããŸãã 18:00 é瀟 â»ã€ã³ã¿ãã¥ã¢ãŒã³ã¡ã³ãïŒ 12:00ïœ13:00ã®äŒè°ã¯å¥éšçœ²ã§ã®äŒç»äŒè°ã§ãã ãã€ããã§ã¯äŒç»çå®ãéçºäœæ¥ã«åå ããããã®å
¬åãå€ããããèå³ããããã°åå ããããšãã§ããŸãïŒ ãã€ããã§åããŠããŠæãããš ç§ã¯äžéã§ãã€ããã«å
¥ç€ŸããŸããããåè·ãšæ¯ã¹ãŠãäŒæãååŸããããããšããç¹ãè¯ããšããããªãšæããŠããŸãã 瀟å¡ã®æ¹ã®äžã«ã¯æ¯é±ïŒæ¥ååäŒãååŸããŠããæ¹ããæè¿ã§ã¯ç·æ§ã§è²å
äŒæãååŸãããŠããæ¹ãããŸãã äžé·ããæçµŠååŸãä¿ããã颚朮ããããæ¯èŒçäŒæã¯ååŸããããç°å¢ããªæããŸãã åºå¹¹/æ
å ±ã·ã¹ãã æ
åœãšããŠå€§åã«ããŠããããš ç§ãã¡ãæå±ããã³ãŒãã¬ãŒãITçµ±æ¬éšã§ã¯ITãéããŠç€Ÿå¡ã®åããããããçç£æ§ãåäžããŠããããšãããã·ã§ã³ã«ããŠããŸãã â æ°å
¥ç€Ÿå¡ã®æ°ã¥ã é
å±ãããŠããäžçªæãã倧åãªããšã¯ ã·ã¹ãã ã®å©çšè
ã«å¯ãæ·»ãããš ã§ãã ããã¯ã·ã¹ãã å©çšè
ã®èšãéãã«ãããšèšãæå³ã§ã¯ãªããçžæã®æ¥åå
容ãç¥ãã å©çšè
ã«ãšã£ãŠã®ãã¹ããæš¡çŽ¢ãã ãšããããšã§ãã ãããå®çŸããããã«å¿
èŠãªäœæ¥ã¯ããŸããŠãŒã¶ãŒãã©ã®ããã«æ
åœã·ã¹ãã ãå©çšããŠããã®ãçç¥ããããšã§ãã äŸãã°ããŠãŒã¶ãŒïŒç€Ÿå¡ïŒã®æ¥åãèããªããæ
åœã·ã¹ãã ã®åäœç¢ºèªããããã ãŠãŒã¶ãŒã®æ®æ®µã®æ¥åããã¢ãªã³ã°ãããããŠããŸãã â éšé·ã»èª²é·ã«èããŸãã æããéšé·ã»èª²é·ã«ãåºå¹¹/æ
å ±ã·ã¹ãã æ
åœãšããŠå€§åã«ããŠããããšã¯ãããŸããïŒããšè³ªåãããšããå¿«ããçãããã ããŸãã(ããããšãããããŸãâŠïŒ) 倧åã«ãããŠããããšã¯ãããããããããã£ãã®ã§ããããã®äžããïŒã€ãããã¯ã¢ãããããŠããã ããŸããïŒ 1.å®å®çšŒå ããŠãŒã¶ã®æ¬æ¥ã®æ¥åã«å¯ŸããŠã·ã¹ãã ãæèãããªãã»ã©ã®å®å®çšŒåãã第äžã§ãã åããŠããŠåœç¶ãšãããŠããã·ã¹ãã ãã¡ãªã®ã§ãå®å®çšŒåããŠããªããšå
šäœçã«æ¯éãã§ãŸãã ãããããã«æ
ä¿ããããéèŠã«ãªã£ãŠããŸãã 2.çŸå Žç€Ÿå¡ã®ç«å Žã«ç«ã£ãŠèãã ã·ã¹ãã å°å
¥ãæ¹ä¿®ã®éã«ãçŸå Žç€Ÿå¡ãå®éã®å©çšã®æµããæ³åã§ããããã«ãæäŒãããã®ã ç§ãã¡ã®ä»äºã§ãã ãªãã¹ãç»é¢ãã£ããã£ãå€ã䜿ã£ãè³æãäœã£ããããšãããã宿åã«è¿ããµã³ãã«åãè§Šã£ãŠããããªã©ããŠæ¥åãå
·äœçã«ã©ããªãã®ããšããã®ãæèããŠãããããã«å¿ãããŠããŸãã 3.ãªã¹ã¯å
±æ ãªã¹ã¯ãäºæ³ãæªç¶ã«é²ãããšãšãåé¡ãçºçããŠãã察åŠããããšã§ã¯ã圱é¿ç¯å²ã察å¿ã³ã¹ããå
šãå€ãã£ãŠããŸãã åãè¿ãã®ã€ããªãåé¡ãçºçãããªãããã«ãããªã¹ã¯ã®äºæ³/å
±æ/察å¿çã®æ€èšã¯åžžã«è¡ã£ãŠããŸãã ãã®ããããŠãŒã¶ãŒïŒç€Ÿå¡ïŒã«å¯ŸããŠäºåã«ãªã¹ã¯ã説æããããžã§ã¯ããé²ããŠããŸãã ãäœæ¥çæãé
ããªãããã«ãæãæ¥ãŸã§ã«åçããŠãããå¿
èŠãããã ãæ°ããèŠæã®äžããåæšéžæããªããšäºç®ãªãŒããŒãšãªã£ãŠããŸãã ããã®èŠæãåæ ããããšââã®åŠçæéãé·ããªãå¯èœæ§ãããã ãªã©ãå
·äœçã«äŒããŠããŸãã ããšãã æåŸãŸã§èªãã§ããã ãããããšãããããŸããïŒ ã·ã¹ãã è·ïŒããã°ã©ããŒã®ããã«ã³ãŒãã£ã³ã°ããã人ããšããã€ã¡ãŒãžãæã£ãŠããæ¹ã« ç§ãã¡ã®ããã«ç€Ÿå
ã®ã·ã¹ãã ã管çã»éçšããä»äºããããã ãšããããšãç¥ã£ãŠããã ããããä»åã¢ããã³ãã«ã¬ã³ããŒäŒç»ã«åå ãããŠããã ããŸããã ãŸããã®èšäºãèªãã§ ãåºå¹¹/æ
å ±ã·ã¹ãã æ
åœã«èå³ãããïŒã ãæ§æ Œçã«çµæ§åããŠããããïŒã ãšæã£ãŠãã ãã£ãæ¹ãïŒäººã§ãããã£ããã£ããå¬ããã§ãã æåŸãŸã§ãèªã¿ããã ãããããšãããããŸããïŒ æçš¿ ã³ãŒãã£ã³ã°ããªãã·ã¹ãã è·ãããã£ãŠã»ããšã§ããïŒïŒïœç€Ÿå
SEã®ãä»äºç޹ä»ããŸãïœ ã¯ ãã€ãããšã³ãžãã¢ããã° ã«æåã«è¡šç€ºãããŸããã
ã¯ããã« åçªã§ãã VSCode ã®æ¡åŒµæ©èœäœã£ãŠã¿ãããããŸãããïŒ ç§ã¯æ¥ã
ã®ã³ãŒãã£ã³ã°ã®æ¥åã§ã¯ãã¡ãã VSCode ã䜿ã£ãŠããŸãããçããšããã«æãå±ããªããšãããŸãããèªåã®æãéãã®ã³ãŒããšãã£ã¿ã«ããããã«ãããšäžæ©è¶³ããªãã»ã»ã»ãã®æ©èœãããã°ã»ã»ã»ãšæãããšããã£ããããŸãã ã¿ãªãããããæããçµéšãªãã§ããïŒ ãããã£ãããããªèŠæã«çããŠãããæ¡åŒµæ©èœãããã°ããã§ããããªããã°èªåã§äœããããããŸããã ãšããããšã§ä»å㯠VSCode ã®æ¡åŒµæ©èœã®äœãæ¹ããã®èšäºã§ç޹ä»ããããšæããŸãïŒ ãšãããã Hello World ããŠã¿ã ãããã°ã§åãããŠã¿ã VSCode ã®å
¬åŒããã¥ã¡ã³ã ã® Get Started ãèŠãŠã¿ããšãµã³ãã«ã®æ¡åŒµæ©èœïŒæ¡åŒµæ©èœã®é圢ïŒãäœãæ¹æ³ãèŒã£ãŠããŸãã ãã®æé ã«åŸã£ãŠãµã³ãã«ã®æ¡åŒµæ©èœãäœã£ãŠã¿ãŸãã 以äžã®ã³ãã³ããæã£ãŠå¿
èŠãªã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŠé圢ãäœã£ãŠã¿ãŸãã npm install -g yo generator-code yo code é圢㯠yo ã³ãã³ãã察話çã«äœæããŠãããŸãã ä»å㯠TypeScript ã䜿ã£ãŠé圢ãã€ããããšãšããŠãååã¯é©åœã« HelloWorld ãšããŸãã # ? What type of extension do you want to create? > New Extension (TypeScript) # ? What's the name of your extension? HelloWorld # ? What's the identifier of your extension? hellowold # ãã®ãŸãŸ Enter # ? What's the description of your extension? Sample extension # ? Initialize a git repository? n # ãªããžããªãšãããå Žå㯠Y ãéžæ # ? Bundle the source code with webpack? N # ? Which package manager to use? npm # ã奜ã¿ã®ãã®ãéžãã§ãã ãã # ? Do you want to open the new folder with Visual Studio Code? > Open with `code` ããã§ãHelloWorld æ¡åŒµæ©èœã®é圢ãäœãããŸããã ãã®ãŸãŸ F5 ãæŒããŠæ¡åŒµæ©èœããããã°ã¢ãŒãã§èµ·åãããŠã¿ãŸãã HelloWorld æ¡åŒµæ©èœãæå¹ã«ãªã£ããããã°çšã® VSCode ã®ãŠã€ã³ããŠãéããŸãã ãã®ç¶æ
ã§ã Ctrl + Shift + p ãæŒããŠãã³ãã³ããã¬ããã衚瀺ããã Hello World ãšå
¥åãããšã³ãã³ããã§ãŠããŸãã ã³ãã³ããå®è¡ããŠã¿ããšãå³äžã®ããã¹ãããã¯ã¹ã« Hello World from HelloWorld ã衚瀺ãããŸããã ã³ãŒããèŠãŠã¿ã æ¡åŒµæ©èœã®ãšã³ããªãã€ã³ãã¯ãsrc/extension.ts å
ã® activate 颿°ã«ãªããŸãã äžèº«ã¯ ã§ããïŒå®éã®ã³ãŒãã§ã¯ã³ã¡ã³ããäžå¯§ã«å
¥ã£ãŠããŸããïŒ âŒhelloworld/src/extension.ts import * as vscode from 'vscode'; export function activate(context: vscode.ExtensionContext) { console.log('Congratulations, your extension "helloworld" is now active!'); let disposable = vscode.commands.registerCommand('helloworld.helloWorld', () => { vscode.window.showInformationMessage('Hello World from HelloWorld!'); }); context.subscriptions.push(disposable); } export function deactivate() {} ã³ãŒãã®äžç€ããã ã® disposable ãªããžã§ã¯ãã Hello World ã衚瀺ãããŠããã³ãã³ãã®å®æ
ã§ãã let disposable = vscode.commands.registerCommand('helloworld.helloWorld', () => { vscode.window.showInformationMessage('Hello World from HelloWorld!'); }); ããã§ã¯ã vscode.window.showInformationMessage 颿°ãåŒã³åºãã³ãã³ããäœæããŠããã®ã³ãã³ãã® ID ã helloworld.helloWorld ãšããŠããŸããïŒ showInformationMessage ã¯VSCode ã®å³äžéšåã«ã¡ãã»ãŒãžã衚瀺ãããã¡ãœããã§ãïŒ ããã§ããµã³ãã«ã®æ¡åŒµæ©èœã§ Hello World ã衚瀺ããããšãã®ããšãæãåºããŠã¿ãŸãã å³äžã« Hello World ãåºãã®ã¯ã³ãã³ããã¬ããã« Hello World ãå
¥åããã³ãã³ããå®è¡ãããšãã§ããã ãã®ããã«ã³ãã³ããã¬ããããå®è¡å¯èœãªã³ãã³ãã«ããŠããéšåã®èšè¿°ãå®ã¯ package.json ã«èšèŒãããŠããŸãã package.json ã®16-23è¡ç®ã«è©²åœã®èšè¿°ããããŸãã âŒhelloworld/package.jsonïŒäžéšæç²ïŒ "contributes": { "commands": [ { "command": "helloworld.helloWorld", "title": "Hello World" } ] }, ãã®éšåã§ãã³ãã³ãã®ã¿ã€ãã«ã Hello World ãšãã helloworld.helloWorld ããã®æ¡åŒµæ©èœãæäŸããã³ãã³ããšããŠç»é²ããŠããŸãã ãã®ããã«ããŠãVSCode ã®æ¡åŒµæ©èœã§ã¯ package.json ãšãœãŒã¹ã³ãŒãã«ææã®åŠçãèšè¿°ããŠãæ¡åŒµæ©èœãäœã£ãŠããããšã«ãªããŸãã ããã±ãŒãžå ããŠã¿ã ãµã³ãã«ã®æ¡åŒµæ©èœã®äžèº«ãçè§£ã§ãããšããã§ã次ã¯ãããå®éã«äœ¿ãã圢ã§ããã±ãŒãžå ããŠã¿ãŸãã ããã±ãŒãžåãããšããã«ã€ããŠã¯ ã®èšäºããããŸãšãŸã£ãŠããã®ã§åèã«ããŸãã ïŒ https://dev.classmethod.jp/articles/easy-vs-code-extension-development/ ïŒ â» ä»åã®èšäºã§ã¯æ¡åŒµæ©èœãå
¬éããéšåã«ã€ããŠã¯ãã£ãããšããªãã®ã§è§ŠããŸããã ããã±ãŒãžåããããã«ã¯ vsce ã³ãã³ãã䜿ãããã§ãã ãšããããã€ã³ã¹ããŒã«ããŠãããŸãã npm install -g vsce æ£ããããã±ãŒãžåããããã«ããŸã㯠README ãç·šéããŸãã ãããç·šéããªããš vsce ã³ãã³ããå®è¡ãããšãã«ä»¥äžã®ãšã©ãŒãçºçããŠããã±ãŒãžåã§ããŸããïŒ2æïŒ ERROR Make sure to edit the README.md file before you package or publish your extension. # helloworld README sample extension README ãçŽããã vsce ã³ãã³ããå®è¡ããŠæ¡åŒµæ©èœãããã±ãŒãžåããŸãã npx vsce package å Žåã«ãã£ãŠã¯èŠåãã§ãã®ã§ãé©åã«å¯Ÿå¿ããŸãã WARNING A 'repository' field is missing from the 'package.json' manifest file. Do you want to continue? [y/N] y # git ãªããžããªã«ããŠãªãå Žåã«çºçããŸã WARNING LICENSE.md, LICENSE.txt or LICENSE not found Do you want to continue? [y/N] y å®äºãããšã {æ¡åŒµæ©èœå}-{ããŒãžã§ã³}.vsix ãã¡ã€ã«ãåºæ¥äžãããŸãããïŒã¡ãªã¿ã«ããŒãžã§ã³åãæ¡åŒµæ©èœå㯠package.json ã§ç®¡çãããŠããŸããïŒ ããã§ããã±ãŒãžåã¯å®äºã§ã å®éã«ã€ã³ã¹ããŒã«ãããšã㯠Ctrl + Shift + x ã§æ¡åŒµæ©èœã®ãã¥ãŒã衚瀺ãã VSIX ããã®ã€ã³ã¹ããŒã« ãéžæã VSCode ã«ã€ã³ã¹ããŒã«ããŸãã ããããã®ããæ¹ã«ã€ããŠè©±ããŠã¿ã VSCode ã® API ãªãã¡ã¬ã³ã¹ ãèŠããšæ§ã
㪠API ã®äœ¿ãæ¹ãèŒã£ãŠããããã§ãããAPI ã®åŒã³åºãæ¹ã説æããã®ã¿ã§ããã®æ©èœã䜿ãããšã§èŠãç®ãã©ãå€ããã®ããå
éšã§äœãèµ·ãã£ãŠããã®ããã€ã¡ãŒãžããããšã¯æ£çŽå³ãããšæããŸãã äŸãã°ããšã¯ã¹ãããŒã©ãŒã®ãããªããªãŒåã®ãã¥ãŒïŒ ã¿ãããªãã€ïŒãäœãããå Žåã«ãèšå€§ãªäœ¿ãæ¹ããäœãæ¹ãæ¢ãã®ã¯å€§å€ã ãšæããŸãã ãããªãšãã¯ãVSCode ã®å
¬åŒãå
¬éããŠãã ãµã³ãã«é ãã¿ãŠãåããã®ããåŠãã§ããã®ãããããã§ãã ããã§ã¯ããã䜿ããã¡ãªæ©èœã®ãµã³ãã«ããŸãšããŠãããã¯ããŒã³ããŠããŠå®éã«åãããŠã¿ãããšã§äžã§äœãèµ·ãã£ãŠããã®ããèŠãç®ã«ã©ã圱é¿ããã®ãã確èªããŠã¿ãããšãã§ããŸããïŒ vim ãšãã£ã¿:memo:ãäœã£ãŠã¿ã ã£ãŠã®ããã£ããããŸã ïŒ å®éã«åãããŠã¿ãŠãäžèº«ã確èªããããš API ãªãã¡ã¬ã³ã¹ ãèŠãããšã§çè§£ããããããªãããããªãããšæããŸããïŒå®éç§ã¯ãããã£ãŠæ¡åŒµæ©èœã®éçºãããŠãŸãïŒ ãŸããVSCode ã® UI æ§é ãããžãã¯éšåã®èšè¿°ã«æ
£ããŠãããšã dockerã®æ¡åŒµæ©èœ ã gitlens ãšãã£ãæåãªæ¡åŒµæ©èœã®ãœãŒã¹ã³ãŒããããææã®åŠçã®éšåãåèã«ããŠå®è£
ããŠã¿ãã®ããããšæããŸãã ãµã³ãã«æ¡åŒµæ©èœã«æ©èœã远å ããŠã¿ã æåŸã«ã玹ä»ããããããã®ããæ¹ã§ãµã³ãã«ã®æ¡åŒµæ©èœã« ã®æ©èœã远å ããŠã¿ãŸãã VSCode ã®äžéšã¹ããŒã¿ã¹ããŒã«æåã衚瀺ããã æåæ
å ±ã¯ VSCode ã®èšå®ç»é¢ããæå®ãã ã¹ããŒã¿ã¹ããŒã«æåãåºãéšåã«ã€ããŠèª¿ã¹ãŠã¿ã ã¹ããŒã¿ã¹ããŒã«æåã远å ããŠããæ¡åŒµæ©èœããµã³ãã«ã®ãªããžããªããæ¢ããŠã¿ãŸãã ã®ã³ãŒãå
ã StatusBar ã¯ã©ã¹ã® vscode.StatusBarItem ã該åœã®éšåã£ãœããã§ãã https://github.com/microsoft/vscode-extension-samples/blob/main/vim-sample/src/extension.ts âŒvim-sample/src/extension.ts class StatusBar { private _actual: vscode.StatusBarItem; private _lastText: string; constructor() { this._actual = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left); this._actual.show(); } public setText(text: string): void { if (this._lastText === text) { return; } this._lastText = text; this._actual.text = this._lastText; } } æåã衚瀺ãããã«ã¯ vscode.StatusBarItem ãªããžã§ã¯ããäœãå¿
èŠãããããã㯠vscode.window.createStatusBarItem 颿°ã§ãã§ããããã§ãã 衚瀺ãããæåã¯ã©ã®ããã«èšå®ããã®ããèŠãŠã¿ãŸãã åãã¯ã©ã¹ã® setText ã¡ãœããå
ã®ã³ãŒããèŠããšã vscode.StatusBarItem ãªããžã§ã¯ãã® text ããããã£ã«è¡šç€ºããæåãå
¥ããŠããã¿ããã§ãã API ãªãã¡ã¬ã³ã¹ãèŠãŠã¿ãŸãã createStatusBarItem 颿°ã¯ ãã®ãªã³ã¯ ãã¡ãã£ãšã¹ã¯ããŒã«ããéšåã«å®çŸ©ããããŸããã StatusBarItem ã¯ã©ã¹ã«ã€ããŠã¯ãã¡ãã® ãªã³ã¯ ã«äœ¿ãæ¹ãããã¿ããã§ãã text ããããã£ãèŠãŠã¿ããšãã©ãããç¹æ®ãªæžãæ¹ã§ã¢ã€ã³ã³ã衚瀺ãããããšãã§ããããšãããããŸããã èšå®ç»é¢ããæåãååŸããéšåã«ã€ããŠèª¿ã¹ãŠã¿ã 次ã«èšå®ç»é¢ããæåãåŸãéšåã調ã¹ãŠã¿ãŸãã ãã®ã³ãŒã ã® ããããèšå®ããå€ãæã£ãŠããŠãããšããã¿ããã§ãã âŒcodelens-sample/src/CodelensProvider.ts if (vscode.workspace.getConfiguration("codelens-sample").get("enableCodeLens", true)) { getConfigration 颿°ã® ãªãã¡ã¬ã³ã¹ ãèŠãŠã¿ããšã WorkspaceConfiguration ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŠããããšããããã ãã®éšåã®ãªãã¡ã¬ã³ã¹ ãèŠãŠã¿ããš get ã¡ãœããã®äœ¿ãæ¹ãåãã£ãŠããŸããã æ¬¡ã« configration ãšã¯äœãã«ã€ããŠã調ã¹ãŠã¿ãŸãã ãªãã¡ã¬ã³ã¹ ãæ¢ããŠã¿ããšãpackage.json ã«èšè¿°ããèšå®ã¿ããã§ãã åèã«ããæ¡åŒµæ©èœã® pakcage.json ãèŠããš configration ã®èšè¿°ãããããšã確èªã§ããŸãã âŒcodelens-sample/package.json "configuration": { "properties": { "codelens-sample.enableCodeLens": { "type": "boolean", "default": true } } } å®è£
ããŠã¿ã ããã§æ©èœè¿œå ããäžã§å¿
èŠãªæ
å ±ãåºæã£ãã®ã§ãå®éã«æ©èœè¿œå ããŠã¿ãŸãã ä»å㯠statusBarText ãšããèšå®ã远å ããŠã¿ãŠãããã®å€ãã¹ããŒã¿ã¹ããŒã«åºãããšã«ããŸããïŒããã©ã«ãã®å€ãšã㊠default ãšããæåãå
¥ããŠãããŸããïŒ ãŸããæåã®è¡šç€ºã¯ãŠã€ã³ããŠãç«ã¡äžãã£ããšãã«ãããã®ã§ã activationEvents ã« onStartupFinished ã远å ããŠããŸãã âŒhelloworld/package.jsonïŒäžéšæç²ïŒ "activationEvents": [ "onCommand:helloworld.helloWorld", "onStartupFinished" // 远å éšåïŒæ¡åŒµæ©èœãæå¹åããããšãã« active 颿°ãå®è¡ããïŒ ], ... "contributes": { "commands": [ { "command": "helloworld.helloWorld", "title": "Hello World" } ], // 远å éšå "configuration": [ { "type": "object", "title": "helloworld", "properties": { "helloworld.statusBarText": { "type": "string", "default": "dafault", "scope": "resource", "description": "ã¹ããŒã¿ã¹ããŒã«è¡šç€ºããæåãèšå®ããŸã" } } } ] } extension.ts ã«ã¯ãµã³ãã«ã®ã³ãŒããèŠãŠåŠãã API ã®äœ¿ãæ¹ãåèã«ã以äžãè¡ãã³ãŒãã远èšããŸãã ã¹ããŒã¿ã¹ããŒãäœã æåãèšå®ããèªã¿èŸŒã ã¹ããŒã¿ã¹ããŒã®æåãšããŠèšå®ãã âŒhelloworld/src/extension.ts import * as vscode from 'vscode'; export function activate(context: vscode.ExtensionContext) { console.log('Congratulations, your extension "helloworld" is now active!'); let disposable = vscode.commands.registerCommand('helloworld.helloWorld', () => { vscode.window.showInformationMessage('Hello World from HelloWorld!'); }); context.subscriptions.push(disposable); // 远å éšå const statusBarItem = vscode.window.createStatusBarItem(); statusBarItem.text = vscode.workspace .getConfiguration('helloworld') .get('statusBarText', ''); statusBarItem.show(); } export function deactivate() {} ããã§ã¯ãããã°ã¢ãŒãã§å®è¡ããŠã¿ãŸãã å€ã衚瀺ãããŠããŸã èµ·åããã°ã£ããã§ã¯ãèšå®ç»é¢ã§å€ãæå®ããŠããªãã®ã§ããã©ã«ãã®æåã衚瀺ãããŠããŸãã æã£ãéãã®åäœããããèŠãŠã¿ã 次ã«èšå®ãã¡ã€ã«ã«å€ãèšå
¥ããŠã衚瀺ããæåã倿ŽããŠã¿ãŸãã Ctrl + , ãå
¥åããŠèšå®ç»é¢ãåºããŠãæ€çŽ¢ããã¯ã¹ã« helloworld ãšå
¥åããŸãã ã®ããã«èšå®ãåºãŠããã®ã§é©åœãªæåãå
¥ããŠã¿ãŸãã ãã®éã©ãããªãã¢ã€ã³ã³ã衚瀺ãããŠã¿ãŸããïŒ ã¢ã€ã³ã³ã®äžèЧ ïŒ æåã衚瀺ãããã®ã¯æ¡åŒµæ©èœãèªã¿èŸŒãŸãããšããªã®ã§ãåèªã¿èŸŒã¿ãããŸãã ãããã°ã³ã³ãœãŒã«ã衚瀺ããŠããæ¹ã® VSCode ãŠã€ã³ããŠããæŽæ°ãã¿ã³ãæŒããŠå床ãããã°ãå®è¡ããŠã¿ãŸãã äžã®æåã倿ŽãããŸããïŒ ã¢ã€ã³ã³ãããŸã衚瀺ã§ããŠããã¿ããã§ãïŒ ãããã« ä»å㯠VSCode ã®æ¡åŒµæ©èœã®äœãæ¹ãšãå®éã«äœããšãã«åèã«ãããè¯ãããã¥ã¡ã³ãããµã³ãã«ã³ãŒãã玹ä»ããŸããã ããã ãå€ãã®ããšãã§ããŠãèªç±åºŠãé«ããšããã VSCode ã䜿ãããããœãŒã¹ã³ãŒããšãã£ã¿ãšããŠç¥ãããŠããçç±ãªãã ãšæããŸãã æ¥ã
ã®æ¥åã§æããŠããå
ããªèç«ã¡ããèªåã§æ¡åŒµæ©èœãäœã£ãŠã¿ãŠè§£æ±ºããŠã¿ãŠã¯ãããã§ããããã æçš¿ VSCode ã®æ¡åŒµæ©èœãäœã£ãŠã¿ã 㯠ãã€ãããšã³ãžãã¢ããã° ã«æåã«è¡šç€ºãããŸããã
å¯é¡: AWSã®ãããã§ã°ãªãŒã³ã«ã¬ãŒãäœããªããªã£ã話 ã¯ããã« â»æ¬èšäºã¯ãAWS Organizations + CloudFormation StackSetsã§è€æ°AWSã¢ã«ãŠã³ããžã®ãªãœãŒã¹å±éã管çããŠããæ¹åãã®å
容ã«ãªã£ãŠããŸãã æšå¹Žã ãã€ãã Advent Calendar 2021 ã«ãŠã ãããªèšäº ãæžãããŠããã ããŸããã èŠçŽãããšã CloudFormation StackSetsã§çµç¹ãOUã«å±éããŠããCFnã¹ã¿ãã¯ã«ã€ããŠã ãã®ãããã€ã¹ããŒã¿ã¹ãéç¥ããããã«ãããã£ãã®ã§ã ã°ãªãŒã³ã«ã¬ãŒãäœãã€ãã§ã«åŒ·åŒã«ãããã€ã¹ããŒã¿ã¹ã確èªãããµãŒããŒã¬ã¹ã¢ããªã±ãŒã·ã§ã³ãäœã£ãã ãšããå
容ã§ããã åœæãStackSetsã®åã¹ã¿ãã¯ã€ã³ã¹ã¿ã³ã¹ã®ã€ãã³ãããStackSetsãOrganizationsã®ç®¡çã¢ã«ãŠã³ãåŽã§æ€ç¥ããææ®µãç¡ãã£ããããStep Functionsã䜿ã£ãР宿çã«ã¹ããŒã¿ã¹å€æŽãããŒãªã³ã°ãã ããšã§è§£æ±ºããããã§ãã ãã ããããçŽ1å¹Žã®æãçµãŠã2022幎11æã«AWSãã ãããªã¢ããŠã³ã¹ ãã Build event-driven applications with AWS CloudFormation StackSets event notifications in Amazon EventBridge æ¬æ¥ãããAWS CloudFormation StackSets ã§ãAmazon EventBridge ãä»ããã€ãã³ãéç¥ã®æäŸãéå§ãããŸãããã€ãã³ãé§ååã®ã¢ã¯ã·ã§ã³ã¯ãCloudFormation ã®ã¹ã¿ãã¯ã»ãããäœæãæŽæ°ãåé€ããåŸã«ãããªã¬ãŒããããšãã§ããŸããããããCloudFormation ã¹ã¿ãã¯ã»ããã®ãããã€ã§ãCloudFormation API ãä»ããŠå®æçã«å€æŽãããŒãªã³ã°ããã«ã¹ã¿ã ã®ãœãªã¥ãŒã·ã§ã³ãéçºãŸãã¯ç¶æããªããŠãå®è¡ã§ããŸãã (ãïŸÐŽïŸ) (ã€ÐŽâ)ïŸïœŒïœºïŸïœŒ 宿çã«å€æŽãããŒãªã³ã°ããã«ã¹ã¿ã ã®ãœãªã¥ãŒã·ã§ã³ãéçºãŸãã¯ç¶æããªããŠãå®è¡ã§ããŸãã (ïŒïŸÐŽïŸ) (ã€ÐŽâ)ïŸïœŒïœºïŸïœŒ ã_, ._ (ïŒïŸ ÐïŸ) âŠïŒïŒ ã€ãã€ãã«åŸ
æã®æ©èœãå®è£
ãããŸããïŒïŒïŒïŒïŒ ãšããããã§ããšã«ããã€ãã³ãæ€ç¥ãã§ããããã«ãªã£ã以äžãããæŽ»ãããªãæã¯ãªãã ãããšãæ°ããåã¹ã¿ãã¯ã€ã³ã¹ã¿ã³ã¹ã®ãããã€ã¹ããŒã¿ã¹ãæ€ç¥ããåºç€ãäœãçŽããŸããã æ¬é¡ éç¥ãããã®ã¯ããåã¹ã¿ãã¯ã€ã³ã¹ã¿ã³ã¹ã®ãããã€ã¹ããŒã¿ã¹ã®å€æŽãã§ãã æ§æã¯å¥ã«å³ã«ãããŸã§ããªããã§ãããäžå¿ãã¡ãã®éèæ¯éšåã«ãªããŸãã SAMå®è£
éšåã ãèŠããšã ãã¶ã¹ãããªããŸããã Slackéç¥ãããã ããªããChatbotã䜿ã£ããEventBridgeã®ãã©ã³ã¹ãã©ãŒããŒã§SlackAPIãå©ãããããã°LambdaãæžããªããŠãè¯ããã§ããã Chatbotã®éç¥å
容ã ãšæ
å ±ãå°ãªããã åè: [ã¢ããããŒã] CloudFormation StackSets ã EventBridge ãä»ããŠã€ãã³ãéç¥ã§ããããã«ãªããŸãã | DevelopersIO æ¡ä»¶åå²ã§éç¥å
容ãã«ã¹ã¿ãã€ãºããã ãšãã£ãããšãããLambdaãéããŠWebhookã§Slackã«æãã圢ã«ããŠããŸãã ã€ãã§ã«ãã¢ã«ãŠã³ãIDã ãã§ãªãã¢ã«ãŠã³ãåãéç¥çµæã«å«ãããããOrganizationsã®APIãå©ããŠããŸãã ãŸããStackSetsã®ç®¡çèªäœã¯å°çšã®ã¢ã«ãŠã³ãïŒStackSets AccountïŒã«å§ä»»ããŠè¡ã£ãŠããŸããããã®å Žåã§ããµãŒãã¹ãããŒãžãåã®StackSetsã®ã€ãã³ã㯠Organizationsã®ç®¡çã¢ã«ãŠã³ãã§æ€ç¥ããã ã®ã§æ³šæã å®è£
SAMãã³ãã¬ãŒã äœã®å€å²ããªããEventBridgeã«ãŒã«ãšLambda颿°ãå®çŸ©ããŠãããã³ãã¬ãŒãã§ãã EventBridgeã§æŸãã€ãã³ãã¿ã€ã㯠CloudFormation StackSet StackInstance Status Change ãã¹ããŒã¿ã¹ã³ãŒã㯠å
¬åŒãªãã¡ã¬ã³ã¹ ãèŠãŠãšãããããªãã¬ãŒã·ã§ã³ã®å€±æã»æåãæŸãããã« SUCCEEDED / FAILED / CANCELLED ã®3ã€ãšããŠããŸãã âŒtemplate.yaml AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: | Service-Managed StackSets' Stack Instance Status Notification to Slack(webhook) #-----------------------------------------------------------------------------------# Parameters: #-----------------------------------------------------------------------------------# SystemName: Type: String Description: input System Name. Default: stacksets-status-notify Env: Type: String Description: input Env Name. AllowedValues: - dev - stage - prod SlackWebhookUrl: Type: String Description: input Slack Incoming Webhook URL #-----------------------------------------------------------------------------------# Conditions: #-----------------------------------------------------------------------------------# isProd: !Equals [ !Ref Env, "prod" ] #-----------------------------------------------------------------------------------# Resources: #-----------------------------------------------------------------------------------# #---------------------------------------------------------------------------------# # EventBridge Rule #---------------------------------------------------------------------------------# StackInstancesStatusChangeEventRule: Type: AWS::Events::Rule Properties: EventPattern: source: - aws.cloudformation detail-type: - CloudFormation StackSet StackInstance Status Change detail: status-details: detailed-status: - SUCCEEDED - FAILED - CANCELLED Targets: - Id: !Ref NotifyFunction Arn: !GetAtt NotifyFunction.Arn #---------------------------------------------------------------------------------# # Notify Function #---------------------------------------------------------------------------------# NotifyFunction: Type: AWS::Serverless::Function Properties: Description: !Sub - Stack ${AWS::StackName} Function ${ResourceName} - ResourceName: NotifyFunction FunctionName: !Sub ${SystemName}-${Env}-NotifyFunc CodeUri: notify_function Handler: app.lambda_handler Runtime: python3.9 MemorySize: 128 Timeout: 30 Role: !GetAtt NotifyFunctionExecRole.Arn Environment: Variables: SLACK_WEBHOOK_URL: !Ref SlackWebhookUrl IS_PROD: !If [isProd, true, false] NotifyFunctionExecRole: Type: AWS::IAM::Role Properties: RoleName: !Sub ${SystemName}-${Env}-NotifyFunc-Role ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole Policies: - PolicyName: NotifyFunctionExecRolePolicy PolicyDocument: Version: 2012-10-17 Statement: - Sid: AllowDescribeAccountName Action: - organizations:DescribeAccount Resource: '*' Effect: Allow AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Action: - sts:AssumeRole Effect: Allow Principal: Service: - lambda.amazonaws.com FunctionLogGroup: Type: AWS::Logs::LogGroup DeletionPolicy: Retain UpdateReplacePolicy: Retain Properties: LogGroupName: !Sub /aws/lambda/${NotifyFunction} RetentionInDays: 30 StackInstancesStatusChangeEventRuleToNotifyFunctionPermission: Type: AWS::Lambda::Permission Properties: Action: lambda:InvokeFunction FunctionName: !GetAtt NotifyFunction.Arn Principal: !Sub events.${AWS::URLSuffix} SourceArn: !GetAtt StackInstancesStatusChangeEventRule.Arn äœè«ã§ãããä»åã®template.yamläœæã«ããã£ãŠã¯å
æ¥ãã¬ãã¥ãŒçãåºã Application Composer ã䜿ã£ãŠã¿ãŸããã ãã ã ãã£ããäœèšãªLambda颿°äœã£ã¡ãã£ãŠããæ¶ããŠããã©ã«ãã¯æ¶ããŠãªã ããã©ã«ãã®Node.jsããPythonã«åãæ¿ããŠãindex.jsãšpackage.jsonãæ¶ããŠãªã handler.handlerãapp.handlerã«æžãæããŠããã£ã¬ã¯ããªåã¯å€ãããªã ããªã·ãŒãçŽæžãã®ã¿ã§ãIAMã®ãããŒãžãããªã·ãŒãåœãŠãææ®µãç¡ã ããããParameterã€ããããªã ããããšããŸã è²ã
ãšç²ããçµå±å€§åã¯yamlãçŽæ¥ç·šéããŸããã Windowsãããªãã£ãããŸãéãã®ãããããŸããã⊠ä»åŸã«æåŸ
ãããã§ãã Lambda ã€ãã³ããåãåã£ãŠãOrganizationsã®APIã§å¯Ÿè±¡ã¢ã«ãŠã³ãåååŸããŠãæŽåœ¢ããŠSlackã«æããŠãã ãã§ãã âŒnotify_function/app.p import json import os import re from datetime import datetime # noqa: F401 from logging import getLogger, basicConfig, INFO, DEBUG import boto3 import requests # Logger Settings logger = getLogger(__name__) log_level = INFO if is_prod else DEBUG basicConfig(level=log_level) logger.setLevel(log_level) def get_account_name(account_id): """! Get Account Name AWSã¢ã«ãŠã³ãIDããã¢ã«ãŠã³ãåãååŸãã @param account_id(str) @return AWS Account Name.(str) """ logger.debug('start func: get_account_name') logger.debug('input: {}'.format(account_id)) if not account_id: return '' client = boto3.client('organizations') res = client.describe_account(AccountId=account_id) account_name = res['Account']['Name'] logger.debug('return {}'.format(account_name)) return account_name def generate_slack_data(data): """! Generate Slack Post Data Slackã®Webhookã«æããPOSTããŒã¿ãçæããã @param data input event data. @return Slack Post Data.(dict) """ logger.debug('start func: generate_slack_data') logger.debug(data['detail']) stacksets_url = 'https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacksets?permissions=service' # noqa: E501 # Stack Instance account, region stack_instance_stack_arn = data['detail'].get('stack-id', '') arn_pattern = r'^arn:aws:.*?:(.+?):(.+?):(stackset|stack)/?(.*)$' stack_instance_region = re.sub( arn_pattern, '\\1', stack_instance_stack_arn ) stack_instance_account_id = re.sub( arn_pattern, '\\2', stack_instance_stack_arn ) stack_instance_account_name = get_account_name( stack_instance_account_id ) # Stack Instance status stack_instance_status = data['detail']['status-details']['detailed-status'] # StackSet stack_set_name = re.sub( arn_pattern, '\\4', data['detail']['stack-set-arn'] ).split(':')[0] # emoji if stack_instance_status == 'SUCCEEDED': color = '#2EB886' emoji = ':white_check_mark:' else: color = '#A30100' emoji = ':rotating_light:' slack_data = { 'attachments': [ { 'color': color, 'blocks': [ { 'type': 'section', 'text': { 'type': 'mrkdwn', 'text': '{} *<{}|StackSets StackInstance Status>*'.format( # noqa:E501 emoji, stacksets_url ) } }, { 'type': 'section', 'fields': [ { 'type': 'mrkdwn', 'text': '*Account*\n{}\n`{}`'.format( stack_instance_account_id, stack_instance_account_name ) }, { 'type': 'mrkdwn', 'text': '*Region*\n{}'.format( stack_instance_region ) }, { 'type': 'mrkdwn', 'text': '*StackSet*\n{}'.format( stack_set_name ) }, { 'type': 'mrkdwn', 'text': '*Status*\n{}'.format( stack_instance_status ) }, ] } ] } ] } logger.debug('return {}'.format(slack_data)) return slack_data def post_to_slack(slack_webhook_url, slack_data): """! exec HTTP POST request to Slack Incoming Webhook. Slack Incoming WebhookãžããŒã¿ãPOSTããã @param slack_webhook_url @param slack_data @return Slack Post Result.(bool) """ logger.debug('start func: post_to_slack') headers = { 'Content-Type': 'application/json' } try: res = requests.post( slack_webhook_url, headers=headers, data=json.dumps(slack_data) ) except requests.exceptions.RequestException as e: err_str = str(e).replace(slack_webhook_url, '****') logger.error('[Error posting to slack] {0}'.format(err_str), stack_info=True) # noqa:E501 return False else: logger.info('Slack Post OK.') return True def lambda_handler(event, context): """! lambda handler Lambdaã€ãã³ããã³ãã©ã @param event input Event by EventBridge. """ logger.info('input event: {}'.format(event)) slack_webhook_url = os.environ.get('SLACK_WEBHOOK_URL') if slack_webhook_url: slack_data = generate_slack_data(event) slack_result = post_to_slack(slack_webhook_url, slack_data) if slack_result: logger.info('Function Normal End') else: logger.warn('Slack Webhook URL is Null.') return ãã°ãšãdocstringã®ãäœæ³ã¯ãã®æç¹ã§ã¯å²ãšé©åœã§ããããããªããã åãããŠã¿ã StackSetsã管çããŠããus-east-1ãªãŒãžã§ã³ã«ãŠãããã€åŸãé©åœãªCFnãã³ãã¬ãŒããSandboxçšOUã«å±éããŠããã¹ãçšã¢ã«ãŠã³ããOUéã§åãããŠã¿ããšããã以äžã®ããã«ç¡äºãªã¢ã«ã¿ã€ã ã§Slackã«éç¥ãæ¥ãŸããã ïŒå¿µã®ããããŒãããªããŠè¯ããããªãšãããŸã§ãŒãããŠããŸãïŒ è¯ãæãã§ããã ap-northeast-1ãªãŒãžã§ã³ã®ã¹ã¿ãã¯ã€ã³ã¹ã¿ã³ã¹ã®çµæãŸã§ã¡ãããšæŸããŠããŸãã éç¥ã®ãã©ãŒãããã¯æ¹è¯ã®äœå°ãããããã§ãããäžå
ãéçšäžã¯å
åã§ãã ãã€ã³ã å
ã«ãè§ŠããŸãããããµãŒãã¹ãããŒãžãåStackSetsã®ã€ãã³ãã¯Organizationsã®ç®¡çã¢ã«ãŠã³ãã§çºçããŸããStackSets管ççšã«å§ä»»ããã¢ã«ãŠã³ãã§ã¯ãããŸããã Organizationsã®ç®¡çã¢ã«ãŠã³ãã§äœèšãªãªãœãŒã¹ã管çããããªãå Žåã¯ãã€ãã³ããã¹è»¢éã§ä»ã®ã¢ã«ãŠã³ãã®EventBridgeã«è»¢éããŠããã°è¯ãããã ãStackSetsã管çããŠãããªãŒãžã§ã³ãã®EventBridgeã§ããã°æŸããŸããã¹ã¿ãã¯ã€ã³ã¹ã¿ã³ã¹ããããã€ããããªãŒãžã§ã³æ¯ã«EventBridgeã«ãŒã«ãä»èŸŒãå¿
èŠã¯ãããŸããã ããšãã ä»åã®AWSã®å¯Ÿå¿ã§ãStackSetsã®ãããã€åšããç°¡åã«ãªã¢ã«ã¿ã€ã ã€ãã³ããšããŠæ€ç¥ã§ããããã«ãªããŸããã ã¹ã¿ãã¯ã€ã³ã¹ã¿ã³ã¹åäœã§éç¥ãæ¥ãã®ã§ãå
šã¹ã¿ãã¯ã€ã³ã¹ã¿ã³ã¹ã®ãããã€ãçµãããŸã§åŸ
ã€å¿
èŠããããŸããã ã°ãªãŒã³ã«ã¬ãŒãäœãæéããªããªããŸããã âŠæšå¹ŽèšäºæžããŠãæã¯ãä»®ã«AWSã察å¿ããŠãã®èšäºãçšæžã¿ã«ãªã£ãŠããã¬ã·ããšããŠæ®ããããšãé©åœãããŠããã§ãããæ¬åœã«å¯Ÿå¿ããŠããã ãããšã¯ïŒïŒïŒAWSããç¥å¯Ÿå¿ããããšãããããŸããïŒïŒ æçš¿ AWS CloudFormation StackSetsã®èªåãããã€çµæéç¥ãç°¡åã«åãåããããã«ãªã£ãã®ã§ãã£ãŠã¿ã 㯠ãã€ãããšã³ãžãã¢ããã° ã«æåã«è¡šç€ºãããŸããã
ã¯ããã« ããã«ã¡ã¯ãN.Tãšç³ããŸãã ä»å㯠ã¹ããã§å§ããRPA ãšéæã£ãŠRPAãåŠãã§3ã¶æç®ã®æ°ç±³ãšã³ãžãã¢ãèšäºãæžãããŠããã ããŸãã ã»RPAã£ãŠããããäœãïŒ ã»RPAèããããšãããã©ãã©ããªããšã§ããã®ãïŒ ã»RPAè§Šã£ãŠã¿ãããã©å§ãæ¹ããããªãŒãïŒ ãšããæ¹ã«ãå§ãã®èšäºãšãªã£ãŠããŸãã ããããRPAãšã¯ïŒ RPAãšã¯"Robotic Process Automation"ã®ç¥ãšãªããŸãã çŽèš³ãããš "ããããã«ããèªååŠç"ã§ã æèš³ãããš "人éã®è¡åãããããã«èŠããŠãããã人éã®ä»£ããã«ããããã«ãã®è¡åãããŠãããããš"ããšãªããŸãã ã€ãŸããšããã "æ¥åèªåå" ã®æå³åãã§è¯ã䜿ãããŠããŸãã æ¬èšäºã§ã¯ãã®äžç«¯ãšãªããã®ããã²ãšã€ç޹ä»ããããšæããŸãã ãŸãã¯æºåãïœã¢ããªã®ã€ã³ã¹ããŒã«ïœ ä»åæ±ãã®ã¯Microsoft瀟æäŸã®ãPowerAutomateãã§ãã äžççã«äœ¿çšãããŠããRPAãœããã¯æåãªãã®ã§ãã UiPath ãã WinActor ãã BizRobo! ãçããããŸãã ãããªäžãæ¯èŒçæè¿ã«ç¡æå
¬éãããPowerAutomateåã¯ã¢ãã€ã«ã¢ããªver.ããªãªãŒã¹ãããŠããŸãïŒ ãã£ãŠ RPAãã¹ããã§ãå§ããããš ãã§ããããã§ãïŒ ãŸããPowerAutomateåã¯ã·ã¹ãã ã«è©³ãããªã人ã§ãæ±ããããã«ã å€ãã®ãã³ãã¬ãŒããæšæºæèŒãããŠãã ã®ãé
åã®äžã€ãªã®ããªãšæããŸãïŒ æ¬èšäºã§ã¯ãããªãã³ãã¬ãŒããçšããŠãããŸãã æ¯æã倩æ°ã®éç¥ãããïŒ ç§ã¯ãã¬ãé¢ããããŠããŸã£ãZäžä»£ãªã®ã§ãã ããããã«æ¯æãã¬ããã€ããŠå€©æ°ã確èªãããšãã£ãç¿æ
£ã¯ãšãã«æ¶ãå»ã£ãŠããŸã£ãã®ã§ãâŠã ãŸããæã¯ã§ããã ããããããŸã§å¯ãŠãããã¿ã€ãã§ãã ã³ãŒããŒãšããŒã¹ãçæã«ãã©ã³ãã§åªé
ãªã¢ãŒãã³ã°ã«æ§ããŠããŸãããæ§ããŠããã ãã§ãã€ãå¯ãŠããŸãã åºæ¥ãã ããæéã¯æé€ãããã§ãã...ïŒ ã€ãã§ã«æ¯ææ¬ ãããã«ã¢ãŒãã³ã°ã¡ãã»ãŒãžãããå人ãããããã®æ¥ã¯å
æ°ã«éãããã§ãããïŒ ãšããããã§ããšã³ãžãã¢ã£ãœããããã®èŠæ±ããŸãšãããšã æèµ·ããã¿ã€ãã³ã°ã§ãã®æ¥ã®å€©æ°ãæ°æž©ãç®ã«å
¥ãããã«ã¡ãã»ãŒãžããããåäººãæ¬²ããïŒ ãšãªããŸãïŒ ãããªå人ã¯ã©ãã«ããã®ã ããâŠïŒ çãã¯ã¹ããã®äžã«ãããŸãã ãã®ããšã®3ã¹ãããã§ãã®å人ãèŠã€ãã«è¡ããŸãããïŒ 1st.ãã³ãã¬ãŒããéããïŒ æåã«ã¢ããªãéããŠãã³ãã¬ãŒãæ€çŽ¢çªã«ã倩æ°ããšæã¡ãŸãïŒ åºãŠããæ€çŽ¢çµæããäžèšã®ãã³ãã¬ãŒããéžæã éããããŒãžããããã®ãã³ãã¬ãŒãã䜿çšããæŒäžãã 以äžã®ãããªç»é¢ãéãããã®ãåŸ
ã¡ãŸãããïŒ 2nd.ãã³ãã¬ãŒããããããïŒïœæéãšå Žæã®èšå®ïœ ç¶ããŠãæ¬æ Œçã«ãã³ãã¬ãŒããè§Šã£ãŠãããŸãïŒ ç»åã®èµ€ã©ã€ã³ã®ããã«ãRecurrence(ååž°ãåšæçãªèµ·ãã)ãã®äžèº«ã® ããããŒåãããæ¯æã倩æ°éç¥ãããïŒã ãã¿ã€ã ãŸãŒã³ãããïŒUTC;09:00ïŒå€§éªãæå¹ãæ±äº¬ã ãèšå®æå»ïŒæéïŒããã7ã ã«ãããã倿ŽããŸãïŒ ããã§æ¥æ¬æå»ã®æ¯æ7æã«ãã®ããããåã¯åããŠãããããã«ãªããŸããïŒ ããããã ãGet forecast for today(仿¥ã®å€©æ°äºå ±ãååŸ)ãã® ãå Žæãããæ±äº¬ãã«ã ãåäœãããMetricãã«å€æŽããŸãïŒ ããã§ããããåã¯æ±äº¬ã®å€©æ°äºå ±ãã¡ãŒãã«æ³ã§ååŸããŠãããããã«ãªããŸããïŒ 3rd.ãã³ãã¬ãŒããããããïŒïœéç¥æ¹æ³ãšå
容ã®èšå®ïœ ãã³ãã¬ãŒãããããæçµãã§ãŒãºã§ãïŒ ããšããšãã£ããSend me an email notification(ã¡ãŒã«éä¿¡ã«ããéç¥)ããåé€ãã å¥ã®éç¥æ¹æ³ãèšå®ããããšæããŸãïŒ äžç»åã®ãæ°ããã¹ãããããæŒããåŸããã¢ã¯ã·ã§ã³ã®è¿œå ããéžæããŸãïŒ è¡šç€ºãããã¢ã¯ã·ã§ã³ã®äžããã ç»åã®éãã ãNotifications (ã¢ãã€ã«éç¥ãåãåã)ã ãéžæããŸãïŒ ç¡äºéžæãã§ãããäžã®ãããªç»é¢ã«åãæ¿ãããšæããŸãã ããã¹ãã®æ¬ãèªç±ã«èšè¿°ããŸãïŒ ä»åã¯ç»åã®ããã« ããã¯ããïŒä»æ¥ã®ââã¯ãæ¥äžã¯ââã§ãå€ã¯ââã ãïŒã ãšããã¹ããçšæãã äžèŠ§è¡šç€ºãããå€©æ°æ
å ±ãããå Žæãããæ¥ æ¡ä»¶ãããå€ æ¡ä»¶ããåã蟌ãã§ããŸãã ããã§ããããåãã¹ããã®ç»é¢ã«èšå®ããããã¹ãå
容ã§éç¥ãå±ããŠãããããã«ãªããŸããïŒ ããå®è¡ïŒ ããŠããããŸã§ã®æµãã§ããããå㯠æèµ·ããã¿ã€ãã³ã°ã§ãã®æ¥ã®å€©æ°ãæ°æž©ãç®ã«å
¥ãããã«ã¡ãã»ãŒãžããããåäººïŒ ã«æ¬åœã«ãªããã®ãããã§ãã¯ããŸãïŒ ç»åã®éãã äžéšã¡ãã¥ãŒã®ããããŒããéžæåŸã ãä»ããå®è¡ããæŒäžããŸãã ãããšããã«ãããŒéç¥ãé£ãã§ãããšæããŸãïŒ æåã§ããïŒ ãŸããæå®ããæå»ã«ãããã¯ç»é¢ã«éç¥ãå±ããŠãããŸããïŒ å°ã
ãã€ãã£ãã§ãã... çµããã« æ¹ããŠãä»å㯠ã¹ããã§å§ããRPA ãšãã£ãå
容ã®èšäºãæžãããŠããã ããŸããïŒ éç¥ãé£ã°ããŠãããã¢ããªã䜿ãã°ãã£ãšæ¥œã«å€©æ°ãç¥ãããšãã§ãããããããªãã§ããããã¹ã¯ãããçã®RPAããŒã«ãçšããã°äººã«ãã£ãŠã¯ãã£ãšç°¡åã«ã€ãã£ãŠããŸããããããŸããâŠïŒ ããã§ãã RPAã£ãŠã¹ããã§ãç°¡åã«äœãããã ïœ ã£ãŠæããã£ããã«ãªãã°ãããªïœãšæã£ãŠä»åã®èšäºãæžããŠã¿ãŸããïŒ å°ãã§ãå€ãã®äººã«èå³ãæã£ãŠããã ããã°å¹žãã§ãã ä»åã¯ãç§èªèº«ãåå¿è
ãªããšãããç°¡åãªå
容ã«ãããŠããã ããŸãããã ãã£ãšããããªäœ¿ãæ¹ãã§ããã®ã§ãã²èª¿ã¹ãŠããã ããã°ãšæããŸãïŒ ãŸãå¥ã®äœ¿ãæ¹ã玹ä»ã§ããããã«ç²Ÿé²ããŠåããŸãâŠïŒ æçš¿ ã¹ããã§å§ããRPAïœãã¥ãŒããªã¢ã«ç·šïœ 㯠ãã€ãããšã³ãžãã¢ããã° ã«æåã«è¡šç€ºãããŸããã
ã¯ããã« çªç¶ã§ããããã®èšäºãèªãã§ããããªãã«ã¯ ãæšãã ã¯ããŸããïŒ æããŠããŸãªã人ããã£ã©ã¯ã¿ãŒãã¯ããŸãããŒã«ãããã°ã©ãã³ã°èšèªãªã©ãäœããããæšãããšåŒã¹ãååšããã人ã¯å€ãã®ã§ã¯ãªãããšæããŸãã çè
ã«ããããããæšãããããã®ã§ãããããæ¥ãããªããšãæããŸããã ãæšãã®ååšãæ¥åäžãæããŠããã...ïŒã ããã§ä»åã¯ãçè
ã®åãªé¡ããå¶ããããã«ãæ¥åã«æ¬ ãããªãååšã§ããSlackã®ããŒãã«ã©ãŒããç»åããŒã¹ã§ãæšããã®æŠå¿µãæããè²ã«å€ããæ¹æ³ã玹ä»ããããšæããŸãã Slackã®ããŒãã«ã©ãŒ ãŸãã¯Slackã®ããŒãã«ã©ãŒã«ã€ããŠä»æ§ã確èªããŸãã Slackã§ã¯ãç°å¢èšå®ããããŒãã«ã©ãŒã倿Žããããšãåºæ¥ãŸãã ããã©ã«ãã§21çš®é¡ã®ããŒããéžæããããšãåºæ¥ãŸãã ããããå®ã¯Slackã§ã¯èªåã§ã«ã¹ã¿ã ããŒããäœæãã奜ããªè²ãèšå®ããããšãã§ããŸãã ïŒåèïŒ Slack ã®ããŒãã倿Žãã | Slack ïŒ ããããã®é
ç®ã¯ä»¥äžã®å Žæã®è²ã«å¯Ÿå¿ããŠããŸãã è£è¶³ 4. ã¢ã€ãã ãã€ã©ã€ã_ãããŒæïŒãµã€ãããŒã®é
ç®ãããŠã¹ãªãŒããŒããæã«è¡šç€ºãããè² 6. ã¢ã¯ãã£ãã¢ã€ã³ã³ïŒãŠãŒã¶ããªã³ã©ã€ã³ã®æã«ã¢ã€ã³ã³ã«ã€ãå°ã®è² ãããããã«ã¹ã¿ã ããŒããäœãããã«ã¯ 9è² éžã¶å¿
èŠãããããšãããããŸãã æ¹æ³ã®æŠèŠ ã«ã¹ã¿ã ããŒãã«å¿
èŠãªè²æ°ãããã£ããšããã§æ¹æ³ã玹ä»ããŠãããŸãã 以äžã®æµãã§Slackã®ããŒãã«ã©ãŒãå€ããŠãããŸãã ç»åããã«ã©ãŒããŒããæœåºãã æœåºããã«ã©ãŒãSlackã®ã«ã©ãŒããŒãã«å²ãåœãŠã ã³ã³ãã©ã¹ãã確èªããªãã埮調æŽãã ç»åããã«ã©ãŒããŒããæœåºãã ãŸãã¯ãæšããã®ç»åãçšæããŸãã ä»åã¯ãããããšãããããããåããããã¡ãã®ç»åã䜿çšããŸãã ãããã倩䜿ã®ã€ã©ã¹ã | ããããããªãŒçŽ æé ããããšã ããããã倩䜿ã¡ãããã§ããããããã æšãã®æŠå¿µãæããè²ãããã¯ã€ãŸãæšãã衚çŸããŠããè²ã«éããããŸããã æšãã®è²ãç¥ãããã«ã¯ãç»åäžã®è²æ
å ±(ã«ã©ãŒã³ãŒã)ãååŸããã«ã©ãŒããã«ãŒããŒã«ã䟿å©ã§ãã äžã®äžã«ã¯å€ãã®ã«ã©ãŒããã«ãŒããŒã«ããããŸãããä»å㯠Adobe Color ã䜿çšããŠãããããšæããŸãã Adobe Color Adobe Colorã䜿ãçç±ã¯ä»¥äžã®éãã§ãã ç¡æã§å©çšã§ãã ç»åã«äœ¿ãããŠããè²ã®æ°ãå€ããŠãèªåã§æ°è²ã«çµã£ãŠæœåºããŠããã æäœãç°¡åïŒæçïŒäŒæ©äžã«ãµã¯ããšèšå®ã§ããïŒ ã³ã³ãã©ã¹ãæ¯ãç°¡åã«èª¿ã¹ããã ããã§ã¯ãã£ããAdobe ColorãçšããŠè²ãéžãã§ãããŸãããïŒ Adobe Colorã§è²ãæœåºããæ¹æ³ Adobe Colorã® ãããŒããæœåºã ã¿ããéžã¶ãšãã¡ã€ã«ãã¢ããããŒãããç»é¢ã«ãªãã®ã§ã説æã®éãã«ç»åãéžæããŸãã ãããšç»åã®äžã§ã¡ã€ã³ãšãªã5è²ãéžæããŠãããŸãã ããããããèŠããšã€ã©ã¹ãã«äœ¿ãããŠããªãé»(#0D0D0D)ãéžæãããŠããŸããŸãã ããã¯å
ã®ç»åã®èæ¯ãééãããŠããããšã«ãããéæéšåãé»ãšããŠèªèãããããçºçããäºè±¡ãšãªããŸãã ãã®ãããªå Žåãæå³ããªãè²ãéžæãããŠããŸã£ãå Žåã¯ãããã«ãŒãããããŠéžæããªãããšè¯ãã§ãã ä»åã¯ç®ã®è²ã«äœ¿ãããŠããæ°Žè²éšåãéžæããªãããŸããã ããã§5è²æœåºããããšãåºæ¥ãŸããã äžæŠSlackã«5è²é
眮ããŠãæ®ãã®4è²ãèããŠãããŸãããã æœåºããã«ã©ãŒãSlackã®ã«ã©ãŒããŒãã«å²ãåœãŠã ã«ã©ãŒã³ãŒãã£ãŠãªã«ïŒ åç®æã®è²ã¯ã«ã©ãŒã³ãŒãã§æå®ããããšãåºæ¥ãŸãã æè¡èšäºã£ãœãããããã« ã«ã©ãŒã³ãŒãã«ã€ããŠè»œã説æãããŠããã ããŸãã ã«ã©ãŒã³ãŒããšã¯WebããŒãžäžã®è²æå®ã§äœ¿ãããã³ãŒãã§ãã·ã£ãŒãïŒ#ïŒã«ç¶ã16鲿°6æ¡ã§è¡šãããŠããŸãã ã³ã³ãã¥ãŒã¿ã®ãã£ã¹ãã¬ã€ãªã©ã®å
ã§è²ã衚çŸããããã€ã¹ã¯ãèµ€ã»ç·ã»éã®å
ã®äžåè²ãæ··ãåããã(å æ³æ··è²ãã)ããšã§è²ã衚çŸããŸãã èµ€ã»ç·ã»éã¯256段éã®åŒ·ãã§å
ãããããšãã§ãã3è²ã®åŒ·ãã®çµã¿åããã§256Ã256Ã256=çŽ1600äžè²ã衚çŸããããšãåºæ¥ãŸãã ïŒã®æ¬¡ã«ç¶ã2æ¡ãèµ€(R)ãäžå€®2æ¡ãç·(G)ãæ«å°Ÿãé(B)ã®åŒ·ãã衚ããŸãã åè¿°ã®éããå
ã®äžåè²ãããšã«ãªã£ãŠããã®ã§ãïŒ000000ã¯é»ã«ãªãïŒFFFFFFã¯çœã«ãªããŸãã ã«ã©ãŒã³ãŒãã®æå³ãç¥ã£ãŠãããšãã³ãŒããããªããšãªãè²å³ããããããã«ãªããŸãã ã«ã©ãŒã³ãŒãã«ãããïŒã®å³é£ã®æ°å€ã1æ¡ç®ã«ããæã1ã»3ã»5æ¡ç®ãe~fã§ããã°çœå¯ãã®è²ã ãªïœãšããRãšGã®å€ã倧ãããŠBãå°ãªãæã¯é»è²ã£ãœãè²ã ãªïœãšããæŽããããã«ãªããŸãã ãããªããšãæããªããŠããäžã®äžã«ã¯ã«ã©ãŒã³ãŒããå
¥ãããšãã®è²ã衚瀺ããŠããããµã€ãã¯ããããããã®ã§å®å¿ããŠãã ããã å®ã¯Slackäžã§ã«ã©ãŒã³ãŒããå
¥åããŠãè²ã衚瀺ããŠãããŸãã ããŠãã«ã©ãŒã³ãŒãã®æå³ãèžãŸãããšããã§å®éã«é
è²ããŠãããŸãããïŒ äžæŠé
è²ããŠã¿ã ãŸãã¯ç»åããè²ã®äœ¿ãããŠããé¢ç©ãæããŸãã å
ã«ãããã£ã©ã®ç»åãèŠããšãé«ªãšæã®ãªãã³ã«äœ¿ãããŠãããã³ã¯(#F29BBB)ãšã倩䜿ã®èŒªã髪ã®ãªãã³ã«äœ¿ãããŠããé»è²(#F2DAAC)ãåºãé¢ç©ã«äœ¿ãããŠããããšãããããŸãã ç·ã®è²ã«äœ¿ãããŠããèã玫(#CAC4F2)ãç®ã®è²ã«äœ¿ãããŠãã玫(#B48FD9)ãæ°Žè²(#B9E5FF)ã¯ã¢ã¯ã»ã³ããšããŠäœ¿ãããŠããããšãããããŸãã ããã§ããäžåºŠã«ã©ãŒããŒããšç»é¢ãšã®å¯Ÿå¿ãèŠãªãããé¢ç©éãã«èšå®ããŠãããŸãã ä»åã¯ããã©ã«ãããŒãã§ããããªãŒããŒãžãŒã³ããããŒã¹ã«ã ãµã€ãããŒèæ¯ïŒãã³ã¯(#F29BBB) ãããããã²ãŒã·ã§ã³ïŒé»è²(#F2DAAC) ããã¹ãïŒèã玫(#CAC4F2) ã¢ã€ãã ãã€ã©ã€ã_éžææïŒæ°Žè²(#B9E5FF) ã¢ã€ãã ãã€ã©ã€ã_ãããŒæïŒçŽ«(#B48FD9) ã§é
眮ããŠã¿ãŸãããïŒä»®çœ®ããªã®ã§ããçšåºŠã奜ã¿ã§è²é
眮ããŠããã£ãŠã倧äžå€«ã§ãïŒ ãããšã©ãã§ãããïŒ æåãèªããªã......ã ãããæšãã®è²ãšã¯ãããæåãèªããæ¥åã«æ¯éããããããæ¬æ«è»¢åã§ãã ããã¯ã³ã³ãã©ã¹ããå
šãèããé
è²ããŠããŸã£ãããèµ·ããŠããŸã£ãäºæ
ã§ãã æ¬¡ã¯ã³ã³ãã©ã¹ããèããªããè²ãé
眮ããã€ãã§ã«æ®ãã®4è²ã決ããŠãããŸãããã ã³ã³ãã©ã¹ãã確èªããªãã埮調æŽãã ã³ã³ãã©ã¹ããšã¯ã ãææã®å·®ã ã®ããšã§ãã ã³ã³ãã©ã¹ããé«ããã€ãŸãææã®å·®ã倧ãããšè²ãšè²ã®å¢çãã¯ã£ããããŸãã ãªã®ã§æåãã¯ã£ããèŠããã«ã¯ãèæ¯è²ãšæåã®ã³ã³ãã©ã¹ããé«ããããšãå¿
èŠã«ãªããŸãã ã³ã³ãã©ã¹ãæ¯ã¯çžå¯ŸèŒåºŠã䜿ã£ãŠæ±ããããšãåºæ¥ãŸãã ãã£ãããšèª¬æãããšãé»ã®èŒåºŠã0ã»çœã®èŒåºŠã1ãšããæã«ã³ã³ãã©ã¹ãæ¯ãç¥ããã2è²ã®çžå¯ŸçãªèŒåºŠãæ±ãããã®æ¯ãèšç®ããããšã§æ±ããããŸãã â»è©³ããç¥ãããæ¹ã¯ãçžå¯ŸèŒåºŠãããWeb Content Accessibility Guidelines (WCAG) 2.1ããšãã£ãèšèã§èª¿ã¹ãŠã¿ãŠãã ããã ä»åã¯èšç®ããæéãçããããAdobe Colorãå©çšããŠã³ã³ãã©ã¹ãæ¯ãæ±ããŠã¿ãŸãã Adobe Colorã®ã¿ããã ãã¢ã¯ã»ã·ããªãã£ããŒã«ã ãéžæããŸãã å
ã»ã©ã®ããã¹ãã«ã©ãŒãšèæ¯è²ãèšå®ãã³ã³ãã©ã¹ãæ¯ãæ±ãããš 1.25:1ãšãªããŸããã åèã«ãWCAG 2.1ãšããåºæºã§ã¯ããæåãèŠããã衚瀺ããã«ã¯ æäœéã³ã³ãã©ã¹ãæ¯ã 4.5:1 å¿
èŠ ããšããèšèŒããããŸãã 3åã®1以äžã§ããïŒïŒ ã§ãããããã¯èª°ã«ã§ãèŠãããWebããŒãžãäœãããã®åºæºãªã®ã§Slackã§èªåã§äœ¿ãåã«ã¯çµ¶å¯Ÿæºãããªããã°ãããªãæ¡ä»¶ã§ã¯ãããŸããã äœæã§ããã 2:1以äžã§ããã°ã¡ãããšèªãã ãšæããŸãã â»å人差ããããŸãããã£ã¹ãã¬ã€ã«ãã£ãŠãå€ãããŸã è²ã®ã€ããåè§ãã¯ãªãã¯ãããšã«ã©ãŒãã€ãŒã«ã䜿ã£ãŠè²ã調æŽããããšãã§ããŸãã æåºŠãå€ããã ãã§ã¯ãªããè²å³(è²çž)ãå€ããŠãã³ã³ãã©ã¹ãæ¯ã¯å€ããã®ã§è²ã
ããã£ãŠè²ã調æŽããŸãã å人çã«ã³ãã¯ã ã«ã©ãŒãã€ãŒã«ãšã«ã©ãŒããŒã¢ããŒã«ãŒã« ã䜿ãããšã ãšæããŸãã ãããã ãã¯çµ¶å¯Ÿäœ¿ãïŒããšããè²ã1ã€æ±ºããŠãã¿ãããã ãã«ã©ãŒãã€ãŒã«ã ãéžã³ããã®è²ãããŒã¹ã«ã©ãŒã«èšå®ããŸãã ãããŠã ã«ã©ãŒããŒã¢ããŒã«ãŒã« ã倿Žããæã«åºãŠããè²ãè£å©ã§äœ¿ããšäžæããŸãšãŸããšæããŸãã ãŸããã«ã©ãŒãã€ãŒã«äžã§è·é¢ãè¿ãè²ã¯ãŸãšãŸããçãŸããé¢ããŠããè²ã¯ã¢ã¯ã»ã³ãã«ãªããŸãã â»ãã®èŸºã®ãã¯ããã¯ã¯èª¿ã¹ããšããããåºãŠãããšæããŸãã ããšã¯ããµã€ãããŒèæ¯ã®è²ã¯ç®ãç²ããªããããªè²(çœãŸãã¯é»ã«è¿ãè²ãç¡é£)ããªã¹ã¹ã¡ããŸãã ãããŒãã®æœåºãã«æ»ã£ãŠãååŸããªãã£ãéšåã®è²ãããã«ãŒã§ååŸããã®ãè¯ããšæããŸãïŒ ä»åã¯ãã«ã©ãŒããŒã¢ããŒã«ãŒã«ã®ãé¡äŒŒè²ããéžæããŠåŸãè²ã䜿ããã«ã¹ã¿ã ããŒããçµã¿ãŸããã 宿ïŒïŒ ãšããããã§å®æããŸããïŒ ãã€ã³ã㯠ç®ã®è²ã«åãããŠã¢ã€ãã éžææã®ãã€ã©ã€ããšããã¹ãã®ã«ã©ãŒãåããã ã¢ã€ãã ãã€ã©ã€ãã®ãããŒæãšéžææã®è²å³ã玫ã«åããã ãµã€ãããŒèæ¯ãšããã¹ãã¯ã髪è²ã®ãã³ã¯ãšç®ã®è²ã®çŽ«ã調æŽããŠé
è²ããæåãèªã¿ããããã ãããããã²ãŒã·ã§ã³ã«é«ªè²ã«è¿ããã³ã¯ãšå€©äœ¿ã®èŒªããªãã³ã®é»è²ãé
è² ã¡ã³ã·ã§ã³ãããžã®ããã¹ãã«ã©ãŒã¯çœåºå®ãªã®ã§ãã¡ã³ã·ã§ã³ãããã®è²ã¯ã³ã³ãã©ã¹ãæ¯ã®é«ãè²ãéžãã ãšããæãã§ãããïŒ æ£è§£ã¯ãªãã®ã§ èªåãããã«ãæšããã®æŠå¿µãæãããããæ£è§£ ã§ãã ã«ã©ãŒããŒãã®å
±æ ãã£ãããªã®ã§äœã£ãããŒãã®å
±æãããŠã¿ãŸãã Slackã«ã«ã©ãŒã³ãŒããã«ã³ãåºåãã§æçš¿ããã ãã§ã人ã«å
±æã§ããã ãã§ãªããã®ãŸãŸããŒãã倿Žããããšãåºæ¥ãŸãã ããã«ã«ã©ãŒããŒãèšå®ç»é¢ãããä»äœ¿ã£ãŠããããŒãã®ã«ã©ãŒã³ãŒãã»ãããã³ããŒããããšãåºæ¥ãŸãã䟿å©ïŒ ãã²ãäœã£ãããŒããå
±æããŠã¿ãŠãã ããïŒ ä»åäœæããããŒããšæ®æ®µç§ã䜿ã£ãŠããããŒããå
±æããŸãã yumekawa-tenshi #FFDFEE,#FFF8D4,#B48FD9,#B1E2FF,#CAC4F2,#916DB5,#FFA1BA,#79CAF2,#FF9CB6,#FFEAAF Blossom Pink #FFE7E3,#89CFF0,#F77D8A,#FFFFFF,#FFC5AD,#F55358,#FFB12E,#DF3232,#EC686C,#FFFFFF ãªãã± ããšã¯ããäœãã®å€§å€...ããããã£ãšãµã¯ããšäœããªãã®ïŒããæšããªããŠããªãããããã£ã©ã¯ã¿ãŒã®ç»å以å€ãããè¯ãæãã«äœããªãïŒããšãã声ãããããšæãã®ã§ãä»ã®æ¹æ³ãå°ãå
±æãããŠããã ããŸãã ã«ã©ãŒããŒãé
åžãµã€ãã䜿ã Slack Themes : https://slackthemes.net/#/jellybeans äŸãã°äžèšã®ãããªã«ã©ãŒããŒãé
åžãµã€ããèŠãŠããæ°ã«å
¥ãã®ã«ã©ãŒããŒããèŠã€ãããšããæ¹æ³ããããŸãã IDEãæš¡ããé
è²ã¯ãã®ãããªãµã€ãã§é
åžãããŠããå Žåãå€ãã§ãïŒ ãã²æ¢ããŠã¿ãŠãã ããã åçããè²ãæœåºãã Adobe Colorã§ã¯è²æ°ã®å€ãåçãããè²ã5è²æœåºããããšãã§ããŸãã ãæ°ã«å
¥ãã®é¢šæ¯åçãCDãžã£ã±ããã»è¡£è£
ã®åçãªã©ããããåæ§ã®æ¹æ³ã§ã«ã¹ã¿ã ã«ã©ãŒããŒãäœæãåºæ¥ãŸãã Adobe Colorã®ãæ¢çŽ¢ãæ©èœã䜿ã Adobe Colorã«ã¯ è²ãèšèããæ€çŽ¢ããæ©èœ ããããŸãã ããããèªå奜ã¿ã®è²ãæ¢ããŠããäœãã°æ¥œã«ã«ã©ãŒããŒãã®äœæãã§ãããšæããŸãïŒ æåŸã« ãããŸã§èªãã§ããã ãããããšãããããŸããïŒ ä»åã¯Slackã®ã«ã©ãŒããŒãã«çµã£ãŠè§£èª¬ããŸããããè²ã®éžã³æ¹ãAdobe Colorãšãã£ããµãŒãã¹ã®äœ¿ãæ¹ã¯ãè³æäœæã«äœ¿ã£ããä»ã®ãšããã§ãå¿çšã§ãããšæããŸãã åããŠããæéã§ãã£ãŠããå°ãã§ãéã³å¿ã楜ããæ°æã¡ãæããŠããã ããã幞ãã§ãã æçš¿ Slackããæšããè²ã«æãã ~ãªãªãžãã«ã«ã©ãŒããŒãã®äœãæ¹ãšã³ã~ 㯠ãã€ãããšã³ãžãã¢ããã° ã«æåã«è¡šç€ºãããŸããã
ã¯ããã« ãã®èšäºã§ã¯ãAWSã®è³æ Œã§ããSAAãååŸãããã®ã®ãããŸã§AWSãè§Šã£ãŠããªãã£ãAWSåå¿è
ããæ¥åã«ãããŸã§åœ±é¿ããªãç¯å²å
ã§AWSã§ãªããäœã£ãŠã¿ãããšæãç«ã¡ãåŠç¿ç®çååã§è©Šè¡é¯èª€ããçµæè§Šã£ãŠã¿ãŠåããŠç¥ã£ãèŠåŽãªã©ãèšèŒããŠããŸãã AWSãæ¥åžžçã«è§Šã£ãŠãã人ã«ãšã£ãŠã¯ç¥ã£ãŠãå
容ãããããŸãããïŒãããã¯è§Šã£ãããšãªããŠãå¥ã«èºããªããããããªãïŒãAWSåå¿è
ã§ãã€æ¥åžžçã«ã³ãŒããæžããªããããŒã¿ããŒã¹ã®æ±ãã«ãå
šãæ
£ããŠããªã人éãšããŠã¯èŠåŽãããã€ã³ããããã€ããããŸããã ããããªããç¥ããã®ãããŒã¯ã¹ã¯ã¹ããšç¬ããã«å€§ç®ã«èŠãŠããããšå¬ããã§ã!! ç®æãããã® Slackã®ããªãŒãã©ã³ã§ã90æ¥åã®ã¡ãã»ãŒãžãé¡ããã·ã¹ãã ãã£ãã 2022幎9æ1æ¥ããã®ã¢ããããŒãã§ãããªãŒãã©ã³ã ãšSlackã§å
±æãããã¡ãã»ãŒãžããã¡ã€ã«ã¯90æ¥çµéåŸã«é²èЧã§ããªããªããŸããã 瀟å
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã«ã¡ã€ã³äœ¿ã£ãŠãããšã³ã¿ãŒãã©ã€ãºãã©ã³ã®ãã®ãšã¯å¥ã«ãã¢ã©ãŒãçºå ±çšã®ã¯ãŒã¯ã¹ããŒã¹ãããªãŒãã©ã³ã§å¥çŽããŠãããSlackã§ã®å¥çŽãã©ã³ã¯å€æŽãããªããšã90æ¥çµéåŸã§ãã¡ãã»ãŒãžãé¡ããããã«ã§ããªãããšããæãããäœã£ãŠã¿ãŸããã äœã£ãã·ã¹ãã ã®æŠèŠ ç°¡ææ§æå³ 倧äœã®ä»çµã¿ EventBridgeã§æ¯æ1åLambdaå®è¡ããSlackã«å
šã¡ãã»ãŒãžãåãã«è¡ã Lambdaã§ååŸããã¡ãã»ãŒãžã®ãã¡ã€ã«åœ¢åŒã倿ããS3ã«ä¿ç®¡ãã Athenaã§ååŸãããèŠä»¶ã«åãããŠã¯ãšãªãæãã ãã£ã³ãã«åãæ¥ä»ãetc... 90æ¥çµéã§æ¶ããã®ã§æäžãããªããŠãããã®ã§ãããäžãäžã³ã±ãæã«æ°ä»ãã®ãé
ããªãããæäžå®è¡ã«ããŸããã â»2022幎8æã®ãŸã ãã©ã³å
容ãå€ããåã«ãäžæºåãšããŠåãæ¥ãå
šã¡ãã»ãŒãžååŸããŠãããŸããã90æ¥éãããæ³£ããŠãç¬ã£ãŠããã©ã³å€æŽããªããšã¡ãã»ãŒãžååŸã§ããŸããã®ã§ã泚æãã ããã ãŸããéåžžãã°ã®ä¿åãæ€çŽ¢ã«ã¯ElasticSearchã䜿ãã®ããã¹ããã©ã¯ãã£ã¹ããšæããŸãããä»åã¯ä»¥äžãçç±ã«Athenaãæ¡çšããŸããã ã¯ãšãªããšã®èª²éãšãªãã®ã§æ¯èŒçã³ã¹ããæãããã ã·ã¹ãã ã®äœ¿çšé »åºŠçã«ãæ£çŽãããŸã§ã¯ãšãªæããªãã§ãããæ³å® ãµãŒãã¬ã¹ãªã®ã§ã€ã³ãã©ã®é¢åãèŠãå¿
èŠããªã ã¯ãšãªã§ããããŒã¿åœ¢åŒãè±å¯ã§ãã æ£çŽã«èšããšAthenaãè¯ãæãã«äœ¿ã£ãŠã¿ããã£ãïŒæ¬é³ïŒ å人çã«èŠåŽããå®è£
ã«å¯ŸããŠã®ææ³ äœåºŠã§ãèšããŸããã倧ç®ã«èŠãŠãã ãã... Athenaã§ã¯ãšãªã§ãããã¡ã€ã«åœ¢åŒããªããæã£ãŠãã®ãšéã£ããã ãã© Athenaã§ã¯ãšãªã§ãããã¡ã€ã«åœ¢åŒãšããŠcsvãparquetãjsonãªã©ãå
¬åŒã§ç޹ä»ãããŠããŸãã AWSãŠãŒã¶ãŒã¬ã€ã : ãµããŒãããã SerDes ãšããŒã¿åœ¢åŒ ä»åã¯Slackã®æ€çŽ¢çµæãJSON圢åŒã§ç°¡åã«ååŸã§ããããJSON圢åŒãéžã³ãŸãããã å³å¯ã«ã¯åãªãJSONã§ã¯ãªã ããšã«ããæ°ä»ãããå°ãæ©ãã§ããæéããããŸããã å
¬åŒããã¥ã¡ã³ãã«ã¯ããµããŒããããJSON圢åŒã«ã€ããŠä»¥äžã®ããã«èª¬æãããŠããŸãã JSON (JavaScript Object Notation) JSON ããŒã¿ã§ã¯ãåè¡ãããŒã¿ã¬ã³ãŒãã衚ããŸãã åã¬ã³ãŒãã¯å±æ§/å€ã®ãã¢ãšé
åã§æ§æããããããããã«ã³ãã§åºåãããŸãã ã€ãŸããè€æ°ã¬ã³ãŒãã®å Žåã¯ã [ {"key1": "value1", "key2":"value2"}, {"key1": "value1", "key2":"value2"}, {"key1": "value1", "key2":"value2"} ] ã§ã¯ãªãã {"key1": "value1", "key2":"value2"} {"key1": "value1", "key2":"value2"} {"key1": "value1", "key2":"value2"} ãšããŠãã¡ã€ã«åºåããå¿
èŠãããããã®åœ¢åŒã¯ JSON Lines ãšèšãããŠããæžåŒãšãªããŸãã ã€ãŸããååŸããJSON圢åŒã®ãã¡ã€ã«ãæŽã«JSON Lines圢åŒãžå€æããå¿
èŠããããŸãã JSON Lines圢åŒãæ±ãæ¹æ³ã¯pandasãªã©ããã€ããããŸãããä»å㯠jsonlines ã®ã©ã€ãã©ãªã䜿ã£ãŠå®è£
ããŸããã import jsonlines content = [ {"key1": "value1", "key2":"value2"}, {"key1": "value1", "key2":"value2"}, {"key1": "value1", "key2":"value2"} ] path = "/your/path/to/store/file.json" with jsonlines.open(path, mode="w") as writer: writer.write_all(contents) JSON圢åŒãšèšããããšãéåžžã¯ãã¡ã€ã«å
šäœãJSONãªããžã§ã¯ããšããŠè§£éå¯èœã§ããå¿
èŠãšæã蟌ãã§ããŸããã èªåãšããŠã¯æ£ããJSON圢åŒã§åºåããŠããã«ãé¢ããããAthenaã§ã¯ãšãªã倱æãããããäœæ
âŠãšãªããå°å³ã«èª¿æ»ã«æéãããã£ããã€ã³ãã§ããã Athenaã䜿ã£ãããšãããæ¹ãªãç¥ã£ãŠããããšãããããŸããããAthenaåäœéšã ã£ãã®ã§å°è±¡ã«æ®ã£ãŠããŸãã S3ã«ãã¡ã€ã«ãã¢ããããŒãããéã®æå·åã®ä»æ¹ã£ãŠãããŒãžã¡ã³ãã³ã³ãœãŒã«äœ¿ããªãæã©ãããã°ããã®ïŒ S3ã«ãã¡ã€ã«ãã¢ããããŒãããéãäœããã®æå·åãæœãããšãå€ãããšæããŸãã ãããŒãžã¡ã³ãã³ã³ãœãŒã«äžã§æäœããéã¯ç»é¢äžã§éžæããã°ããããã§ãããAPIäžã§ã©ãæå®ããã°ããã®ãç¥ããªãã£ãããèŠåŽããŸããã APIäžã§ã¯ãåŒã³åºãéã«æå®ããåŒæ°ã«ä»¥äžã®ããã« ExtraArgs å
ã§æå®ãããšSSE-S3ã«ããæå·åãããã¢ããããŒãã§ããŸãã import boto3 bucket_name = "bucket name" object_name = "object name" s3 = boto3.resource("s3") s3.Object(bucket_name, object_name).upload( ExtraArgs={ "ServerSideEncryption": "AES256" } ) ã¡ãªã¿ã«ãããã§ AES256 ã aws:kms ã«çœ®ãæãããšãAWS KMSãšé£æºããŠå¥ã®ããŒã§æå·åã§ãããããããã¯èŠä»¶ã«ãã£ãŠå€ããã°ããããã ãªãšæã£ãŠããŸãã Athenaã®ã¹ããŒãäœæã®æéãæã£ãŠãããå€ããŠè«Šãããã ã£ã Athenaã§JSONãã¯ãšãªããããã«ã¯ãããŒãã«ãäœæããå¿
èŠããããŸããããéåžžã®SQLãšã¹ããŒãã®å®çŸ©æ¹æ³ãç°ãªããŸãã ç¹ã«ã ãã¹ãããJSONãããŒãã«äžã§å®çŸ©ãã SQLãšã®ããŒã¿åã®éã æå·åã»GZIPå§çž®ããå
ããŒã¿ã®åç
§æ¹æ³ ã¯ãããŒãã«äœæã«ãããŠäœåºŠãè©°ãŸã£ãŠç¢ºèªãããã€ã³ãã§ãã ãã ã§ããããŒã¿ããŒã¹èŠæãªã®ã§ãäœèšã£ãŠãã ããããâŠãšãªããŸããã 以äžã¯å®éã«äœæããã¹ããŒãã§ãã CREATE DATABASE IF NOT EXISTS your_database LOCATION 's3://your-bucket/'; CREATE EXTERNAL TABLE IF NOT EXISTS `your_database`.`your_table` ( iid string, team string, channel struct< id: string, name: string>, type string, user string, username string, ts timestamp, text string, permalink string ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' WITH SERDEPROPERTIES ( 'ignore.malformed.json' = 'FALSE', 'dots.in.keys' = 'FALSE', 'case.insensitive' = 'TRUE', 'mapping' = 'TRUE' ) STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://your-bucket/' TBLPROPERTIES ( 'has_encrypted_data' = 'true', 'classification' = 'json', 'write.compression' = 'GZIP', 'classification' = 'json' ); ããŒãã«å®çŸ©å
ã® channel ã®ã«ã©ã ã§ããã®ããŒã¯JSONäžã§ã¯ãã¹ããããªããžã§ã¯ããšããŠè¡šçŸãããŠããŸããã ãã®ãããªããŒã¿ã¯Athenaã§ã¯ structïŒæ§é äœïŒ ãšè¡šçŸãããŠããŸãã AWSãŠãŒã¶ãŒã¬ã€ã : Amazon Athena ã®ããŒã¿å ä»åã¯ã channel ã®ãªããžã§ã¯ãã®å
äžéšãå¿
èŠã ã£ããããæ§é äœãšããŠä»¥äžã®ããã«å®çŸ©ããŸããã channel struct< id: string, name: string>, ãŸãã timestamp ã«ã¯JSONäžã§ã¯å°æ°ç¹ä»ãã®UNIXãšããã¯æéãæ ŒçŽãããŠããŸããããã®ãŸãŸã§ã¯äžäŸ¿ãªã®ã§ãã®ã«ã©ã ã«ã¯ timestampå ãèšå®ããŸããã ããã«ãããæ¥æã§ã¯ãšãªãããå Žåã¯ã SELECT * FROM "your_database"."your_table" WHERE ts > timestamp '2022-10-25 00:00:00' ã®ããã«ãæ¥ä»æååã§çŽèгçã«æ€çŽ¢ãå¯èœãšãªããŸãã ããã«ãä»åã¯åç
§ãããªããžã§ã¯ããSSE-S3ã«ããæå·åãšGZIPå§çž®ããŠããŸãã ãã®ãããããŒãã«å®çŸ©ã® TBLPROPERTIES ã»ã¯ã·ã§ã³ã«ãŠä»¥äžã®ããã«æå®ããŸããã TBLPROPERTIES ( 'has_encrypted_data' = 'true', 'classification' = 'json', 'write.compression' = 'GZIP', 'classification' = 'json' ); ããã§ãå
ããŒã¿ãå§çž®ãã€æå·åãããããŒã¿ã§ãã¯ãšãªããŠãããããã«ãªããŸãã ã¡ãªã¿ã«ã§ãããä»åã¯Athenaæ€çŽ¢æã®S3ã®ããŒãã£ã·ã§ã³ã¯åããã«é²ããŠããŸãã ãã¡ã€ã«ã¯ææ¯ã«çæãããæ³å®ãªã®ã§ãã¯ãšãªãæããéã¯å
šææ€çŽ¢ã®ããã«ãªããããŒãã£ã·ã§ã³åããŠãåããªããŠããã®ã·ã¹ãã ã®æ§æäžå€ããã¯ãªãã§ãã ãããããã¡ã€ã«ä¿åéãå€ãã£ãããã¯ãšãªãæããéã®æ¡ä»¶ã§ãã£ãšçµããããã§ããããããŒãã£ã·ã§ã³ãåããæ¹ãè²»çšé¢ã§ãšãŠãããã§ãã Amazon Athenaã®æé çŸåšã¯ãã®ã·ã¹ãã ãäœã£ãã°ãããªã®ã§ãã¡ã€ã«éãå€ããªããã¯ãšãªåæ°ãå°ãªãæžãã§ããŸãããä»åŸã®ããšãèãããšãã¡ã€ã«ä¿åæ¹æ³ã®ä»æ§ãèŠçŽããããšæããŸãã EventBridgeãcronåŒã§ãïŒå€§åïŒã EventBridgeã§æ¯æå®è¡ã®ã¹ã±ãžã¥ãŒã«ç»é²ããéãæ®éã®cron衚èšãšæžãæ¹ãéã£ãã®ã§ããâŠãšæã£ãéšåã«ãªããŸãã ä»åã¯ãããŒãžã¡ã³ãã³ã³ãœãŒã«äžã§ãã£ãŠãã®ã§æéãããã£ããšãããããããªãã£ããšãã§ã¯ãªãã®ã§ããããããŒãžã¡ã³ãã³ã³ãœãŒã«ã䜿ããèšå®ããŠããè©°ãŸã£ããããããªããªãšæããŸãã AWSãŠãŒã¶ãŒã¬ã€ã : ã«ãŒã«ã®ã¹ã±ãžã¥ãŒã«åŒ äŸãã°ãæ¯æ6æ¥ã®7:00ã«å®è¡ããããšããã®ãæžãããšæããš 0 7 6 * * ãšãªããšæããŸãããAWSã®ããã¥ã¡ã³ãã§ã¯ä»¥äžã®ããã«èšèŒãããŠããŸãã ? (çå笊) ã¯ã€ã«ãã«ãŒãã¯ä»»æãæå³ããŸãã [æ¥] ãã£ãŒã«ãã« 7 ãšå
¥åãã7 æ¥ãäœææ¥ã§ãã£ãŠãããŸããªãå Žåã[ææ¥] ãã£ãŒã«ãã« ? ãå
¥åã§ããŸãã ããã«ãæåŸå°Ÿã«ã¯å¹Žãæå®ããããšã«ãªããŸãã ä»åã¯äžèšã®ããã«ãªããŸãã 0 7 6 * ? * å®éã®èšå®ç»é¢ã¯ãã¡ãâ ãããŒãžã¡ã³ãã³ã³ãœãŒã«ã«åŸã£ãŠèšå®ããŠãããšãããŸã§æéã®ãããèºããã€ã³ãã§ã¯ãªãã®ã§ãããæ°ã«ãªã£ãã®ã§ãããã調ã¹ãŠã¿ããšäžèšã®èšäºãèŠã€ããŸããã èšæ³ã«æ³šæãå¿
èŠãããªå Žé¢ãåºãŠãããããšããããšã§èŠããŠããããšæããŸãã åè : ã¯ã©ã¹ã¡ãœãã AWSã§ã®Cron衚èšã§ããã£ãã®ã§ä»æ§ã確èªããŠãã ãªããããããã£ãŠã§ãããã£ããã® ãããªæãã®ãã®ãã§ããŸããã äŸãã°ããã£ã³ãã«åãæå®ããŠãæå®ã®ãã£ã³ãã«å
ã§äº€ããããå
šã¡ãã»ãŒãžãèŠãŠã¿ãããšæããŸãã èŠããããéšåãå°ãªããŠæçž®ã§ããâŠäžå¿åœåã®æ³å®éãã90æ¥ä»¥äžåã®ã¡ãã»ãŒãžãååŸã§ããŠããŸãããã£ããïŒ ãããã« ä»åã¯AWSã®åŠç¿ç®çã®å
ãSlackã¡ãã»ãŒãžãååŸããŠãããŠãã€ã§ãã¡ãã»ãŒãžãèŠãããšãã§ããã·ã¹ãã ãäœããŸããããšããããåããŠã¯ããŸããåããŠãã£ãŠãã°ããããã ãããŸã§æžããŠãããŠããã仿Žãªã®ã§ãããã¡ãã»ãŒãžæ°ã«ãã£ãŠã¯ææãã©ã³ã«å€æŽããæ¹ãçµæçã«å®ãæžããããæ¥œãããªãïŒãã¿ãããªèŠæ¹ããã¡ãããããŸã!!ãã ãä»åã®ããšãéããŠ1ã€å匷ã«ãªã£ãã®ã§ãè¯ãæ©äŒã ã£ããªãšæããŸãã ãŸã ãŸã æ¹ä¿®ãã¹ãç¹ãèšèšãèŠçŽãããç®æãèæ
®æŒããããããã§ããããšããããä»åãããŠããéšåã§æžããåã ãä»åèšäºã«ããŠã¿ãŸããã ä»åŸå匷ãããšå
±ã«ã宿çã«èŠçŽããŠããããã§ãã ä»åã®äœéšã§ãè³æ ŒååŸã ãã§ã¯ç¥ãåŸãªãäžçãå°ãå£éèŠãããšãã§ããŠãšãŠãããã£ãã§ãã ãèªã¿ããã ãããããšãããããŸããã æçš¿ æ®æ®µAWSè§Šã£ãŠãªã人éãLambdaãšAthenaã§ãªããå°å³ã«èŠåŽãã話 㯠ãã€ãããšã³ãžãã¢ããã° ã«æåã«è¡šç€ºãããŸããã
ã¯ããã« ããã«ã¡ã¯ã ããã»ã¹ãã¶ã€ã³éš ã³ãã¥ãã±ãŒã·ã§ã³ãã¶ã€ã³èª²ã§ãã ITãéãã³ãã¥ãã±ãŒã·ã§ã³ãæé©åãã ããšãããã·ã§ã³ãšããŠãä»å¹Žã®4æã«æ°ããçºè¶³ããéšçœ²ã§ãã瀟å
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã掻æ§åãããããšã§ã æšªäž²ã®æ¥åæ¹é© ããã ãµã€ãè§£æ¶ ããç®æããŠããŸãã ä»åã¯çµç¹ã®ç޹ä»ãå
ŒããŠãç§ãã¡ãã©ã®ãããªæŽ»åãè¡ã£ãŠããã®ããæžããŠã¿ãããšæããŸãã ã©ããªããšãããéšçœ²ïŒ ITã®äŒç»éšé ç§ãã¡ã¯å
šç€Ÿã®ITã管çããéšéã®äžã§ã ä»åŸã®ç€Ÿå
ã®ITç°å¢ãèããããšãå°éãšããŠããäŒç»éšé ã§ãã äŒæ¥ã¯åžžã«å€åãç¶ããŠãããªããã°ãªããã ããã«å¯Ÿå¿ããŠç€Ÿå
ã®ITç°å¢ãå€åãç¶ããŠããå¿
èŠããã ãšèããŠããŸãã DXæšé²PJã«åå ãã€ããã§ã¯ãITéšéã ãã§ãªãç·åãçµå¶äŒç»ãšãã£ã管çéšéãšãäºæ¥éšã®æèè
ãéããŠå
šç€Ÿæšªæã®DXæšé²PJãçºè¶³ããŠããŸãã DXæšé²PJã§ã¯ãæšªäž²ã®æ¥åæ¹é©ããããŒã¿å©æŽ»çšããªã©æ§ã
ãªããŒããæ±ã£ãŠããŸããç§ãã¡ã¯ãã®äžã®ã ãµã€ãè§£æ¶ã»æ
å ±å
±æ ãã«é¢ããåç§äŒã«åå ããŠããŸãã ã³ãã¥ãã±ãŒã·ã§ã³ã®æŽ»æ§åãç®æã㊠ãµã€ãåã£ãŠãªã«ïŒ ããµã€ãåããšããèšèãç¥ã£ãŠããŸããïŒ çµç¹ããšã«æ¥åããã»ã¹ãã·ã¹ãã ãªã©ãç¬èªã«ååšããå
šäœã§é£æºã§ããŠããªãç¶æ
ã®ããšãæããŸãã ç¹ã«ãäŒæ¥ã§éšçœ²å士ã瞊å²ãç¶æ
ã«ãªããéšçœ²éã®æšªã®é£æºãåãã¥ããç¶æ
ã®ããšãã çµç¹ã®ãµã€ãå ããšåŒã³ãŸãã çµç¹ã®çžŠå²ãç¶æ
ã¯ãåéšçœ²ãåã
ã®åœ¹å²ã«å°å¿µã§ãããšããã¡ãªãããããäžæ¹ã§ãäºããäœãããŠããã®ããããããªãããã äŒæ¥å
šäœã§ã¿ããšãã«ã¯å¹çãæªãæé·ãé»å®³ãã èŠå ãšãããããŠããŸãã ç§ãã¡ã®éšçœ²ã§ã¯ã瀟å
ã®ã³ãã¥ãã±ãŒã·ã§ã³ã掻æ§åãããããšã§ããµã€ãåãè§£æ¶ããããšãç®æããŠããŸãã ãªãŒãã³ã³ãã¥ãã±ãŒã·ã§ã³ãå€§äº ç§ãã¡ã®éšçœ²ã®ããã·ã§ã³ãéæãããšãããã€ããã¯ã©ã®ãããªç¶æ
ã«ãªã£ãŠãããã ããïŒ çµç¹ãçºè¶³ãããšãã«ã¿ããªã§èãã以äžã®ãããªç¶æ
ã"ç®æãã¹ãå§¿"ãšããŸããã çµç¹ã暪æããã³ãã¥ãã±ãŒã·ã§ã³ã掻çºåããããšã§ã ä»ãŸã§å
±æãããŠããªãã£ããã¬ããžãå
±æãããããæ°ããã³ã©ãã¬ãŒã·ã§ã³ãããŸãã ãªã©ãæ§ã
ãªååŠåå¿ãèµ·ããç¶æ
ãã®ããã«ã¯ã誰ããèŠãããå Žæã§ã³ãã¥ãã±ãŒã·ã§ã³ãããããšïŒ ãªãŒãã³ã³ãã¥ãã±ãŒã·ã§ã³ ãéèŠã«ãªããšèããŠããŸãã ãŸãã¯ç€Ÿå
ã®èª²é¡ãæŽãåºã ä»å¹Žã®4æã«éšçœ²ãçºè¶³ããŠããããŸãã¯ç€Ÿå
ã®ITç°å¢ã®å®æ
ã調ã¹ãããšããå§ããŸããã ãµã€ãåã¯æ¬åœã«èµ·ããŠããã®ãïŒäœãåå ãšãªã£ãŠããããŒã«ãããã®ãïŒãªã©ãä»åŸã®ããæ¹ãèããããã«çŸç¶ã®èª²é¡ãç¥ãããšãç®çãšããŸããã ãã€ãã瀟å¡çŽ7,000人ã察象ã«ããã¢ã³ã±ãŒã調æ»ãšãå
šåœã®æ§ã
ãªè·çš®ã®ç€Ÿå¡15åã«ã€ã³ã¿ãã¥ãŒã宿œããŸããã 瀟å
調æ»ãã¹ã¯ã©ã ã§ããããŠã¿ã 瀟å
ã®èª²é¡ãæŽãåºããããžã§ã¯ãã§ã¯ãéå¶ãã¢ãžã£ã€ã«ã®ä»£è¡šçãªææ³ã§ãããã¹ã¯ã©ã ããããŒã¹ãšããŠè¡ãããšã«ããŸããã ã¹ã¯ã©ã ãšãããšã·ã¹ãã éçºã§çšããããã®ãäž»æµã§ãããä»åã®ãã㪠ã·ã¹ãã éçºã§ã¯ãªãæ¡ä»¶ã«ãé©çšã§ããŸã ã ã¹ã¯ã©ã ãçšããããšã«ããèæ¯ã¯å€§ããåããŠ2ã€ãããŸãã äžã€ç®ã¯ã ããŒã ã¡ã³ããŒãã»ãŒå
šå¡å察é¢å士ã§ãã£ããã ãã§ãã ã³ãã¥ãã±ãŒã·ã§ã³ãã¶ã€ã³èª²ãšEXæšé²èª²ãšããäºéšçœ²å
±åã§ãããªããŸããããã©ã¡ãã2022幎4æã«æ°èšãããã°ããã§ããã3æãŸã§ã®è·çš®ãæ¥åå
容ãã¿ããªãã©ãã©ã§ããã ãããã䟡å€èгã«ã®ã£ãããããããããžã§ã¯ãã«å¯Ÿããç®ç·ãåãããã®ãé£ããç¶æ³ã ã£ãã®ã§ãã ãã®ãããã³ãã¥ãã±ãŒã·ã§ã³ããšãé »åºŠãå€ããªãããã«å·¥å€«ãããŠãããã¬ãŒã ã¯ãŒã¯ãçšããããšæããã¹ã¯ã©ã ãåãå
¥ããããšã«ããŸããã äºã€ç®ã¯ãã å
šç€ŸçãªèŠæš¡ã§ã®ã¢ã³ã±ãŒã宿œãè¡ã£ãå®çžŸããªãã£ããã ãã§ãã ITéšéãäž»å¬ãã調æ»ãšããŠã¯åäŸããªããã®ã§ãããããŠããŠãå·¥æ°ãªã©ãéåžžã«äžéæãªç¶æ
ã§é²ããå¿
èŠããããŸããã ãã®ããããããžã§ã¯ãã¬ãã«ã§èŠãŠãèšæ©å¿å€ã«åãããšã®ã§ãããããå·¥æ°ãçžå¯Ÿçã«èŠç©ããã€ã€ã¹ããªã³ãåäœã§åããå€ããããšã®ã§ããã¹ã¯ã©ã ãåãå
¥ããããšã«ããŸããã ã¹ã¯ã©ã ã®çµéšå€ãããã¡ã³ããŒã¯é忰以äžã§ãããã ååã§äžå¯§ã«ã¹ã¯ã©ã ã«ã€ããŠèª¬æãè¡ã£ã ããšã§äžæã浞éãããããžã§ã¯ãèªäœãã¹ã ãŒãºã«é²è¡ããããšãåºæ¥ãŸããã çãããã å察é¢ã®ã¡ã³ããŒã§æ°èŠæ¡ä»¶ãåãæ±ãå Žåã«ã¯ãã¹ã¯ã©ã ã§é²ããŠã¿ãŠã¯ãããã§ããããïŒ ããããåãçµãã㚠瀟å
調æ»ã§ããã£ãããš ITããŒã«ã«é¢ãã瀟å
調æ»ã«ãã£ãŠãåããããªåœ¹å²ã®ããŒã«ã瀟å
ã§ãããã䜿ãããŠããããšãããããŸããã ç¹ã«ãã£ããããŒã«ã¯ãITéçšéšéã管çããŠããå
šç€Ÿå°å
¥æžã¿ã®ããŒã«ã2çš®é¡ããã»ããåçŸå Žãç¬èªã«å°å
¥ããŠããããŒã«ãæ£èŠãããŸããã åçŸå Žã«ãã£ãŠã¡ã€ã³ã§äœ¿ã£ãŠããããŒã«ãéã ç¶æ
ã§ãã ããŒã«ãç°ãªãããšã«ãããä»äºæ¥éšãšé£çµ¡ããããšãã«äœã®ããŒã«ã䜿ãã°ãããããããªãã£ãããè²ããªããŒã«ããé£çµ¡ãããã®ã§éç¥ãèŠèœãšããããã©ãã§ããåããããåãããªããªããªã©ã ã¡ãã£ãšããäžäŸ¿ãèµ·ããŠãã ããšãããããŸããã âŒåã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ã®å©çšç CïœEã¯çŸå Žãç¬èªã§å°å
¥ããŠãããã£ããããŒã«ã§ãããå€ããã®ã ãšçŽ3å²ã®ç€Ÿå¡ã䜿ã£ãŠãããšããç¶æ³ã§ãã ã€ã³ã¿ãã¥ãŒèª¿æ»ãããã¡ãŒã«ãå«ãããš åžžæ3ïœ4ã€ã®ããŒã«ã䜿ãåããŠãã 瀟å¡ãããïŒïŒïŒããšãããããŸããã 瀟å
ã®äº€éæŽçãå¿
èŠ ãããã£ãç¶æ³ãåããŠã瀟å
åãã«ãã£ããããŒã«ã®ã¬ã€ãã©ã€ã³ãäœæããŸããã ãã€ããã§å©çšå¯èœãªããŒã«ãäžèЧåããå©çšãæšå¥šããããŒã«ãåããŒã«ã®ç¹åŸŽãçŸå Žã§ç¬èªã«å°å
¥ããå Žåã®ç³è«æ¹æ³ãªã©ããŸãšããŠããŸãã 瀟å€ããã®èŠè«ãªã©ãããåŸãªãäºæ
ãããã®ã§ãå©çšãããã£ããããŒã«ãã²ãšã€ã«éå®ããããšã¯é£ãããšèãããŸã㯠瀟å
ã®ããåãã®ã¹ã¿ã³ããŒããæ±ºããŠç€Ÿå
ã«çºä¿¡ ããŸããã ãšã¯ãããããŒã«ã®æ°ã®å€ãèªäœã«ãåé¡ããããšèããŠãããä»åŸã¯ææ¬çãªèŠçŽããå³ã£ãŠãããŸãã ãŸã çµè«ã¯åºãŠããŸããããä»åŸ 瀟å
ã®ãã£ããããŒã«ãçµ±äžããå
šç€Ÿå
±éã®ã³ãã¥ãã±ãŒã·ã§ã³åºç€ãæ§ç¯ããŠãã æ³å®ã§ãã ããŒã«ãçµ±äžããã ãã§ããã®ïŒ æ®å¿µãªããã瀟å
ã® ãã£ããããŒã«ãã²ãšã€ã«ããã ãã§ã¯ãã³ãã¥ãã±ãŒã·ã§ã³ã¯æŽ»æ§åããªã ãšèããŠããŸãã éšçœ²ã暪æããããåããæ°ããã³ã©ãã¬ãŒã·ã§ã³ãçºçããç¶æ
ã«ãªãããã«ã¯ã ãªãŒãã³ã³ãã¥ãã±ãŒã·ã§ã³ã®æåãã€ãã£ãŠãã å¿
èŠããããŸãããªãŒãã³ãªå Žã§æ°è»œã«çºä¿¡ã§ãããããªãå¿ççå®å
šæ§ã確ä¿ãããŠããçµç¹é¢šåã®éžæã§ãã æåã颚åã®éžæã¯ãäžæäžå€ã§ã§ãããã®ã§ã¯ãããŸããã ã³ãã¥ãã±ãŒã·ã§ã³åºç€ãæ§ç¯ããåŸã«ã¯ããã®ç°å¢ãã©ã®ããã«äœ¿ã£ãŠãããããèããªããã ãªãŒãã³ã³ãã¥ãã±ãŒã·ã§ã³æåãéžæã§ãããããæ§ã
ãªä»æãããããªã£ãŠãããŸãïŒ æçš¿ DXæšé²ã®ããã«ç€Ÿå
ITããŒã«ã®å©çšç¶æ³ã調æ»ãã 㯠ãã€ãããšã³ãžãã¢ããã° ã«æåã«è¡šç€ºãããŸããã
ã¯ããã« AIã·ã¹ãã éšã®S.Kãšç³ããŸãã ä»åã¯AtCoderã§æ°Žè²ãŸã§å°éãã身ãšããŠãããŸããŸãªå Žé¢ã§åœ¹ã«ç«ã€èšç®éã«ã€ããŠãŸãšããŠããããšæããŸãã èšç®éãšããæŠå¿µã¯ã¢ããªã±ãŒã·ã§ã³ã«å¿
èŠãªèšç®ãªãœãŒã¹ãèŠç©ããã®ã«äŸ¿å©ãªéå
·ã§ãã åŸé課éå¶ã®ã¯ã©ãŠããµãŒãã¹ãäž»æµ ã«ãªã£ãŠãããã®äžã®äžã§ãå¿
èŠãª èšç®ãªãœãŒã¹ãæèããã®ã¯ãšãŠãéèŠ ã§ãã ãŸããAtCoderãããŠãããšãå«ã§ã èšç®æé ãæ°ã«ããå¿
èŠããããŸããåºæ¬çã«1åã®å®è¡ã«å¯Ÿã㊠å®è¡æéã¯2ç§ãŸã§ ãšããå¶éãããããã§ããèªåãæžãããœãŒã¹ã³ãŒãã®å®è¡æéã2ç§çšåºŠã§åãŸãã®ããèšç®éãèãããšããããã®èŠç©ãããç«ã¡ãŸãã ã¢ã«ãŽãªãºã ã®æ§èœã枬ãäžã§é¿ããŠã¯éããªãããŒã¯ãŒã ãèšç®éã ã«ã€ããŠãå¯èœãªéãåããããã解説ã§ããã°ãšæããŸãã èšç®éã£ãŠäœïŒ ããããèšç®éãšã¯ãªãã§ããããïŒ èšç®éãšããæŠå¿µã¯äž»ã«èšç®è€éæ§çè«ã§äœ¿ãããèšèã§ãã èšç®è€éæ§çè«ã®Wikipedia ã§ã¯ãããªèšèŒããããŸããã 以äžåŒçš ã¢ã«ãŽãªãºã ã®èšç®éïŒãããããããïŒãšã¯ãèšç®æ©ããã®ã¢ã«ãŽãªãºã ã®å®è¡ã«èŠããèšç®è³æºã®éããããã¢ã«ãŽãªãºã ã®ã¹ã±ãŒã©ããªãã£ã瀺ãã圢åŒçã«ã¯èšç®æ©ããã¥ãŒãªã³ã°æ©æ¢°ãã©ã³ãã ã¢ã¯ã»ã¹æ©æ¢°ïŒrandom access machineïŒãªã©ã®èšç®ã¢ãã«ãšããŠå®åŒåããããã§ãã¢ã«ãŽãªãºã ã®äœ¿çšããè³æºã®éãå
¥åããŒã¿é·ãªã©ã«å¯Ÿãã颿°ãšããŠè¡šããèšç®ã¢ãã«ã®ç£æ«ãªè©³çްã«åœ±é¿ãåããªããããèšç®éã¯ãã®æŒžè¿çãªæåã®ã¿ã«æ³šç®ãã宿°åãç¡èŠããOèšæ³ã§æžã衚ãããšãå€ãã ããŒãŒã£ãšâŠâŠïŒ ããåãããªãã®ã§ ã³ããã³ã¯ã®ãèšç®éãšã¯ã ã®ããŒãžãèŠãŠã¿ãŸãããã 以äžåŒçš äžç倧çŸç§äºå
ž 第ïŒçãèšç®éãã®è§£èª¬ ããããããããèšç®é computatinal complexityã ã¢ã«ãŽãªãºã ã®èšç®å¹çãåé¡ã®é£ãããæž¬ãããã®å°ºåºŠãäž»ãªãã®ã«ïŒæéå¹çãæž¬ãããã®æéèšç®éïŒã¡ã¢ãªãŒå¹çãæž¬ãããã®é åèšç®éãªã©ããããä»ã«ãïŒèšç®åè·¯ã®æ§èœãè°è«ããããã®èšç®éãïŒåæ£åŠçã§ã®ããã»ã¹éã®éä¿¡å¹çãæž¬ãããã®èšç®éãªã©ïŒçšéã«å¿ããŠããŸããŸãªèšç®éãçšããããŠããããã³ã³ãã¥ãŒã¿ãŒã§ä»äºãåŠçãããåé¡ãè§£ãå ŽåïŒèšç®æé (ã¢ã«ãŽãªãºã )ã®åãæªãã§ïŒããã°ã©ã ã®èšç®æéã䜿çšããèšæ¶å®¹éã倧å¹
ã«ç°ãªã£ãŠããããšãå€ãã å°ãåãã£ãŠããŸããããŸãšããŠã¿ããšãèšç®éãšã¯ããããæŠå¿µã§ãã èšç®éã®ä»£è¡šçãªãã®ãšããŠã æéèšç®é ãš é åèšç®é(空éèšç®éãšãèšã) ãããã èšç®æé ã®è¯ãæªãã§ãå¿
èŠãªèšç®æéãèšæ¶å®¹éãç°ãªãã æéå¹çãæž¬ãã®ã«æéèšç®éãçšããããã ã¡ã¢ãªãŒå¹çãæž¬ãã®ã«é åèšç®éãçšããããã ä»ã«ãçšéã«å¿ããŠããŸããŸãªèšç®éãçšããããŠããã ããªãã¡ã以äžã®äºã€ã®ããšãèšããŸãã æéèšç®éãå°ããâèšç®æéãçã é åèšç®éãå°ããâå¿
èŠãªèšæ¶é å(ã¡ã¢ãªé)ãå°ãªã ãªã®ã§åºæ¬çã« ãèšç®éãå°ãããã°å°ããã»ã©ãããã¢ã«ãŽãªãºã ã§ããã ãšèšã£ãŠããã§ãããã èšç®éã®èšè¿°æ¹æ³ãã©ã³ããŠã®èšå·ããšãã®æå³ èšç®éãèšè¿°ããæ¹æ³ãšããŠãã©ã³ããŠã®èšå·ïŒ åè:Wikipedia ïŒããçšããããŸãã\(O\)ãšããèšå·ã䜿ã£ãããã®ãããªèšè¿°æ¹æ³ã§ãã ãã®ã¢ã«ãŽãªãºã ã®æéèšç®éã¯ãå
¥åãšããããŒã¿ã®åæ°ã\(n\)ãšããæã\(O(n)\)ã§ããã ã\(O(n)\)ãã®éšåã¯ããªãŒã㌠\(n\)ããšèªã¿ãŸããããã®æå³ã¯ ããã®ã¢ã«ãŽãªãºã ã®æéèšç®éã¯ãå
¥åãšããããŒã¿ã®åæ°ã«(\(n\)ã«)æ¯äŸãããã ãšããæå³ã§ããèšãæãããšããããŒã¿ã®åæ°(\(n)\)ãåã«ãªããšãèšç®æéãåã«ãªãããšããæå³ã«ãªããŸãã ãã®ã«ãã³ã®äžèº«ã¯ãä»»æã®\(n\)ã«ã€ããŠã®é¢æ°ãå
¥ããŸãã å
·äœäŸãèŠãŠã¿ãŸãããã æéèšç®éã \(O(n^2)\) æéèšç®éã¯\(n\)ã®2ä¹ã«æ¯äŸãããã€ãŸãã\(n\)ã2åã«ãªããšèšç®æéã4åã«ãªãã \(n\)ãå¢å ãããšã èšç®éã\(O(n)\)ã®ã¢ã«ãŽãªãºã ãããèšç®æéãé·ããªãããã ã æéèšç®éã \(O(\log(n))\) æéèšç®éã¯\(log n\)ã«æ¯äŸãããã€ãŸãã\(n\)ã2åã«ãªããšèšç®æéã¯\(log2\)å¢å ããã \(n\)ãå¢å ããŠããèšç®æéã¯å°ããã€ããé·ããªããªãã æéèšç®éã \(O(2^n)\) æéèšç®éã¯\(2^n\)ã«æ¯äŸãããã€ãŸãã\(n\)ã2åã«ãªããšãèšç®æéã\(2^n\)åã«ãªãã \(n\)ãå°ãã§ãå¢å ãããšãèšç®æéããšãŠãé·ããªãã æéèšç®éã \(O(c)\) ïŒcã¯å®å®æ°ãšãããïŒ æéèšç®é㯠垞ã«äžå® ã§ãããã€ãŸãã\(n\)ãå¢å ããŠãèšç®æéã¯å€åããªãã ã€ãŸãããã®èšè¿°ã衚ãã®ã¯ ãããŒã¿é \(n\) ãå¢å (æžå°)ããæãåŠçæéãã©ã®çšåºŠå¢å (æžå°)ãããã ãªã®ã§ããèšç®éã空éèšç®éã®å Žåã¯ã ãããŒã¿é \(n\) ãå¢å (æžå°)ããæãåŠçã«å¿
èŠããèšæ¶é åãã©ã®çšåºŠå¢å (æžå°)ãããã ã衚ãããšã«ãªããŸãã èšç®éã\(O(log n)\)ã§ããã°ãããŒã¿éãå¢ãããšããŠããèšç®æéã¯ãããŸã§é·ããªããªãã®ã§å¯ŸããŠå¿é
ããå¿
èŠã¯ãããŸããããããèšç®éã\(O(2^n)\)ã§ããã°ãå°ãã§ãããŒã¿éãå¢ãããšãèšç®æéããšãŠãé·ããªã£ãŠããŸãããšããããšãåãããŸããã ãã®æ§ã«èšç®éã¯äœãåºæºãšãªã倿°(äžèšã®å Žåã¯\(n)\)ãæ±ºããŠãããã䜿ã£ãŠèšè¿°ããŸãã\(n\)ã®åãæ¹ã¯ä»ã«ã以äžã®äŸãããã§ãããã å
¥åãæåå\(S\)ã®æãæåå\(S\)ã®é·ã(æåæ°) å
¥åãæŽæ°\(N\)ã®æã\(N\)ãã®ãã® \(N = 2^n\)ãšè¡šããæã®\(n\)ã(ããªãã¡\(log N\))ãåºæºãšããããšãå€ãã§ãã å
¥åãã°ã©ãæ§é ãæã€ãšãããã®é ç¹ã®æ°ã è²ã
æžããŸããããããã§ã¯ã ã\(O(n)\) ïŒãªãŒã㌠\(n\) ïŒã£ãŠããããæå³ãªã®ãïŒïŒã ãšããã®ãäŒããã°å€§äžå€«ã§ãããã㊠ã\(n\)ã«ã€ããŠå¢å ãããããã°ããããã»ã©ãèšç®éã倧ããã ãšããããšã«æ°ãä»ããŸãããã 詳ããæ°åŠçãªå®çŸ©ãæ°ã«ãªãæ¹ã¯ã ã©ã³ããŠã®èšå·ã®Wikipedia ã«ååãªèšè¿°ããããŸãã®ã§ãç®ãéããŠããã ããã°ãšæããŸãã èšç®éã®æ±ãæ¹ ã§ã¯ãå
·äœçãªèšç®éã®æ±ãæ¹ãèŠãŠã¿ãŸããããä»åã¯æéèšç®éã«çŠç¹ãåœãŠãŠã¿ãããšæããŸãã 以äžã®Pythonã®ãœãŒã¹ã³ãŒããèŠãŠãã ããã cnt = 0for x in range(n): for y in range(n): for z in range(n): if x + y + z == w: cnt += 1print(cnt) ãã®ãœãŒã¹ã§ã¯0以äž\(n\)æªæºã®æŽæ°3ã€ã®çµã¿åããã§ããã®åã w ã«ãªããã®ãããã€ããããèšç®ããŠããŸãã ãã®ãœãŒã¹ã®èšç®éã¯\(O(n^3)\)ã«ãªããŸã ã ãã®èšç®éã«ãªãçç±ã¯ã ããx+y+zãwãšäžèŽããŠããããã確ãããæŒç®ãåèšã§\(n^3\)åããããã ã§ããforã«ãŒãã®äžã®æŒç®ãäœåè¡ãããããæ°ããã°ããèš³ã§ããã ã§ã¯æ¬¡ã®ã³ãŒããèŠãŠã¿ãŸãããã cnt = 0for x in range(n): for y in range(n): if 0 <= w - x - y < n: cnt += 1print(cnt) ããã¯1ã€åã®ã³ãŒããšå
šãåãçµæãåºåããŸããwãšã2ã€ã®æŽæ°ã®åã®å·®ã0ä»¥äž \(n\) æªæºã§ããã°ãæŽæ°3ã€ã®çµã¿åããã§ããã®åãwã«ãªããã®ãååšããããã§ãã ãã®ãœãŒã¹ã®èšç®éã¯\(O(n^2)\)ã«ãªããŸã ã ããw-x-yã0以äžã\(n\)æªæºã§ããããã確ãããæŒç®ãåèšã§\(n^2\)åããããã ãçç±ã§ãã èšç®éãæ±ããå Žåã¯ãã®ããã«ã ãæŒç®ãè¡ãåæ°ã\(n\)ãçšããŠèšè¿°ããåŒã ãèããã°ããèš³ã§ãããããèããããšã§ã\(n\)ãå¢å ãããšèšç®æéãã©ã®çšåºŠé·ããªãã®ããåããããšããèš³ã§ããã ããããŠèšç®éãèããããšã§ããåŠçã®å
容ãåãã ãšããŠããèšè¿°ã®ä»æ¹ã§åŠçé床ãã©ã®çšåºŠå€åãããããå®éçã«ææ¡ããããšãã§ããã®ã§ãã ã©ã€ãã©ãªãå©çšããå Žå çŸåšã®ã¢ããªã±ãŒã·ã§ã³éçºã«ãããŠãã©ã€ãã©ãªã®å©çšã¯äžå¯æ¬ ãªãã®ã§ãããããªã£ãæã ã¢ããªã±ãŒã·ã§ã³å
šäœã®èšç®é ãèŠç©ããããã«ã¯ã ã©ã€ãã©ãªã§æäŸãããŠãã颿°ããã¯ã©ã¹ã®ã¡ãœããã®èšç®é ãææ¡ããŠããå¿
èŠããããŸãã ããã«é¢ããŠã¯ä»¥äžã®å¯Ÿå¿ãå¿
èŠããšæããŸãã ããã¥ã¡ã³ããã仿§ã確èªããã ã©ã®ãããªåŠçãè¡ã£ãŠããã®ãããã¥ã¡ã³ãã確èªãããã®åŠçã«å¿
èŠãªèšç®éãèŠç©ããã å Žåã«ãã£ãŠã¯èšç®éãã®ãã®ã®èšèŒãããã ããã¥ã¡ã³ãã®ã¿ããã§ã¯æ£ç¢ºãªèŠç©ãããã§ããªãå Žåãããã å®éã®ãœãŒã¹ã³ãŒããèªã¿èŸŒãã äžèšã®ææ³ã§èšç®éãèŠç©ããã ããªãæ£ç¢ºãªèŠç©ãããã§ãããã®ã®ãããã¥ã¡ã³ããèªããããæéããããããšãæ³å®ãããã ã©ããŸã§æ£ç¢ºãªèŠç©ãããå¿
èŠã«ãªããã¯ãã±ãŒã¹ãã€ã±ãŒã¹ã ãšæããŸããå®éã«å®è¡ããæã®åŠçæéãèšæž¬ããæ¹ãæå¹ãªå ŽåãããããšæããŸãã æ¥åã§ã®èšç®é äŸãã°ãWebã¢ããªã®èšç®é(æéèšç®éã空éèšç®éã®äž¡æ¹)ãå°ãããããšã以äžã®ã¡ãªãããããããšæããŸãã ããã¯ãšã³ãã§ã®èšç®éãå°ããæ ãŠãŒã¶ãŒã®åŸ
ã¡æéãçããªãã åŠçæéã«å¯ŸããŠåŸé課éãããæãå©çšæéãå®ãæžãã 䜿çšããã¡ã¢ãªã«å¯ŸããŠåŸé課éãããæãå©çšæéãå®ãæžãã ããã³ããšã³ãã§ã®åŠçæé ãŠãŒã¶ãŒã®PCã«ãããè² è·ã軜æžãããã UI/UXæ¹åã«ç¹ããã ããã³ãåŽã®åŠçãéããŠãåŸ
ã¡æéã®å¢å ã«ç¹ãããŸãã 以äžã®ãããªå Žåã¯ç¹ã«ãããæ£ç¢ºãªèšç®éã®ç¢ºèªãéèŠã§ãããã åŠçã§åãæ±ãããŒã¿ã®éãèšå€§ãªãšãã èšç®ãªãœãŒã¹ã«å¶éããããšãã ãã©ã®åŠçã«ã€ããŠãã®èšç®éãèããã å
ã»ã©ã¯æéèšç®éãæ¯èŒæŒç®ã®åæ°ã§èŠç©ãããŸãããããããã©ã®åŠçã®åæ°ãåºæºãšããŠèšç®éãèŠç©ãããã¯å Žåã«ãã£ãŠå€ãããšæããŸãã以äžã®ãããªåŠçã®åæ°ã¯ãšãŠãéèŠã§ãã å€éšãšã®éä¿¡ã®åæ°ãšå®¹é åæ°ã容éãå€ãããšã¯ã垯åã®å§è¿«ã§ãã£ãããäœèšãªè²»çšå¢å ã«ç¹ãããŸãã APIçãå©çšããéã¯ãAPIã®åŒã³åºãåæ°ã«å¶éãããå ŽåããããŸãã DBã«ã¢ã¯ã»ã¹ããåŠçã®åæ° åæ°ãå€ããšDBã®è² è·ãå¢å ããŸãã ã¯ãšãªåæ°ã«å¯ŸããŠèª²éãããDBãµãŒãã¹ãããããšæããŸãã ãã¹ã¯ãŒããããŒã¯ã³ãç§å¯éµãšãã£ãæ©å¯æ
å ±ãå¿
èŠãªåŠçã®åæ° ç¹å®ã®ãœãŒã¹ã³ãŒããšãããããã¯ãã·ã¹ãã å
šäœã®èšèšã§æèããããšããšæããŸãã èšç®éãå®çŸ©ããéã«ã ãä»ã«ãçšéã«å¿ããŠããŸããŸãªèšç®éãçšããããŠãããã ãšè¿°ã¹ãã®ã¯ãããçç±ã§ãããäžèšã®åŠçã®åæ°ãå°ãªãããããšã§ãåŠçæéãçããªãã ãšããèš³ã§ã¯ãªã ããšããããšæããŸããèšç®æéãçãããããšãåªå
ããã¹ããªã®ããã¯ããŸãDBã®è² è·ãæžããã¹ããªã®ãã ã·ã¹ãã ã®ä»æ§ãèŠä»¶ãšçžè«ããå¿
èŠãããããšæããŸãã èšç®éã¯åžžã«èããã¹ããªã®ã ãããŸã§èšç®éãå°ããããŠãåŠçãå¹çåããããšã°ããè«ããŠããŸãããã èšç®éãããŸãæ°ã«ããªããŠããã±ãŒã¹ ããããŸãã ããŒã¿ã®éãé·ããåºå®ããããã¯å°ãªããšã ã·ã¹ãã ã®ä»æ§äžã©ãããŠããã®åŠçãå¿
èŠãªãšã ãã®æ§ãªå Žåã¯èšç®éãå€å°å€ããªã£ãŠãåé¡ãªãããšæããŸãã ãªããã®ãããªå Žåãããããè«ããããšèšããšã èšç®éãå°ããããããšã§ä»¥äžã®åé¡ãçãã å¯èœæ§ãããããã§ãã åŠçå
容ã®ç¡é§ã極åçããçµæãä»è
ããã®ãœãŒã¹ã³ãŒããèªãã æã«ãã©ããªåŠçãè¡ãããŠããã®ããåãããªãã ç¹å®ã®åŠçãå¹çããè¡ãããšã«ç¹åããããŸããåå©çšæ§ãæãªãããŠããŸãã å¹çãããã³ãŒããæžãããšããããŸããã³ãŒãã£ã³ã°ã«ãããæéãé·ããªã£ãŠããŸãã ãããã®åé¡ããã åžžã«èšç®éãå°ããããã¹ã ãšã¯åçŽã«æããããšãã§ããªãéšåããããŸããã·ã¹ãã ã®èŠä»¶ã仿§ãå Žåã«ãã£ãŠã¯çŽæãèæ
®ããäžã§ãã©ã®ãããªå®è£
ãè¡ãã¹ããªã®ã倿ããã¹ãã§ãã AtCoderã«ãããèšç®é ãã®ç« ã¯ç«¶ããã«åãçµãããšæã£ãŠããæ¹åãã§ãã AtCoderã«ãããŠæèããã¹ãæ°åããããŸãããã㯠\(O(10^8)\) ãšããæ°åã§ãã AtCoderã§ã¯ãå®è¡æéã2ç§ã«å¶éãããŠããŸãããããè¶
ããªãããã«ã¯ \(O(10^8)\) ããããé床ã ãšããããšã§ãããããè¶
ããã¢ã«ãŽãªãºã ã¯TLEïŒå®è¡æéå¶éãªãŒããŒïŒã«ãªãå Žåãå€ãã§ãã å
¥åãé·ãNã®é
åãšããŠäžããããå ŽåãèããŠã¿ãŸãããã AtCoderã«ãããŠã¯ãNã®æå€§å€ãå¶çŽãšããŠäžããããŠããŸãããã®ãããããããã®å¶çŽã«å¯ŸããŠãããããããã®èšç®éãªãTLEã«ãªããªãããšããç®å®ãæžããŠãããŸãã \(N\)ãæå€§ã§ \(10^2\) \(O(N^3)\)ã®ã¢ã«ãŽãªãºã ãåãããŠãåé¡ãªãã§ãããã å€ãã®å Žåãç¹ã«èšç®éãæžãã工倫ãããå¿
èŠããªãããšæããŸãã \(N\)ãæå€§ã§ \(10^3\)ïœ\(10^4\) \(O(N^2)\)ããããé床ã§ãããã \(N\)ãæå€§ã§ \(10^5\)ïœ\(10^6\) \(O(N \log N)\) ããããé床ã§ãããã äžã€äžã€ã®åŠçãéãå Žåã¯\(O(N)\)ã«ããã¹ããããããŸããã ããã¯ã¯ã€ãã¯ãœãŒãã®èšç®éã«ããããŸãããœãŒããã§ããã®ã¯ãã®èŸºããŸã§ã§ãã 2éã«ãŒãã«ããå
šæ¢çŽ¢ã¯é£ããã§ãã \(N\)ãæå€§ã§ \(10^7\)~\(10^8\) \(O(N)\)ãé床ã§ãããã \(N\)ãæå€§ã§ \(10^9\) \(O(N)\)ã§è»œãåŠçãªãã®ãªã®ãªTLEã«ãªããªãã§ãããã ããããå
¥åã«\(O(N)\)æéãã©ãããããŠãããããŸããåŠçã軜ããã°éã«åãã¯ãã§ãã \(O(\log N)\)ã宿°æé(\(N\)ã«äŸåããªãæé)ã§åŠçãçµãããã®ãçæ³ã§ãã 衚ã«ãŸãšãããšãããªæãã§ããæ
£ããŠãããšãã®è¡šããªããšãªãé ã«å
¥ããšæããŸãã \(N\)ã®æå€§å€ èšç®é åè \(10^2\) \(O(N^3)\) èšç®éãèæ
®ããå¿
èŠã¯ã»ãšãã©ãªãã \(10^3\)ïœ\(10^4\) \(O(N^2)\) \(10^5\)ïœ\(10^6\) \(O(N \log N)\) ã¯ã€ãã¯ãœãŒãã«ãã£ãŠãœãŒããè¡ãããšãã§ããã \(10^7\)ïœ\(10^8\) \(O(N)\) \(10^9\) \(O(\log N)\) è¥ããã¯\(O(c)\) åŠçã軜ãã®ã§ããã°\(O(N)\)ã§ããããå¯èœæ§ããã AtCoderã§ã¯ã é£æåºŠãé«ãã»ã©å
¥åé·ã®æå€§å€ã倧ãããªãå Žåãå€ãã§ã ããã®ããå®è£
ã«å·¥å€«ãç¥èãå¿
èŠã«ãªã£ãŠããŸãããªã®ã§AtCoderã§äžäœã«ãªãããã«ã¯ãèšç®é(äž»ã«æéèšç®é)ãå°ãããŠæžãã¢ã«ãŽãªãºã ã«ã€ããŠåŠã³ããããå®è£
ããæè¡ãå¿
èŠã§ãã ããªãã¡ã åªç§ãªè²ã®æã¡äž»ã¯ã¢ã«ãŽãªãºã ã«å¯Ÿããç¥èãæ·±ãããã®å¿ç𿹿³ãçç¥ããŠãã ãšããèš³ã§ãã ãŸãšã ç§ã¯ç«¶ãããç ç©¶ã®ããã«èšç®éã«ã€ããŠåŠã³ãŸããããæ°ãã€ããšåžžã«æèããããã«ãªã£ãŠããŸããããŸãã¯ãªããšãªãã§ããããçè§£ããã§ããã ãèšç®éãå°ãããªãå®è£
ãå¿ãããããšã¯å€§äºã ãšæããŸãã èšç®éãå°ãããªããããªå®è£
ãè¡ãã«ã¯ãæ§ã
ãªã¢ã«ãŽãªãºã ã®ç¥èãå¿
èŠã«ãªãããšããããŸãããã®ç¥èãè¶³ããŠããªãã£ããšããŠãããããããæžãããã°ã©ã ã®èšç®éããããããããªâŠïŒããšåããã ãã§ãçžè«ããããšããå®éã«åäœããããšãã«äœãèµ·ãããæ³åããããšãã§ããŸãã ãŸãã¯ããã®åŠçã®èšç®éã¯ãããããããªâŠïŒããšèãããšããããå§ããŠã¿ãŠã¯ãããã§ããããã
ã¯ããã« çããããã«ã¡ã¯ïŒéçºç³»ã®éšçœ²ã«é
å±ãããã2022å
¥ç€Ÿæ°åR.Mã§ãïŒ ã¡ã€ã³æ¥åã¯ã¢ãã€ã«ã¢ããªéçºã§ãFlutterã䜿çšããŠããŸãïŒ åŠçæã¯çåœç§åŠç³»ãå°æ»ããŠãŸãããã3幎çãããããããã°ã©ãã³ã°ã«èå³ãæã¡å§ããŠãç°¡åãªiOSã¢ããªãéçºããŠãŸããã ç ç©¶ã¯Pythonã䜿ã£ãŠãåµè¬ã«é¢ããããšãè²ã
ãã£ãŠãŸãããæè¡ãåŠã¶ããšã楜ããã§ãããããžãã¹é¢é£ã®è©±ãèãã®ã楜ãã人éã§ãã ã¡ãªã¿ã«ãè¶£å³ã®äžã§ä»äžçªç±ãã®ãK-POPã§ãð¥ èæ¯ ãã®èšäºãæžãããšæã£ãçç±ã»èæ¯ãªã®ã§ãããèªåèªèº«é
å±ãããŠãããè§Šã£ãããšã®ãªãæè¡(Flutterã»Dart)ãã瀟å
ã§æããŠããã人ãããªãäžã§éçºãã³ããŒãããšååããªããå匷ããçŽ2ã¶æééãããŠããŸããã ã¯ããã¯èª²é·ãšãã³ããŒãããèªåå«ããŠ4人ã§å®äŸäŒè°ãè¡ã£ãŠããŸããããä»ã§ã¯äžäººã§ãã³ããŒãããšé²æå
±æãªã©ãè¡ãããããžã§ã¯ããé²è¡ããŠããŸãã æ°åã§ãããã®çµéšã¯äžã
ç¡ã貎éã§ãããåŸããããã®ãå€ãã£ããšæã£ãŠããã®ã§ã ãããžã§ã¯ããé²ããŠããäŒè°äžã§ãã£ãã»ããè¯ãïŒ ãšæã£ãããšãå人ã®äž»èгã§ãŸãšããŠã¿ãŸããð â ïžãã£ãŠãããšè¯ããšæžããŠãŸããã絶察å¿
èŠã§ããïŒã£ãŠããæèŠããããšæãã®ã§ããã¯ãäºæ¿ãã ããã å
·äœçã«ãããã©ãããããŸã§ã¯æžããŠãŸããð ãïŒãæ
å ±ãåæããããš æ
å ±ãåæãããšã¯ïŒ äŒè°ã«åå ããŠããã¡ã³ããŒå
šå¡ãããããžã§ã¯ãã«é¢ããŠç¥ããªãæ
å ±ãå
±éèªèãšããŠæã€ããšãæããŠããŸãïŒ ç§éã®ããŒã ã¯éçºã¿ã¹ã¯ãããã§å
±æããŠããã®ã§ããããã®ä»çµã¿ãããã ãã§ã æ°ããã¿ã¹ã¯ã¯ããã æ¢åã®ã¿ã¹ã¯ã®ç¶æ³ã¯ã©ããªã£ãŠããã æªå¯Ÿå¿ã»å¯Ÿå¿äžã»å¯Ÿå¿æžã¿ ã©ã®ããŒãžã§ã³ã§ãã®æ©èœïŒã¿ã¹ã¯ïŒãå®è£
ããã®ã â»ã¹ããã¢ããªãªã®ã§ãããŒãžã§ã³ããšã«ãªãªãŒã¹ããæ©èœãäºåã«è©±ããŠæ±ºããŸã ãã®ã¿ã¹ã¯ã«ãããæéã¯ã©ã®ãããã ãã®ã¿ã¹ã¯ã¯èª°ãæ
åœããã®ã ãªã©ã決ããããšãã§ãããã®å Žã®ã¡ã³ããŒã«å
±æãã§ããŸãã ããããã§ããŠããã°ããã â ã¿ã¹ã¯ãçµãã£ãŠããã°é 調ãšå€æã§ããçµãã£ãŠããªããã°ãã®åå ãšèª²é¡ã次ãžã®å¯ŸçãŸã§æ€èšãå¯èœïŒ â ã¿ã¹ã¯ã®ç®¡çæŒãããªããªãïŒð¥ â仿¥ã誰ãäœãããŠããã®ããåãããPMãå
šäœç¶æ³ãææ¡ããããïŒ ãïŒãããŒãããããç«ãŠãããš ã¹ããã¢ããªéçºã®å Žåã§ã¯ã ããŒãžã§ã³ããšã«ãããã€ããã®ããŒãžã§ã³ãäžã«ãªãªãŒã¹ããããæ±ºå® ã¿ã¹ã¯ããšã«ãããã€ããã®ã¿ã¹ã¯ããã©ã®ãããŒãžã§ã³ã«å«ããããæ±ºå® ã¿ã¹ã¯ã«ãããæéãå
ã«ã1ã¹ããªã³ãã§å®äºãããã¿ã¹ã¯ãæ±ºå® ã¹ããªã³ã = åäœã®ç¡ãäžå®ã®æéãç§éã¯1ã¹ããªã³ã = 1é±éãšå®çŸ©ããŠããŸãã ããããããŒãããããç«ãŠãããšããŠå®æœããŠããŸãã ããããã§ããŠããã°ããã â ãã€ãŸã§ã«ãäœãçµããã®ããèŠãããïŒ âèšæ©å¿å€ã«ããããžã§ã¯ãé²è¡ã®èª¿æŽãè¡ãããšãã§ããïŒ â æ¬¡ã¹ããªã³ãã®ã¹ã±ãžã¥ãŒã«ãç«ãŠãããïŒ âä»®ã«1é±éçšåºŠã§5åãããã®ã¿ã¹ã¯ãçµãããããšãããšã次ã®1é±éã«ã¿ã¹ã¯ã«ãããæéã®ç®å®ãããåããïŒ ãïŒãããŒãã³ã°ãããã確ä¿ããããš ããŒãã³ã°ããããšã¯ïŒ è°è«ããéã«ãä»ãã話ãåãã¹ãã§ã¯ãªããšå€æããã話é¡ãªã©ãäžæŠä¿çããŠããããã«ãæºããã¯ã€ãããŒãã®é
ãªã©ã«èšããããã¹ããŒã¹ã®ããšã â·â·â·äŒè°ãçµãã£ãåŸã«ã話ãããè°é¡ã«ã€ããŠå¿
èŠãªã¡ã³ããŒã ãéãŸã£ãŠè©±ãæµãã®ããšãšããŠå®çŸ©ããŠããŸãïŒ ç§ã®å Žåã«ããããŒãã³ã°ãããã§è©±ãå
容ãã ã¢ãã€ã«ã¢ããªéçºã«ãããæè¡çãªè³ªå 䜿çšããããŒã« 现ãã話 ã³ãããã¡ãã»ãŒãžã®èŠå ã¿ã¹ã¯èŠä»¶ã®åå®çŸ©ãªã© ãªã©ããããããããŸããïŒäžã§ãæè¡çãªè³ªåãäžçªè©±ããŠããŸãããð äŒè°ãçµãã£ãåŸã«ãåå¥ã§ããŒãã³ã°ããããéããŸãã話ããã人ã¯è©±ããŠãèãå¿
èŠããã人ã¯èãã€ã¡ãŒãžã§ããã ãããã§ããŠããã°ããã â è°è«ã®æ··ä¹±ããç¡é§ãªè°è«ãé¿ããããšãã§ããïŒ â 話ãèããªããŠãè¯ãã¡ã³ããŒã®æéã奪ãããšããªãïŒ ãïŒãå€åããã£ããã®ã¯èšé²ãæ®ãããšïŒãã®å Žã§ïŒ ã€ã¡ãŒãžã¯ãè°äºé²ãšããã誰ã«èŠããŠãåãããããªããã¹ããã§ã¯ãªããã話ããå
容ãæãåºããç²åºŠã®ã¡ã¢æžããã¿ãããªãã®ãæ³åããŠãããããšå¬ããã§ãïŒïŒ ããããäŒè°ã®æäžã«æžããŠããŸããŸãïŒäŒè°åŸã§ã¯ãªãã§ãïŒ ãããã§ããŠããã°ããã â ã¡ã³ããŒéã§å
±éèªèãåžžã«åããïŒ âå°éçãªè©±ã§ããèšèªåããŠèšé²ãããŠããã®ã§ãã©ã®ãããªå
容ãã¯ãã£ããææ¡ã§ãã â åŸãã蚌æ ãšããŠåºããïŒ âçžæã®èªèã«éœéœ¬ãããå Žåã«ãã¡ã¢ãèŠããã°å³è§£æ±ºïŒ â å³ãç»åãªã©ãä¹ããããšãã§ããŠãã€ã¡ãŒãžããããïŒ âãããå£é ã§èª¬æããããå³ã§èª¬æããã»ããå§åçã«ããçµãã â»èšé²ããªããšãåŸããå床èããšããäºåºŠæéã«ãªããŸãããèŠè¿ãããïŒãšæã£ãæã«èŠããªããå³ãåã£ãã»ããè¯ãæã«åãããªãããšããææªãªããšã«ãªããŸãðæ°åç ä¿®ã®éã«ãå¯èŠåããããšã®éèŠæ§ãç¥ããŸããã ãïŒãèªèã®éœéœ¬ããªããªããŸã§äŒè°ãçµããããªãããš ããã¯ãææ§ãªçè§£ã®ãŸãŸã§äŒè°ãéåºãããªãããããïŒïŒïŒïŒã£ãŠæå³ã§ããð ããŒã ã§ããããšãšããããã å人㧠æèããŠãã£ãŠãããšè¯ãããšã«ãªããŸãã åãããªãããšæã£ããŸãŸéåºããã®ããèªåã«ãšã£ãŠãããŒã ã«ãšã£ãŠãå±éºã§ããã ã¡ãã£ãšããçåã§ãããã®äŒè°äžã§è³ªåããŠè§£æ¶ãããŸã§è¡ããšGoodããªãšãå人çã«ã¯æã£ãŠãŸãïŒ ãããã§ããŠããªããšãããðŠ â èªåãããããäœãããã®ãåãããªãç¶æ³ã«é¥ã£ãŠããŸããã âäŒè°çµäºåŸã«ããåããç¶æ
ã«ãªã£ãŠããªãã®ã¯ãèªåãäžçªå°ã£ãŠããŸããŸãïŒåžã«åº§ã£ããäœãããããããæ³åã§ããããããŸã§ãçè§£ã®ç²åºŠã现ããããŸããããïŒ â åŸããåãããªãç¹ãèãã¯ãã«ãã âèªåã®ããçžæã®æéã奪ã£ãŠããŸãã¡ãªãããããŸããïŒïŒææ»ãã£ãŠãã€ã§ããïŒããã£ãŠã¯ãããã®ã®å®è¡ã«ç§»ãã®ãé£ããã®ã§ããð ãâ»ãéå¬é »åºŠã¯æ¯æâïž ããã¯ãèªåããããžã§ã¯ããé²ããã«ããã£ãŠã¹ã ãŒãºã«é²ããããŠããèŠå ã®äžã€ã§ãã ã£ãã®ã§æžããŸããïŒ æ¯æéå¬ãããšãã â ãããžã§ã¯ãã®é²è¡ç¶æ³ã1æ¥çœ®ãã§åããïŒ âäœãé²ãã§äœãé²ãã§ããªãããæç¢ºïŒ â æå
ã«ããéèŠãªæ
å ±ãããå
±æã§ããïŒ âå
±éèªèããšããããïŒ â åãããªãããšãããã°ãçŽæ¥èããïŒ âããã¹ãã§èãããå§åçã«æ©ãããå·¥æ°åæžã«ã€ãªãã éã«æ¯æéå¬ããªãã£ãæã«äžçªå°ã£ãããšã¯ãèªåç®ç·ããåãããªãããšãèãããšãã§ããã æè¡çãªè³ªåãªããŠã现ãããšãããæç« ã§æžãèµ·ãããªããšãããªãå Žé¢ãããã€ããããŸããã ãããé·æã§è¿ããŠãé·æã§è¿ã£ãŠãããããããŸãé·æã§è¿ããã¿ãããªç¹°ãè¿ãã§ ã»ãŒ1æ¥çµã£ãŠãããããããïŒïŒ ã£ãŠæã£ãæ¥ããããŸãã æ¯æã§ããã°è³ªåãããã°èãæ©äŒãæ¢ã«èšããããŠããã®ã§ãå¿ççå®å
šæ§ããããŸãããèãããããšããªãæ¥ã¯ããã§OKãªã®ã§éåžžã«å©ãã£ãŠããŸãïŒ æåŸã«ã 以äžã§ãïŒ ïŒæžããå
容ãMECEã«ãã£ãŠãªããããããŸãããã远ã
æèããŸããïŒïŒ èŠè¿ããšãæå€ãšåœããåãªããšããªð¥±ã£ãŠæã£ãæ¹ãå€ããããããŸããïŒ ãã ãã³ããŒããäŒè°ãšã¯å¥ã§ã瀟å
ã®äŒè°ã«ããåæŠïŒããŠã¿ããšããããªããšããªãããã©ãã©ã§ããã ãäŒè°ãã£ãŠäžèšã§è¡šãããã©ãããªã奥深ããŠå€§å€ã§ããð ãã³ããŒããããã€ãŸã§ãå¥çŽãç¶ãããã§ã¯ãªãã®ã§ããã®åœããåã¯èªåã®äžã§ãç¶æããŠããããžã§ã¯ããã¹ã ãŒãºã«é²ããŠãããããªïŒãšæã£ãŠãŸãïŒ â»äœè«ã§ããããã®éã¡ããã©ç€Ÿå
ã®äŒè°ãã³ãã¥ãã±ãŒã·ã§ã³ã®æé©åã«ã€ããŠè°è«ããå Žã«åæŠããã®ã§ãããå°ã䌌ããããªè©±ãäžãã£ãŠãã®ã§ãå°ãã¯èãæ¹ãå
±éããŠããã®ã§ã¯ãªãããšæããŸãã㣠é²èЧããã ãããããšãããããŸãããïŒð¥°
ã¯ããã« æ¬æ¥12æ15æ¥ã¯ C++14 (ISO/IEC 14882:2014) ãš C++20 (ISO/IEC 14882:2020) ã®ãªãªãŒã¹æ¥ã§ãã C++14 ã¯8幎åã®2014幎12æ15æ¥ãC++20 ã¯2幎åã®2020幎12æ15æ¥ ã«ãªãªãŒã¹ãããŸããã Cèšèªãšããã°ãå
æ¥(2022/11/19)ã«ã人éCã³ã³ãã€ã©ã³ã³ãã¹ããã«åå ããã©ã³ãã³ã°1äœãç²åŸããããšãã§ããŸããããã®ãšã³ããªãŒã§ã¯äººéCã³ã³ãã€ã©ã®ã¯ããããããŸãšããŠãããŸãã 人éCã³ã³ãã€ã©ã³ã³ãã¹ããšã¯ïŒ ã人éCã³ã³ãã€ã©ã³ã³ãã¹ãã(HCCC)ãšã¯ç«¶æè
èªèº«ãCã³ã³ãã€ã©ãšãªã Cèšèªããã¢ã»ã³ããªãçæãããã®æéãšæ£ç¢ºããç«¶ãç«¶æã§ããæ¥æ¬ãããã¯ãŒã¯ã»ãã¥ãªãã£åäŒïŒJNSA) ã® SECCONå®è¡å§å¡äŒã宿œãããSECCONCONãå
ã§ç¬¬äžå倧äŒãéå¬ãããŸããã HCCC / 人éCèšèªã³ã³ãã€ã©ã³ã³ãã¹ã 詳ããã¯ã以äžã® å
¬åŒèª¬æã¹ã©ã€ã ãåç
§ãã ããã ãã®å€§äŒã§ã¯ãã¥ãŒããªã¢ã«åé¡ãå«ããŠå
š20åãåºé¡ãããŠããŸããåçŽã«æ°åãæ»ãå€ãšããŠè¿ãåé¡ãããååæŒç®ãããŒã«ã«å€æ°å©çšãæåååŠçããããŒã¯ãŒã«ããFizzbuzzãªã©å
žåçãªããã°ã©ã ãå€ãåºé¡ãããŸããã 人éCèšèªã³ã³ãã€ã©ã³ã³ãã¹ã Problems ãã¥ãŒããªã¢ã« ãã¥ãŒããªã¢ã«åé¡ ãã¥ãŒããªã¢ã«åé¡ãè§£ããŠãããŸããããå®éã«äžåç®ãšããŠåºé¡ããã 究極ã®çåã®çããè¿ãããã°ã©ã ã顿ãšããŸãã //return_42.cint main(void) { return 42;} éçºç°å¢ã®æ§ç¯ ãããããåçŽãªããã°ã©ã ã§ããã°ãã®ãŸãŸããŒã¿ã«ãµã€ãã«å
¥åããŠãåé¡ãããŸããããè€éãªããã°ã©ã ã§ã¯ããŒã«ã«ç°å¢ã§ã®ãããã°ãå¿
é ã§ããããã§ã¯å
¬åŒãæäŸããŠããæ€èšŒç°å¢ãå©çšããŠéçºç°å¢ãæ§ç¯ããŸãã ~$ git clone https://github.com/HumanCCompilerContest/HCCC_local_env~$ cd HCCC_local_env~/HCCC_local_env$ docker build -t hccc_local_env .~/HCCC_local_env$ docker run -it --rm hccc_local_env ã¢ã»ã³ããªã³ãŒãã®äœæ éçºç°å¢ã§ã¯ vim ã emacs ãªã©ã³ãŒãã£ã³ã°ãšãã£ã¿ãå©çšã§ããŸãã ããã§ã¯ãvim ãå©çšã㊠ãã¡ã€ã« return_42.s ãæ°èŠäœæããå
ã®Cèšèªã®ãœãŒã¹ãã¡ã€ã«ãx86_64ã¢ãŒã¯ãã¯ãã£ã®ã¢ã»ã³ããªã«å€æããŠã³ãŒãã£ã³ã°ããŠãããŸãã root@a741545b3735 ~$ vim hccc/return_42.s âŒreturn_42.s .globl mainmain: push %rbp mov %rsp, %rbp mov $42, %rax mov %rbp, %rsp pop %rbp ret ã¢ã»ã³ãã«ãšå®è¡ éçºç°å¢ã§ã¯ ã¢ã»ã³ããªã³ãŒãã®ã¢ã»ã³ãã«ïŒå®è¡ããã³ãã³ããasm2binã ãçšæãããŠããŸãã äœæããã¢ã»ã³ããªã³ãŒããã¡ã€ã«ãåŒæ°ã«ããŠå®è¡ããŸãã root@a741545b3735 ~$ asm2bin hccc/return_42.s å®è¡åŸãè¿ãå€ãšããŠã42ããè¿ã£ãŠããããšã確èªã§ããŸããã root@a741545b3735 ~$ echo $?42 ãããã° éçºç°å¢ã§ã¯ PEDA æ¡åŒµããã gdb ãå©çšã§ããŸãã asm2bin å®è¡ãããšãå®è¡ãªããžã§ã¯ããã¡ã€ã«ã¯ã«ã¬ã³ããã£ã¬ã¯ãã«ãtmpããšããŠä¿åãããŠããŸãã®ã§ãããããããã°å®è¡ããŸãã $ gdb tmp$ break main$ run åœä»€ãã€ã³ã¿ååŸã®åœä»€ãã¬ãžã¹ã¿å€ãã¹ã¿ãã¯ãã¬ãŒã ãªã©ãå¯èŠåããããŠãããããå¹ççãªãããã°ãå¯èœã§ãã 人éã³ã³ãã€ã«ã®ç¥èãªãœãŒã¹ Cèšèªããx86_64ã¢ã»ã³ããªã«ã³ã³ãã€ã«ããããã«ã¯ãCèšèª(C99)ãCPUåœä»€(x86_64)ãABI (System V Application Binary Interface)ãã¢ã»ã³ãã©ç䌌åœä»€ã«ç¥èãå¿
èŠã§ãã 以äžãåèã«ãªãã€ã³ã¿ãŒããããªãœãŒã¹ãèšèŒããŸãã (â»ç«¶æäžã¯ã¬ã®ã¥ã¬ãŒã·ã§ã³ã§èªãããããã®ã®ã¿é²èЧå¯èœã§ã) å
¬åŒãªãœãŒã¹ å
¬åŒã¬ããžã㪠å
¬åŒãã¥ãŒããªã¢ã« C99 System V Application Binary Interface AMD64 Architecture Processor Supplement ãã®ä»ã®ãªãœãŒã¹ x86 Assembly Language Reference Manual : Assembler Directives AMD64 ABI ã®ç¹åŸŽ äœã¬ã€ã€ãç¥ããã人ã®ããã®Cã³ã³ãã€ã©äœæå
¥é
ã¯ããã« ãã€ããã§ã¯ãäžéšã®ã·ã¹ãã è·å¡ã«åããŠDaaSç°å¢ãæäŸããŠããããµãŒãã¹ã«ã¯ãAzure Virtual Desktopããæ¡çšããŠãããŸãã Microsoft瀟ãæäŸããAzure Virtual Desktopã¯ãªããš Windows 10 Enterprise Microdsoft 365 Business Premiumä»¥äž ã®ã©ã€ã»ã³ã¹ãããã°ã远å ã©ã€ã»ã³ã¹ã¯äžèŠã§å©çšãå¯èœãªDaaSãšãªã£ãŠããŸãã å ããŠãAzure AD P1以äžãããã°æ¡ä»¶ä»ãã¢ã¯ã»ã¹ã«ãã詳现ãªã¢ã¯ã»ã¹ã³ã³ãããŒã«ãã§ããŸãã ä»åã¯ããã®Azure Virtual Desktopãæ§ç¯ãå©çšã§ãããŸã§ã®éã®ããšå
±ã«ãã¡ãªãããã¡ãªãããå«ããŠå
±æã§ããã°ãšæããŸãã Azure Virtual DesktopãµãŒãã¹ãšã¯ïŒ MicrosoftãæäŸããã¯ã©ãŠãåã®DaaS(Desktop as a Service)ã¯ãå®ã¯2çš®é¡ååšããŠããŸãã 1. Windows 365 決ãããããã©ã³(ã¹ããã¯)ã®äžããå©çšãã§ãããã·ã³ãã«ãªæ§æã®DaaSã å©çšè
æ°ãå°ãªããå©çšèŠä»¶ãå°ãªãâŠãªã©ããšããããDaaSã䜿ããããç°å¢åããµãŒãã¹ã 24H365Dã§çšŒåãã£ã±ãªãã®ãããã©ã³ãã³ã°ã³ã¹ãã¯å®ããªãã 2. Azure Virtual Desktop æ§ã
ãªã«ã¹ã¿ãã€ãºãå©ç𿹿³ãæäŸããäžäœã®DaaSã 1å°ãè€æ°äººã§å©çšã§ããããã«ãã»ãã·ã§ã³ããã现ããªããªã·ãŒã«ã¹ã¿ãã€ãºãå¯èœã å©çšç¶æ³ã«å¿ããŠèªåã·ã£ããããŠã³ãå¯èœãªãããè²»çšãã³ã³ãããŒã«åºæ¥ãŸãã ããçšåºŠã®æ°ãå±éããå ŽåããèŠä»¶ãæç¢ºãªå Žåã¯ãã¡ãããªã¹ã¹ã¡ããŸãã Azure Virtual Desktopã®æ§æãçè§£ããã Azure Virtual Desktop(以äžãAVD)ã¯ãæ¢åã®VDIã·ã¹ãã ãšäŒŒãŠããéšåãå€ã
ãããŸãã æ§ç¯ãããŠã¿ãåã«ããŸãã¯ã©ã®ãããªèŠçŽ ããæãç«ã£ãŠããããææ¡ããŸãããã åŒçšå
ïŒ ãšã³ã¿ãŒãã©ã€ãºåã Azure Virtual Desktop - äž»èŠãªè«çã³ã³ããŒãã³ãéã®ãªã¬ãŒã·ã§ã³ã·ãã AVDã¯å€§ããã ã³ã³ãããŒã«ãã¬ãŒã³ãšåŒã°ãã管çç°å¢ ãã¹ããã·ã³ããããã¡ã€ã«ã®ä»®æ³ãã¹ã¯ãããå®è¡ç°å¢ 2ã€ã«åããããŸãã ã³ã³ãããŒã«ãã¬ãŒã³ã¯Microsoft瀟ã®ç®¡çäžã«ãããããå©çšåŽã§ã®èšå®ãéçšã¯äžèŠã§ããå®éã«ãèšå®ãéçšç®¡çãå¿
èŠãªã®ã¯ä»®æ³ãã¹ã¯ããããå®è¡ããããã®ç°å¢ã ãã§ããããªã³ãã¬ã§VDIç°å¢ãéçšããå Žåã管çç°å¢ã®ç¶æã ãã§ã倧å€ãªã®ã§ããã¯ãããããã§ããã ãŸããããçšåºŠã®èŠæš¡éã®äŒæ¥æ§ã§ããã°ExpressRouteãæ¢ã«ãå©çšã®å ŽåãããããšæããŸãã ãªã³ãã¬ïœAzureéãéåã§ã€ãªãå Žåã¯ãã¡ããå©çšããŸãããã éå»ãAVDãå©çšããã«ã¯ADïŒAADã®ãã€ããªããæ§æãå¿
é ã§ããããçŸåšã§ã¯ãAADã®ã¿ã®ç°å¢ããµããŒããããŠããŸãã ãã ããäžè¬çã«ã¯ãã€ããªããæ§æãå©çšããŠããç°å¢ã®æ¹ãå€ããšæããŸãã®ã§ãä»åã¯ä»®æ³ãã·ã³ããªã³ãã¬ADã«åå ãããæ¹åŒã§èª¬æããããŸãã æ§ç¯ãããŠã¿ãã ãããŸã§æŠèŠã説æããããŸããããããããã¯å®éã«AVDãæ§ç¯ãä»®æ³ãã¹ã¯ããããå©çšããŠã¿ãŸãããã ãŸããä»åã®åææ¡ä»¶ãšããŠã¯äžèšæ§æã§æ§ç¯ã«èšã¿ãããšæããŸãã ã»ExpressRouteãå©çšãããªã³ãã¬ãšã®çžäºéä¿¡ãå¯èœã§ããã»ãªã³ãã¬äžã«Active DirectoryãååšããŠããã»ãªã³ãã¬äžã«Azure AD ConnectãååšããŠãã(ADâAADãåææžã¿ã§ãã) â ãªãœãŒã¹ã°ã«ãŒããäœã Azureäžã«äœæãããåã³ã³ããŒãã³ããåããŸãšããããããªãœãŒã¹ã°ã«ãŒãããäœæããŸãã ãªãŒãžã§ã³ã¯ãæ±æ¥æ¬ãããè¥¿æ¥æ¬ãã®ã©ã¡ãããéžæããŸãããã â¡ä»®æ³ãããã¯ãŒã¯(VNET)ãäœã AVDç°å¢ã§ä»®æ³ãã·ã³ããã¡ã€ã³ã«åå ã§ããããã«ããªã³ãã¬ADã®åå解決ãå¯èœãªãµãŒããDNSã«æå®ããŸãããã ADãµãŒããDNSãå
ŒããŠããå Žåã¯ãADãµãŒããæå®ããŠããããšè¯ãã§ãããã ãã®ã»ããä»®æ³ãããã¯ãŒã¯ã§ã¯ãµããããã®èšå®ãå¯èœãšãªã£ãŠããŸãã ãããã¯ãŒã¯ã®ç°å¢ãèŠä»¶ã«å¿ããŠèšå®ãè¡ã£ãŠãã ããã â¢ãã¹ã¿ãŒã€ã¡ãŒãžã®äœæ FATã»VDIãšãã«å±éã§ã¯ããªãã¿ã®ãã¹ã¿ãŒã€ã¡ãŒãžãäœæããŠãããŸãã ãã®ãã¹ã¿ãŒã€ã¡ãŒãžãå
ã«ãä»®æ³ãã·ã³ãå±éããŠãããŸãã ãŸãã¯ããã¹ã¿ãŒã€ã¡ãŒãžãšãªãAzureVMãäœæããŸãããã AVDåºææ©èœã§ããããã«ãã»ãã·ã§ã³ãã䜿ãå Žåã¯ãã€ã¡ãŒãžããMulti-session VMãããå±éããŸãããã ã·ã³ã°ã«ã»ãã·ã§ã³ã®å Žåã¯ãWindows10ã§ããã°ç¹ã«æå®ã¯ãããŸããã å±éåŸã¯ãéåžžã®Windowsãã¹ã¿ãšåæ§ã«OSã«ã«ã¹ã¿ãã€ãºãæœããŠãããŸãã â»AzureVMã®Windows 10ã¯è±èªãããã©ã«ãã®ãããæ¥æ¬èªåãå¿
èŠãªå Žåã¯OSã§èšå®å€æŽããã¹ãã§ãã ãã¹ã¿ãŒã€ã¡ãŒãžã§ããçšåºŠã«ã¹ã¿ãã€ãºãå®äºããããsysprepãè¡ããŸãã AVDã®sysprepã§ã¯ãå¿çãã¡ã€ã«ããµããŒããããŠããŸããã åŒç€Ÿã§æ€èšŒããéããå¿çãã¡ã€ã«ãå©çšãããšå±éã«å€±æããŸãã ãã®ããããããã¡ã€ã«ã®ã³ããŒãå¿çãã¡ã€ã«ã§å®æœã§ããŸããã å¿çãã¡ã€ã«ã䜿ããªããããã¡ã€ã«ã³ããŒèšå®ãäºåã«è¡ãããšã§å®çŸã¯å¯èœã§ãã â»AVDã®ãµããŒã察象å€ãšãªãå¯èœæ§ãé«ããããæ¬èšäºã§ã¯èšåèŽããŸããã sysprepãŸã§å®äºããããAzureäžã§ã€ã¡ãŒãžåããããã«ããã£ããã£ããè¡ããŸãããã ããã§ãã¹ã¿ãŒã€ã¡ãŒãžã®å®æã§ãã â¢ãã¹ãã°ã«ãŒãã®äœæ ãããŸã§æ¥ãããããšäžæ©ã§ãã AVDäžã®ä»®æ³ãã·ã³ãæããããã¹ãã°ã«ãŒãããäœæããŸãããã ãã«ãã»ãã·ã§ã³ã®ä»®æ³ãã·ã³ã®å Žåã¯ãããŒã«ããéžæããŸãã ãå人çšããéžæããå Žåã¯ãä»®æ³ãã·ã³ãšå©çšè
ã¯1:1ã«ãªããŸãã ãã¹ãããŒã«ãäœãã¿ã€ãã³ã°ã§ãåæã«AVDã§å©çšããä»®æ³ãã·ã³ãäœæããããšãã§ããŸãã å
ã»ã©äœã£ããã¹ã¿ãŒã€ã¡ãŒãžããä»®æ³ãã·ã³ãå±éããããã«ãå
šãŠã®ã€ã¡ãŒãžã衚瀺ããéžæããŸãããã ããã€ã¢ã€ãã ãã確èªããããšã§ããã£ããã£ãããã¹ã¿ã€ã¡ãŒãžãéžæã§ããŸãã ããšã¯ãã¡ã€ã³åå ããããã®æ
å ±ãä»®æ³ãããã¯ãŒã¯ã®èšå®ãããå
¥ããŠãããã°å®æã§ãã ååäœæã®å Žåã¯ãã¯ãŒã¯ã¹ããŒã¹ãããã§äžç·ã«äœæãããšå±éãæ¥œã§ãã ç¡äºå±éãå®äºãããšããã¹ãããŒã«ã«ä»®æ³ãã·ã³ãäœæãããŸãã æåŸã«ãä»®æ³ãã·ã³ãå©çšã§ãããŠãŒã¶ãèšå®ããŠãããŸãã ã·ã³ã°ã«ã»ãã·ã§ã³ã®å Žåã¯åè¿°ã®éã1:1ã§ããããã«ãã»ãã·ã§ã³ã§ã¯è€æ°äººèšå®ãå¯èœã§ãã ã·ã³ã°ã«ã»ãã·ã§ã³ã®å Žåâ ãã«ãã»ãã·ã§ã³ã®å Žåâ æ¥ç¶ããŠã¿ãã ãããŸã§ã®æºåãã§ããããããããæ¥ç¶ãå¯èœã«ãªããŸãã AVDã«ã¯2çš®é¡ã®æ¥ç¶æ¹æ³ãããã ãã©ãŠã¶ããã®ã¢ã¯ã»ã¹ å°çšRDPã¢ããªããã®ã¢ã¯ã»ã¹ ãå¯èœã§ãã ãã ãããã©ãŠã¶ããã®ã¢ã¯ã»ã¹ã¯ã¬ã¹ãã³ã¹ãæªãã®ã§ãªã¹ã¹ã¡ããŸããã ä»åã¯å°çšã¢ããªããæ¥ç¶ããŠã¿ãŸãã å°çšã¢ããªã«AzureADã¢ã«ãŠã³ãã§ãµã€ã³ã€ã³ããããšãå²ãåœãŠãè¡ã£ãä»®æ³ãã·ã³ã衚瀺ãããŠããŸããã éžæããŠã¿ããšãã®ããã«ä»®æ³ãã·ã³ã«æ¥ç¶ãã§ããŸããç°¡åã§ããïŒïŒïŒïŒ â»ãªã³ãã¬ADãšAADã®ãã€ããªããç°å¢ã®å Žåãå±éæã«èªåçã«ADåå ãè¡ã£ãŠãããŸãã ããã®ããä»®æ³ãã·ã³èªäœãžã®ãã°ã€ã³ã«ã¯ãªã³ãã¬ADã¢ã«ãŠã³ããå©çšããŸãã éçšç·š ãããŸã§ã§ããªããšãªãäœãæ¹ãäœ¿ãæ¹ã®ã€ã¡ãŒãžãä»ããããšæããŸãã ãã ãå®éã«ã¯ãããå°ãäœããã¿ãå¿
èŠã§ãã äŸãã°ã ãã®ãµãŒãã¹ã¯åŸé課éå¶ã§ãã ãã®ãããä»®æ³ãã·ã³ã¯äœ¿ã£ãåã ã課éããç¶ããŸãã ããã§éèŠãªã®ã¯ãã·ã£ããããŠã³ãã ãã§ã¯èª²éããç¶ããŠããŸããŸãã 忢 (å²ãåœãŠè§£é€) ã¯ãä»®æ³ãã·ã³ã皌åããç©çãã¹ã ãµãŒããŒããå²ãåœãŠãããŠãããªãœãŒã¹ã®å²ãåœãŠãè§£é€ããæäœã§ãããèµ·åã¯ç©çãã¹ããµãŒããŒãããªãœãŒã¹ãå²ãåœãŠãæäœã§ãã åãããã€ãšç°ãªããæç€ºçã«å¥ã®ç©çãã¹ã ãµãŒããŒã§ãããã€ãè¡ãããã®ææ®µã§ã¯ãããŸããããèµ·åã«ãã£ãŠä»®æ³ãã·ã³ããããã€ãããç©çãã¹ããµãŒããŒã¯ååãšç°ãªãå Žåãã»ãšãã©ã«ãªããŸãã 忢 (å²ãåœãŠè§£é€) ã§ã¯ãä»®æ³ãã·ã³ãšããŠã®èª²éã¯ããããŸããã(â» ãã£ã¹ã¯ã®èª²éã¯ããããŸãã) åŒçšå
ïŒ Azure ä»®æ³ãã·ã³ã«ãããæäœ (åèµ·åã忢/èµ·åãåãããã€ãåé©çš) ã«ã€ã㊠ã€ãŸãã¯ãä»®æ³ãã·ã³åŽã§ã·ã£ããããŠã³ããããšããã§ã AzureåŽã§å²ãåœãŠãè§£é€ããªããã°èª²éããç¶ãã ãšããããšã§ããã 幞ããAzure Virtual Desktopã«ã¯ãã¹ã±ãžã¥ãŒã«ã«å¿ããŠèªåçã«å²ãåœãŠãè§£é€ãããä»çµã¿ããããŸãã å©çšæéãæ±ºãŸã£ãŠããç°å¢ã§ããã°ãã®å®è£
ã ãã§è²»çšãæããããŸãã ãã ããã¹ã±ãžã¥ãŒã«å€ã®ã¡ã³ããã³ã¹ã§äœ¿ã£ãŠããå Žåãªã©ã§ãæ¥ã«å²ãåœãŠãè§£é€ããããšå°ããŸãããã ãããã£ãå Žåã¯ãä»®æ³ãã·ã³ãžã®ã»ãã·ã§ã³æç¡ã宿çã«AzureåŽã§å€æãèªåã§å²ãåœãŠãè§£é€ããä»çµã¿ãå°å
¥ããå¿
èŠããããŸãã åãããŠã ARMãã³ãã¬ãŒããå©çšããªãå Žåãã¹ãåã®èŠåã«èéãå©ããŸããã ãã®äºã€ã®å®è£
ã¯ãã€ã³ã¿ãŒãããäžã«å
é§è
ã®æ
å ±ããããŸãã®ã§ãåèã«ããŠã¿ãŠãã ããã ãŸãšã ADã»AADã®ãã€ããªããç°å¢ãã€ç©çãªãœãŒã¹ãæããªãVDI ãšããç¹ã¯éåžžã«é
åçã§ãã ãã ãã现ããã«ã¹ã¿ãã€ãºãé£ããã®ã¯åŠããŸããããã®ãããã¯ãCitrix with AVDãããHorizon Cloud with AVDããæŽ»çšãããšããªã³ãã¬VDIãšåãæèŠã§éçšãã§ãããããããŸããã ãšã¯ãããåŒç€Ÿç°å¢ã§ã¯ç€Ÿå¡çšã®FAT PCãšåæ§ã®ã«ã¹ã¿ãã€ãºãå®çŸã§ããŠããŸãããæ¬çªéçšç°å¢ã¯äžäººã§æ§ç¯ããŠããŸãã å
ã
Azureã«ç¥èŠãããããã¹ã¿å±éã®çµéšããããVDIæ§ç¯ã«æºãã£ãããšããããªã©ããªãããã®æ¡ä»¶ãããã°ãæµæãªãæ§ç¯éçšãå¯èœããšæãããŸãã PCã®æã¡åºããã§ããªãç°å¢ãããå Žåããã®DaaSã®ä»çµã¿ã¯éåžžã«é
åçããšæããŸããæ¢ã«M365ã®è©²åœã©ã€ã»ã³ã¹ããæã¡ã®æ¹ã¯ãæ¯é掻çšããŠã¿ãŠã¯ãããã§ããããã
ã¯ããã« ãã€ããã§ã¯ãããŒãžããªWordPressåºç€ãSMEWãã瀟å
åãã«æäŸãããŠãããWordPressã䜿ã£ããµã€ãã®å€ããSMEWäžã§çšŒåããŠããŸãã ãåç¥ã®éããWordPressã¯å€ãã®è匱æ§ãå ±åãããŸããè匱æ§ã«è¿
éã«å¯Ÿå¿ã§ãããããWPScanãšElastic Stackã䜿ã£ãŠãSMEWäžã§çšŒåããŠããåãµã€ãã®WordPressè匱æ§ãèªåã§ã¹ãã£ã³ããã·ã¹ãã ãéçºããŸãããæ¬èšäºã§ç°¡åã«ç޹ä»ããŸãã âŒSMEWã«ã€ããŠã®è©³çްã¯ãã¡ããã芧ãã ãã ###card_post_id=1249### WPScanãšã¯ ãªãŒãã³ãœãŒã¹ã®WordPressã®è匱æ§ã¹ãã£ã³ããŒã«ã§ãã WPScanãå©çšããŠã¿ã WPScan㯠Kali Linux ã«æšæºã§å
¥ã£ãŠããŸãã wpscan --url "https://hogehoge/" --api-token "{token}" -format json ãªãã·ã§ã³ url ãµã€ãã®URL api-token WPScanã«ãŠãŒã¶ç»é²ããæã«çºè¡ãããããŒã¯ã³ format åºåçµæã®ãã©ãŒããã å®è¡çµæ(äžéšæç²) ã¹ãã£ã³çµæã®ãvulnerabilitiesãã®ãã£ãŒã«ãã«ãè匱æ§åãCVEãFixã®ããŒãžã§ã³çã®è©³çްæ
å ±ãåºåãããŸãã äžèšãã¹ãã£ã³çµæãããAll in One SEO Packãšãããã©ã°ã€ã³ã«è匱æ§ãããããšãããããŸãã âŒã¹ãã£ã³çµæ { "main_theme": null, "plugins": { "all-in-one-seo-pack": { "confidence": 30, "confirmed_by": {}, "directory_listing": null, "error_log_url": null, "found_by": "Comment (Passive Detection)", "interesting_entries": [], "last_updated": "2022-03-30T17:01:00.000Z", "latest_version": "4.1.9.4", "location": "https://hogehoge/webroot/plugins/all-in-one-seo-pack/", "outdated": true, "readme_url": null, "slug": "all-in-one-seo-pack", "version": { "confidence": 60, "confirmed_by": {}, "found_by": "Comment (Passive Detection)", "interesting_entries": [ "https://hogehoge/, Match: 'All in One SEO Pack 2.6.1 by'" ], "number": "2.6.1" }, "vulnerabilities": [ { "fixed_in": "3.6.2", "references": { "cve": [ "2020-35946" ], "url": [ "https://www.wordfence.com/blog/2020/07/2-million-users-affected-by-vulnerability-in-all-in-one-seo-pack/" ], "wpvulndb": [ "528fff6c-54fe-4812-9b08-8c4e47350c83" ], "youtube": [ "https://www.youtube.com/watch?v=2fqMM6HRV5s" ] }, "title": "All in One SEO Pack < 3.6.2 - Authenticated Stored Cross-Site Scripting" } ] } }, "requests_done": 186, "start_memory": 52584448, "start_time": 1648701772, "stop_time": 1648701796, "target_ip": "198.51.100.0", "target_url": "https://hogehoge/", "used_memory": 219262976, "used_memory_humanised": "209.105 MB" -ç¥-} Elastic Stackãšã¯ ElasticsearchãKibanaãBeatsãLogstashã®ç·ç§°ã ãã°ããªã¢ã«ã¿ã€ã ã«æ€çŽ¢ãåæãå¯èŠåããããšãã§ããŸãã Kibanaã®ã¢ã©ãŒãæ©èœãå©çšããŠãç¹å®ã®æ¡ä»¶ã®ãã°ããã£ãããSLACKçã«éç¥ã§ããŸãã èªååã®åãçµã¿ åŠçã®æµã SMEWäžã§ç®¡çããããµã€ãäžèЧãååŸããDynamoDBã«æ ŒçŽããã ã¹ãã£ã³å¯Ÿè±¡ãã¥ãŒã«å
¥ãã ECSTaskãèµ·åããã¹ãã£ã³ãå®è¡ããã è匱æ§ããããã°ãæ€ç¥ããããSlackã«éç¥ããã æ§æå³ éç¥çµæïŒäŸïŒ ãŸãšã ä»åŸãSMEWã ãã§ãªãããã€ããã®å
šãŠã®ãµã€ãã®ã»ãã¥ãªãã£ãé«ããããã®æè¡éçºã«åãçµãã§ãããŸãã
ã¯ããã« ããã«ã¡ã¯ãAIã·ã¹ãã éšã®S.Tã§ãã AIã¢ãã«ãäœãããã®åŠç¿ç°å¢ãšããã°ãJupyterNotebookãæãæµ®ãã¹ãæ¹ãå€ããšæããŸããã»ã«ã«ã³ãŒããæžããé æ¬¡å®è¡ããŠçµæã確èªããªããã³ãŒãã£ã³ã°ãé²ããããšãã§ããã®ã§ãç ç©¶éçºã«ã¯æã£ãŠããã®ããŒã«ãšãªã£ãŠããŸãã ãã ãAIã«é¢ããæ¥åãšãªããšãAIã¢ãã«ã®åŠç¿ã®ããšããã®AIã¢ãã«ã®äºæž¬çµæããèªç€Ÿã®ãµãŒãã¹ãæ¥åæ¹åã«æŽ»çšãããããŒãéçšãããšãããŸã§ãã»ãããšãªããŸããããžãã¹çãªããŒãºã«ãã£ãŠã宿ãããã§å®è¡ããããã¢ãã«ã®äºæž¬æ©èœããµãŒãã¢ããªãšããŠæäŸããå ŽåããããŸãããããè¡ãå ŽåãJupyterNotebookã§ã¯å°ã
ããã«ããããªããšæããŸãã Vertex AI Training ã§ããããã£ãããŒãºã解決ããããã«ãGoogle Cloud Platform(以éGCP)ã§ã¯ã Vertex AI ãšããAIã«ç¹åãããããã¯ããéçºãããŠãããŸãããã®ãµããããã¯ãã§ãã Vertex AI Training ãçšãããšãGCPã®ãããŒãžããªç°å¢ã§ãåŠç¿ããã€ããŒãã©ã¡ãŒã¿ãã¥ãŒãã³ã°ãè¡ã£ããããã®ã¢ãã«ã®äºæž¬æäŸããããã®ç°å¢ãæ¯èŒçç°¡åã«äœããŸãã Vertex AI Trainingã§ã¯ã AutoML ãšãããã³ãŒãã£ã³ã°ããããšãåŠç¿ãã§ããæ¹æ³ãšã ã«ã¹ã¿ã ãã¬ãŒãã³ã° ãšãããèªåã§ããã°ã©ã ãçšæããŠåŠç¿ãå®è¡ããæ¹æ³ããµããŒããããŠãããŸããä»åã¯ãDockerã³ã³ããã䜿ã£ã ã«ã¹ã¿ã ãã¬ãŒãã³ã° ã®æ¹æ³ãè¡ã£ãŠã¿ãŸãã ä»å䜿çšããåŠç¿ã¿ã¹ã¯ ä»åã¯ããµã³ãã«ã§ãã®ã§ãæ©æ¢°åŠç¿ã®HelloWorldãšãèšãããã¢ã€ãªã¹ããŒã¿ã®åé¡ã«ææŠããŠã¿ãŸããããã¢ãã«ã¯ããµããŒããã¯ã¿ãŒãã·ã³ã«ããåé¡åšã詊ããŠã¿ãŸãã (ããã¡ãªã¿ã«èè
ã¯ããŸãæ©æ¢°åŠç¿ã¢ãã«ã®è©³ããä»çµã¿ã«ã€ããŠã¯è©³ãããªãã®ã§ããããããã) ããŒã¿ BigQueryã® iris_data ãšããããŒã¿ã»ããã« iris_table ãšããããŒãã«ãçšæããŸãããååã¯ãããªæãã§ãã åå å 説æ sepal_length___cm__ FLOAT ããã®é·ã sepal_width___cm__ FLOAT ããã®å¹
petal_length___cm__ FLOAT è±ã³ãã®é·ã petal_width___cm__ FLOAT è±ã³ãã®å¹
label (ä»åã®äºæž¬å¯Ÿè±¡) INT ã¢ã€ã¡ã®çš®é¡(0, 1, 2) åŠç¿ã³ãŒããæžã ãã£ã¬ã¯ããªé
眮 ãã£ã¬ã¯ããªé
çœ®ã¯æçµçã«ä»¥äžã®ããã«ãªããŸãã .âââ custom_trainingâ âââ Dockerfileâ âââ Pipfile # ç°å¢æ§ç¯çšâ âââ Pipfile.lock # ç°å¢æ§ç¯çšâ âââ src # åŠç¿çšãœãŒã¹ã³ãŒãâ âââ train.pyâââ docker-compose.yml ç°å¢æ§ç¯ ãŸãã¯ã custom_training ãšãããã£ã¬ã¯ããªãäœããŸãããã®äžã«ã src ãšãããã©ã«ããäœããŸãã mkdir custom_training && cd $_mkdir src ããŸã custom_training ãã£ã¬ã¯ããªã«ããŸãã®ã§ãããã§ pipenv ã«ããç°å¢æ§ç¯ã pipenv install scikit-learn google-cloud-bigquery pandas click ãããšããããªæãã«ãªããŸãã .âââ custom_training âââ Pipfile âââ Pipfile.lock âââ src ã§ã¯ãsrcã®ãªãã« train.py ãäœæããŠãåŠç¿ã³ãŒããæžããŸãã (以éãGCPãããžã§ã¯ãå㯠<YOUR_PROJECT_ID> ã§äŒããŠããŸã) from __future__ import annotationsimport osimport pickleimport refrom dataclasses import dataclassfrom typing import Unionimport clickfrom google.cloud import bigqueryfrom sklearn.svm import LinearSVCfrom sklearn.model_selection import train_test_split# Vertex AI Trainingã®å Žåã¯ãå®éã«åŠç¿ãå®è¡ãããGCPãããžã§ã¯ãIDã# CLOUD_ML_PROJECT_IDãšããç°å¢å€æ°ã«æ ŒçŽãããif os.getenv('CLOUD_ML_PROJECT_ID'): client = bigquery.Client(project=os.getenv('CLOUD_ML_PROJECT_ID'))else: client = bigquery.Client()@dataclassclass GCSPath(): bucket: str key: str @classmethod def get_fuse_directory_path_from_gcs_uri(cls, gcs_uri) -> str: """ GCSã®URLãåãåã£ãŠããã®å ŽæãCloud Storage FUSEçµç±ã§èŠãããã®ãã¹ãè¿ãã """ gcspath = cls.get_gcspath_from_gcs_uri(gcs_uri) return f"/gcs/{gcspath.bucket}/{gcspath.key}" @classmethod def get_gcspath_from_gcs_uri(cls, gcs_uri) -> GCSPath: """ GCSã®URL衚èšãããã±ããåãšããŒåãæœåºããŠãGCSPathãªããžã§ã¯ãã«ããŠè¿ã """ pattern = "gs://(?P<bucket>[^/]+)/(?P<key>.+)" m = re.match(pattern, gcs_uri) if m: bucket = m.group("bucket") key = m.group("key") return cls(bucket=bucket, key=key) else: raise ValueError(f"{pattern} is invalid GCS URI.")def get_gcsfuse_model_save_dir() -> Union[str, None]: """ GCSäžã«ã¢ãã«ãä¿åããçšã®ãã£ã¬ã¯ããªãååŸã Vertex AI Trainingäžã§å®è¡ããŠããªãå Žåã¯Noneãè¿ãã Returns: Union[str, None]: GCSäžã«ã¢ãã«ãä¿åããçšã®ãã£ã¬ã¯ããªã Vertex AI Trainingäžã§å®è¡ããŠããªãå Žåã¯Noneãè¿ãã Note: Vertex AI Trainingã§å®è¡ãããšãã èªåçã«ç°å¢å€æ°AIP_MODEL_DIRã«ã¢ãã«ã®ä¿åå
ã®GCSã®URLãæž¡ãããã """ model_save_dir = os.getenv("AIP_MODEL_DIR") if model_save_dir: return GCSPath.get_fuse_directory_path_from_gcs_uri(model_save_dir)def get_training_data(): """åŠç¿ããŒã¿ãDataFrameã§ååŸãã""" df = client.query('SELECT * FROM `<YOUR_PROJECT_ID>.iris_data.iris_table`').to_dataframe() return dfx_col = [ "sepal_length__cm_", "sepal_width__cm_", "petal_length__cm_", "petal_width__cm_"]y_col = "label"@click.command()@click.option("--model-save-dir", type=str, help="åŠç¿ã¢ãã«ã®ä¿åå
")def train(model_save_dir: Union[str, None] = None): """ åŠç¿ãå®è¡ããã¢ãã«ãä¿åããã Args: model_save_dir (Union[str, None], optional): ããŒã«ã«ç°å¢ã§å®è¡ãããšãã¯æå®ãå¿
èŠã§ããã Vertex AI Trainingã§å®è¡ãããšãã¯æå®ã¯äžèŠã """ # ã¢ãã«ãäœæ model = LinearSVC() # åŠç¿ããŒã¿ãååŸãã train_data = get_training_data() X, y = train_data[x_col], train_data[y_col].tolist() X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) # ãããåŠç¿! model.fit(X_train, y_train) # ã¢ãã«ã®ä¿åå
ãååŸããã # Vertex AI Trainingã§åŠç¿ããŠããå Žåã¯GCS Fuseã§ã¢ã¯ã»ã¹å¯èœãªãã£ã¬ã¯ããªã # ããŒã«ã«å®è¡ã®å Žåã¯ãåŒæ°ã®model_save_dirã䜿çšãããã model_save_dir = get_gcsfuse_model_save_dir() or model_save_dir if not model_save_dir: raise ValueError("ã¢ãã«ã®ä¿åå
ãèšå®ãããŠããŸããã") # ã¢ãã«ãä¿åãã if not os.path.exists(model_save_dir): os.makedirs(model_save_dir) model_save_path = f"{model_save_dir}/model.p" with open(model_save_path, "wb") as fp: pickle.dump(model, fp)if __name__ == "__main__": train() ãããã«åãããŠã¿ãŸãã # BigQueryã®ããŒãã«ãååšãããããžã§ã¯ããããã©ã«ããããžã§ã¯ãã«ããgcloud config set project <YOUR_PROJECT_ID># åŠç¿ãå®è¡ããpipenv run python src/train.py --model-save-dir $(pwd) åŠç¿ãå®è¡ãã㊠model.p ãšãããã¡ã€ã«ãçæãããŸããã Dockerã€ã¡ãŒãžãäœã ä»åã¯ã«ã¹ã¿ã ã³ã³ããã䜿ã£ãŠVertex AI Trainingã§åŠç¿ããŸãã®ã§ãDockerã€ã¡ãŒãžãäœæããŸãã custom_training/ ãã£ã¬ã¯ããªå
ã« Dockerfile ãäœããŸãã FROM python:3.9.6COPY ./Pipfile.lock /app/COPY ./src /app/srcWORKDIR /appRUN pip install pipenvRUN pipenv sync# ENTRYPOINTã§åŠç¿å®è¡ã¹ã¯ãªãããéå§ããããã«ããïŒENTRYPOINT pipenv run python src/train.py docker-compose.yml ãã custom_training ã®èŠªãã£ã¬ã¯ããªã«äœããŸãã services: backend: image: vertex-custom-training/iris_data build: context: ./custom_training ãã«ã docker compose build ãªããžããªã«ããã·ã¥ Vertex AI TrainingããèŠããäœçœ®(GCPç°å¢äžããDocker Hub)ã«ãDockerã€ã¡ãŒãžãããã·ã¥ããŸãããã ä»åã¯GCPå
ã®ãã©ã€ããŒããªã³ã³ããã¬ãžã¹ããªã§ããGoogle Container Registry(GCR)ã«ããã·ã¥ããŸãã # GCRã®èªèšŒãã«ããŒãèšå®ãgcr.ioã«èªèšŒã§ããããã«ãªãgcloud auth configure-docker# ããšã¯pushããdocker tag vertex-custom-training/iris_data:latest gcr.io/<YOUR_PROJECT_ID>/vertex-custom-training/iris_data:latestdocker push gcr.io/<YOUR_PROJECT_ID>/vertex-custom-training/iris_data:latest Vertex AI Trainingã§å®è¡ãã æå
ç°å¢çšã«ã google-cloud-aiplatform ãã€ã³ã¹ããŒã«ããŸãã pipenv install --dev google-cloud-aiplatform custom_training å
ã«ã submit-training-job.py ãäœæããŸãã from google.cloud import aiplatformdisplay_name = "verify-vertex-ai-training-iris"# ãã£ãäœã£ãDockerã€ã¡ãŒãžã®URLimage_uri = "gcr.io/<YOUR_PROJECT_ID>/vertex-custom-training/iris_data:latest"# ã¹ããŒãžã³ã°(ã¢ãã«ã眮ããããã§ãã¯ãã€ã³ãããããšãã)çšã®ãã±ããã1ã€äœãstaging_bucket = "gs://<YOUR_BUCKET_NAME>/verify-vertex-ai-training-iris/staging"custom_job = aiplatform.CustomContainerTrainingJob( display_name=display_name, container_uri=image_uri, staging_bucket=staging_bucket)custom_job.run( machine_type="e2-standard-4") ãã®ã¹ã¯ãªãããå®è¡ãããšãVertex AI Trainingäžã§åŠç¿ãå®è¡ã§ããŸãã pipenv run submit-training-job.py åŠç¿ãå®äºãããšã submit-training-job.py å
ã§å€æ° staging_bucket ã«èšå®ããGCSã®å Žæã«ãã¢ãã«ãä¿åãããŠãããšæããŸãã ææ³ãšãŸãšã ä»åã¯æ®éã«ã¢ãã«åŠç¿ã®ã¿ãè¡ãéšåãäœã£ãŠã¿ãŸããã ã¢ã€ãªã¹ããŒã¿ã®ãããªå°ããªããŒã¿ã§ããã°ããã¹ã¯ãããäžã§ãå®è¡ã§ããŠããŸããŸãããå®éãã£ãšå€§ããªããŒã¿ãæ±ãå Žåã¯ããã£ãšå€§ããªèšç®ãªãœãŒã¹ãå¿
èŠã«ãªãå ŽåããããŸãã 倧ããªèšç®ãªãœãŒã¹ã§Notebookãæåã§å®è¡ããããšãã§ããŸãããVertex AI Trainingã®ãããªãããŒãžãåŠç¿ç°å¢ã䜿ããšãåŠç¿ãçµãããšäœ¿ãããèšç®ãªãœãŒã¹ãåæã«èœã¡ãã®ã§ãå®å¿ã ãã³ã¹ãå¹çããããšæããŸãã ãŸãããããŒãé·ããªããããªã®ã§ä»åã¯è§Šããªãã£ãã®ã§ããã忣åŠçããã€ããŒãã©ã¡ãŒã¿ãã¥ãŒãã³ã°ããã³ã¹ãå¹çããå®è¡ã§ããããäºæž¬ãµãŒãã¹ãšããŠæäŸããå Žåã®ã³ã³ãããç°¡åã«äœããã®ã§ãæ©äŒãããã°ãã£ãŠã¿ãããšæããŸãã â»ãµã ãç»åã§å©çšããŠããããŽã¯Vertex AI TrainingããåŒçš
ã¯ããã« ãã®èšäºã¯ãèªåãå¹çåãããŠããããã§GASãçšããã®ã§ãGASã®äœ¿ãæ¹ãèŒãããã®ã§ãã ä»åã®å
容ãšããŠã¯ãã¹ãã·ã®å
å®¹ãæŽåœ¢ããŠTeamsã«éç¥ãããšãããã®ã«ãªããŸãã æºå ãŸããGASã§æŽåœ¢ããå
容ãTeamsã«éãããã«æºåãå¿
èŠã«ãªããŸãã ãŸãã¯ãTeamsäžã«ãã£ãã«ãçšæããŸãã çšæããããäžç¹ãªãŒããŒããã³ãã¯ããéžæããIncoming WebHooksãã¯ãªãã¯ããŸãã Incoming WebHooksã®ã»ããã¢ãããäœæãããšãURLãçºè¡ãããã®ã§ã倧åã«ãšã£ãŠãããŸãããã ããã§æºåã¯çµããã§ãã å
容 ãŸãã¯ãTeamsã«å
容ãéã颿°notificationãäœæããŸãã function notification(title,completetext){ var payload = { 'title' : title , //æçš¿ã®é¡å 'text' : completetext //æçš¿ã®æ¬æ }; var options = { 'method' : 'post', 'contentType' : 'application/json', 'payload' : JSON.stringify(payload), // jsã®å€ãJSONæååã«å€æãã }; ãvar url = 'URL'; //ããã»ã©å€§åã«ãšã£ãŠãããURLãèšå
¥ UrlFetchApp.fetch(url, options); //éã } äžèšã®ã³ãŒããç°¡åã«èª¬æãããšãéç¥ããå
容ãTeamsã«é©åã«è¡šç€ºããéç¥ã§ããããã«ããã³ãŒãã§ãã ã³ãŒãå
ã«ãããtitle,textã«ã€ããŠã¯æ¬¡ã®é¢æ°ã§äžèº«ãå
¥ããŸãã æ¬¡ã«ãã¹ãã·ã®å
容ãèªã¿ãã¿ãå
容ãTeamsäžã§è¡šç€ºã§ããããã«ããgetmessage颿°ãäœæããŸãã function getmessage(content){ console.log(JSON.stringify(content)); //ã¡ãã»ãŒãžã衚瀺ããã//ã¹ãã·é¢é£ var ss = SpreadsheetApp.openById("ãã©ã«ãID");//ã¹ãã·ã®ãã©ã«ãIDãå
¥å var sheet = ss.getSheetByName('éç¥å
容'); //èªã¿èŸŒãã¹ãã· var range = sheet.getDataRange(); //å
šç¯å²ãæå® var values = range.getValues();//ããŒã¿ååŸ â äžèšã®ã³ãŒãã®SpreadsheetApp.openByIdã®åŸã«ã¹ãã·ã®ãã©ã«ãIDããããŸãã â¡getSheetByNameã®åŸã«ã¯ã·ãŒãåããããŸãã ã§ã¯ãå
容ã®äœæã«ãããŸãã ä»åã¯ã¹ãã·ã«ããå
容ããææ¥ã®äºå®ãæœåºããåºåããå
容ã«ããŸãã //æ¥ä»é¢é£ var date = new Date(); //çŸåšã®æ¥æ¬ã®æ¥ä»ãååŸ var onedate = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1); //1æ¥åŸã«ãã var twodate = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 2); //2æ¥åŸã«ãã//ã¿ã€ãã« var title = 'ææ¥ã®äºå®'//æ¬æ var row = sheet.getLastRow(); //æçµè¡ã®ååŸ var text = ''; for (var i=1; i<row; i++){ var text1 = ''; if(values[i][0] >= onedate && values[i][0] < twodate){ text1 = text1 + '\n\n<br><u>**' + 'ã»åå:'+ values[i][1] + '**</u>'; text1 = text1 + '\n\nã»æéïŒ' + values[i][3]; text1 = text1 + '\n\nã»å
容ïŒ' + '**'+values[i][2] + '**'; text = text + text1; } } if(text == ''){ text = 'ææ¥ã®äºå®ã¯ãããŸãã' } notification(title,text);} Teamsã«éç¥ãããŸããã ãããã« ä»åã¯ç°¡åãªåºåã«ããŸãããããã£ãšããããæŽ»çšã§ããŸãã ãŸããç§èªèº«ããŸã ãŸã åå¿è
ãªã®ã§ãã䟿å©ã«äœ¿ãããªããããã«ç²Ÿé²ããŠãŸãããŸãã
ã¯ããã« ç§ã®æå±ãããµã€ããŒã»ãã¥ãªãã£èª²ã§ã¯ããã€ããã°ã«ãŒãã®äºæ¥çºå±ããµã€ããŒã»ãã¥ãªãã£ã§æ¯ããã¹ããæ¥ã
æ¥åã«å±ãã§ããŸãã ãµã€ããŒã»ãã¥ãªãã£ã«é¢ããããšã¯äœã§ãããïŒãšããéšçœ²ã§ãäž»ã«ä»¥äžã®ãããªæ¥åã«åãçµãã§ããŸãã ã»ãã¥ãªãã£ã¢ãã¿ãªã³ã° ã»ãã¥ãªãã£ãšã³ãžãã¢ãªã³ã° ã»ãã¥ãªãã£ããªã·ãŒãå¶åºŠã®ç«æ¡ã»éçš ã·ã¹ãã äŒç»ãèšèšã®ã¬ãã¥ãŒ ã·ã¹ãã å®è£
ãéçšã®æ¯æŽ ã€ã³ã·ãã³ããã³ããªã³ã° ãµã€ããŒã»ãã¥ãªãã£ã«é¢ããæ
å ±åéãšæäŸ ã»ãã¥ãªãã£æè²ãèšç·Ž çŸåšãç§ã¯è匱æ§é¢é£ãæ
åœããŠãããè匱æ§èšºæã®å
補åã«åãçµãã§ããŸãã æ¬èšäºã§ã¯ãè匱æ§èšºæã®å
補åïŒå
補蚺æïŒã«ãããæºåããããšããŸãšããŸããã ãªãå
補åïŒ ãã€ããã§ã¯ãèŠæš¡ã®ç°ãªã倿°ã®Webãµã€ãã管çããŠããŸãã 宿çãªè匱æ§èšºæã宿œããã«ãããã¹ãŠãå€éšæ¥è
ã«äŸé Œããã«ã¯ãæéãã³ã¹ããããããããŠããŸããŸãã ããã§ãäžéšWebãµã€ãã§ã®è匱æ§èšºæãå
補åããããšã§ãã¿ã€ã ãªãŒãã€ã³ã¹ãããã©ãŒãã³ã¹ãã宿œã§ãããšèããŸããã æºåããããš èšºææ¹æ³ãããŒã«ãéžå®ãã 蚺æãã¹ãè匱æ§é
ç®ãäžèЧåãã è匱æ§ã®è©äŸ¡åºæºã決å®ãã ãŠãŒã¶ãŒããã®ç³è«æ¹æ³ã決å®ãã 1. èšºææ¹æ³ãããŒã«ãéžå®ãã ã©ã®ããã«èšºæãè¡ãªãã®ããæ±ºããŸãã ããŒã«ãçšããèªå蚺æã ããªã®ããæå蚺æãè¡ãªãã®ããããŒã«ã¯äœã䜿ãã®ãã»ã»ãªã©ã§ãã 蚺æããŒã«ã¯ãç¡åã§å©çšã§ãããã®ããããŸãããOWASP ZAPãããBurp Suiteããæåã§ãã OWASP ZAPã詊ããŠã¿ã OWASP ZAPã¯ããªãŒãã³ãœãŒã¹ã®è匱æ§èšºæããŒã«ã§ãã ãã¬ããžãå€ããå°å
¥ãç°¡åãªããããŸãã¯ãã¡ãã詊ããŠã¿ãããšã«ããŸããã ãœãããŠã§ã¢ã®ã€ã³ã¹ããŒã« 以äžã®ãœãããŠã§ã¢ãã€ã³ã¹ããŒã«ããŸãã OWASP ZAP Java FirefoxïŒèšºææã«å©çšãããã©ãŠã¶ïŒ åçš®èšå® OWASP ZAPã®ããŒã«ã«ãããã·æ©èœãèšå®ããŸãã OWASP ZAPãèµ·åããæ¯è»ããŒã¯ããããŒã«ã«ãããã·ã®èšå®ãéããŸãã ããã©ã«ãã§ã¯ localhost:8080 ãšãªã£ãŠããŸãããå¿
èŠã«å¿ããŠå€æŽããŸãã 蚺ææã«å©çšãããã©ãŠã¶ãéããOWASP ZAPã®ããŒã«ã«ãããã·ã®å€ãèšå®ããŸãã Firefoxã®å Žåã¯ãFoxyProxy Standardããšããæ¡åŒµæ©èœã䟿å©ã§ãã ã¹ãã£ã³å®è¡ â»ç¬¬äžè
ã®Webãµã€ãã«ãåæã«è匱æ§èšºæãè¡ããšæ»æãšã¿ãªãããŸãã蚺æãè¡ãªãéã¯ãèªèº«ã§ç®¡çããŠããWebãµã€ãã«éã£ãŠãã ããã ãããã·ãèšå®ãããã©ãŠã¶ïŒFirefoxïŒãã蚺æå¯Ÿè±¡ã«ã¢ã¯ã»ã¹ãããšãOWASP ZAPã®å·Šãã€ã³ã«Webãµã€ãã®URLã远å ãããŸãã OWASP ZAPã«ã¯ã4ã€ã®ã¢ãŒãããããŸãã ãæ»æã¢ãŒãããæšæºã¢ãŒããã¯ã察象å€ã®Webãµã€ããžã蚺æãè¡ãªã£ãŠããŸãå¯èœæ§ããããããããããã¯ãã¢ãŒããã§ã®ã¹ãã£ã³å®è¡ãããããã§ãããã»ãŒãã¢ãŒããã§ã¯ã¹ãã£ã³ãè¡ãªããŸããã ããããã¯ãã¢ãŒããã§ã¯ã蚺æå¯Ÿè±¡ãã³ã³ããã¹ãã«å«ããããšã§ã¹ãã£ã³ãå¯èœã«ãªããŸãã 蚺æå¯Ÿè±¡ã®URLãå³ã¯ãªãã¯ãããæ»æããéžæãããšã¹ãã£ã³ãå®è¡ãããŸãã ã¹ãã£ã³ã¯ããã¹ãã€ããŒããšãåçã¹ãã£ã³ãã®2ã€ããããŸãã ã¹ãã€ã㌠蚺æå¯Ÿè±¡ã«ååšããURLãæŽãåºããã¬ã¹ãã³ã¹ã®å
容ãªã©ãæ€æ»ããŸã åçã¹ãã£ã³ ãªã¯ãšã¹ããã©ã¡ãŒã¿ãå€ãããªã©ããŠæ€æ»ãããŸã ã¬ããŒãçæ ã¡ãã¥ãŒããŒã®ãã¬ããŒãããã蚺æçµæãçæããããšãã§ããŸãã HTMLãPDFãªã©åœ¢åŒãéžæã§ããŸãã 2. 蚺æãã¹ãè匱æ§é
ç®ãäžèЧåãã IPAãè匱æ§èšºæå£«ã¹ãã«ããããããžã§ã¯ããªã©ã§ãäžèЧåãããè匱æ§é
ç®ãå
¬éãããŠããŸãã ãã€ããã§ã¯ã OWASP ASVSãªã©ãåèã«çå®ããã»ãã¥ãªãã£ãã§ãã¯ã·ãŒããååšãããããããããæãåãããŠèšºæãã¹ãé
ç®ãäžèЧåããŸããã å®éã«èšºæãè¡ãªãéã¯ã察象ãµã€ãã®ä»æ§ã«å¿ããŠèšºæãã¹ãé
ç®ã粟æ»ããŸãã 3. è匱æ§ã®è©äŸ¡åºæºã決å®ãã çºèŠãããè匱æ§ããã©ã®çšåºŠåœ±é¿ã®ãããã®ãªã®ããè©äŸ¡ããããã®åºæºã決ããŸãã é«ã»äžã»äœã»æ
å ±ã¬ãã«ã§åããããšãå€ãããšæããŸãã ãã€ããã§ã¯åã«è匱æ§èªäœã®å±éºæ§ã ãã§ãªããSSVCãçšããŠå®éã®åœ±é¿åºŠãèæ
®ã倿ããããšã«ããŸããã SSVCã¯ã倿ãã€ã³ããããããããããŠãŒã¶ãŒã«ã説æããããããšããç¹ã§æ¡çšããŸããã SSVCãšã¯ïŒ è匱æ§ã察å¿ããåºæºãšããŠãå€ãã®å Žåã¯CVSSã®ããŒã¹ã¹ã³ã¢ãæ·±å»åºŠãçšããŸããã ããã¯ãè匱æ§èªäœã®å±éºæ§ãã衚ããŠããã察å¿ã®åªå
é äœä»ããè¡ãªãã«ã¯æ
å ±ãäžååã§ãã å®éã®åœ±é¿åºŠã¯ãã·ã¹ãã ã眮ãããŠããç°å¢ãæ±ã£ãŠããæ
å ±ã®éèŠåºŠã«ããå€ãã£ãŠããŸãã SSVCã¯ããã®åé¡ã解決ããããã«èæ¡ãããè匱æ§ç®¡çã®ãã¬ãŒã ã¯ãŒã¯ã§ãã 以äžã®4ã€ã®æ
å ±ãã€ã³ããããšããŠã4段éã®å¯Ÿå¿ã¬ãã«ãå°åºããŸãã æ
å ± æ»æã³ãŒãã®å
¬éæç¡ãšæªçšã¬ãã« æ»æè
ã«ãšã£ãŠã®æçšæ§ ã·ã¹ãã ã®é²åºã¬ãã« æ»æãããéã®æ¥ååœ±é¿ å¯Ÿå¿ã¬ãã« Immediate å
šãŠã®ãªãœãŒã¹ãéäžãå¿
èŠã«å¿ããŠçµç¹ã®éåžžæ¥åã忢ããŠå¯èœãªéãè¿
éã«å¯Ÿå¿ãã Out-of-Cycle éåžžãããè¿
éã«è¡åããèšç»å€ã®æ©äŒã«ç·©åçãŸãã¯ä¿®åŸ©çã宿œãã Scheduled 宿ã¡ã³ããã³ã¹æã«å¯Ÿå¿ãã Defer çŸæç¹ã§ã¯å¯Ÿå¿ããªã 4. ãŠãŒã¶ãŒããã®ç³è«æ¹æ³ã決å®ãã å
補蚺æã宿œããããŠãŒã¶ãŒããã®åä»çªå£ãå¿
èŠã§ãã ãã¢ãªã³ã°ãå
ŒããŠã以äžã®ãããªé
ç®ãå
¥åãããã©ãŒã ãçšæããŸããã éšçœ²åã»æ°å ãµã€ãåã»ãµã€ãURL ãµã€ãã®ä»æ§ ãã©ãããã©ãŒã ãOSãéçºèšèªãæ§æãªã© 蚺æå®æœåžææ¥ ãªãªãŒã¹äºå®æ¥ ãã€ãŸã§ã«èšºæãå®äºããå¿
èŠãããã確èªããããã§ã 泚æäºé
ã®ç¢ºèª 蚺æå®æœã«ãããæ³šæäºé
ã®ããŒãžãå¥éçšæããŸãã ãŸãšã ä»åã¯ãå
補蚺æãã¹ã¢ãŒã«ã¹ã¿ãŒãããããã«æºåããããšããŸãšããŠã¿ãŸããã ããã«èšèŒããããŒã«ã®å©ç𿹿³ãè©äŸ¡åºæºã ãã§ãªããè匱æ§ã«å¯Ÿããçè§£ã¯å¿
é ã§ãã ãŠãŒã¶ãŒã«å®å¿ããŠWebãµã€ããå©çšããŠããããããã«ãæãæŒããªããã£ãããšèšºæã宿œããŠãããããšæããŸãã ãµã€ããŒã»ãã¥ãªãã£èª²ã§ã¯ãæ§ã
ãªæœçã«åãçµãã§ããŸãã è匱æ§èšºæã«éãããããŸããŸãªã»ãã¥ãªãã£ç¥èã身ã«çããã¹ãèªèº«ã®ã¹ãã«ã¢ããã«ãåªããŠãŸãããŸããðª æåŸãŸã§èªãã§ããã ãããããšãããããŸããïŒ
ã¯ããã« ããã«ã¡ã¯ãITäŒç»æšé²éšã®A.Hã§ãã ITäŒç»æšé²éšã¯ãããžã¿ã«ãã¯ãããžãŒæŠç¥æ¬éšå
ã®æè²ãçµç¹æŽ»æ§ãäž»ã«æ
åœããéšçœ²ã§ãå
¥ç€Ÿããæ°åã®ç ä¿®ã®äŒç»ã»éå¶ãªã©ãæ
åœããŠããŸãã äŸå¹Žããã€ãã瀟ã«å
¥ç€ŸããWeb/ITç³»ã®æ°åã¯ãå
¥ç€ŸåŸ3ãæçšåºŠã®ç ä¿®ã«å
¥ããŸããããã®ç ä¿®æéäžã¯ãç ä¿®ã®æåŸã«æ¥å ±ãæåºããŠäžæ¥ãç· ãããããŸãã ä»å¹Žããã¯ãæ°åç ä¿®ã®æ¥å ±ã管çããã·ã¹ãã ãšããŠRedmineãèšå®ããæäŸèŽããŸããã ãã®å°å
¥ã«è³ã£ãèæ¯ãèšèšã®èãæ¹ãå®éã®èšå®ã® é°å²æ° ãªã©ãæžããŠã¿ãããšæããŸãã ïŒãã®7ã€ã®ç©åœ¢ãäœã衚ãã®ãã¯ããåãããªããïŒ å°å
¥ã®èæ¯ ããŠãäžå£ã«æ¥å ±ãšãã£ãŠããäŒç€Ÿã®æ¥çš®ãèŠæš¡ã«ãã£ãŠãæ¥å ±ã®æåºå
ã確èªãããŒãªã©ã¯æ§ã
ããšæããŸãã ããããæ¥å ±ç®¡çã«ã·ã¹ãã ïŒãšæãæ¹ãããã£ãããããç¥ããŸããã äŸãã°ããã£ããããŒã«ã«ãã£ãã«ãäœãã仿¥åŠãã ããšãæ°åãæçš¿ããŠãããã«å
茩ãã³ã¡ã³ããã¹ã¿ã³ããã€ããããšãã圢åŒã§ããååã«æ¥å ±ãšããŠæç«ããŸãã å®éãå»å¹ŽãŸã§ã¯ãã£ãããã¹ãã¬ããã·ãŒãã®æŽ»çšã«ãã£ãŠæ¥å ±æŽ»åãè¡ã£ãŠããŸããã çŸåšã®ãã€ãã瀟ã¯ããžã¿ã«ãã¯ãããžãŒé åã«å€§å€ã«åãå
¥ããŠãããæ°åæ¡çšãç©æ¥µçã«è¡ã£ãçµæã2022å¹ŽåºŠã¯æ°ååçšåºŠã®Web/ITè·ã®æ°åãå
¥ç€ŸããããšãšãªããŸããã ã»ã»ã»ãããªã£ãŠãããšããã¡ã€ã«ããŒã¹ã§ã®æŽæ°ã»é²èЧã¯äžèЧæ§ãå¯èªæ§ãæŽæ°æ€ç¥ã«ãããŠæ®µã
ãšçª®å±ã«ãªã£ãŠããŸãã æ¥å ±ã¯ãæ°åã®åŠã³ã®å®çã®ããã®æ¯ãè¿ãã§ãããšåæã«ãå
茩ããã®ã³ã¡ã³ãããããã³ãã¥ãã±ãŒã·ã§ã³ã®å Žã§ããããŸãã ãŸããå°ãèããŠã¿ãã°ããããããŒãã«ãã£ãŠæçš¿ãè¡ãããé¢ä¿è
ãé²èЧããŠã³ã¡ã³ããè¡ãããšããè¡åãã¿ãŒã³èªäœã¯ããšã³ãžãã¢ã§ããã°ç®¡çããŒã«ã»ãããžã§ã¯ã管çããŒã«ã®äžã§ãæ¥ã
å®è·µããŠããããªãã¿ã®è¡åã§ãã æ°åã¯Web/ITè·ã§ãå
茩éãåœç¶Web/ITè·ã§ãã ã ã£ããRedmineã§è¯ããïŒ ãšæãç«ã£ãã®ããå°å
¥ã®çµç·¯ã§ãã ããããªãã§Redmineãªã®ïŒBacklogãšãAsanaããã ããªã®ïŒ ITSãæ¥å ±å ±åã«äœ¿ããªãããŸã ãªãã©ã·ãŒãäœãæ°åãæ··ä¹±ããªãããã«ãéåžžããããæ©èœïŒäŸãã°å·¥æ°ãéå§æ¥ã»çµäºæ¥ãšãïŒãåããããªæ¹åã«ãªãã âããŒã«ã®èªç±åºŠãæ±ããããã æ°åã¯æžã人ãå
茩ã¯èªã人ãéåžžã®éçºã®ããã«ã¡ã³ããŒãåãæš©éã§ã¯ãªããããŒã«ãå
šãç°ãªãããäºãç°ãªããç¹ã«ãæ°åã¯åºæ¥ãããšãéå®ããŠè¿·ããªãããã«ããããâéçšã«ãŒã«ã極åã·ã¹ãã ã§è¡šçŸã§ããã å€åãå€å°ã®æ¹åã¯ããã©æ¥å¹Žãåãããšãããå¯èœæ§ãé«ããæ§é ã ãã³ããŒããŠäœ¿ããŸããããã ãéãæããããªããäœæ
ãªããéãæããããªãããã äžèšã®èŠæ±ã«çãããããã¯ãã¯ãæ£çŽRedmineãããããæãåœãããŸããã å€å°ã®äºç®ãããã°æ©èœçã«ã¯Jiraã¯éžæè¢ã«ãªããšæããŸããããå€ãã®å
茩ã«ã¿ãŠãããããšããèŠä»¶ãšãã¢ã«ãŠã³ã課éã¯çžæ§ãæªãããŸãã æ¥å ±ãæ²ç€ºæ¿ã®å»¶äŒžçãªæèŠã§äœ¿ãåã«ã¯ãéçšã«ãŒã«ã®åŸ¹åºããªãããã°ã©ã®ãããªBTS/ITSã§ã䜿ãããšæããŸããããã ã§ããå
¥ç€ŸããŠè²ã
ãªäºãè©°ã蟌ãŸããæ°åãæ¥ã
ã®æ¥åã§å¿ããäŒç€Ÿã®å
茩éã«ãã«ãŒã«ãèŠããŠãããããšãæåŸ
ããã®ã¯é
·ãšãããã®ã§ãã ãšã³ããŠãŒã¶ãŒã«æäŸããæ©èœãåããçµ±å¶ãæäŸãããšãã芳ç¹ã«ãããŠã¯ããã¯ãRedmineã«è»é
ãããããŸãããã®éšåã«ãããŠãBacklogãAsanaã¯æé©è§£ã§ã¯ãªããšæããŸãã ãªã©ãšè²ã
ãšçç±ãæžããŸããããå¿è«ã æ°åã®æ¥å ±ç®¡çã®ããã ãã«ãæ°èŠã®ã·ã¹ãã ãªããŠå
¥ããŠãããªã ãšãã話ããããŸãã 幞ããå¥çšéã§ç®¡çè
æš©éãæã€Redmineç°å¢ãæã£ãŠãããããæ¥å ±ç®¡çãšããæ¥åãçè§£ããŠããããRedmineã®èšå®ã«èœãšã蟌ããã°ãITSã§å®çŸã§ãããªããšæããããã§ãã æ¥å ±ç®¡çãšããæ¥å 端çã«ã¯ããæ°åãæ¥å ±ãæžããå
茩ããç ä¿®éå¶ããŒã ã¯ããã確èªããŠã³ã¡ã³ããããã ãã§ãã æåã«èµ·ããã°åœããåã®ããšãæžããŠããŸãããå°ãªããšããŠãŒã¹ã±ãŒã¹ã«ç»å Žããããªã¢ã¯ã¿ãŒãäžçš®é¡ãç»å ŽããŠããŸãã ããå°ãå
·äœçã«èããŠã¿ãŸãã æ°åã®ããããš æ°åã¯ãWeb/ITè·æ¡çšãšã¯ãããå®å
šãªãåå¿è
ã§ãã åºæ¬çã«ã¯äœãç¥ããªãããäžéœåãªããšãããããå¯èœæ§ãããããšãæ³å®ããŠèæ
®ããŸãã ãŸããæ°åã¯èªåã®æžãããã±ããã¯ç·šéã§ããŠããä»ã®æ°åãæžãããã±ããã¯ç·šéã§ããŠã¯ãããŸããã éçºã®èª²é¡ç®¡çã§ããã°ãä»ã®äººãæžãã誀ããèšæ£åºæ¥ãã®ã§è¯ãã§ãããä»åã¯æ°åç ä¿®ãªã®ã§ä»ã®äººãç·šéãããã誀ã£ãŠæ¶ãããããªãããã«ããå¿
èŠããããŸãã ãŸããRedmineã¯äžåºŠåé€ãããã±ããã埩å
ããæ©èœã¯æšæºã§ã¯ååšããªãããããããããã±ããåé€ã®æš©éãåãäžããå¿
èŠããããŸãã BTS/ITSãã®ãã®ã«ãæ
£ããŠããŸãããæ¥å ±èšå
¥ã«é¢ä¿ããªãé
ç®ã¯æ¥µåç»é¢ããæ¶ããŸãã é·ãç®ã§èŠãã°ãã©ãã«ãŒãã¹ããŒã¿ã¹ãªã©ã¯ãã£ããæãããæã§ãããä»åã¯ãããããæèãããªãããã«æ¶ããŸãã ç§éã®ç ä¿®ã§ã¯ãå
茩圹ã¯ããŒãããã®ã§æ°äººã¯èªèº«ã®å
茩ãç¥ãåŸãŸããã ãªã®ã§ããæ
åœè
ãæ¬ããä»ã¯ãããŸããã äžæ¹ã§ãäŸãã°KPTãªã©å¿
ãå
¥åããŠã»ããé
ç®ã¯èšå
¥ãããŠæ¬²ããã§ãã åæã®æ°åãæžããæ¥å ±ã¯ãèŠããããšãèŠããªãããã«ããããšãåºæ¥ãŸãã ç§éã¯ããè¯ãæ¥å ±ã¯ä»ã®æ°åã«ãç䌌ãããŠã»ããããšèããŠããã®ã§ãèŠããããã«ããŸãã å
茩ã®ããããš å
茩ã¯ãæ¥å ±ã¯æžããŸããã®ã§ãæ°èŠãã±ãããäœæãããã誰ãã®ãã±ãããç·šéããå¿
èŠã¯ãããŸããã ã³ã¡ã³ãïŒæ³šèšïŒãåºæ¥ãã°ããã§ãã éå¶ç ä¿®ããŒã ã®ããããš éå¶ç®¡çè
ã¯ããµããŸãã¯ã»ãšãã©å
茩ãšåãã§ãããäžãäžã«åããŠãã±ããã远å ç·šéããæš©éã¯æã£ãŠãããããšããã§ãã Redmineã®èšå®ãžã®èœãšã蟌㿠æ¥å ±ç®¡çã«ãŸã€ããããšã¯ãäœãšãªãäŒãããŸããã§ããããã ãŠãŒã¹ã±ãŒã¹ãèããæãç§ã¯ãŠãŒã¶ãŒã®è¡åãèµ·ç¹ã«æ©åºãæ³åãããã§ããã Redmineã®ã©ã®ãããã®æ©èœã§ããã衚çŸãããã¯ãå æ°åè§£ããããããªæãã§ãããŠã¯ããŠãããŸãã Redmineã®æ©èœã®å
šäœå ãŸããRedmineã®å
šäœåãç°¡åã«ã玹ä»èŽããŸãã çéã§ã¯éæ¿ã§ãããJAXAã®æ¹ããŸãšããäžèšã®å³ãã確èªäžããã åŒçšïŒ https://www.jss.jaxa.jp/about_coda/ Redmineã®ä»çµã¿ã¯ãäžå³ã®éãè€å±€çã§ãã ãã®èŸºãã®ä»çµã¿ã¯ç®¡çè
æš©éãåŸãŠãã·ã¹ãã å
ã§ç¹ã«èª¬æããªããããå²ãšåèŠæ®ºããªéšåã§ãã ããã ãã«è²ã
ãªäœ¿ãæ¹ãåºæ¥ãã®ã§ããããšããããäžã€ã ãã倪åã®éšåãèŠããŠäžããã äžå³ã®ãè«ççãªå®çŸ©ãã«å«ãŸãããã®ã¯ãRedmineã®ç°å¢åäœã§å
±éã®èšå®ã§ãã ãããããžã§ã¯ãAãšBã§ããã©ãã«ãŒXã䜿ã£ãŠãããšãããããã©ãã«ãŒXã®ä¿®æ£ã¯ãããžã§ã¯ãAãšBã«åœ±é¿ãäžããŸãã æ°ããRedmineç°å¢ãªããèªç±ã«ãã©ã€ã¢ã³ããšã©ãŒãããã°ãããšæããŸãã æ¢åã®Redmineç°å¢ã«ãããŠã¯ãå¿
ãå
茩ã®ç®¡çè
æš©éã®æç€ºãã·ãã¿ãªã«åŸã£ãŠãã ããã ãããžã§ã¯ãå
šãŠã®èšå®ãäžåŸã§å€æŽåºæ¥ãã®ã¯ãã¡ãªããã§ãããšåæã«ã äžæã«è§Šããšãããã¯ããåãããšãèµ·ãããŸãã æ
£ããªããã¡ã¯ãµã³ãããã¯ã¹ãçšæãããã䜿ããŸãããã«ç¬èªã®ãã®ã§ãããŸãããã ãšããèš³ã§ãæ¥å ±ãå®çŸããããã«Redmineã®ã©ãããããããèããªããèšå®ããŠãããŸãã ããŒã«ã®èãæ¹ æåéããæš©éãã€ããã©ãæ©èœã§ãã Redmineã®ããŒã«ã®ä»çµã¿ã¯ã70ãè¶
ãã现ããæ©èœã®å©çšæç¡ããããããã§ãã¯ããŠã ããŒã«ã«å¥œããªååãã€ããããšãåºæ¥ãŸãã äŸãã°ãæ°åã®ããŒã«ãèšå®ããç»é¢ã¯ãããªæãã§ãã æ°åã¯èªåã®æžãããã±ããã¯ç·šéã§ããŠããä»ã®æ°åãæžãããã±ããã¯ç·šéã§ããŠã¯ãããŸããã äžèšèŠä»¶ã«é¢é£ããèšå®ã¯ããã®èŸºãã§ãã ããã±ããã®ç·šéããªããèª°ãæžãããã±ããã§ãç·šéå¯èœã§ããããèªåã远å ãããã±ããã®ç·šéãã¯ãèªåãæžãããã±ããã§ãªããã°ç·šéãåºæ¥ãªãæš©éã§ãã ïŒã¡ãªã¿ã«ãäž¡æ¹é©çšãããšåŒ·ãæ¹ã®åè
ãé©çšãããŸããïŒ Redmineã¯äžåºŠåé€ãããã±ããã埩å
ããæ©èœã¯æšæºã§ã¯ååšããªãããã ãããããã±ããåé€ã®æš©éãåãäžããå¿
èŠããããŸãã ããããã±ãããã©ããã³ã°åšãã§ããäžã®å³ã®ãã±ããã®åé€ããªãã«ããŸãã Redmineã«ã¯ãŽãç®±ã«ããäžæéé¿ã®ãããªæ©èœã¯ãããŸããã®ã§ãåºæ¬çã«ã¯ãªããæšå¥šããŸãïŒäºåºŠç®ïŒ ä»åã¯æ°åã»å
茩äžåžã»éå¶ãš3ã€ã®åœ¹å²ãååšããŠããŸãã®ã§ã ãã®3ã€ãèšå®ããŠããããšã«ãªããŸãã 詊ãã«ãå
茩äžåžã®ããŒã«èšå®ãèŠãŠã¿ãŸãããã ä»åã®æ¥å ±ç®¡çã«ã¯äžèšã®èŠä»¶ããããŸãã®ã§ã å
茩ã¯ãæ¥å ±ã¯æžããŸããã®ã§ãæ°èŠãã±ãããäœæãããã 誰ãã®ãã±ãããç·šéããå¿
èŠã¯ãããŸããã ã³ã¡ã³ãïŒæ³šèšïŒãåºæ¥ãã°ããã§ãã ãã±ããã®è¿œå ã«ãã§ãã¯ãå
¥ã£ãŠããŸããã ããŸãïŒä»ã®æ°åãæžãããã±ãããèŠããããªãå Žåã æ¥å ±ãšã¯å¥ã«ãåŸç¶èª²çšã®æ°ååãã®ã€ã³ã¿ãŒã³ã·ããã®å ±åæžã«ã€ããŠã¯ããã¿ãã¬é²æ¢ãªã©ã®èгç¹ããä»ã®æ°åãæžããæ¥å ±ã¯èŠããªãããã«å€æŽããŸããã ãã®èšå®ã¯ã衚瀺ã§ãããã±ãããã®é
ç®ããäœæè
ãæ
åœè
ã§ãããã±ãããã«èšå®ããããšã§å®çŸããŸãã ãã ãã1ã€ã®ããŒã«ã§ã¯1éããªãããå¥ã®ããŒã«ãšããŠå®çŸ©ããŠæäŸããŸããã ããŒã«ã§åºæ¥ãäºã®é°å²æ°ãäŒããã°å¹žãã§ãã ãã©ãã«ãŒã®èãæ¹ ãã©ãã«ãŒã¯ãè¡åãã¿ãŒã³ã®å€§åé¡ãã§ãã ä»åã¯æ°åããã®æ¥å ±ä»¥å€ã®è¡åãã¿ãŒã³ã¯ãããŸããã®ã§ããã©ãã«ãŒã¯ãæ¥å ±ãã ããããã°å€§äžå€«ã§ãã ãã©ãã«ãŒã®èšå®ç»é¢ã¯ãããªæãã§ãã Redmineã¯ãæšæºãã£ãŒã«ããã䜿ããªãããšãéžã¹ãŸãã äžè¬çãªéçºçšéã§ããã°ãæ
åœè
ãæ¥ä»æ
å ±ãªã©ã¯å¿
é ã§ããããã®æ¥ããã°ææ¥ããªã«ããªããæ°åãæžãããã®ãå
茩ã¯å¯ã£ãŠããã£ãŠèªãã®ã§æ
åœè
ãäžèŠã BTS/ITSãã®ãã®ã«ãæ
£ããŠããŸãããæ¥å ±èšå
¥ã«é¢ä¿ããªãé
ç®ã¯æ¥µåç»é¢ããæ¶ããŸãã ãªã®ã§ãæšæºãã£ãŒã«ãã§ã¯èª¬æã ããæ®ããŸãã äžæ¹ãç ä¿®æ
åœãšããŠã¯æžããŠã»ããäºã¯è²ã
ãããŸãã®ã§ã ã«ã¹ã¿ã ãã£ãŒã«ããšããŠé
ç®ãå®çŸ©ããŸãã ä»åã®ç ä¿®ã«ãããŠã¯ãKPTãšèªç±èšå
¥æ¬ãåããæ¯ãè¿ã£ãŠã»ããããšããã£ããå
¥åããŠãããããã«ã·ã¹ãã åŽã§å¶åŸ¡ãããŠããŸãã Redmineã¯ãã¢ã«ãŠã³ãæ
å ±ã«äºæ¥éšãäŸãã°è¶£å³ãªã©ã®ã«ã¹ã¿ã ãã£ãŒã«ããæ¡åŒµããããšã¯åºæ¥ãŸããããã±ããå
ã«æ¡åŒµããã¢ã«ãŠã³ãæ
å ±ãLookupãããããªæ©èœã¯ãããŸããã ãªã®ã§ãæ°åã¯æ¯åé
å±äºæ¥éšãå
¥åããªããã°ãªããªãã®ã§ã¡ãã£ãšé¢åã§ãã ãŸãæžããŠèŠããããšãããã ãããšããããšã§ããã é
å±äºæ¥éšãããŒã åã¯ãåŸã
äžèЧç»é¢ãªã©ã§æ€çŽ¢ããæã«å¿
èŠãªãããã€ããŠããŸãã ã«ã¹ã¿ã ãã£ãŒã«ãã®èãæ¹ äžæ¹ã§ãäŸãã°KPTãªã©å¿
ãå
¥åããŠã»ããé
ç®ã¯èšå
¥ãããŠæ¬²ããã§ãã ãã±ããã®å
¥åé
ç®ã®ã«ã¹ã¿ãã€ãºããããã®ã§ããã°ãã«ã¹ã¿ã ãã£ãŒã«ãã§ãã å
è¿°ã®éãããã©ãã«ãŒãå®ãŸããšããã®è¡åãã¿ãŒã³ã§å¿
ããã£ãŠã»ããããšã®åå°ãäœãšãªãèŠããŠããŸãã ç ä¿®æ¥å ±ã¯ãã§ããããšãã§ããªãã£ãããšãªã©æžããŠã»ããããšãæç€ºçã§ãã 垳祚é
ç®ã«ã€ããŠã¯ãã«ã¹ã¿ã ãã£ãŒã«ããå©çšããããšã§åž³ç¥šã£ãœãä»äžããŠãããŸãã äŸãšããŠãKeepã®é
ç®ã®ã«ã¹ã¿ã ãã£ãŒã«ãã¯ãããªæãã§ãã äžåºŠã«ã¹ã¿ã ãã£ãŒã«ããèšå®ããåŸã圢åŒãåãæ¿ããã¯åºæ¥ãŸãããã ãããªæãã®éžæè¢ããããŸãã ããŸãïŒç¹å®ã®äººã«ããèŠããããªããã£ãŒã«ããäœããã ããã©ã«ãã§ã¯è¡šç€ºã®é
ç®ã¯ããã¹ãŠã®ãŠãŒã¶ãŒããéžæãããŠããŸãããç¹å®ã®ããŒã«ã®ã¿è¡šç€ºãããšããå¶åŸ¡ãåºæ¥ãŸãã ãã®éšåã§ãã äŸãã°ã瀟å€ããã®åãåããã«å¯ŸããŠã瀟å
ã§ã®ãããšããåãåããããŠãã人ã«èŠããããªãå Žåãªã©ãåããã±ããã§ãé²èЧããŒã«ã«ãã£ãŠæ
å ±ãåºãåããããæãªã©ã«æŽ»çšããŸãã ç§éã®æ¥å ±ç®¡çã·ã¹ãã ã§ã¯ç¹ã«åºçªã¯ãããŸããã§ãããã æ°åã€ã³ã¿ãŒã³ã·ããã®å ±åæžãã©ãã«ãŒã«ãããŠã¯ãã¡ã³ã¿ãŒâ管çè·ãšæ
å ±ãç³ãéãããã®ã§ããã®æã«æŽ»çšããŸããã ã¹ããŒã¿ã¹ã®èãæ¹ ã¹ããŒã¿ã¹ã¯ããã±ããã®èãããç¶æ
ã®ããšã§ãã äŸãã°ããä»äºã¯ãæªçæãâã察å¿äžãâãå®äºããšãããããŒãªã®ã§ããã°ãã¹ããŒã¿ã¹ã¯ãã®3ã€ãèšå®ããŸãã æ¥å ±ã«ã¯ã©ãããç¶æ
ãèããããã§ããããïŒ ãŸããæ°åã®ç ä¿®ãçµãã£ãçŽåŸãããããæ¥å ±ïŒã®ãã±ããïŒãæžãå Žåããæªçæãã®ç¶æ
ã§ãã ç ä¿®æ¥å ±ããã¹ãŠãã±ãããšããŠäºãã»ããããã®ã§ããã°ã ãŸã 誰ãæãã€ããŠããªããæªçæããšããç¶æ
ã§ããã ãç ä¿®çµäºåŸã15å以å
ã«ãã±ãã远å ããŠæžããŠäžããããŒããšããå Žåã æªçæã§ããæéã¯ã»ãšãã©ååšããªãããããèšå
¥æžã¿ããšããç¶æ
ããåããŠãããããç¥ããŸããã æ¥å ±ããèšå
¥æžã¿ãã«ãªã£ãããå
茩äžåžãéå¶ããŒã ã¯äžå®æéã®éã§ãã±ããã確èªããŠã³ã¡ã³ããæžããŸãã å
茩äžåžãšéå¶ããŒã ã®ã©ã¡ããå
ã«ã³ã¡ã³ããæžããåãããªãã®ã§ãäžå®æéãçµäºãããããã±ãããçµäºã®ç¶æ
ã«å€æŽããã°è¯ãããã§ãã ã¹ããŒã¿ã¹ã®è©³çްç»é¢ã¯ãããªæãã§ã Redmineã®ã¹ããŒã¿ã¹ã§ã¯ããçµäºãããã±ããããšããŠã¹ããŒã¿ã¹ãèšå®ãããšã ãã±ããã®æ€çŽ¢äžèЧã§å®äºãããã±ãããšããŠæ±ãããŸãã ãã±ããäžèŠ§ã¯æªå®äºã®ãã±ããã®ã¿è¡šç€ºããèšå®ã«ãªã£ãŠããããšãå€ãã®ã§ã ãã察å¿ããå¿
èŠããªããã±ãããäžèЧããæ¶ã蟌ãããšã§ãå
茩äžåžãéå¶ããŒã ã¯ã³ã¡ã³ããæãããã§ãã ã¹ããŒã¿ã¹ã®äžèЧç»é¢ã¯ãããªæãã§ãã ãã®äžèЧã§ã¯ããã®Redmineç°å¢ã«ç»å Žããå
šãŠã®ã¹ããŒã¿ã¹ã衚瀺ãããŠããŸãã æ¥å ±ãšããæ¥åã®æµãã«ãããŠã¯ãèšå
¥æžã¿ãšå®äºã ãã§è¯ããšæ±ºããã®ã§ã ã©ããã§ãã®æ¥åã®æµãã ã¯ãŒã¯ã®ãã㌠ãæå®ããŠããå¿
èŠããããŸãã ããŸãïŒé²æçã®2ã€ã®èãæ¹ Redmineã¯ããã±ããåå¥ã«é²æçãæåå
¥åããã¢ãŒããšãã¹ããŒã¿ã¹ã«ããã©ã«ãã®é²æçãæãããŠæå管çããªããäºã€ã®ã¢ãŒãããããŸãã ãã®ã¢ãŒãã¯ç°å¢ã§åäžèšå®ã®ãããã©ã¡ããããéžã¹ãŸããã 管ç ïŒ èšå® ïŒãã±ãããã©ããã³ã°ããéžã¹ãŸãã ã¯ãŒã¯ãããŒã®èãæ¹ ã¯ãŒã¯ãããŒãšã¯ããã©ãã«ãŒãšããŒã«å¥ã«ãã«ã¹ã¿ã ãã£ãŒã«ããã¹ããŒã¿ã¹ã®å¶åŸ¡ãè¡ãèšå®ç»é¢ã§ãã ãã®æ©èœã«ãããæ°åã¯äœèšãªé
ç®ã®è¡šç€ºãåããæäœã§ããªãããã«ãããå®äºã¹ããŒã¿ã¹ã«å€æŽã§ããªãããã«ããããªã©ã®éçšã«ãŒã«ãã·ã¹ãã ã®æ©èœãšããŠèšå®ããããšãåºæ¥ãŸãã æ¥å ±ãã©ãã«ãŒÃæ°åã®ã¹ããŒã¿ã¹é·ç§»ã¯ãããªæãã§ãã æ°ãããã±ããã¯ãèšå
¥æžã¿ãã®ã¿ã§äœæå¯èœã§ãäœææžã¿ããåæã«å®äºã§ããªãããã«ããŠããŸãã äžæ¹ã§ãéå¶ããŒã«ã¯å®äºããŠãè¯ããã誀ã£ãŠå®äºããå Žåã¯èšå
¥æžã¿ã«æ»ããŠãè¯ãã®ã§ããããªæãã«ãªããŸãã æ°åããŒã«ã«æ»ã£ãŠããã£ãŒã«ãã«å¯Ÿããæš©éã¿ããèŠãŠã¿ãŸãããã å¶çŽãããããå
¥ããŠããã®ã§ãããªæãã§ãã ãããžã§ã¯ãã®èãæ¹ ãã±ããã¯å¿
ããããžã§ã¯ãã«çŽã¥ããŸãã ãããžã§ã¯ãã§ã¯ã䜿çšããæ©èœã¢ãžã¥ãŒã«ãçŽã¥ãããŠãŒã¶ãŒãšãã®ããŒã«ããã©ãã«ãŒãšã«ã¹ã¿ã ãã£ãŒã«ãããªã©ãå®çŸ©ããŸãã èŠªåæ§é ã«ããŠèŠªãåã®ãã±ããããã¹ãŠã¿ãããšãã£ãäºãå¯èœã§ãããä»åã¯æ°åçšã®1ã€ã®ãããžã§ã¯ããããã°å€§äžå€«ããã§ãã ã¢ãžã¥ãŒã«ã®èšå® äŸãã°ãããŒã«åŽã§ãã¥ãŒã¹ã®æ©èœã«æš©éãæ¯ã£ãŠãããšããŠãããããžã§ã¯ãåŽã§ãã¥ãŒã¹ã®ã¢ãžã¥ãŒã«ãONã«ããŠããªããã°ããã®ãããžã§ã¯ãã§ã¯ãã¥ãŒã¹æ©èœã¯æäŸãããŸããã äžå³ããã±ãããã©ããã³ã°ã¯æ¥å ±ãã®ãã®ãå
¥ããŸããwikiã¯ãã®ã·ã¹ãã ã®å©çšããã¥ã¢ã«ãèšèŒããŠããŠããã¡ã€ã«ã¯ãã®èšäºå
ã«æ·»ä»ããããã®ãã¡ã€ã«ã®ããã«å©çšããŠããŸãã ã¡ã³ããŒã®èšå® ã¡ã³ããŒæ¬ã¯å人æ
å ±ãæºèŒãªã®ã§å²æããŸãããéžãã ãŠãŒã¶ãŒãã©ã®ããŒã«ããå¿
ãèšå®ããŸããããã§ã誰ãã©ã®ããŒã«ãããããžã§ã¯ãã«èšå®ããŠãããŸãã ãã±ãããã©ããã³ã°ã®èšå® ãã±ãããã©ããã³ã°ã®ã¿ãã§ãããã®ãããžã§ã¯ãã§äœ¿ããã©ãã«ãŒãã«ã¹ã¿ã ãã£ãŒã«ããæç€ºçã«æå®ããŸãã éçšç®¡çè
ã®é ãè¯ããã°ããã»ã©ãæ¥åãããŒã®æŽŸçãåäžã®ãã©ãã«ãŒã®èšå®ã«èœãšã蟌ãã§æäŸã§ãããã ãšæããŸããïŒé ãç®ïŒ ããããæãããªãèšå®ãããšãå©çšè
ã®çæ§ã«ãããªãã¿ã®ã ãããªç»é¢ããã£ãšäœ¿ããããã«ãªããŸãã ãã±ããã®å
¥åç»é¢ã¯ãããªæãã«ä»äžãããŸããã çµããã« æ¬èšäºã解説以äžããã¥ã¢ã«æªæºãªã®ã§é°å²æ°ãšè¬³ã£ãŠããŸããã èšå®ãããæã®èãæ¹ãé°å²æ°ãäŒãããŸããã§ããããïŒ ä»ã«ã现ããèšå®ããTipsã¯ããããããã®ã§ããã Redmineã®ç®¡çè
æš©éããã£ãããšããæµãã®èª¬æãšããŠã¯ä»¥äžã§ãã ããžãããããªä»çµã¿ã«ãªã£ãŠãããã ã ãããããããäºãåºæ¥ããªã䜿ã£ãŠã¿ããããªã ãšãæã£ãŠé ããæ¹ãäžäººã§ãããã°å¬ããã§ãã ã»ã»ã»ãŠããããã©ããããïŒ ã»ã»ã»ãŸããæéã¯ããããŸãããã»ã»ã»ã ã§ãããšã³ã¿ãŒãã©ã€ãºãªæ¬æ Œçãªãã®ã£ãŠã倧äœãããããããããïŒãšããæ°ãããŸãã Backlogãã€ã³ã¹ã¿ã³ãã©ãŒã¡ã³ã ãšãããšãRedmineã¯ã©ãŒã¡ã³å±ã®ã©ãŒã¡ã³ã§ãã Backlogãªããéçšã«ãŒã«ã¯ããã ãããïŒãã ãã§çµããããããããããéçšèšèšããŠèšå®ããŠããã®ã§ããããæéæãããããŸãããã€ãäžæãäœããªããªãã«ãã麺ã®ã»ããçŸå³ããã§ããéçšããŠãã°å€æŽç®¡çããããŸãããããæéã£ã¡ãæéã ã§ããéçšã«ãŒã«ã ãã§éçšã§ããç¯å²ã«ã¯éçããããŸãã éçãè¶
ããŠå£°æããããã«ãŒã«ãåšç¥ãããæè²ããããã¹ãããã«ãã§ãã¯ããããã ã·ã¹ãã å¶åŸ¡ã®æ¹ã楜ã«ãªãããšããæçåå²ç¹ã®ãããªãã®ãå¿
ãããã èŠæš¡ãšæŠãã®ã§ããã°Redmineã®ãããªè€éããé Œããããçµæçã«ã¯æ¥œãåºæ¥ãããšããäºããããšæã£ãŠããŸãã å人çã«ã¯ãã«ããã©ãŒã¡ã³ããäžæãã©ãŒã¡ã³ãäœãããªãããããäœã£ãŠãããããšããæ°æã¡ããããŸããæ ¹ã£ãã¯ãšã³ãžãã¢ã ããã äžæ¹ã§ããã¯ãéçšç®¡çè
ã«äžçšåºŠã®ç¥èçµéšãæ±ããæãããèªç±åºŠãé«ãè€éã§é£ããã®ã¯äºå®ã§ãã æ¥åãããŒãé »ç¹ã«å€ããææããåã
人ã§å
šç¶éãæ¥åãããŒã®äººãã¡ãåãããŒã ã§ãããšãã£ãå Žåãéçšè
ã䌎走ããããšã®ã³ã¹ãã¯å¢å€§ããŸãã ãŸããã€ã³ãã©ã®éçšã®åŽé¢ã§ãã¡ãžã£ãŒã¢ããããŒããžã®å¯Ÿå¿ããã©ã°ã€ã³ã®äºææ§ãªã©ããããä¹ãåãã ãã®ãªãœãŒã¹ãå¿
èŠã«ã¯ãªããŸãã ã€ã³ãã©é¢ã«ãããŠã¯ãã¹ãã£ã³ã°ãµãŒãã¹ãžã®ç§»ç®¡ã§è»œæžãããŸããã代åãšããŠSQLã®çŽå©ããšãã¡ãŒã«åä¿¡çµæããã±ããã«èµ·ç¥šããç³»ã®æ©èœã¯ãæãã䜿ããŸããã ãªã«ãããUXã«ãããŠã¯Redmineã®ç®¡çè
æš©éã®æ©èœãçè§£ããŠããäººã®æç¡ã倧ããã§ãã æäœãã§ãäžå³ããªã仿¹ãªãã§ããBacklogã«ã¯åãŠãŸããã ãæ¥ãã®æ°èŠãããžã§ã¯ãã§Redmineã®éçšç®¡ççµéšè
ãããªãã®ã§ããã°ãåã¯Backlogãå§ããŸãã ã§ããå€§èŠæš¡åããªã®ã«ãªãŒãã³ãœãŒã¹ã§ç¡æã§ãã ã¿ãã§ãã ä»åã¯æ±ã£ãŠããªãã§ãããã©ã°ã€ã³ã«ããæ¡åŒµæ§ãããã æ¥æ¬ã®éçºé£ã®è²¢ç®ã«ãã£ãŠ2006幎ããã®éçºãçŸåšã«è³ããŸã§é£ç¶¿ãšç¶ããŠããŠã ãããã¯ããšããŠã®å®å®æãæçŸ€ã AWSã®Lightsailã§ãWordPressã¿ãããªæãã§ãµã¯ã£ãšå©çšå¯èœã§ãã è¬èŸ ãã€ãã瀟ãšããŠãRedmineã¯æ°å€ãå©çšããŠããOSSã®äžã®1ã€ã§ããã®ãããã¯ãã«æ¯ããããŠãããããžã§ã¯ãã瀟å
ã«ã¯æ²¢å±±ååšããŸãã æ¹ããŠãéå»ããçŸåšãŸã§ã®å
šãŠã®éçºè
ãšéçºã³ãã¥ããã£ã®æ¹ã«æè¬åŸ¡ç€Œãç³ãäžããŸãã
ã¯ããã« ãµãŒãã¹ã®ã€ã³ãã©ã«AWSãGCPãçšããå Žåãããã¥ã¡ã³ããªã©ã§æ§æå³ã®ç»åãèŠãããããšã¯ããããããšæããŸãã ãŸããåããããã¥ã¡ã³ãã«è²Œãä»ããããERå³ã®ç»åãã¡ã€ã«ãèŠãããããšãããã§ãããã ä»åã¯ãããããGithubäžã§ããæãã«ç®¡çããŠãããããšæããŸãã ERå³ãæã ERå³ãã³ãŒãã§æãæ¹æ³ã¯ããã€ããããŸãã React-diagramsãReact-flow-chartãªããã¯ãããããããè§Šã£ãããšããããããããŸããã ã§ãããå人çã«ã¯vscodeã«Draw.ioã®æ¡åŒµãå
¥ããsvgãã¡ã€ã«ãçŽæ¥è§Šããè¯ããšèããŠããŸãã â»hoge.drawioãã¡ã€ã«ãsvgã«ãšã¯ã¹ããŒãããŠhoge.drawio.svgãšãããšãsvgãã¡ã€ã«ãdraw.ioã®æ¡åŒµã§çŽæ¥ç·šéã§ããŸã ãªãsvgãã¡ã€ã«ãè¯ãã®ã Githubã¯ãã³ãŒãã ãã§ã¯ãªãsvgã®å·®åãçŽæ¥èŠãããšãã§ããããã§ãã åèã«ãvscodeã®Draw.ioæ¡åŒµã§æããERå³ã®svgãã¡ã€ã«ã«PRãåºããGithubã§æ¯èŒããéã®æ§åãã¹ã¯ãªãŒã³ã·ã§ããããŸããã ãã®ããã«ãGithubã§ã¯svgãç»åãšããŠæ¯èŒããããšãã§ããŸãã ãŸããäžèšã®åèäŸã§ã¯å·Šå³ã«äžŠã¹ãåœ¢ã§æ¯èŒããŠããŸãããç»åäžã«ããã¡ãã¥ãŒãæäœããããšã§ä»ã®åœ¢åŒã§æ¯èŒããããšãå¯èœã§ãã æ§æå³ãæã æ§æå³ãæžãéã¯ãå
ã«æããvscodeã®Draw.ioæ¡åŒµãã Diagrams ãšããããŒã«ãçšãããšè¯ãããšæããŸãã å人çã«ã¯ãç¹ã«Diagramsããå§ãã§ãã Diagramsã®äœãè¯ãã®ã æ§æå³ãæãäžã§äžçªã®åé¡ã¯ãããŸãããšããŒããé
眮ããã»ã³ã¹ã ãšæããŸãã Diagramsã¯ããã®ã»ã³ã¹ããªããšãããæãã«æ§æå³ãäœæããããšãã§ããŸãã ä»ã®å€ãã®ããŒã«ãå ŽæXã«Yãšããå
容ã®ããŒãã眮ããå¥ã®ããŒãZãšç¹ãããšããéçšãçµãã®ã«å¯ŸããDiagramsã¯YãšããããŒããäœæããŠZãšããããŒããšç¹ããã ãã§æžã¿ãŸãã ã©ãã«çœ®ãã®ãããšããç¹ãèããªããŠãè¯ãã®ã§ãç§ã®ããã«æ§æå³ãæãã»ã³ã¹ã磚ããŠããªãã£ã人éãšããŠã¯å¬ããéãã§ãã Diagramsã®ç°å¢ãäœæãã Diagramsã®å©çšã«ã¯ãGoãPythonç°å¢ãå¿
èŠã§ãã 瀟å
ã§ã¯Pythonå©çšè
ã®æ¹ãå€ããããä»åã¯Pythonã§ç°å¢ãæ§ç¯ãããããšæããŸãã ããã±ãŒãžãããŒãžã£ã«ã¯ãPoetryã䜿çšããŸãã åææ¡ä»¶ãšããŠãPython3ãå°å
¥ãããŠããããšãšããŸãã以äžã®ãµã³ãã«ã§ã¯3.9ãçšããŠããŸãã poetry ã®ã€ã³ã¹ããŒã« pip install poetry# macã®å Žåã¯brewã§ãå¯ ããã±ãŒãžã®ã€ã³ã¹ããŒã« poetry init# 以äžã®è³ªåãŸã§é©åœã«å
¥åSearch for package to add (or leave blank to continue): diagramsEnter package # to add, or the complete package name if it is not listed: [0] diagrams [1] railroad-diagrams [2] ipfabric-diagrams [3] airflow-diagrams [4] infrastructure-diagrams [5] sphinxcontrib-diagrams [6] mkdocs-diagrams [7] sphinx-diagrams [8] neon-diagrams [9] diagrams-adapters > 0 # 以äžãé©åœãªå€ãå
¥åãŸãã¯Enter # Poetryã®ä»®æ³ç°å¢ããããžã§ã¯ãå
ã«äœæ poetry config --local virtualenvs.in-project true # ããã±ãŒãžã®ã€ã³ã¹ããŒã« poetry install æ§æå³ã®äœæ åèãšããŠãå
¬åŒããã¥ã¡ã³ãã®ãµã³ãã«ãäœæããŸã é©åœãªäœçœ®ã«ä»¥äžã®å
容ã®ãã¡ã€ã«ãäœæ # sample.pyfrom diagrams import Diagramfrom diagrams.aws.compute import EC2from diagrams.aws.database import RDSfrom diagrams.aws.network import ELBwith Diagram("Web Service", show=False): ELB("lb") >> EC2("web") >> RDS("userdb") ä»®æ³ç°å¢ã§åŠçãå®è¡ poetry run python sample.py ããŸãäœæã§ããŸããã ã³ãŒãã«ããç¹ã«äœçœ®ã«é¢ããèšè¿°ãããŠããªãããšããããããšæããŸãã çµããã« ä»å玹ä»ãã以å€ã«ãããããå³ãäœæããããŒã«ã¯ä»ã«ããããŸãã äŸãã°mermaid.jsãªã©ã§ããã°ãgithubãäžéšã®ããã¥ã¡ã³ãå
±æããŒã«ãªã©ã§å©çšã§ãããããŸãã ãããã«ããããã®å Žã§ã ãããã°ãããšãã£ãç¶æ³ã§ãªããã°ãã³ãŒã管çã§ããç°å¢ã«å¯ããã¹ãã§ãã以äžãäœãããGithubçã§ç®¡çã§ããããã«ããŠãããæ¹ãè¯ãããšæããŸãã ãããããããã£ãç°å¢ã«ç¡ãã®ã§ããã°ããã²ä»åŸã¯ããããç°å¢ã§ç®¡çã§ããããã«ããŠã¿ãŠãã ããã
ã¯ããã« å
æ¥ãAWSãäž»å¬ããAWSã¯ãŒã¯ã·ã§ãããAWS JumpStartãã«åå ããŠããŸããã 2æ¥éã® 9:00 - 18:00 ã§è¡ãäºã«ãªããŸãã®ã§ãæ¥åã®èª¿æŽãå¿
èŠã«ã¯ãªãããã§ãããšãŠãåŠã³ãå€ãã¯ãŒã¯ã·ã§ããã§ããã ã«ãªãã¥ã©ã ã«ãªãã¥ã©ã å
容ã¯ä»¥äžã®éãã§ãã ã¢ãŒããã¯ãã£æ€èš ãšããããŒãã«æ²¿ã£ãŠã¢ãŒããã¯ãã£ã®æ€èšã»èšèšããŸã ããŒã ã§è¡ããŸã ç§ãåå ããã¯ãŒã¯ã·ã§ããã¯4人äžçµã§è¡ããŸãã æ©èœèŠä»¶ã決ããããŠããããããã©ãã¢ãŒããã¯ãã£ã«èœãšã蟌ãã§ããããèã«ãªããŸã æåŸã¯ããŒã ããšã« ææçºè¡šäŒ ã®æéããããŸã ã¢ãŒããã¯ãã£ã³ã°ã®ã³ã AWS Solution Architect AssociateïŒSAAïŒã¬ãã«ã®ç¥èã®åº§åŠãè¡ããŸã äºåã«æ¡å
ãããåç»ã®èŠèŽãè¡ã£ãŠãããšçè§£ãã¹ã ãŒãºã§ã 以äžãäºååŠç¿ãã«ãªã³ã¯ã貌ã£ãŠãŸã ãã³ãºãªã³ïŒã¢ãŒããã¯ãã£ã®æ§ç¯ïŒ AWSãããã³ãºãªã³çšã®ç°å¢ãäžããããå®éã«ã¢ãŒããã¯ãã£ãæ§ç¯ããŸã ãããžã¡ã³ãã³ã³ãœãŒã«ãããããããšäœã£ãŠãããŸã åå ããŒã« Amazon Chime æ¬ã¯ãŒã¯ã·ã§ããã«åå ããããã®ãããªé話ããŒã«ã§ããäž»å¬åŽããäºåã«URLãå
±æããããã¡ãããåå ãã圢ãšãªããŸã Slack ãµããŒã¿ãŒãåå ã¡ã³ããŒãšã³ãã¥ãã±ãŒã·ã§ã³ããšãããã£ããããŒã«ã§ã ãã¡ããäºåã«ãã£ã³ãã«æåŸ
ã®ã¡ãŒã«ãå±ããŸã ç§ã¯åœææåŸ
ã¡ãŒã«ãèŠéãã忥å€ã«æ
ãŠãŠç»é²ããŸããïŒæãïŒ BlueScape ã¢ãŒããã¯ãã£äœææã«å©çšãããã¯ã€ãããŒãããŒã«ã§ã ã¯ã©ãŠãäžã§ããŒã ã¡ã³ããŒãšã¢ã€ã³ã³ãããããããªããã¢ãŒããã¯ãã£ãæ§ç¯ããŠãããŸã åå æ¥ 2022幎 08/09(ç«) - 08/10(æ°Ž) https://awsjumpstart220809.splashthat.com æ¬ã¯ãŒã¯ã·ã§ããã®éå¬ã¯2åç®ã§ãä»åŸãäœåºŠãéå¬ãããäºå®ã®ããã§ã ã€ãã³ãã¹ã±ãžã¥ãŒã« 以äžã®ããã°ã©ã ã§ã¯ãŒã¯ã·ã§ãããè¡ããŸããã äºååŠç¿ éå¬åœæ¥ãŸã§ã«ä»¥äžã®åç»ãèŠèŽããŠããããäž»å¬åŽããæ¡å
ããããŸããã AWSç¥èæïŒç¡åãããäžåºŠèŠèŽããŠãããã»ããè¯ãããã§ãã èŠèŽäžã«ãã§ã«ç¥ã£ãŠãå
容ã§ãããšå€æãããã2åéã«ããŠèŠèŽããŠãããããã§ãïŒããçšåºŠæéãèŠããã®ã§ïŒ ãã¯ãããŠã®ã¢ãŒããã¯ãã£ã³ã° (60å)ã https://www.youtube.com/watch?v=cD870G8uqhY ãAWSå
¥éã https://youtu.be/Kb7ZEBwqUAI?t=2006 ããã°ã©ã ã®è©³çް ãªãŒããã³ã° äž»ã«ä»¥äžã®å
容ã«ã€ããŠèª¬æããããŸããã ã¯ãŒã¯ã·ã§ããã®è¶£æšã®èª¬æ ã¹ã±ãžã¥ãŒã«ã«ã€ã㊠ãã¢ãŒããã¯ãã£æ€èšãã«ãããããŒã ããšã«ããŒã«ã¢ã¯ã»ã¹å
ã®URLã®å
±æ Amazon Chime BlueScape äžèšãåå ããŒã«ãåç
§ ã¢ãŒããã¯ãã£ã³ã°ã®ã³ã äžèšã®ãäºååŠç¿ããšå
容ã被ããšããããããŸãããäž»å¬åŽãããã¢ãŒããã¯ãã£æ€èšããè¡ãäžã§ã®ã³ããã¹ã©ã€ãã«æ²¿ã£ãŠèª¬æããã ããŸãã 課é¡çºè¡š/ããŒã èªå·±çŽ¹ä» ãã¢ãŒããã¯ãã£æ€èšãã§ã®èª²é¡ãçºè¡šãããŸãã ãŸãã åºæ¬çã« ãã®ã¿ã€ãã³ã°ã§åããŠããŒã ã¡ã³ããŒãç¥ãäºãã§ããŸãã ã¢ãŒããã¯ãã£æ€è𠿬ã¯ãŒã¯ã·ã§ããã®äžçªã®ç®çã§ãã ããããŒãã«æ²¿ã£ãŠãããŒã ã¡ã³ããŒã§è©±åããªããBlueScapeäžã«ã¢ãŒããã¯ãã£ïŒæ§æå³ïŒãäœæããŠãããŸãã ã課é¡çºè¡šãã«ãŠæç€ºãããèŠä»¶å®çŸ©ãç®æ¡æžãã§ç€ºãããŠããŠããããã解決ãããµãŒãã¹ãæš¡çŽ¢ãæ§æå³ã«ããããŠãããŸãã ãŸã2æ¥éã®ããã ã«ã20åÃ3åããµããŒã¿ãŒã®æ¹ã«è³ªåã»çžè«ã§ããæéãèšããããŠããŸãã ããŒã ãšããŠåããŠãããããããªãé ã䜿ããŸãã é©åºŠã«äŒæ©ãææ¡ããã¿ã€ã ããŒããŒãäœãã®ãããããã§ãã ãã³ãºãªã³ïŒALB+ECS+RDSïŒ ECSïŒAWSã®ã³ã³ãããµãŒãã¹ïŒãæ¡çšããç°¡æçãªã¢ãŒããã¯ãã£ãããããžã¡ã³ãã³ã³ãœãŒã«ïŒGUIïŒäžã§äœæããŸãã æé æžïŒãã¯ãïŒãšäž»å¬ã®ãã¢ãåºã«æ§ç¯ããŠãããŸãã â»æåŸã«ã¯åå¥ãã©ããŒããã EC2ã§ã¯ãªãECSãæ¡çšããŠããããã ã³ã³ããã«ã€ããŠãåæã«åŠã³ããèªå ã«ãšã£ãŠã¯åŠã³ã®å€§ãããã³ãºãªã³ã§ããã ãŸã ã»ãã¥ãªãã£ã°ã«ãŒããšããå£ã«é»ãŸããå¯èœæ§ãé«ã ã®ã§ãæé ãæèããŠïŒãªãœãŒã¹å士ã®éä¿¡ç¶æ
ãææ¡ããŠïŒè¡ãã®ãè¯ãã§ãã ææçºè¡šäŒ çºè¡šæéã¯7~10åçšåºŠãæ®ãã®10åçšåºŠã§ä»ããŒã ãã質åãåããããäž»å¬ããã¬ãã¥ãŒãåããããŸãã çºè¡šã®ä»æ¹ã¯èªç±ã§ããåºæ¬çã«ã¯BlueScapeã§äœæããæ§æå³ãç»é¢å
±æããªãããããŒã ã¡ã³ããŒå
ã§1人éžåºãçºè¡šããã®ãåºæ¬çãªã±ãŒã¹ã§ããã ã¢ãŒããã¯ãã£ã«æ£è§£ã¯ãªãïŒå€æ§ã®æ§æãããïŒ ãšããã¹ã¿ã³ã¹ãªã®ã§ãééããæããã«è©ã®åãæããŠçºè¡šããã°ééããªãã§ãã倧äžå€«ã§ããæããªãã ã¯ããŒãžã³ã°ã»æèŠªäŒ äž»å¬è
ããå
šäœã®ç·æ¬ããããæèŠªäŒã¯èªç±åå ãšãªããŸãã æèŠªäŒã§ã¯ããµããŒã¿ãŒã®æ¹ãèããã¢ãŒããã¯ãã£ãå
¬è¡šã»è§£èª¬ããŠããã ããŸããïŒã¢ãŒããã¯ãã£ã«æ£è§£ã¯ãªããšããã®ã¯ããã€ã€ããèŠæ¬ãšãªãã¢ãŒããã¯ãã£ã¯æ°ã«ãªããŸãããïŒ æã
ã®ããŒã ææç© 2æ¥éã®æ±ãšæ¶ã®çµæ¶ããã¡ãã§ãïŒ ç¹åŸŽãšããŠã¯ãECS/Fargateæ§æãšããŠã³ã³ããããããã«æ©èœãæãããAutoScalingã§åé·åæ§æããšããŸããã ãŸãæ©èœèŠä»¶ã«ã€ããŠè»œãè§Šãããšä»¥äžã®ãããªèŠä»¶ãèæ
®ããã¢ãŒããã¯ãã£ãæ§æ³ããå¿
èŠããããŸããã®ã§ãããããã®èŠä»¶ã«æ²¿ã£ãAWSãµãŒãã¹ãæ§æå³ã«çµã¿èŸŒã¿ãŸããã 1ç§åœããã®ãªã¯ãšã¹ãæ° ããŒã¿ã®ä¿åæé ããŒã¯å©çšæé垯 æäŸãšãªã¢ããªã© ææ³ ã¢ãŒããã¯ãã£æ€èšã§ã¯ããŒã ã¡ã³ããŒ4人ã®ãã¡1人ã¯å瀟åéšçœ²ã¡ã³ããŒããããäºæ¹ã¯å¥äŒç€Ÿã§ã¢ããªéçºã«æºãã£ãŠããæ¹ã
ã§ããã æã
ã¯æ®æ®µã€ã³ãã©å¯ãã®æ¥åã«æºãã£ãŠãããããã¢ããªïŒã€ã³ãã©ã®äž¡é¢ãèæ
®ããè°è«ãã§ããŸããã ãã®ãããã¢ããªé¢ã§ã®æèŠããšãŠãæ°é®®ã«æããŸããïŒã¢ããªïŒã€ã³ãã©åŽããããã®æèŠã§è°è«ã«ãªã£ãéã®èœãšãã©ããã®æ±ºå®ãé£ãããšæããå人çãªèª²é¡ã ãªãšæããŸããã ããã«ãã³ãºãªã³ã«ãŠECSãåŠã¹ãç¹ããããããã³ã³ãããæ¥åã§è§Šãèªåã«ãšã£ãŠã¯å匷ã«ãªããŸããã å
šäœãæ¯ãè¿ããšãå®è·µçãšããç¹ã§ããªãå匷ã«ãªããŸããã æžç±ãã»ãããŒçã§AWSåãµãŒãã¹ã®ååãšæŠèŠã»çšéã¯åŠãã§ããŸãããããã®ç¥èãå®åãä»åã®å Žã§100ïŒ
掻ãããããšãã£ããããã§ã¯ãªãã®ã§ãä»åã®ã¯ãŒã¯ã·ã§ãããžã®åå ã§æ¬¡ã®ã¹ãããã«é²ããããã«æããŸããïŒããªãã«ããã¹ã»ã·ã¥ãŒããç·Žç¿ããŠãã人éããåããŠã³ãŒãã«ç«ãããŠãããããšãã®æèŠã«äŒŒãŠããŸãïŒ ãã®ãããå€å°ã®ç¥èã¯ããã©ãå®åçãªèšèšã®çµéšããªãïŒå°ãªãïŒäººã«ãšã£ãŠã¯ãåŸããã®ã倧ããã¯ãŒã¯ã·ã§ããã§ããããªãšæããŸãããäžæ¹ã§ç¥èã«äžå®ãããæ¹ã¯ã ã°ã«ãŒãã¯ãŒã¯ã§ã®è©±ãåãã«åå ããŠãããããã« ãšãã芳ç¹ã§ãäžèšã§ãäŒããããäºååŠç¿ããè¡ã£ãŠããããšããã¹ã¹ã¡ããŸãã