ã¯ããã« ãããã·ã§ããäœæãµãŒãã¹ãBASEãã®ãããã¯ãéçºããŒã ã§ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒïŒEMïŒãããŠããé«å¶ã§ãã BASE ã¯çµç¹ãšããŠãå人ãšããŠããšã³ãžãã¢ã€ãã³ãã«ç©æ¥µçã«é¢ãã£ãŠãããææã€ãã³ãã®äŒå ŽæäŸããããŠããã ãããšããããŸãã2026/8/24ïŒæïŒã«ãPHPerKaigi mini #4ããåŒç€Ÿãªãã£ã¹ã«ãŠéå¬ããã®ã§ãæ¬èšäºã§ã¯ãã®æ§åã«ã€ããŠã玹ä»ããŸãã phperkaigi.connpass.com PHPerKaigi mini ãšã¯ PHPerKaigi mini ã¯ãæè¡ã«ã³ãã¡ã¬ã³ã¹ãPHPerKaigiãã®ã¹ãã³ãµãŒäŒæ¥ããã³ã¹ãã³ãµãŒãæ€èšäžã®äŒæ¥ããã¹ããšãªããPHPer åãã«éå¬ãããå匷äŒã§ããããŒã¯ããŒãã¯å¿
ããã PHP é¢é£ã§ããå¿
èŠã¯ãªãããPHPer ãèããŠé¢çœããã°äœã§ãã¢ãªããšãããããããªã³ã³ã»ããã§éå¶ãããŠããŸãã ä»åã¯ç¬¬4åãšããŠãæã
BASE æ ªåŒäŒç€Ÿããã¹ããåããŸããã åœæ¥ã®é°å²æ° ç»å£è
ã»åå è
ããããŠ20åçšåºŠã«ãéãŸãããã ãã6æ¬ã® LT ãšæèŠªäŒã§å€§ãã«çãäžãããŸããã ã¡ãªã¿ã« BASE ããã¯ã @meihei ããCloudSearch ãã OpenSearch ãžåãæ¿ãããã©è³ªåããïŒããšé¡ããŠçºè¡šãè¡ããŸããã詳现ãªå
容ã«ã€ããŠã¯ãããããŸãå¥ã®åœ¢ã§ã¢ãŠãããããããäºå®ãªã®ã§æ¥œãã¿ã«ããŠããŠãã ããã ä»ã«ã¯ ADR ã®å®è·µãã Claude Code ã®å人éçºæŽ»çšãDI ãã¬ãŒã ã¯ãŒã¯ã®é«éåãŸã§ãããŒããå€å²ã«æž¡ã£ãã®ãæ¬ã€ãã³ããããç¹ã ã£ãã®ã§ã¯ãªãããšæããŸãã ãããã« åŒç€Ÿã§ã¯ä»åŸãæ©äŒãããã°ãšã³ãžãã¢ã€ãã³ãã®äŒå ŽæäŸãè¡ã£ãŠãããããšèããŠããŸãã®ã§ããæ°è»œã«ã声ãããã ããã æåŸã«ãBASE ã¯ãšã³ãžãã¢ã€ãã³ãã§ããããæ¥œãã¿ãããšããæ¹ã«éåžžã«ãããããç°å¢ã§ãããèå³ã®ããæ¹ã¯ããã²æ¡çšæ
å ±ãã芧ããã ããŸããšå¹žãã§ãã binc.jp
ã¯ããã« ãã®èšäºã¯ãå€ã®ããã°ãªã¬ãŒ2026 12æ¥ç®ãæçµæ¥ã®èšäºã§ãã ããã«ã¡ã¯ïŒPAY ID Product Divisionã®å²¡éšïŒ @rerenote ïŒã§ãã ãããŸã§ãã¡ããšãæšæ¶ããæ©äŒããããŸããã§ããããä»å¹Žã®4æãããã®ããã°ã®ç·šéé·ãåããŠããŸãã 8æäžæ¬ããã¹ã¿ãŒãããããã°ãªã¬ãŒããã€ãã«æçµæ¥ãšãªããŸããã ä»åã¯ããããŸã§ã®èšäºããããããŠã玹ä»ããªãããããã°ãªã¬ãŒãæ¯ãè¿ã£ãŠãããããšæããŸãã å€ã®ããã°ãªã¬ãŒ2026 äŒç»ã«ã€ã㊠ð BASE PRODUCT TEAM å€ã®ããã°ãªã¬ãŒ2026 ð ä»åã®ããã°ãªã¬ãŒã¯ããå€ã«ãããã°ãªã¬ãŒããã£ãŠã¿ãŸãããïŒããšããäŒç»ãæã¡èŸŒãã§ããã£ããšããããå§ãŸããŸããã æåã«ã話ã䌺ã£ãæã¯ããçææã ããå·çè
éãŸãããªïŒããšããè¥å¹²ã®äžå®ããããŸããããããåéããŠã¿ããšãã£ãšããéã«æ ãåãŸããã»ã£ãšããŸãããããããäŒç»ã«ãããã¯ãŒã¯è»œãåå ããŠãããæ¹ãå€ãããã€ãéåžžã«ããããã¿ãæããŠãããŸãã å€ã®ããã°ãªã¬ãŒ2026 æ¯ãè¿ã AI掻çšã«é¢ããèšäº åãåãã調æ»AIãšãŒãžã§ã³ãcs_aå°å
¥ã®èŠé£ãšãããã AIæä»£ã®ãšã³ãžãã¢ã«äœãå¿
èŠããããŸèªåãèããŠããããš iOSã¢ããªéçºã§ ãã«ãªã¯ã®åäœç¢ºèª ã¹ã¯ã·ã§ãèªåå Sentryã¢ã©ãŒããAIã§èªå調æ»ããSlack Botãäœã£ã話 äŒç€Ÿã®ã¯ãŠãªããã°éçšãHatenaBlog WorkflowsãšAIã§å¹çåãã æè¡ã®äœ¿ãæ¹ç޹ä»ã«é¢ããèšäº Slack ã¯ãŒã¯ãããŒãã GitHub Actions ãèµ·åãã è
åšã¢ããªã³ã°ã¯ãããŸãã ãã£ãŒãã£ãŒãã°ã«ããã£ãšEasyã«äœ¿ãã ãã«ãã¢ãŒãã«ãªååã«ããŽãªã®åé¡ã¢ãã« BASEã§ã®éçºã»éçšã«é¢ããèšäº ãäž»èŠSLOããå幎éçšããŠãåŸãããæå¿ããšèŠçŽããŠããã㚠顧客äžå¿äž»çŸ©ãéçºã®æææ±ºå®ã«çµã¿èŸŒãããã«å®è·µããããš ç·æ¬ æãå€ãã£ã話é¡ã¯ãAI掻çšã«é¢ãããã®ã§ããã BASE瀟å
ã§ãAIã®å°å
¥ã¯é²ãã§ãããéçºã«éããæ¥åã®ãããããªå Žé¢ã§æŽ»çšãããŠããŸããä»åã®ããã°ãªã¬ãŒã§ããå®éã®æ¥åã®äžã§ã©ã®ããã«AIãåãå
¥ããŠããã®ããããŸããŸãªäºäŸãéãŸããŸããã äžæ¹ã§ãæè¡ã®äœ¿ãæ¹ç޹ä»ãéçºã»éçšã«é¢ããèšäºãæçš¿ãããŠãããæ®æ®µã®æ¥åã®äžã§åŸãããç¥èŠãåãçµã¿ããå¹
åºã玹ä»ã§ããã®ã§ã¯ãšæããŸãã ç·šéé·ãšããŠãã®ããã°ã«ã€ããŠæããŠããããš ãã®ããã°ã«ã¯ãBASEã§ã®ä»äºã®äžã§çãŸããç¥èŠã詊è¡é¯èª€ããããã¯ãããŒã ã§ã®åºæ¥äºãªã©ãèšãããŠããŸãã æžã人ã«ãšã£ãŠã¯èªåã®ä»äºã®è¶³è·¡ãæ®ãå Žæãèªã人ã«ãšã£ãŠã¯BASEã®ããšãæ°ã«ãªã£ãæã«ç¥ãããã®æãããããã®ããã°ããããªå Žæã«ãªã£ãŠãããšãããªãšæããŠããŸãã æè¿ã§ã¯ãããã°ãšããã¡ãã£ã¢ãèªãŸããªããªã£ãŠããããšãã話ãè³ã«ããããã«ãªããŸããããã®èæ¯ã«ã¯æ
å ±åéã®ææ®µã®å€æ§åãäžå ãšããŠããã®ã ãšæããŸãã æ
å ±ã®å±ãæ¹ãåãåãæ¹ãå€ãã£ãŠããäžã§ããããšãã誰ãããã©ãã圢ã§èšé²ãæ®ã£ãŠããããšèªäœã«äŸ¡å€ããããšä¿¡ããŠãä»åŸããããããªãã°ãæ®ããŠãããããšèããŠããŸãã ãããã« å€ã®ããã°ãªã¬ãŒ2026ã«åå ããŠãã ãã£ãã¿ãªããŸãäŒç»ãæã¡èŸŒãã§ãããã¡ã³ããŒãããã°éå¶ãæ¯ããŠãããŠããç·šééšã¡ã³ããŒããããŠãã®èšäºãèªãã§ãã ãã£ãŠããã¿ãªããŸããã®å ŽããåãããŠã瀌ç³ãäžããŸããããããšãããããŸããïŒ å€ã®ããã°ãªã¬ãŒ2026ã¯ããã§çµäºãšãªããŸããããããããBASEã§ã®æ¥ã
ã®ä»äºããå±ãããŠãããŸãã®ã§ãããããé¡ãããããŸãã
ã¯ããã« ãã®èšäºã¯ãBASEããã¯ããã°å€ã®ããã°ãªã¬ãŒ11æ¥ç®ã®èšäºã§ãã BASE Dept. Product Divã«ãŠããã¯ãšã³ããšã³ãžãã¢ãããŠãã ãªãªã ã§ãã ã·ã§ãããªãŒããŒã®çºéé åãæ
åœããŠãããããã¯ãšã³ããäžå¿ã«ãããã³ããšã³ããNew Relicãªã©ãè§Šã£ãŠããŸãã 2026幎5æãæ
åœãããéãç¶äžæ¬å°å· Appãã®äžéšæ©èœããªãªãŒã¹ããŸããããããããªãªãŒã¹åŸã«åãã£ãã®ã¯ãæ³å®ããŠãã䜿ããæ¹ããããŠããªããšããããšã§ãããæ©èœèªäœã¯åããŠããŸãããéçºããŒã ãæ³å®ããŠããæäœãšãã·ã§ãããªãŒããŒã®å®éã®æäœãéã£ãŠããŸããã Appã®æŠèŠãäœ¿ãæ¹ã¯ä»¥äžãã芧ãã ããã éãç¶äžæ¬å°å· AppïŒBASE AppsïŒ apps.thebase.com çºéäœæ¥ã®æéã倧å¹
åæžïŒãéãç¶äžæ¬å°å· Appãã®äœ¿ãæ¹è§£èª¬ïŒBASE UïŒ baseu.jp æ¬èšäºã§ã¯ã顧客ã®å£°ãéçºã®æææ±ºå®ã«çµã¿èŸŒãããã«å®è·µãã3ã€ã®åãçµã¿ãšããã®å¹æã«ã€ããŠå
±æããŸãã 顧客äžå¿äž»çŸ©ãšã¯ ç§ã¯ä»äºã®äžã§ã顧客äžå¿äž»çŸ©ããšããèãæ¹ãå¿æããŠããŸãããã¿ããªã§ã¢ãžã£ã€ã«ãã§ç¥ã£ãèšèã§ãã ãã®æ¬ã§ã¯ãçµç¹å
šäœã§ã¢ãžã£ã€ã«ãå®è·µããããã®ååãšããŠã次ã®3ã€ã玹ä»ãããŠããŸãã ã顧客ããå§ããããæ©æããé »ç¹ã«ã³ã©ãã¬ãŒã·ã§ã³ããããäžç¢ºå®æ§ãèšç»ããã åŒçšïŒã¿ããªã§ã¢ãžã£ã€ã« âå€åã«å¯Ÿå¿ã§ãã顧客äžå¿çµç¹ã®ã€ããããïœO'Reilly Japan www.oreilly.co.jp ããšããšç§ã¯DDDãã¯ãªãŒã³ã¢ãŒããã¯ãã£ã奜ãã§ãèšèšã«é¢å¿ããããŸããããããã¯å€æŽå®¹ææ§ãé«ããããã®ææ®µã§ããããããã°HOWã«ããããŸãããã ãHOWãããã磚ããŠããäœãäœãããšããWHATãšãªãäœãã®ããšããWHYãå®ãŸã£ãŠããªããã°ææã«ã¯ã€ãªãããŸãããèªåã«ã¯ãã®WHATãè¶³ããŠããªããšæãã顧客äžå¿äž»çŸ©ãå®è·µããããšæããŸããã ãšã¯ãããèšèãšããŠç¥ã£ãŠããããšãšãæ¥ã
ã®éçºã§å®è·µã§ããŠãããã¯å¥ã§ãã ãªã顧客ã®å£°ãèãã«è¡ã£ãã®ã 以äžã®3ç¹ãçç±ã§ãã 1. éçºããŒã ã ãã§ã¯ãŠãŒã¹ã±ãŒã¹ã®æ³åã«éçããã æ°æ©èœã®éçºæããã®æ©èœã䜿ããããŠãŒã¹ã±ãŒã¹ãéçºããŒã ã ãã§æ³åããŠããŸãããããããã·ã§ãããªãŒããŒãçºéäœæ¥ã®éã«ã©ã®ç»é¢ãèŠãŠãäœãåºæºã«å€æããŠããã®ãã¯ææ¡ã§ããŠããŸããã§ããã 2. ããŒã ãåããæ¹åãæ±ºãããã£ããã«ãããã£ã ç§ã¯éãç¶äžæ¬å°å·Appéçºã®PJMãåããŠãããããŒã ãåãã£ãŠããæ¹åã¥ããæ
ã£ãŠããŸããããã®æ©èœãä»ããéçºãã¹ããªã®ããæ¬æ¥ã®è¶£æšããå€ããŠããããåŸã«åãã¹ããããšãã£ã倿ãã顧客ã®å®æ
ãããšã«è¡ããããšèããŸããã 3. AIã®å°å
¥ã§å®è£
ã¹ããŒããäžãããPDCAãåãããã£ã éçºã«AIãå°å
¥ããããšã§ãå®è£
ã¹ããŒããäžãããŸããããã ããäœãã¹ããŒããäžãã£ãŠããäœãäœããã®ç²ŸåºŠãäžãããªããã°å¹æã¯éå®çã§ãããªãªãŒã¹åŸã®åå¿ãæ©ãæŸããæ¬¡ã®æ¹åã«ã€ãªãããµã€ã¯ã«ãåããããšèããŸããã å®è·µâ ãŠãŒã¶ãŒã€ã³ã¿ãã¥ãŒã«ååžãã PdMã»ãã¶ã€ããŒã宿œããã·ã§ãããªãŒããŒãžã®ãŠãŒã¶ãŒã€ã³ã¿ãã¥ãŒã«ã3ã4åååžããŸãããèãã ãã§ã¯ãªããç§ãããããã€ã質åãããŠããŸãã æ³å®ããŠããåç·ãšå®éã®åç·ãç°ãªã£ãŠãã éãç¶äžæ¬å°å· Appã§ã¯ããå±ãå
äœæã®åæå€ã«è³Œå
¥è
ãã«ãŒãã§å
¥åããäœææ
å ±ããéãäž»æ
å ±ã®åæå€ã«Appã®èšå®ç»é¢ã§ç»é²ããäœææ
å ±ãèšå®ãããŸããåå¥ã«å€æŽãããå Žåã¯ã泚æç»é¢ã®éãç¶å°å·ã¢ã€ã³ã³ããã¢ãŒãã«ãéããŠå€æŽã§ããŸãã ãããã€ã³ã¿ãã¥ãŒã§ã¯ããã®ã¢ãŒãã«ã®ååšã«æ°ã¥ããŠããããŠããããããå±ãå
äœæãšéãäž»æ
å ±ã®åæå€ã¯å€æŽã§ããªãããšèªç¥ãããŠããããšãåãããŸããã æ³šæç»é¢ã®éãç¶å°å·ã¢ã€ã³ã³ïŒ2026幎9ææç¹ïŒ éãç¶å°å·ã¢ã€ã³ã³ããéããéãç¶å
容ãã¢ãŒãã«ïŒ2026幎9ææç¹ïŒ çºééç¥ã®å€±æãææ¡ãã¥ãããç¬èªéçšã§è£ãããŠãã çºééç¥ã«å€±æããŠããã·ã§ããåŽã§åŸããææ¡ãã¥ããç¶æ
ã«ãªã£ãŠããŸããããã®ãããæ³šæã¡ã¢ãªã©ã䜿ã£ãç¬èªéçšã§è£ã£ãŠããã±ãŒã¹ããããŸããã ãšã©ãŒã®æç¡ã ãã§ãªããå¯Ÿè±¡ã®æ³šæã»å€±æçç±ã»æ¬¡ã«åãã¹ãè¡åãåŸãã確èªã§ããå¿
èŠããããšèããŠããŸãã æ³šæç»é¢ãçºé倿ã®äžå¿çãªç»é¢ã«ãªã£ãŠãã ã€ã³ã¿ãã¥ãŒãéããŠã泚æç»é¢ãã·ã§ããã®æ¢±å
ã»çºéã倿ããããã®äžå¿çãªäœæ¥ç»é¢ã«ãªã£ãŠããããšãåãããŸãããã¡ã³ããŒã·ããç¹å
žãªã©ãçºé倿ã«å¿
èŠãªæ
å ±ã¯æ³šæç»é¢äžã§ç¢ºèªã»æ€çŽ¢ã§ãããšãããšèããŠããŸãã çºé倿ã®äžå¿ãšãªã泚æç»é¢ïŒ2026幎9ææç¹ïŒ 现ããªæ¹åã§ãçŸå Žã®å¶çŽãè§£æ¶ã§ãã åãåããã§æãã£ãŠããèŠæãããšã«ãéãç¶äžæ¬å°å· Appã§å°å·äœçœ®ãæå®ã§ããããã«ããŸããããã®åŸã®ãŠãŒã¶ãŒã€ã³ã¿ãã¥ãŒã§ã¯ããã®æ¹åã«ã€ããŠã·ã§ãããªãŒããŒããæè¬ã®å£°ãããã ããŸããã倧ããªæ©èœè¿œå ã§ã¯ãªããŠããçŸå Žã®å¶çŽãè§£æ¶ããæ¹åã«ã¯å®çšçãªäŸ¡å€ããããšæããŸããã ååžããŠåãã£ãããš éçºè
ã«ã¯èªæãªã¢ã€ã³ã³ãæäœã§ããåããŠäœ¿ãã·ã§ããã«ã¯æå³ãäŒãããªãå Žåããã UIã ãã§ãªããããŒã«ããããç»åä»ããã«ããªã©ãå«ããŠäœ¿ãæ¹ãäŒããå¿
èŠããã ã·ã§ãããªãŒããŒã®å©çšå®æ
ãåå¿ãçŽæ¥ç¥ãããšããéçºã®ç®çãšäŸ¡å€ã®åèªèã«ã€ãªãã å®è·µâ¡ åãåããå
容ã宿çã«ç¢ºèªãã BASEã®ã·ã§ãã管çç»é¢ã«ã¯åãåãããã©ãŒã ããããŸãããã®ã·ã§ãããªãŒããŒããå¯ããããåãåãããã宿çã«ç¢ºèªããããã«ããŸããã éçºäžã»ãªãªãŒã¹çŽåŸã®æ©èœã¯é±ã«æ°å確èªãã éçºäžã®æ©èœããªãªãŒã¹ããã°ããã®æ©èœã«ã€ããŠã¯ãé±ã«æ°å確èªããŠããŸãããŠãŒã¶ãŒã€ã³ã¿ãã¥ãŒãšéã£ãŠæ¥çšèª¿æŽãäžèŠãªããããªãªãŒã¹çŽåŸã®åå¿ãããã«æŸããŸãã SLI/SLOæ¯ãè¿ãäŒã®ã¢ãžã§ã³ãã«çµã¿èŸŒã åäººãæ°ã®åãããšãã«èŠãã ãã§ã¯ãèŠã人ãšèŠãªã人ãåãããããŒã ã®å€æææã«ãªããŸãããããã§ãOrder Sectionã§æ1å宿œããŠãããµãŒãã¹ã¬ãã«ïŒSLI/SLOïŒæ¯ãè¿ãäŒã®ã¢ãžã§ã³ãã«ã顧客ã®å£°ã確èªããæéãçµã¿èŸŒã¿ãŸããã SLI/SLOã®æ°å€ã¯ãã·ã¹ãã ãã©ãã ãå®å®ããŠåããŠãããã瀺ããŸãããããããã®æ°å€ã顧客ã«ãšã£ãŠååãã©ããã¯ãæ°å€ã ãã§ã¯åãããŸãããåãå Žã§é¡§å®¢ã®å£°ãæ±ãããšã§ãææšãšå®æ
ãçªãåãããŠè©±ããããšãçã£ãŠããŸãã èŠã€ãã声ã¯Slackã§ããŒã ã«å
±æãã éãç¶äžæ¬å°å· Appã«ã€ããŠã¯ãPdMãšç§ãåãåããå
容ãèŠãŠãæ°ã«ãªã£ã声ãSlackã§ããŒã ã¡ã³ããŒã«å
±æããŠããŸããçŸç¶ã¯ãã®åœ¢ã§åã£ãŠãããã¡ã³ããŒå
šå¡ãDBãèŠã«è¡ãç¶æ
ã«ã¯ãªã£ãŠããŸããã å®è·µããŠåãã£ãããš éãç¶äžæ¬å°å· Appã«ãããŠãæ³å®ããäœ¿ãæ¹ããããŠããªãããšãããã«èªç¥ã§ããæ¹ä¿®ãããªãªãŒã¹ãŸã§ã®ãµã€ã¯ã«ãçãåãããã¢ãžã£ã€ã«ã®å©ç¹ãåºãéšåã ãšæããŠãã SLI/SLOã®ãšã©ãŒããžã§ããã®æ°å€ãå®å®ããŠããŠããã·ã§ãããªãŒããŒã®åžæãæºãããŠãããšã¯éããªãããšãåãã£ã å®è·µâ¢ CXããŒã ã«ãã¢ãªã³ã°ãã CXããŒã ã¯ãã·ã§ãããªãŒããŒãšç¶ç¶çã«ã³ãã¥ãã±ãŒã·ã§ã³ãåããªãããã·ã§ããéå¶ã®èª²é¡è§£æ±ºããBASEãã®æŽ»çšãæ¯æŽããããŒã ã§ãããã®CXããŒã ã«MTGã®æéããããããã¢ãªã³ã°ãããŸããã éæ©èœèŠä»¶ã®èª²é¡ãèŠã€ããç®çã§å£°ãããã CXããŒã ãæ
åœããã·ã§ãããªãŒããŒã®äžã«ã¯ãèŠæš¡ã®å€§ããã·ã§ãããå€ãå«ãŸããŸããæ³šæã»çºéé åã®ããã©ãŒãã³ã¹ãªã©ãéæ©èœèŠä»¶ã®èª²é¡ãèŠã€ããããã®ã§ã¯ãªãããšèãã声ããããŸããã å®è·µâ ã®ãŠãŒã¶ãŒã€ã³ã¿ãã¥ãŒããå®è·µâ¡ã®åãåããå
å®¹ã§æŸããã®ã¯ãäœ¿ãæ¹ãæ©èœã«é¢ããå
容ãäžå¿ã§ããäžæ¹ã§ã衚瀺é床ã®ãããªéæ©èœèŠä»¶ã®è©±ã¯ãåãåãããšããŠäžãã£ãŠããªãããšããããŸãã éçºããŒã ããã¯èŠããŠããªãã£ã課é¡ãææ¡ã§ãã ãã¢ãªã³ã°ãéããŠãéçºããŒã ããã¯èŠããŠããªãã£ãéæ©èœèŠä»¶ã®èª²é¡ãææ¡ã§ããŸãããå
·äœçãªå
容ã¯ããã§ã¯å²æããŸãããå®è·µâ¡ã§æžãããšãããSLI/SLOãèŠãŠããã ãã§ã¯æ°ã¥ããªãå
容ã§ããã åçºã®MTGããç¶ç¶çãªããåããž ãã¢ãªã³ã°ã®MTGèªäœã¯äžåºŠã ãã§ããããã®åŸãCXããŒã ãšã®ããåãã¯ç¶ããŠããŸãã å®è·µããŠåãã£ãããš éæ©èœèŠä»¶ã®èª²é¡ã¯ãã·ã§ãããªãŒããŒãšæ¥åžžçã«æ¥ããŠããããŒã ã®ã»ãã宿
ãææ¡ããŠããå Žåããã ãšã³ãžãã¢ããä»éšçœ²ã«å£°ããããããšã§ãäžåºŠã®ãã¢ãªã³ã°ã ãã§ãªãç¶ç¶çãªçžè«å
ãã§ãã äœãå€ãã£ãã æ¹åã¿ã¹ã¯ã®èµ·ç¥šæ°ãå¢ãã Order Sectionã«ã¯è€æ°ããŒã ããããç§ãæå±ããããŒã ã§ã¯ã泚æç»é¢ãçºéé åã«é¢ããæ¹åã¿ã¹ã¯ã®èµ·ç¥šæ°ã¯ã以äžã®ããã«å€åããŸããã 2ã6æïŒæ2ã4ä»¶ 7æä»¥éïŒæ7ã8ä»¶ 7æããã«ãŠãŒã¶ãŒã€ã³ã¿ãã¥ãŒã宿œããããã§åŸãå
容ãããšã«èª²é¡ã®æŽãåºããã起祚ãå®è£
ããªãªãŒã¹ãŸã§ãè¡ããŸããã顧客ã®å£°ãèãããšã§ããããŸã§èŠããŠããªãã£ã課é¡ãå¯èŠåãããã¿ã¹ã¯ãšããŠèµ·ç¥šã§ããããã«ãªã£ãããšã倧ãããšèããŠããŸãã ãšã³ãžãã¢ããææ¡ããŠã¿ã¹ã¯åããå Žé¢ãå¢ãã ãããŸã§ã¯ãBizããŒã ã顧客åãåããã®å€ããéã¿ãŠãå¥éšçœ²ããäŸé Œãããæ¡ä»¶ãã¿ã¹ã¯åããŠããããšãå€ãã£ãã§ãã顧客ã®å£°ãçŽæ¥ç¥ãããã«ãªã£ãŠããã¯ããšã³ãžãã¢ããPdMããã¶ã€ããŒã«ææ¡ããã¿ã¹ã¯åããŠæ¹åã«ã€ãªããå Žé¢ãå¢ããŸããã è·çš®ãè¶å¢ããŠãäž»äœçã«æ¹åã¿ã¹ã¯ãæšé²ã§ããããã«ãªã£ãããšããä»åã®äžçªå€§ããªå€åã ãšæããŠããŸãã顧客ã®å£°ããäœãäœãããæ±ºããéã®ææãšããŠéçºã®æææ±ºå®ã«å
¥ãããã«ãªã£ãããšãèšããŸãã ããŸããããªãã£ãã㚠課é¡ãå¯èŠåãããAIã«ãã£ãŠå®è£
ãéããªã£ãŠãããããã¿ã¹ã¯ã䞊åã§é²ããããšããŠããŸããŸãããçµæãèªèº«ãç²åŒããŸããã 顧客ã®å£°ãèããšãæ¹åãã¹ãããšã¯ç¢ºå®ã«å¢ããŸããå®è£
ã¹ããŒããäžãã£ãããšã§ãããããã¯ãããšæã£ãŠããŸã£ãã®ãåå ã ãšèããŠããŸãã声ãéããä»çµã¿ã ãã§ãªããéãŸã£ããã®ãçµãåŽã®å€æãå¿
èŠã ãšæããŠããŸãã ããããããããããš BASEã³ãã¥ãã㣠Meetupã«åå ãã åŒç€Ÿã§ã¯ã·ã§ãããªãŒããŒåãã®ã³ãã¥ããã£ããŒã¿ã«ãéå¶ããŠããããã®äžã€ã®åãçµã¿ãšããŠBASEã³ãã¥ãã㣠Meetupãéå¬ããŠããŸãã BASEã³ãã¥ããã£ããŒã¿ã« community.thebase.com ååã¯ãã¡ãïŒBASEã³ãã¥ãã㣠Meetup vol.15 倧éªïŒ2026幎8æéå¬ïŒ community.thebase.com ä»åŸã¯éå¶åŽãšããŠãã®å Žã«é¢ãããã·ã§ãããªãŒããŒã®å£°ãçŽæ¥èããŠçºéé åã®æ¹åã«ã€ãªããŠããããã§ãã éæ©èœèŠä»¶ã®èª²é¡ããã£ãšæŽãåºã CXããŒã ãžã®ãã¢ãªã³ã°ã§ãéæ©èœèŠä»¶ã®èª²é¡ã¯éçºããŒã ããèŠãã«ããããšãåãããŸãããæ©èœèŠä»¶ã ãã§ãªããéæ©èœèŠä»¶ã®èª²é¡ãæŽãåºããŠæ¹åããŠãããããšèããŠããŸãã ãããã« æ¬èšäºã§ã¯ã顧客äžå¿äž»çŸ©ãéçºã®æææ±ºå®ã«çµã¿èŸŒãããã«å®è·µãã3ã€ã®åãçµã¿ã玹ä»ããŸããã éçºããŒã ã®äžã ãã§é¡§å®¢ã®äœ¿ãæ¹ãæ³åããŠããç¶æ
ããã顧客ã®å®æ
ãããšã«æ¹åãææ¡ã§ããç¶æ
ã«å€ãããŸããããã ããå¯èŠåã§ããŠããã®ã¯æ©èœèŠä»¶ã«é¢ããèŠæãäžå¿ã§ããéæ©èœèŠä»¶ã®èª²é¡ã¯ãŸã é ããŠãããã®ãå€ãããããã©ãèŠã€ããŠããããä»åŸã®èª²é¡ã§ãã åŒç€Ÿã§ã¯ã顧客ã®å£°ãããšã«ãããã¯ããæ¹åããŠããããšã«é¢å¿ã®ãããšã³ãžãã¢ãç©æ¥µæ¡çšããŠããŸããèå³ãæã£ãŠããã ãããããã²äžèšãããå¿åãã ããïŒ binc.jp ææ¥ã¯ãBASEããã¯ããã°å€ã®ããã°ãªã¬ãŒã®ã©ã¹ãã食ããrerenoteããã®èšäºã§ãããæ¥œãã¿ã«ïŒ
ã¯ããã« ããã«ã¡ã¯ïŒPAY ID Product Divisionã®å²¡éšïŒ @rerenote ïŒã§ãã ä»åã¯BASEãã·ã«ããŒã¹ãã³ãµãŒãšããŠåè³ããŠããã«ã³ãã¡ã¬ã³ã¹ã Product Engineering Conference 2026 ã®ã玹ä»ãšãªããŸãã product-engineering.jp Product Engineering Conference 2026 æŠèŠ Product Engineering ConferenceïŒç¥ç§°: PdEConf / PdE ConfïŒã¯ãè·èœã®å£ãè¶ãããããã¯ã䟡å€ãæå€§åãããããã®ãæè¡ããšãç¥æµããå
±æããè°è«ããé«ãåãå Žãäœãããšãç®çãšããŸãã Product Engineering Conference 2026 å
¬åŒãµã€ã Product Engineering Conferenceã¯ããããã¯ããšã³ãžãã¢ãªã³ã°ããããŒããšããŠåéå¬ãããã«ã³ãã¡ã¬ã³ã¹ã§ãã 2026/9/5ïŒåïŒãäžéã»ã³ãã©ã«ããŒã¯ã«ã³ãã¡ã¬ã³ã¹ã§éå¬ãããŸãã ç»å£ã¡ã³ããŒã®ãçŽ¹ä» BASEã§æŽ»èºããŠããã¡ã³ããŒã®ãã¡ã1åãç»å£äºå®ã§ããåå ãããæ¹ã¯ãã²èãã«ããããŠãã ããã ãšã³ãžãã¢ãªã³ã°ã¯ãã©ããŸã§æ¡å€§è§£éã§ããã å¿æäœãã€ãªãã ãŸãŸã§äºæ¥è²¬ä»»è
ã«ãªã£ã話 æ³å· æ
¶å€ªïŒ @gimupop ïŒ Hall A 11:30 ç»å£è
ã¡ãã»ãŒãž 責任感を持て、と言うだけなら無責任です|柳川慶太 ã®å
容ãããŒã¹ã«ã話ããäºå®ã§ãã fortee.jp note.com ãããã« åå ãã±ããã¯å®å£²ããŠããŸãããåŸæ¥ã€ãã³ãã¬ããŒãããå±ãã§ããã°ãšæã£ãŠããŸããã¿ãªããŸã«ãäŒãã§ããããšã楜ãã¿ã«ããŠãããŸãïŒ çºè¡šãªã©ãèŠãŠBASEã§åãããšã«èå³ãæã£ãæ¹ã¯ããã²æ¡çšæ
å ±ãã芧ãã ããã binc.jp
ã¯ããã« ãã®èšäºã¯ãBASEããã¯ããã°å€ã®ããã°ãªã¬ãŒ10æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ãData StrategyããŒã ã®ç«¹å
ã§ãã BASEã§ã¯æ¥ã
æ°å€ãã®å€çš®å€æ§ãªååãæ°ããç»é²ãããŠããŸãããããã®ååããäœã®ã«ããŽãªã®ååãªã®ãããæ©æ¢°åŠç¿ã¢ãã«ã§èªåçã«æšè«ããä»çµã¿ãã以åãããããåŠçåºç€ãšããŠéçšããŠããŸããã ä»åããã®ã¢ãã«ã ååããã¹ããšååç»åã®äž¡æ¹ãå
¥åã«åããã«ãã¢ãŒãã«ãªã¢ãã« ã«çœ®ãæããã®ã§ããã®çµç·¯ãã¢ãã«ã®äžèº«ã«ã€ããŠç޹ä»ããŸãã ã¯ããã« TL;DR ãªãååã«ããŽãªãæšè«ããã®ã ãããŸã§ã®åãçµã¿ãšãç»åã䜿ããããªã£ãçç± äœ¿çšããã¢ãã« 1. ç»åã3ã€ã®ããŒã¯ã³ã«å€ãã 2. ç»åç¹åŸŽããBERTã®ããŒã¯ã³ãã«ç¿»èš³ãã 3. 1æ¬ã®Transformerã«æµã蟌ã 4. åé¡ãšåã蟌ã¿ã®åãåºã çµæ åã蟌ã¿ãã¯ãã«ã®æŽ»çš ãããã« â» èšäºå
ã®ã³ãŒãã¯ãµã³ãã«ãšããŠç°¡ç¥åããŠããŸãã TL;DR ååã¿ã€ãã«ã»èª¬ææãªã©ã®ããã¹ããšãååç»åã®äž¡æ¹ãå
¥åãšããååã«ããŽãªåé¡ã¢ãã«ãäœæããŸãã ã¢ãã«ã¯ MMBTïŒSupervised Multimodal BitransformersïŒãããŒã¹ã«ãç»ååŽã Swin Transformerãããã¹ãåŽãæ¥æ¬èªBERTïŒ tohoku-nlp/bert-base-japanese-v3 ïŒã«çœ®ãæãããã®ã§ã åŠç¿ããŒã¿ã¯çŽ100äžä»¶ã®ååã§ãã©ãã«ïŒ498ã¯ã©ã¹ã®éå±€ã«ããŽãªïŒã¯LLMã«ããã¢ãããŒã·ã§ã³ã§ä»äžããŸãã ãªãååã«ããŽãªãæšè«ããã®ã BASEã«ã¯æ¯æ¥ããŸããŸãªååãç»é²ãããŸãããããã®ååãã©ã®ã«ããŽãªã«å±ãããããæšªæçã«ææ¡ããããšã¯å°é£ã§ããã·ã§ããåŽã§èšå®ãããã·ã§ããã«ããŽãªã¯ä»»æé
ç®ã§ããããŸããã·ã§ããã®ã«ããŽãªããšããã®ã·ã§ãããå®éã«å£²ã£ãŠããåã
ã®ååã®ã«ããŽãªãã¯å¿
ãããäžèŽããŸããã ããã§ãååããšã«ã«ããŽãªãæ©æ¢°åŠç¿ã§æšè«ããŠä»äžããŠããŸããçšéã¯å€§ãã3ã€ãããŸãã åæåºç€ãšããŠã®æäŸ ⊠ã«ããŽãªããšã®æµéé¡ã»ç»é²æ°ã»äžæ£æ±ºæžã®çºçç¶æ³ãšãã£ããååå
šäœåã«å¯Ÿããè§£å床ãäžããããã®åæè»ž äžæ£æ€ç¥ã¢ãã«ã®ç¹åŸŽé âŠ äžæ£æ±ºæžã®æ€ç¥ãäžæ£ãªååç»é²ã®æ€ç¥ãªã©ãåçš®ã¢ãã«ã®ç¹åŸŽéãšããŠå©çš ãããã¯ãã§ã®æŽ»çš ⊠æšèŠãæ€çŽ¢ãªã©ãã¢ããªåŽã®æ©èœã§ã®å©çš ãããŸã§ã®åãçµã¿ãšãç»åã䜿ããããªã£ãçç± ååã«ããŽãªã®æšè«ãã®ãã®ã¯æ°ããåãçµã¿ã§ã¯ãªãã2022幎ã«BERTã䜿ã£ãã¢ãã«ãšãã®æšè«åºç€ã«ã€ããŠèšäºãæžããŠããŸãã devblog.thebase.in ãã®ãšãã®ã¢ãã«ã¯ååã¿ã€ãã«ãšèª¬ææãçµåããããã¹ãã®ã¿ãå
¥åãšãããã®ã§ãèšäºã§ãç»åã®å©çšã¯ä»åŸã®èª²é¡ãšããŠããŸããã ååã«ãã£ãŠã¯ã説æãç°¡çŽ ã§çããã®ãã賌å
¥è
ãšã®ããåããæ³šæäºé
ã®ã¿ãèšèŒããŠãããã®ãªã©ãããã¹ãã ãã§ã¯äœã®ååã倿ã§ããªãååãäžå®æ°ãããŸããäžæ¹ã§ãããããååã§ãç»åãèŠãã°äººéã«ã¯äžç®ã§åããããšãå€ããããŸãã éã«ãååã®å€è£
ãã€ã¡ãŒãžã ãã®ãã®ãªã©ãç»åã ãã§ã¯å€æãã€ããªãååãååšããŸããããã¹ããšç»åã¯äºãã«è£ãåãé¢ä¿ã«ãããäž¡æ¹ããã©ã³ã¹è¯ãæ±ããããã«ãããããšããã®ããã«ãã¢ãŒãã«ã¢ãã«ã䜿çšããäž»ãªåæ©ãšãªããŸãã ããããŠãåé¡å
ã®ã«ããŽãªãèŠçŽããŠããŸããåŸæ¥ã®ã¢ãã«ã¯100ã¯ã©ã¹çšåºŠã®åé¡ã¢ãã«ã§ãã£ãã®ã«å¯Ÿããä»åã¯éå±€æ§é ãæã€ã«ããŽãªãã¹ã¿ã®ãã«ãã¹ïŒäŸ: ã°ã«ã¡ã»é£²æ/ã¹ã€ãŒãã»ãèå/ã±ãŒã ïŒã1ã€ã®ã¯ã©ã¹ãšã¿ãªãã 498ã¯ã©ã¹ã®ã·ã³ã°ã«ã©ãã«åé¡ã«ããŠããŸãã 䜿çšããã¢ãã« ãã«ãã¢ãŒãã«ãªã¢ãã«ã«ã¯æ§ã
ãªéžæè¢ããããŸãããä»å㯠MMBT (MultiModal BiTransformer) ãæ¡çšããŸããã github.com ã¢ã€ãã¢ã¯ãšãŠãã·ã³ãã«ã§ãç»åãæ°åã®ãåèªãã®ãããªããŒã¯ã³ã«å€æããŠãããã¹ãããŒã¯ã³ãšäžç·ã«åã1æ¬ã®Transformerã«æµã蟌ããšãããã®ã§ããç»åãšããã¹ããããããå¥ã®ãšã³ã³ãŒãã«éããŠæåŸã«ãã¯ãã«ãçµåããã®ã§ã¯ãªããæåããåãself-attentionã®äžã§æ··ããŠããŸãã¢ãããŒãã«ãªããŸãã https://arxiv.org/abs/1909.02950 ããåŒçš ãã®éãattentionå
ã§åã
ã®ããŒã¯ã³ãã©ã®ã¢ãŒãã«ã«å¯Ÿå¿ããã®ãããToken Type EmbeddingïŒã»ã°ã¡ã³ãåã蟌ã¿ïŒã«ãã£ãŠåºå¥ããŠããŸãããã¡ãã¯åŸæ¥ãããã¹ãæã質åãšåçã®ã©ã¡ãã«è©²åœããããªã©ã®ããŒã«ãŒãšããŠäœ¿çšããŠãããã®ã§ãããMMBTã§ã¯ãã®ããŒã¯ã³ãå±ããã¢ãŒãã«ã«ãã£ãŠå€ãå€ããEmbeddingãäœçœ®åã蟌ã¿ãªã©ãšåæ§ã«ãããããã®ããŒã¯ã³ã«å ç®ããŠããŸãã ãŸããæ¬å®è£
ã§ã¯ãè«æã®ãªãªãžãã«å®è£
ããæ¬¡ã®2ç¹ã眮ãæããŠããŸãã ç»åãšã³ã³ãŒã: ResNet â Swin Transformer ( swin_base_patch4_window7_224.ms_in22k ) ããã¹ããšã³ã³ãŒã: è±èªBERT â æ¥æ¬èªBERT ( tohoku-nlp/bert-base-japanese-v3 ) å®è£
ã¯è²¬åããšã«4ã€ã®ã¯ã©ã¹ãç©ã¿äžãã圢ã«ãªã£ãŠããŸãã以äžãå
åŽããé ã«èŠãŠãããŸãã 1. ç»åã3ã€ã®ããŒã¯ã³ã«å€ãã ImageEncoder ã¯ã224Ã224 ã®ç»åã Swin Transformer ã«éã㊠7Ã7 ã®ç¹åŸŽãããã«ããããã3ã€ã®é åã«å¹³åããŒãªã³ã°ããŠ3æ¬ã®ç¹åŸŽãã¯ãã«ïŒå1024次å
ïŒã«èŠçŽããŸãããã®3æ¬ããç»åããŒã¯ã³ã®çŽ ãã«ãªããŸãã class ImageEncoder (nn.Module): def __init__ (self, num_image_embeddings: int = 3 ): super ().__init__() model = timm.create_model( "swin_base_patch4_window7_224.ms_in22k" , pretrained= True , num_classes= 0 , ) # avg poolingãšæåŸã®linearå±€ãé€å€ modules = list (model.children())[:- 2 ] self.model = nn.Sequential(*modules) self.pool = nn.AdaptiveAvgPool2d((num_image_embeddings, 1 )) def forward (self, x): out = self.model(x) out = out.permute( 0 , 3 , 1 , 2 ).contiguous() out = self.pool(out) out = torch.flatten(out, start_dim= 2 ) return out.transpose( 1 , 2 ).contiguous() ç»åãäœããŒã¯ã³ã«èŠçŽãããã¯ãã€ããŒãã©ã¡ãŒã¿ã§ãããã§ã¯3ãšããŠããŸããããŒã¯ã³æ°ãå¢ããã»ã©ç»åã®æ
å ±ã¯çްããæ®ããŸããããã®ã¶ãããã¹ãã«äœ¿ããããŒã¯ã³åãçããªããŸãã 2. ç»åç¹åŸŽããBERTã®ããŒã¯ã³ãã«ç¿»èš³ãã BERTã®ããã¹ãããŒã¯ã³ã®åã蟌ã¿ã¯ãå®éã«ã¯ åèªåã蟌㿠+ äœçœ®åã蟌㿠+ ã»ã°ã¡ã³ãåã蟌㿠ã®è¶³ãç®ã§ã§ããŠããŸããç»åããŒã¯ã³ããŸã£ããåãäœãæ¹ã«ããããšã§ãBERTã¯ç»åãããã¹ãããŒã¯ã³ãšåæ§ã«æ±ãããšãã§ããŸãã ImageBertEmbeddings ã§ã¯ã Swin ã®åºåïŒ1024次å
ïŒã nn.Linear(1024, 768) ã§BERTã®é ãæ¬¡å
ã«å°åœ±ã äœçœ®åã蟌ã¿ã¯ããã¹ãåŽãšåããã®ãå
±æã ç»åãããã¹ãããåºå¥ããã»ã°ã¡ã³ãåãèŸŒã¿ ïŒ nn.Embedding(2, 768) ïŒãæ°ãã«å®çŸ©ããŠå ç®ãã ãšããåŠçãè¡ããŸããBERTã®å®è£
ã«ãã£ãŠã¯ãã®ãŸãŸäœ¿ãã token_type_embeddings ãç¡ãã±ãŒã¹ãããããããã¡ãã§å®çŸ©ããŠããŸãã ããã«å
é ã« [CLS] ãæ«å°Ÿã« [SEP] ã®åèªåã蟌ã¿ãè¶³ãã®ã§ãç»åããŒã¯ã³ã®åæ°ã3ã®å Žåãåžžã« åºå®é·5ããŒã¯ã³ ã®äžŠã³ã«ãªããŸãã [CLS] ç»å1 ç»å2 ç»å3 [SEP] ããã¹ã1 ããã¹ã2 ... ããã¹ãN [PAD] ... |___________________________| |_________________________________________| ç»åããŒã¯ã³ïŒåºå®5åïŒ ããã¹ãããŒã¯ã³ïŒå¯å€é·ïŒ ããã¹ãåŽã¯æ¥æ¬èªBERTã®tokenizerã§ããŒã¯ã³åããæå€§é·ã¯ 512 - ç»åããŒã¯ã³æ° ã«åãè©°ããŸãã 3. 1æ¬ã®Transformerã«æµã蟌ã MultimodalBertEncoder ã¯ãç»åããŒã¯ã³åãšããã¹ãããŒã¯ã³åãæšªã«é£çµããŠ1æ¬ã®ã·ãŒã±ã³ã¹ã«ããBERTã®ãšã³ã³ãŒãã«éããŸãã ãã®ãšã attention mask ã¯ã ç»åéšåã¯åžžã«1 ïŒå¿
ãå
šéšèŠãïŒãããã¹ãéšåã¯å®ããŒã¯ã³ã ã1ã»ããã£ã³ã°ã¯0ããšãã圢ã§äœã£ãŠããŸãã attention_mask = torch.cat( [torch.ones(bsz, self.num_image_embeds + 2 ).long(), attention_mask], dim= 1 , ) extended_attention_mask = attention_mask.unsqueeze( 1 ).unsqueeze( 2 ) extended_attention_mask = extended_attention_mask.to(dtype= next (self.parameters()).dtype) # 1ã®éšåã¯0ã«ã0ã®éšåã¯-10000.0ã«å€æãã extended_attention_mask = ( 1.0 - extended_attention_mask) * - 10000.0 ããšã¯éåžžã®BERTãšåãã§ãå
šããŒã¯ã³ãäºãã« attention ã匵ãåããæåŸã« pooler ãå
šäœã768次å
ã®ãã¯ãã«ã«èŠçŽããŸãã 4. åé¡ãšåã蟌ã¿ã®åãåºã æåŸã® MultimodalBertClf ã¯ãpooler ã®åºåïŒ768次å
ïŒã nn.Linear(768, ã¯ã©ã¹æ°) ã«éããŠã«ããŽãªã®ã¹ã³ã¢ãåºãã ãã®èãã¯ã©ã¹ã§ãã class MultimodalBertClf (nn.Module): def __init__ (self, n_classes, model, vocab, hidden_size: int = 768 ): super ().__init__() self.enc = MultimodalBertEncoder(model=model, vocab=vocab) self.clf = nn.Linear(hidden_size, n_classes) def forward (self, txt, mask, segment, img): return self.clf(self.enc(txt, mask, segment, img)) def embeddings (self, txt, mask, segment, img): # åé¡åã®ç¹åŸŽéãè¿ã return self.enc(txt, mask, segment, img) ãã®768次å
ãã¯ãã«ã¯ãååããã¹ããšååç»åã®äž¡æ¹ãèŠçŽãããã¯ãã«ããªã®ã§ãã«ããŽãªåé¡ä»¥å€ã®äžæµã¿ã¹ã¯ã«ã転çšã§ããŸããæšè«æã«ã¯ã«ããŽãªãšäžç·ã«ãã®åã蟌ã¿ãä¿åããŠããŸãã çµæ åŠç¿ã¯GeForce RTX 5090ãç©ãã ãªã³ãã¬ãµãŒããŒã§æ°æ¥çšåºŠè¡ããæ€èšŒããŒã¿å
šäœã§ã®accuracyã¯90%ã§ãããæšè«ãããã®äœæåŸãæ°èŠç»é²ãããååã察象ã«å®æ§çãªæ€èšŒã宿œãããšããã498ã¯ã©ã¹ã®ãã¡æ¯èŒçå°æ°ã®ã¯ã©ã¹ã«é¢ããŠããããçšåºŠæ£ç¢ºã«æšè«ã§ããŠããŸããã ãŸããåŸæ¥ã®ããã¹ãã®ã¿ã«ããåé¡ã§ã¯å€å¥ãé£ããã£ãååã«ã€ããŠããé©åã«åé¡ã§ããŠããããšã確èªã§ããŸããã åã蟌ã¿ãã¯ãã«ã®æŽ»çš å
è¿°ã®éãããã®ã¢ãã«ããã¯ã«ããŽãªã ãã§ãªããåé¡åšæåã®768次å
ã®åã蟌ã¿ãã¯ãã«ãåãåºããŸããããã¯ãããã¹ããšç»åã®äž¡æ¹ãèžãŸããååã®è¡šçŸããªã®ã§ãã«ããŽãªãšãã498åã®æ ã«äžžããåã®ããã现ããæ
å ±ãæã£ãŠããŸãã æå
ã§è¿åæ¢çŽ¢ã詊ããšãåãã«ããŽãªã®äžã§ãèŠãç®ãååã®é°å²æ°ãè¿ããã®ãäžäœã«äžŠã¶ããšã確èªã§ããŸããããã®åã蟌ã¿ã¯ãååã®æšèŠãæ€çŽ¢ããããã¯ä»ã®æ©æ¢°åŠç¿ã¢ãã«ã®ç¹åŸŽéãšããŠã®æŽ»çšãæ³å®ããŠããŸãã ãããã« ä»åã¯ãããã¹ããšç»åã®åæ¹ãæ±ããã«ãã¢ãŒãã«ã¢ãã«ã«ããååã«ããŽãªåé¡ã®åãçµã¿ã玹ä»ããŸããã ä»åå©çšããMMBTã¯ãããããã®ã¢ãŒãã«ã®ãšã³ã³ãŒããããçšåºŠèªç±ã«éžæã§ããç¹ãã¯ã©ã¹åé¡ã«ç¹åããŠããå®è£
ãã·ã³ãã«ãªç¹ãé
åã§ãããŸããå°ã工倫ãå ããã°è€æ°ã®ç»åãžã®å¯Ÿå¿ãç»å以å€ã®ã¢ãŒãã«ã®å©çšãã§ãããã§ãããä»åŸã掻çšã®å¹
ãåºããããããšæã£ãŠããŸãã æåŸã«ãBASEã§ã¯æ§ã
ãªè·çš®ã§äžç·ã«ãããã¯ããäœãäžããŠããã¡ã³ããŒãåéããŠããŸãã èå³ã®ããæ¹ã¯ããã²ãæ°è»œã«æ¡çšæ
å ±ãã確èªãã ããïŒ binc.jp ææ¥ã¯oliverããã«ããã顧客äžå¿äž»çŸ©ãéçºã®æææ±ºå®ã«çµã¿èŸŒãããã«å®è·µããããšãã«é¢ããèšäºã§ãïŒ
ã¯ããã« ããã«ã¡ã¯ãããã¯ãšã³ããšã³ãžãã¢ã®ããã®ïŒ @ykagano ïŒã§ãã 2026/8/27ïŒæšïŒã«ãPHP Tech Talk Night ïœ after phpcon 2026 ïœããååéå¬ããŸããã æ¬èšäºã§ã¯ãåœæ¥ã®ç»å£å
容ãäŒå Žã®æ§åã«ã€ããŠãå±ãããŸãïŒ ã€ãã³ãæŠèŠ ãPHPã«ã³ãã¡ã¬ã³ã¹ã®ç±éãæ¬¡ã«ã€ãªããããããŒãã«ãæ ªåŒäŒç€ŸviviONããŸã»æ ªåŒäŒç€ŸkubellããŸã»ãã¯ã·ãæ ªåŒäŒç€ŸããŸã»BASEæ ªåŒäŒç€Ÿã®4瀟ååã§éå¬ããäŒå Žã¯æ ªåŒäŒç€ŸviviONããŸã®ãªãã£ã¹ããåãããŸããã vivion.connpass.com BASEããã®ç»å£ 人æ°ååããã¡ãããšè²·ããããã€ãã â ECã®è² è·æ¹åïŒããã®ïŒ ä»åã®çºè¡šã§ã¯ã2026幎1æããããŒã ã§è² è·æ¹åã«åãçµãã ã話ããããŠããã ããŸããã 3人ã®ããŒã ã§ãããããŸãè² è·ãã¹ãç°å¢ã®æ§ç¯ã«å
šå¡ã§åæ
ããªããåãçµã¿ãŸããã ãããŠå®éã®è² è·æ¹åã§ã¯ããã°ã®èšæž¬ãè¡ããåæããŠä»®èª¬ãç«æ¡ãã察çãè¡ã£ãäžã§ãè² è·ãã¹ãç°å¢ã§ã®æ€èšŒãè¡ããŸãã ãã®äžé£ã®æµãã«ã€ããŠã€ã¡ãŒãžããäŒãã§ããŠãããå¬ããã§ãã speakerdeck.com åå ããã¡ã³ããŒã®ã³ã¡ã³ã meihei( @meihei ) PHPã«ã³ãã¡ã¬ã³ã¹ã®éå¬äžã«ã€ãã³ãã®ååšãæããŠããããç±éãã®ãŸãŸã«åå ãããŠããããŸããã20åã®ããŒã¯ãçãã ãããã§ãã©ããé¢çœããåŠã³ã®å€ããã®ã°ããã§ããã ç¹ã«ãPHPã«ã³ãã¡ã¬ã³ã¹ã§èãã viviON ããã®ã¬ã¬ã·ãŒã³ãŒããšåãåãè©±ïŒ 30幎䟡å€ãåºãç¶ããŠããPHPãããã¯ã ââ ã¬ã¬ã·ãŒãšåãåãæâ»ããæŠç¥ ïŒãé¢çœãã£ãããšããããåã viviON ããïŒäŒå ŽæäŸããããšãããããŸãïŒã®ç«¹äžããã®ãè©±ãæ¥œããèããŸãããçãã¬ã¬ã·ãŒãšåãåããªãããããã¯ããæé·ãããæŠç¥ã®è©±ãçãããã ã¢ããã§è¯ãåãçµã¿ãåãå
¥ããŠãã話ãç®æããŽãŒã«ãåããšããã«ããã®ãè¯ãã£ãã§ãã çŸå°ã§èŠãã»ãã·ã§ã³ã®ææ³ ã©ã®ã»ãã·ã§ã³ãåŠã³ãå€ãã£ãã®ã§ãããããã§ã¯ã²ã¹ãç»å£ããã ããã»ãã·ã§ã³ããçŸå°ã§ X ã«æçš¿ããææ³ãšããããŠç޹ä»ããŸãã ããšã¿ãã®ç»å£è³æã®äœãæ¹ãç»å£ã¯ãããã / @kotomin_m speakerdeck.com ã¹ã©ã€ãã®ãã¶ã€ã³äœãããã ð¯ #php_night pic.twitter.com/VLGy7YBQ73 — ykagano (@ykagano) 2026幎8æ27æ¥ PHPãããžã§ã¯ãã®çµåãã©ã³ã¹ãå¯èŠåãã / @kajitack speakerdeck.com 匷床ãšè·é¢ãšå€åæ§ã«ãã£ãŠæ¹åããã»ãããããåãããã ïŒ #php_night pic.twitter.com/D27jAcJOcv — ykagano (@ykagano) 2026幎8æ27æ¥ ãæ¥œã«ããããšããšã楜ããããšãã¯éã / @soudai1025 soudai.hatenablog.com 楜ããã ð« #php_night pic.twitter.com/oPPsjPURDN — ykagano (@ykagano) 2026幎8æ27æ¥ äŒå Žã»æèŠªäŒã®æ§å éå§åã®äŒå Žã®æ§åã§ãããšãŠããããããªã€ãã³ãã¹ããŒã¹ã§ããã¡ãã®åçã®å³å¥¥ã«ã¯ä»®ç ã¹ããŒã¹ããããŸããããŸãåŸãã®æ¹ã«ã¯ãã¡ãã¬ã¹åžãããŒã«ãŠã³ã¿ãŒããããŸããã å瀟ã®ããã«ãã£çœ®ãå ŽãçšæãããŠããŸããã æèŠªäŒã§ã¯è»œé£ãšããªã³ã¯ãå²ãã§ãåå è
å士ã§äº€æµãæ·±ããããšãã§ããŸããã ãããã« ãPHPã«ã³ãã¡ã¬ã³ã¹ã®ç±éãæ¬¡ã«ã€ãªããããšããããŒãã®ãšãããã©ã®çºè¡šãç±éã®ããå
容ã§ãšãŠã楜ããã£ãã§ããååéå¬ããã ããæ ªåŒäŒç€ŸviviONããŸãæ ªåŒäŒç€ŸkubellããŸããã¯ã·ãæ ªåŒäŒç€ŸããŸããããŠãåå ããã ããçããŸããããšãããããŸããïŒ BASEã§ã¯ãšã³ãžãã¢ãåéããŠãããŸãããããããã°ãæ¡çšæ
å ±ããã²ã芧ããã ããŸããšå¹žãã§ãã binc.jp
ã¯ããã« ãã®èšäºã¯ãBASEããã¯ããã°å€ã®ããã°ãªã¬ãŒ9æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ãBASEæ ªåŒäŒç€Ÿã§ PHPer ãããŠãã @meihei ã§ãã ãã£ãŒãã£ãŒãã°ã«ã¯ãåç¥ã§æ¢ã«äœ¿ã£ãŠããããšããæ¹ãå€ããšæããŸããBASEã§ããã£ãŒãã£ãŒãã°ã«ã®ä»çµã¿ãå©çšããŠããŸãã äžæ¹ã§ãç§ãé²ããŠãããããžã§ã¯ãã§ã¯ãæ¢åã®ä»çµã¿ã ãã§ã¯å°ãæ±ãã¥ããå Žé¢ããããŸãããããã§ãçšéã«å¿ããŠå¿
èŠæäœéã®ãã£ãŒãã£ãŒãã°ã«ã远å ããŠãããŸããã ãã®èšäºã§ã¯ããã£ãŒãã£ãŒãã°ã«ãå
·äœçã«ãã£ãšEasyã«åãå
¥ããŠãã£ãäºäŸã玹ä»ããŸãã èæ¯ ãã£ãŒãã£ãŒãã°ã«ãšã¯ ãã£ãŒãã£ãŒãã°ã«ã¯ãã³ãŒãã倿Žã»ãããã€ããããšãªãã·ã¹ãã ã®æ¯ãèããåãæ¿ããææ³ã§ããæ°ããåŠçãã³ãŒããšããŠã¯æ¬çªã«å
¥ããŠããã€ã€ãå®éã«æå¹åããã¿ã€ãã³ã°ã¯å¥ã§å¶åŸ¡ã§ããã®ã§ãããããã€ããšããªãªãŒã¹ããåé¢ã§ããŸãã ãã®ãã£ãŒãã£ãŒãã°ã«èªäœã®è©±ã¯å€ãã®å Žæã§èªãããŠãããã®ãªã®ã§ããã®èšäºã§ã¯æ·±å
¥ãããŸããã ãã®èšäºã§æ±ãã®ã¯ãã£ãšçŽ æŽãªãã®ã§ãããç¹å®ã®ãªã¯ãšã¹ããæ§çµè·¯ãšæ°çµè·¯ã®ã©ã¡ãã«éããã倿ã§ãããããšããã§ããã°ããã£ãŒãã£ãŒãã°ã«ãšããŠååã«æ©èœããŸãã PHPã§æžããšããã ãã§ãã if ($featureEnabled) { // æ°ããåŠç } else { // ä»ãŸã§ã®åŠç } ãä»ãŸã§ã®åŠçãã¯ãªãªãŒã¹ãçµãã£ããæ¶ãã®ã§ãæ¶ã察象ãã³ã¡ã³ãã§ããŒã¯ããŠãããšãåŸããæ©æ¢°çã«æ¢ããŠäŸ¿å©ã§ãã // @delete start feature-a if (!$featureEnabled) { // ä»ãŸã§ã®åŠç return; } // @delete end feature-a // æ°ããåŠç ãªãªãŒã¹ãæžãã ã @delete start feature-a ã @delete end feature-a ã®ãããã¯ããŸãããšæ¶ããŠãæ°ããåŠçã ããæ®ããŸãã åé¡ã¯ããã°ã«ã®å€ããã©ã決ããã BASE ã«ããæ¢åã®ãã£ãŒãã£ãŒãã°ã«ã¯ãã·ã§ããåäœ (ç¹å®ã®ã·ã§ããã ãããŸãã¯å
šã·ã§ãã) ã®æå¹ã»ç¡å¹ã®èšå®ãããã°ã«ã®å€ã決ããŠããŸãã 管çç»é¢ããæäœã§ãããŸã瀟å
ã®ãã¹ãçšã·ã§ãããäžéšã®ã·ã§ããã§æå¹ã«ããŠæ§åãèŠãŠãåé¡ãªããã°å
šã·ã§ããã«åºããããšããæ®µéçãªãªãªãŒã¹ã«äœ¿ãããŠããŸãã äžæ¹ã§ããªãªãŒã¹ã®æåã«ã¯ãæ¬çªã§èªåã®ãªã¯ãšã¹ãã ãæ°çµè·¯ã詊ãããããã·ã§ããããŒãžä»¥å€ã®ããŒãžã§ãæ€èšŒãããããšãã£ããã·ã§ããåäœãšã¯å¥ã®åãæ¿ããæ¬²ãããªãå Žé¢ããããŸãã ããã¡ãããšäœããªããæ¢åã®ä»çµã¿ãæ¡åŒµããããOpenFeature ã®ãããªã©ã€ãã©ãªãå
¥ããŠãæ±çšçãªä»çµã¿ããå
¥ããšããã§ãã ä»åã¯ãããããEasyã«ãç¹å®ã±ãŒã¹ã«ããå¹ããªãæ±çšæ§ã®ãªãæå°ã®ãã®ãäœããŸãããããšããã話ã§ãã äºäŸ1ïŒQuery Parameter ã§ç¹å®ãªã¯ãšã¹ãã ãåãæ¿ãã 察象: 瀟å
åã管çç»é¢ å€ã®åºã©ãã: ã¯ãšãªãã©ã¡ãŒã¿ æ¢åã®ä»çµã¿ã§è¶³ããªãçç±: 瀟å
åã管çç»é¢ã«ã¯ã·ã§ãããšããåäœããªã ãã®ç»é¢ã«ã¢ã¯ã»ã¹ã§ããã®ã¯ç€Ÿå
ã®äººã ãã§ãã å
¬éåã®æ©èœãå€ã«èŠããå¿é
ã¯ãªããURL ãå©çšè
ã®å±¥æŽã«æ®ã£ãŠãåé¡ãããŸããã ãªãã¹ãç°¡åã«åãæ¿ããããããšã ããèããã°ããã®ã§ãã¯ãšãªãã©ã¡ãŒã¿ã§å€æããããšã«ããŸããã function isFeatureAEnabled($request): bool { return ($request- > getQueryParams()['feature_a'] ?? '') === '1'; } URL ã®æ«å°Ÿã« ?feature_a=1 ãä»ãããªã¯ãšã¹ãã ããæ°çµè·¯ãéãããã以å€ã¯ä»ãŸã§éãã§ããDB ããããã€ãèŠãããç¶æ
ãæã¡ãŸããã ããã®ãªã³ã¯ãéããŠãã ããããš URL ãæž¡ãã ãã§ãéçºè
以å€ã®äººã«ã確èªãäŸé Œã§ããŸãã ç»åã¯ãããŒã å
±æäŒã§æ©èœããªã³ã«ããç¶æ
ã«ã¢ã¯ã»ã¹ã§ããããå
±æãããšãã®ãã®ã§ãã ã¯ãšãªãã©ã¡ãŒã¿ãªã®ã§ããã¿ã³ã§åãæ¿ããããããã«ããŸããã äºäŸ2ïŒHTTP Header ã§ç¹å®ã®èšªåè
ã ãåãæ¿ãã 察象: ã·ã§ããããŒãžãš BASE API å€ã®åºã©ãã: ã«ã¹ã¿ã ããã㌠æ¢åã®ä»çµã¿ã§è¶³ããªãçç±: ã·ã§ããåäœã§ããåãæ¿ããããã蚪åè
åäœã§ãªã³ãªãã§ããªã ã·ã§ããããŒãžãš BASE API ã¯ãã·ã§ããã®èšªåè
ãå€éšã®ã¢ããªã䜿ãã瀟å€ã«å
¬éãããçµè·¯ã§ãã æ¢åã®ã·ã§ããåäœã®ãã°ã«ã§åãæ¿ãããšããã®ã·ã§ããã蚪ããå
šå¡ãäžæã«æ°çµè·¯ã«ãªããŸãããããä»åã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ããªãªãŒã¹åã®ç¢ºèªãšããŠãç¹å®ã®ãªã¯ãšã¹ãã ãããæ°çµè·¯ (ãŸãã¯æ§çµè·¯) ã«éãããã®ã§ãã·ã§ããåäœãšã¯å¥ã«èšªåè
åäœã®åãæ¿ããå¿
èŠã§ããã äºäŸ1ã§ç޹ä»ããã¯ãšãªãã©ã¡ãŒã¿ã®æ¹åŒã§ã¯ãäžæ¬æã« URL ã«ä¹ã£ãŠããŸããªã¹ã¯ããããã¯ãšãªãã©ã¡ãŒã¿ãåãåããªã API ãžã®ãªã¯ãšã¹ãã§ã¯äœ¿ããŸãããããã§ãã¯ãšãªãã©ã¡ãŒã¿ã䜿ããã«ã¹ã¿ã ããããŒã§å€æããããšã«ããŸããã function isFeatureAEnabled($request): bool { return $request- > getHeaderLine('X-Feature-A') === '1'; } ã·ã§ããããŒãžãªã©ã®å€ãã®å Žæã§å€å®ãå¿
èŠãªå Žåã¯ãMiddleware ã䜿ããšäŸ¿å©ã§ãã final class FeatureA { private static bool $enabled = false; public static function enable(): void { self::$enabled = true; } public static function isEnabled(): bool { return self::$enabled; } } class FeatureAMiddleware { public function process($request, $handler) { if (isFeatureAEnabled($request)) { FeatureA::enable(); } return $handler- > handle($request); } } Middleware ããªã¯ãšã¹ãã®åé ã§ããããŒãå€å®ã㊠FeatureA ããªã³ã«ããã®ã§ãæ°æ§ã®åå²ãæžãå Žæã§ã¯ããªã¯ãšã¹ããåŒãåããã« FeatureA::isEnabled() ã§å€å®ã§ããŸãã QAãªã©ã§åäœç¢ºèªãã人ã¯ãããããŒãæžãæãããã©ãŠã¶æ¡åŒµæ©èœã䜿ã£ããããŠæ°çµè·¯ã«å
¥ããŸããä»ã®èšªåè
ã¯ä»ãŸã§éãã§ãã äºäŸ3ïŒCookie + IP Address ã§ç€Ÿå
ã¢ã¯ã»ã¹ã ãåãæ¿ãã 察象: ã·ã§ããããŒãž å€ã®åºã©ãã: Cookie ãš IP ã¢ãã¬ã¹ æ¢åã®ä»çµã¿ã§è¶³ããªãçç±: äºäŸ2ãšåæ§ã®èŠä»¶ã ããæ®æ®µã®ãã©ãŠã¶æäœã ãã§äœ¿ããŠãæéãçµãŠã°èªç¶ã«å
ãžæ»ãåœ¢ã§æ°çµè·¯ã«åãæ¿ããã 瀟å
ã®äººã«æ°çµè·¯ãèŠãŠãããæ©äŒãæ¥éœçºçããçªè²«ã§çšæããŸããã èŠãŠãããçžæã¯ããããŒã®æžãæãã«æ
£ãã人ã°ããã§ã¯ãªãã®ã§ãäºäŸ2ã®æ¹åŒã¯äœ¿ããŸããã ããã§ããã©ãŠã¶ã« Cookie ãæãããŠãæ®æ®µã®æäœã®ãŸãŸæ°çµè·¯ã䜿ãç¶ããããããã«ããŸããã Cookie ã«ã¯æå¹æéãããã®ã§ãæéãåããã°èªç¶ã«å
ã®ç¶æ
ãžæ»ããæ»ãå¿ãã®å¿é
ããããŸããã ãã ã Cookie ã ãã§ã¯å€éšã®äººãåãããšãã§ããŠããŸãã®ã§ã瀟å
(ãªãã£ã¹ã VPN) ã® IP ã¢ãã¬ã¹ããã®ã¢ã¯ã»ã¹ã§ããããšãæ¡ä»¶ã«å ããŸããã function isFeatureAEnabled($request): bool { // 瀟å
IP ãã©ããã®å€å®ãäžèº«ã¯ãããã·ã LB ã®æ§æã«äŸåããã®ã§çç¥ return isInternalAccess($request) && ($request- > getCookieParams()['feature_a'] ?? '') === '1'; } Cookie ã¯ããã©ãŠã¶æäœã ãã§ãfeature-a ãæå¹ã«ãããããšãã§ãã圢ã§ã»ããããŸãã ãã®ã¢ãããŒãã¯ãç§ãéå»ã«æžããèšäºãšåããã®ã§ãã developers.prtimes.com äºäŸ4ïŒShop ID ã䜿ã£ãŠã«ããªã¢ãªãªãŒã¹ãã 察象: ã·ã§ããããŒãžãã·ã§ããåãã®ç®¡çç»é¢ å€ã®åºã©ãã: ã·ã§ãããš1察1ã«å¯Ÿå¿ããæŽæ°IDã®å°äœãšãå²åã®èšå®å€ (canary) æ¢åã®ä»çµã¿ã§è¶³ããªãçç±: ã·ã§ããåäœã®ãã°ã«ã¯å¯Ÿè±¡ãæã§éžã¶å¿
èŠãããããå
šäœã®n%ããšããåºãæ¹ãã§ããªã æåã¯1%ãåé¡ããªããã°10%ã50%ã100%ãšæ®µéçã«äžããŠãããããããã«ããªã¢ãªãªãŒã¹ãEasyã«å®è£
ã§ããŸãã èŠä»¶ã¯ãæ¢åã®ãã°ã«ãšåãã·ã§ããåäœã®ãŸãŸãå
šã·ã§ããã®ãã¡n%ã ããæ°çµè·¯ã«åãæ¿ãããããšãããã®ã§ãã ããã§ãã·ã§ãããš1察1ã«å¯Ÿå¿ããæŽæ°ã®IDã100ã§å²ã£ãäœãããcanary ãšããŠèšå®ããå²åãšæ¯èŒããŸãã function isFeatureAEnabled(int $numericShopId): bool { // $numericShopId ã¯ã·ã§ãããš1察1ã«å¯Ÿå¿ããæŽæ°ã®ID $canary = (int) Config::get('feature_a_canary'); return $numericShopId % 100 < $canary; } å€å®ã¯ã·ã§ããããšã«æ±ºãŸã£ãŠããã®ã§ãcanary ãäžããã°å¯Ÿè±¡ãåºãã£ãŠãããŸãã å²åã®å€æŽã«ã¯ãããã€ãå¿
èŠã§ãããå³å¯ã«ã¯ããããã€ããšããªãªãŒã¹ããåé¢ã§ããŠããŸããããè§Šãã®ã¯ Config ã®å€ã ãã§ãæ»ããšããå€ãæ»ãã ãã§ããä»åã¯ããã§ååãšå²ãåããŸããã ãããã« ãã®èšäºã§ã¯ãã¯ãšãªãã©ã¡ãŒã¿ãããããŒãCookie ãš IP ã¢ãã¬ã¹ãShop ID ãšãã£ãæå
ã«ãããã®ã ãã§ããã°ã«ã®å€ãEasyã«æ±ºããŠãã£ãäºäŸã玹ä»ããŸããã æçµçã«ã¯ãã«ããªã¢ãªãªãŒã¹ãã«ã¹ã¿ã ããããŒãªã©è€æ°ã®å€å®ã1ã€ã®é¢æ°ã«ãŸãšããçµã¿åãããŠäœ¿ã£ãŠããŸãã ãªãªãŒã¹ãçµãã£ãããå€å®é¢æ°ããš @delete ããŒã¯ã®æ§çµè·¯ãšäžç·ã«æ¶ããŸãã ãã®èšäºã§ç޹ä»ãããã£ãŒãã£ãŒãã°ã«ã«ã¯ããžãã¹ããžãã¯ãå«ãŸãããæ±ºããããå Žæã§æ±ºããããçšéã§ãã䜿ãããŸããã ã ããããããªãã¹ãè³ªçŽ ã«ãåçŽã«ãEasyã«æžãæ¹ãè¯ããšæã£ãŠããŸãã ãã£ãŒãã£ãŒãã°ã«ãšãããšå°çšã®åºç€ãæãæµ®ãã¹ãã¡ã§ããããã£ãšEasyã«å§ããããšãã§ããŸãããã²åèã«ããŠãã ããïŒ ãŸããããããããã¯ãéçºã§äœ¿ãããç°¡åã ãã©åŒ·åãªTipsã«èå³ã®ããæ¹ã¯ããã²æ¡çšæ
å ±ãã芧ãã ããïŒ binc.jp ææ¥ã¯ãTakeuchiããã®èšäºã§ãããæ¥œãã¿ã«ïŒ
ã¯ããã« ãã®èšäºã¯ãBASEããã¯ããã°å€ã®ããã°ãªã¬ãŒ8æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ïŒ wakana ã§ãã ç§ã¯BASEæ ªåŒäŒç€Ÿã§ããã¯ãšã³ããšã³ãžãã¢ãããªããBASEäºæ¥éšå
ã®ãµãŒãã¹ã¬ãã«æŽ»åæšé²ãããŠããŸãã BASEã®ãµãŒãã¹ã¬ãã«æŽ»åã§ã¯ããSLOãå
šç€Ÿã®å
±éèšèªã«ãããããšãç®æšã«æ²ããŠããŸãããã®åãçµã¿ã®äžã€ãšããŠãä»å¹Žãã ãäž»èŠSLOãã®éçšãå§ããŸããã éçšéå§ããå幎ãçµã¡ãäž»èŠãªæ©èœã®ãµãŒãã¹å質ãåºãå¯èŠåããäºæ¥éšå
šäœã§åè³ªãæ¯ãè¿ãæåãå®çãã€ã€ãããŸããäžæ¹ãå®éã«éçšããããšã§ã次ã«åãçµãã¹ã課é¡ãå
·äœçã«èŠããŠããŸããã ãã®èšäºã§ã¯ãäž»èŠSLOã®å±éã«ãã£ãŠåŸãããããšãšãçŸåšåãå
¥ããŠããç¹ãããã«ã¯ä»åŸã®å±æã«ã€ããŠã玹ä»ããŸãã åæïŒäž»èŠSLOã¯ãSLOãå
šç€Ÿã§å
±æããããã®ææš äž»èŠSLOã¯ããšã³ãžãã¢ãéçšããSLOãäžæ®µæœè±¡åããææšã§ãããšã³ãžãã¢ä»¥å€ã®äººã«ããµãŒãã¹ã®ç¶æ
ãæããŠããããããããããšãçã£ãŠèšèšããŸããã äž»èŠSLOãäœããŸã§ã®çµç·¯ããããã«èŸŒããæå³ã«ã€ããŠã¯ãéå»ã®èšäºã§ç޹ä»ããŠããŸããããããŠã芧ãã ããã devblog.thebase.in devblog.thebase.in ãŸãã¯ããµãŒãã¹ã®å質ãå¯èŠåã§ããããšããããšãå
±æãã äž»èŠSLOãå±éããã«ããããç§ãã¡ã¯äžã€ã²ãšã€ã®SLOã现éšãŸã§äœã蟌ãããšãããããŸãã¯éèŠãªæ©èœãåºãã«ããŒããããšãåªå
ããŸããã ãµãŒãã¹ã¬ãã«æŽ»åã®æåã®æ®µéã§ç®æããŠããã®ã¯ãããµãŒãã¹åè³ªã¯æ°å€ãšããŠæããããããšããèãæ¹ãäºæ¥éšå
šäœã«åºããããšã§ããã ãã®ããã«ã¯ãäžéšã®æ©èœã ãã粟緻ã«èšæž¬ããããããåæ
åœé åã®ç¶æ
ãäž»èŠSLOãã確èªã§ããããšã倧åã ãšèããããã§ãã ãã®ç¹ã«ã€ããŠã¯ãçå®ã«æå¿ããåŸãããŠããŸãã äž»èŠSLOã®ç¶æ
ããææ¬¡ãµããªãŒããšããŠæ¯æå
±æããéçšãå§ãŸãããµãŒãã¹å質ã宿çã«æ°å€ã§ç¢ºèªããããã®åå°ãã§ããŠããŸããã æªéã®SLOããã£ãå Žåã«ããããã«å¯Ÿãã察å¿ç¶æ³ãšåæã«å
±æãããã èšæž¬ããŠããã ãã§ã¯ãªãæ¹å掻åã«ãŸã§ç¹ããŠããããšããäºæ¥éšå
šäœã§ç¢ºèªã§ããããã«ãªã£ãŠããŸãã ææ¬¡ãµããªãŒã®äžéšã€ã¡ãŒãžãäž»èŠSLOã®ç¶æ
ãäºæ¥éšå
šäœã§å®æçã«ç¢ºèªã§ããããã«ããŠããŸãã æ¬¡ã®èª²é¡ïŒSLI/SLOã®èŠçŽããæ³å®éãã«é²ãŸãªãã£ã ç¶²çŸ
æ§ãåªå
ããå±éãšäžŠè¡ããŠé²ãããã£ãã®ããSLIã®èšæž¬æ¹æ³ãšSLOãã®ãã®ã®ç¶ç¶çãªèŠçŽãã§ãã åã
ã®SLI/SLO ã«ã€ããŠã¯ããŸãèšæž¬ãå§ããéçšããªãã粟床ãé«ããŠããæ¹éã§ãããããããå幎éã®éçšãæ¯ãè¿ããšãèŠçŽãã¯æ³å®ããŠããããŒã¹ã§ã¯é²ãã§ããŸããã§ããã èŠçŽããå¿
èŠã ãšããèªèã¯ãã£ããã®ã®ããããç¶ç¶çã«è¡ãããã®ä»çµã¿ããå±éæã®èšèšã«ååçµã¿èŸŒããŠããªãã£ãããã§ãã æåã«èšå®ããSLIã®èšæž¬æ¹æ³ã¯ããã®æç¹ã§åŠ¥åœã ãšèãããã®ã§ãããã ãã å®éã®ãµãŒãã¹ã®ç¶æ
ãæããããŠãããã¯ãéçšãéããŠç¶ç¶çã«ç¢ºãããå¿
èŠããããŸãã è¯ãã¬ã¹ãã³ã¹ã»æªãã¬ã¹ãã³ã¹ã®å®çŸ©ã¯é©åã ãã®èšæž¬æ¹æ³ã¯å®æ
ã«åã£ãŠããã 察象ã«å«ãããã®ãå«ããªããã®ã¯é©åã etc... ãšãã£ãç¹ã確èªããå¿
èŠã«å¿ããŠæŽæ°ããŠããããããŸã§å«ããŠèšèšããããšã§ãSLIãä¿¡é Œã§ããç¶æ
ã«ä¿ã€ããšãã§ããŸãã èŠçŽãã®æé ããç¶æ
ã宿çã«ç¢ºèªããå Žãå®ãŸã£ãŠããªãã£ãããšã§ããç¶ç¶çã«èŠçŽããŠãããã®ã§ããããšããæèä»ãã匱ãã£ãããã«æããŸãã ããã«ãããSLOãæªéã«ãªã£ãéã«ã ãµãŒãã¹å質ã®å€åã«ãããã®ãªã®ããèšæž¬æ¹æ³ãèŠçŽãã¹ããªã®ãã ãã®åãåãã«æéãããã£ãŠããŸãããšããããŸããã ãã®åãåããããããããã«ã¯ã倿ã®åºçºç¹ãšãªãSLIãä¿¡é Œã§ããç¶æ
ã«ããå¿
èŠããããŸãã SLIãSLOããšã©ãŒããžã§ããã®é¢ä¿ã¯ãæžç± SLO ãµãŒãã¹ã¬ãã«ç®æš | Alex Hidalgo è ã§ãä¿¡é Œæ§ã¹ã¿ãã¯ããšããŠæŽçãããŠããŸãã ãã®é¢ä¿ãèžãŸãããšãSLIãåªå
ããŠèŠçŽãçç±ãåãããŸãã ä¿¡é Œæ§ã¹ã¿ãã¯ã«ãããSLIã®äœçœ®ã¥ã SLIã¯ãSLOãšãšã©ãŒããžã§ãããæ¯ããåå°ã§ãã ãŸãå質ã®åãæªããå®çŸ©ãã SLIã§ãµãŒãã¹ã®ç¶æ
ãæãã ãããããšã«SLOã®éæç¶æ³ã倿ãã ãã®çµæããšã©ãŒããžã§ããã®éçšã«ã€ãªãã ãããã®èŠçŽ ã¯äžããç©ã¿äžããé¢ä¿ã«ãããããSLIã®èšæž¬ã宿
ãšãããŠãããšããã®äžã«ããå€æã®æ ¹æ ã匱ããªã£ãŠããŸããŸãã ãã®é¢ä¿ãèžãŸããç§ãã¡ã¯ãŸãã倿ã®åºçºç¹ã§ããSLIã®èšæž¬æ¹æ³ãèŠçŽãããšã«ããŸããã SLIã®ä¿¡é Œæ§ãé«ããããã«åãçµãã ããš é±æ¬¡äŒã§æ
åœè
ãšäžç·ã«èŠçŽã åœåã¯ãåSLOã®æ
åœè
ãèŠçŽããé²ããããã®æé ããè¿·ã£ããšãã«äžç·ã«èããå Žãååã«çšæã§ããŠããŸããã§ããã ããã§ããµãŒãã¹ã¬ãã«æŽ»åã®é±æ¬¡äŒã§æ
åœè
ãšèšæž¬çµæãäžç·ã«ç¢ºèªããæ°å€ãšå®æ
ããããåå ã調ã¹ãŸããã ãŸããSLIã®èŠçŽããè¡ãªã£ãŠããããããšãæ¹ããŠåæ
åœè
ãšå
±æãã察å¿åªå
床ã®çžè«ãªã©ããäžç·ã«èããŸããã ããããåãçµã¿ã«ãããçŸåšã¯åSLOã®æ
åœè
å
šå¡ãSLIã®èŠçŽãã宿œã§ããèŠçŽããå®äºããSLIãé 調ã«å¢ããŠããŸãã æ
åœè
ãèªãèŠçŽããé²ããææšããããSLIã®ç²ŸåºŠãé«ããåããå°ããã€åºãã£ãŠããŸããã ãããŠèŠçŽããSLIã«ã€ããŠã¯ãããªããã®èšæž¬æ¹æ³ã§ãµãŒãã¹ã®ç¶æ
ãæããããã®ãããã以åããæç¢ºã«èª¬æã§ããããã«ãªããŸããã å®éã«ãèšæž¬å¯Ÿè±¡ããå€ããŠããåŠçãèŠã€ãããµãŒãã¹ã®å®æ
ã«åãããèšæž¬æ¹æ³ã倿ŽããSLIããããŸãã ã¡ããã©åœèšäºãå·çäžã«ãèŠçŽããå®äºããå ±åãããããŸããããããããð èªåã®ããŒã ã§èª¬æäŒãéã ãŸããç§èªèº«ãSLOã®æ
åœè
ã®äžäººã§ãããããæå±ããŒã ã§ãµãŒãã¹ã¬ãã«æŽ»åã«ã€ããŠèª¬æããäŒãéããŸããã SLI, SLOã¯äžäººã§äœ¿ããã®ã§ã¯ãããŸããããµãŒãã¹ãæäŸããå
šå¡ã§å質ã®å®çŸ©ã決å®ããSLOã®éæç¶æ³ããšã©ãŒããžã§ãããèŠãŠãªãœãŒã¹æè³ã®å€æãªã©ã次ã®è¡åã«ã€ãªããŠããå¿
èŠããããŸãã ãã®ããããããŸã§ã®æŽ»åã§åŸãç¥èŠãå
±æããããŒã ã®ã¡ã³ããŒããµãŒãã¹ã¬ãã«æŽ»åã«é¢ãããããç¶æ
ãç®æããŸããã çºè¡šã®åŸãããŒã ã¡ã³ããŒããå€ãã®ã³ã¡ã³ãã»ææ³ãããã ãããšãã§ããŸãããããããšãããããŸãïŒ èª¬æäŒåŸã¯ãå¯èŠ³æž¬æ§ãåäžãããæœçã®ããŒã ã¬ãã¥ãŒãã¹ã ãŒãºã«é²ã¿ããªãªãŒã¹ãŸã§ã€ãªããããšãã§ããŸããã ããããïŒSLOãšäºæ¥ææšãå
±éã®å€æææã«ãã SLIã®ä¿¡é Œæ§ãé«ããå
ã§ã¯ãSLOãšäºæ¥ææšãçµã³ã€ããéçšãžé²ã¿ãããšèããŠããŸãã BASEã§ã¯ãã§ã«ãSLOãšæµéç·é¡ïŒGMVïŒã䞊ã¹ãŠç¢ºèªã§ãã瀟å
ããã·ã¥ããŒããå±éããŠããŸãã ãã®åºç€ã掻ãããSLOãšäºæ¥ææšãé¢é£ã¥ããªããããããã¯ãã®ç¶æ
ãããå
·äœçã«æããããéçšãç®æããŠããŸãã ãšã³ãžãã¢ã¯äºæ¥ææšãŸã§èŠéãåºããSLOã¯è·çš®ãåããå
±éã®å€æææãšããŠäœ¿ãã åãæ
å ±ãèŠãªãããå
šå¡ã§ãããã¯ãã«åãåããéçšãäœãã ãã®å€æãæ¯ããSLIã«ã€ããŠããåSLOã®æ
åœè
ã«ããèŠçŽãã®ãµã€ã¯ã«ãåãå§ããŠããŸãã çŸåšã¯ããã®èŠçŽããäžåºŠããã§çµãããããç¶ç¶çãªéçšãšããŠçµç¹ã«å®çãããŠããæ®µéã§ãã ãããã« äž»èŠSLOãBASEäºæ¥éšã«å±éããŠããå幎éã®åãçµã¿ãšãçŸåšé²ããŠããããšãã玹ä»ããŸããã ç¶²çŸ
æ§ãåªå
ããæåã®ãã§ãŒãºã§ã¯ãäž»èŠãªæ©èœãåºãã«ããŒãããµãŒãã¹å質ã宿çã«æ°å€ã§ç¢ºèªããããã®åå°ãäœãããšãã§ããŸããã çŸåšã¯ãåSLOã®æ
åœè
ãSLIãèŠçŽããµã€ã¯ã«ãåãå§ããç¶ç¶çãªéçšãšããŠçµç¹ã«å®çãã€ã€ãããŸãã ãã®éçšãç¶ããSLOãšäºæ¥ææšãçµã³ã€ãã倿ã«ã€ãªããŠãããŸãã BASEã§ã¯ãSLOãã¯ãããšãããµãŒãã¹å質ãžã®åãçµã¿ãäžç·ã«é²ããŠãã仲éãåéããŠããŸããèå³ã®ããæ¹ã¯ããã²ãæ°è»œã«æ¡çšæ
å ±ãã芧ãã ããã binc.jp ææ¥ã¯ãemaããã®èšäºã§ãããæ¥œãã¿ã«ïŒ
ã¯ããã« ãã®èšäºã¯ãBASEå€ã®ããã°ãªã¬ãŒ7æ¥ç®ã®èšäºã§ãã BASE Dept Order Sectionã§ãšã³ãžãã¢ãããŠããCapi(ããŽ)ã§ãã æ¬èšäºã§ã¯æå¿ã§ããŒã ãçµãã§é²ããŠããBASEã®Webã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£æœçã®äžç°ã§è
åšã¢ããªã³ã°ãè¡ã£ãã®ã§ãã®ã玹ä»ã§ããè
åšã¢ããªã³ã°ã«èå³ã®ããæ¹ã®åèã«ãªãã°å¬ããã§ãã æåã«ãã®èšäºã§äŒãããããš3ã€ãäºåã«å
±æããŠãããŸãã ç®çããã£ãŠè
åšã¢ããªã³ã°ãå°å
¥ãã å°ããå§ããŠç¶ç¶ããããšãæèãã è
åšã¢ããªã³ã°ã«æéã¯ããã£ãããåŸããã®ã¯å€ãã£ã è
åšã¢ããªã³ã°å®æœã®èæ¯ éå»ã®ã€ã³ã·ãã³ãå±¥æŽ BASEã§ãéå»ã«æ±ºæžåšãã®ã€ã³ã·ãã³ããçºçããŠããŸããæ±ºæžã®ã€ã³ã·ãã³ãã¯ãŠãŒã¶ãŒã«ãäŒç€Ÿã«ã圱é¿ã倧ãããæä¹
察å¿ã®ãããžã§ã¯ããç«ã¡äžãã£ãããšããããŸããããã ããããããçºçããŠããæ°ã¥ããåã身ã®å¯Ÿå¿ã§ãããããã§ãèªåãã¡ã§æ±ºæžåšããäºåã«æ€æ»ããåå ãç¹å®ããä¿®æ£ãŸã§è¡ããèœåçãªäœå¶ãäœããããšèããŸããã OWASP SAMMã®ã¹ã³ã¢æ¹å 以åOWASP SAMMãšãããã¬ãŒã ã¯ãŒã¯ã䜿ãããœãããŠã§ã¢éçºã©ã€ããµã€ã¯ã«å
šäœã«ãããã»ãã¥ãªãã£å¯ŸçæçåºŠãæ°å€åããŸããããã®çµæãšããŠã"ã»ãã¥ãªãã£åºæºã®ææå"ã"ã¢ããªã±ãŒã·ã§ã³ã®ç¶ç¶çãªã»ãã¥ãªãã£è©äŸ¡å®æœ"ã®é
ç®ã®ã¹ã³ã¢æ¹åãç®æãããšã«ããŸããã ä»åŸã远å éçºãè¡ããã·ã¹ãã ãè€éåããŠããããšãäºæ³ããæ©ãã®å¯Ÿçãæã¡ãããšèããŸããã è
åšã¢ããªã³ã°å®æœåã®æºå å
è¡äºäŸèª¿æ» è
åšã¢ããªã³ã°ãã©ãè¡ããã©ã掻ãããŠããã®ãã®å
·äœäºäŸãç¥ãããã£ããããŸãã¯å
è¡äºäŸã調æ»ããŸãããäž»ã«äŒæ¥ã®ããã¯ããã°ãåèã«ãããŠããã ããŸããã è
åšã¢ããªã³ã°ãå§ããŠã¿ãŸãã - ã»ãã¥ãªãã£ãªã¹ã¯åæã®ç¬¬äžæ© Luup瀟 ã¡ã«ã«ãªã®è
åšã¢ããªã³ã°ããã»ã¹ mercari瀟 äºäŸã調æ»ããäžã§æ°ã¥ããã®ã¯ãæ³å以äžã«æ¥æ¬èªã®äºäŸãã€ã³ã¿ãŒãããã§å
¬éãããŠããªãããšãã§ããè
åšã¢ããªã³ã°ã«é¢ããæ
å ±ã¯ããããå
¬éãããŠããã®ã§ãããå
·äœçãªäºäŸç޹ä»ã¯å°ãªãã£ãã§ãã ææ³ãåŠã¶ STRIDEãAttack TreeãåŠã³ãŸããã STRIDEã¯è
åšã6çš®é¡ã«åé¡ããŠç¶²çŸ
çã«æŽãåºãææ³ãAttack Treeã¯ç¹å®ã®æ»æç®æšã«è³ãçµè·¯ãæ¡ä»¶ãããªãŒç¶ã«åè§£ããææ³ã§ãã æçµçã«ã¯ãããŠã®è
åšã¢ããªã³ã°ã ã£ãã®ã§å€ãã«æãåºãããæ
å ±ãæã«å
¥ãããã(ã€ã³ã¿ãŒãããã§ã®æ
å ±ãå€ã)ãã®ãæ¡çšããããšããçç±ã§ STRIDE ã䜿ãããšã«æ±ºããŸããã STRIDEã«é¢ããŠã¯Microsoft瀟ãã¯ãã倧æã®ãµã€ããŒã»ãã¥ãªãã£äŒæ¥ãå
¬éããŠããè³æããããŸããã Microsoft Threat Modeling Tool ã®è
åš ãŸããAttack Treeã¯ä»åŸå°å
¥ããŠãããããã®ãšããŠæŠèŠã®ã¿æŒãããŸããã Monthly Research ãè
åšåæã®åœ¹å²ãšææ³ã®ç޹ä»ã è
åšã¢ããªã³ã°ã«å¯ŸããŠå
±éèªèãæã€ åæãšããŠæåã«ãéèŠç®æããå°ããã¯ãããŠå°ããã€ç¯å²ãåºããŠããããããŒã ã§åæããŸãããåœæã®ããã¥ã¡ã³ãã«ããæææ±ºå®å
容ã«ããå°ããã¯ããããããã§ããç¯å²ãã宿œããç¶ç¶ããããšããã®ãæ®ããŸããã åœæã®ç€Ÿå
æææ±ºå®ããã¥ã¡ã³ãããåŒçš æåããå®ç§ãç®æããªã dfdãå®ç§ã«ããªããšè
åšã¢ããªã³ã°ãã§ããªãããã§ã¯ãããŸããããããç¯å²ã§å®æœããç¶ç¶ããããšã倧äºã§ãã åŒçšæã«åºãŠããdfd㯠Data Flow Diagram(ããŒã¿ãããŒå³) ã®ããšã§ãã·ã¹ãã ã«ãããããŒã¿ã®æµãã衚ããå³ã®ããšã§ããããŒã¿ã®æµãããã·ã¹ãã ã®æ©èœãæŽãåºããŸãã è
åšã¢ããªã³ã°ã®èšèš ã»ãã¥ãªãã£ã€ã³ã·ãã³ããçºçããå Žåã«ãŠãŒã¶ãŒåœ±é¿ãäŒç€Ÿãžã®åœ±é¿ã倧ããç®æããåªå
çã«è
åšã¢ããªã³ã°ãè¡ããããšèãããŸãäžèš2ã·ããªãªãéžã³ãŸããã ã«ãŒãæ©èœã®ã¯ã¬ãžããã«ãŒãæ±ºæž ã«ãŒãæ©èœã§è³Œå
¥è
ã¢ã«ãŠã³ãã«ãã°ã€ã³ããç¶æ
ã§ã®ã¯ã¬ãžããã«ãŒãæ±ºæž BASEã«ã¯ããããªæ±ºæžææ®µãæ±ºæžæã®ãªãã·ã§ã³ããããŸããä»åã¯äžçªãªãŒãœããã¯ã¹ãªãã®ãéžã³ãŸãããããŸãã¯ã·ã³ãã«ãªæ±ºæžææ®µããããšããã®ãããŒã ã§åæãåã£ãŠããããã§ãã ãŸããæŽãåºãè
åšãçµããŸãããä»åã¯STRIDEãéžãã ããæå€§6çš®é¡ã®è
åšãååšããŸããä»åã¯ãã®äžããSãTãIã«çµããŸãããããŒã ã§ã¯ã¬ãžããã«ãŒã決æžã§ããçºçããããªãã®ã¯äœãã話ãåãæ±ºããŸããããŸããå€ãã®è
åšãæŽãåºãããšããããšã§è
åšã¢ããªã³ã°ã®æéã䌞ã³ãŠããŸãããšãé²ãããã§ãã ç¥å è
åš æ¥æ¬èª è
åšã®å
容 䟵害ãããã»ãã¥ãªãã£ç¹æ§ ä»åã®å¯Ÿè±¡ S Spoofing ãªãããŸã ä»äººãä»ã·ã¹ãã ã«ãªãããŸããŠæ£èŠã®å©çšè
ã»ãµãŒãã¹ãšããŠæ¯ãèã çæ£æ§(Authentication) â T Tampering æ¹ãã ããŒã¿ãéä¿¡ãã³ãŒããäžæ£ã«æžãæãã å®å
šæ§(Integrity) â R Repudiation åŠèª è¡ã£ãæäœãååŒãåŸããããã£ãŠããªãããšåŠå®ã§ããŠããŸã åŠèªé²æ¢(Non-repudiation) 次å I Information Disclosure æ
å ±æŒæŽ© æš©éã®ãªãçžæã«æ
å ±ãæž¡ã£ãŠããŸã æ©å¯æ§(Confidentiality) â D Denial of Service ãµãŒãã¹æåŠ ãµãŒãã¹ãå©çšã§ããªãç¶æ
ã«è¿œã蟌ã å¯çšæ§(Availability) 次å E Elevation of Privilege æš©éææ Œ æ¬æ¥æããªãæš©éãååŸããŠæäœãè¡ã èªå¯(Authorization) 次å DFDäœæ ä»åã¯è
åšã¢ããªã³ã°ã®å¯Ÿè±¡ç¯å²ã«ããã«ãŒãæ©èœã®ã¯ã¬ãžããã«ãŒã決æžåŠçã®ç¯å²ã®ã¿DFDãäœæããŸããã DFDäœæãè
åšã¢ããªã³ã°æºåã§äžçªæéãããããŸãããã«ãŒãæ©èœãBASEã®ã³ã¢æ©èœã§ããããããã®ã·ã¹ãã ã³ã³ããŒãã³ããé¢ãã£ãŠããããå³è§£ããããã®çŸç¶çè§£ãé£ããã£ãããã§ãã DFDäœæã§ã¯çæAI(Claude Code)ãæŽ»çšããæéççž®ãç®æããŸããã ã«ãŒãæ©èœãClaude Codeã«èªã¿èŸŒãŸãDFDãMermaidã§åºå MermaidãFigJamã«ã€ã³ããŒã Mermaid Live Preview ã§ãMermaidã衚瀺ããèŠæ¯ã¹ãªããFigJamåŽã®å³ãæŽãã FigJamã®ã€ã³ããŒãã«ã¯ Mermaid to FigJam ãšãããã©ã°ã€ã³ã䜿ããŸããã FigJamã«ã€ã³ããŒãããã®ã¯è
åšã¢ããªã³ã°äžãä»ç®ã貌ãã ãã§è
åšãæ®ãã圢ã«ãããã£ãããã§ãã è
åšã¢ããªã³ã°å®æœ é²ãæ¹ ã¢ããªã±ãŒã·ã§ã³ãšã³ãžãã¢2äººã§æéãåããããªã³ã©ã€ã³ã§è¡ããŸããã ã·ããªãªããšã«DFDã远ã ã·ããªãªã远ããªããæ°ã«ãªã£ããšããã«ä»ç®ã貌ã 貌ã£ãä»ç®ã«å¯ŸããŠè°è«ãããæ·±æã£ãŠè¿œå ã®ä»ç®ã貌ã â»é²ãæ¹ã®è£è¶³ ä»ç®ã¯SpoofingïŒãªãããŸãïŒãç·ãTamperingïŒæ¹ããïŒãèµ€ãInformation DisclosureïŒæ
å ±æŒæŽ©ïŒããªã¬ã³ãžã«ããŠè²ŒããŸãã DFDãAIã«åºåããŠããã£ãé¢ä¿äžãå®éã®åããšç°ãªãéšåãããã€ãèŠã€ãããŸãããDFDã®äžå®ãªç®æã¯æ¢åã®UMLãåç
§ãããå®éã«ã³ãŒããèªã¿ãŸããã è
åšã¢ããªã³ã°ã§åºãŠããè
åš è©³çŽ°ããå
±æããããšã¯ã§ããªããã岿ããŸãããSãšTãšIã©ããåããããèŠã€ãããŸããã äžã®è¡šã«ããããããã€ä»ç®ã貌ãããã®ããæ°ããŠãŸãšããŠããŸãã è
åš æ° SpoofingïŒãªãããŸãïŒ 8 TamperingïŒæ¹ããïŒ 9 Information DisclosureïŒæ
å ±æŒæŽ©ïŒ 7 ã·ã¹ãã éã®æ¥ç¶éšåã«ä»ç®ãéäžããŸããã æ°ããæ±ºæžææ®µãå®è£
ãããšãã«æèããããšãå®ãã¹ãããšãææåããŠããçŽ æãæã«å
¥ããããŸããã ããã£ãããš è
åšã¢ããªã³ã°ã®é£æåºŠ åãçµã¿åœåã¯ã1ã·ããªãª1æéããã°ååããšèŠç©ãã£ãŠããŸãããããããå®éã«åãçµããšãDFDäœæã«2æéåãè
åšã®æŽãåºãã«4æéãåèš6æéåããããŸãããæéãé£ãã®ã¯ã·ããªãªéžå®ã§ã¯ãªããå³è§£ãšè
åšã®æŽãåºãã§ããã ã¯ãããŠã§æ
£ããŠããªãã£ããšã¯ããä»ã®æ¥åãšå
ŒåããŠããåãã®ã¯é£æåºŠãé«ãããšãããããŸããã ã·ããªãª2ã€ãéžãã ã®ãåå ã§ããä»åŸã¯äœè£ãæã£ãŠ1ã€ãã€ç¢ºå®ã«é²ããŸãã èªåãã¡ã®ã·ã¹ãã èªèãšå®æ
ã®ãºã¬ è
åšã¢ããªã³ã°ãè¡ãåãã«ãŒãæ©èœã«é¢ããã®ã¯ã¢ããªã±ãŒã·ã§ã³(ããã³ããšã³ã)ãã¢ããªã±ãŒã·ã§ã³(ããã¯ãšã³ã)ãå€éšãµãŒãã¹1ã€(決æžä»£è¡ãµãŒãã¹)ãDBãããã ãšæ³å®ããŠããŸããã ããããDFDãäœã£ãŠè
åšã¢ããªã³ã°ãé²ãããã¡ã«ãæ³å®å€ã®ãã®ã次ã
ãšåºãŠããŸããã ææ¡ããããŠããªãã£ãå
éšã·ã¹ãã ãšã®æ¥ç¶ 1ã€ ææ¡ããããŠããªãã£ãå€éšã·ã¹ãã ãšã®æ¥ç¶ 1〠ã¢ããªã±ãŒã·ã§ã³ãåç
§ããŠããããŒã¿ãœãŒã¹ 2〠æ³å®ããŠããã³ã³ããŒãã³ãæ°ãšåãã ããç¥ããªããã®ããããŸããã ç»é¢ã ãèŠããšåçŽãªæ±ºæžåŠçã§ããå
éšã§ã¯å€ãã®ã³ã³ããŒãã³ããšéä¿¡ãé¢ãã£ãŠããŸããè
åšã¢ããªã³ã°ãã®ãã®ã倧äºã§ãããDFDãäœæãæ£ããæŽçããŠããã ãã§ãåŠã³ã¯å€ãã£ãã§ãã ç¶ç¶ããããã«è¡ã£ãããšãä»åŸããããšã DFDãè
åšã¢ããªã³ã°çµæã®èšé² ä»åã®DFDãè
åšã¢ããªã³ã°çµæã¯ç€Ÿå
ã®èª°ããé²èЧã§ããFigJamã«æ®ããŸããã ãŸããDFDã®äœãæ¹ãè
åšã®åé¡ãå³è§£ããããšã§ä»åè
åšã¢ããªã³ã°ãè¡ã£ãã¡ã³ããŒä»¥å€ã®äººãè
åšã¢ããªã³ã°ãå§ããåå°ãæºåã§ããŸããã æ¬¡ã®è
åšã¢ããªã³ã°å¯Ÿè±¡ã決ãã BASEã®ã«ãŒãã«ã¯ä»ã«ãããããæ©èœããããŸããä»åã®è
åšã¢ããªã³ã°ãçŽè¿ã®éçºãããžã§ã¯ããèæ
®ããä»åŸäžèšã·ããªãªã®è
åšã¢ããªã³ã°ããããããšèããŠããŸãã 䜿çšçã®é«ãã¯ã¬ã«ä»¥å€ã®å€éšæ±ºæžææ®µ ããããæµ·å€è²©å£²ã®ã«ãŒãæ©èœ ã»ãã¥ãªãã£èŠä»¶ã®äœæ çŸåšãè
åšã¢ããªã³ã°ãå
ã«ã»ãã¥ãªãã£èŠä»¶ãäœæããŠããŸããä»åŸãã«ãŒãã®è¿œå éçºãããæã«ãããã ãã¯å®ã£ãŠã»ãããããšãææåããŠãããŸãã ã»ãã¥ãªãã£ããŒã«å°å
¥ã®PoC è
åšã¢ããªã³ã°ã§åºããè
åšã«å¯Ÿããèªåãã¡ã§ãã¹ããè¡ãããã¹ãçµæãã¬ããŒãã«ããŠæ©æé²æ¢ã«ç¹ããä»çµã¿ãäœããããšèããŠããŸãã ãã®ä»çµã¿ãäœãããã«DASTããŒã«ãIASTããŒã«ã®å°å
¥PoCãé²ããŠããŸãã ãããã« ä»åã¯è
åšã¢ããªã³ã°æªçµéšè
ã調æ»ããå®è·µãŸã§ãã£ãŠã¿ãçµéšãåŠã³ãå
±æãããŠããã ããŸããã BASEã§ã¯æ©èœéçºã¯ãã¡ããéæ©èœèŠä»¶ã«ã€ããŠèãã課é¡ãããããã®èª²é¡ã«ææŠããæ©äŒããããŸãããèå³ããã°ãã²æ¡çšæ
å ±ãã芧ãã ããã binc.jp ææ¥ã¯wakanaããã«ãã瀟å
ã®ãµãŒãã¹ã¬ãã«æŽ»åæšé²ã«é¢ããèšäºã§ãïŒ åèè³æ OWASP SAMM OWASP Threat Modeling Process è
åšã¢ããªã³ã°ãå§ããŠã¿ãŸãã - ã»ãã¥ãªãã£ãªã¹ã¯åæã®ç¬¬äžæ© ã¡ã«ã«ãªã®è
åšã¢ããªã³ã°ããã»ã¹ è
åšã¢ããªã³ã°ããœãªã¥ãŒã·ã§ã³åããããŸã§ã®æ©ã¿ Newton ConsultingãSTRIDEã¢ãã«ã Microsoft Threat Modeling Tool ã®è
åš è
åšã¢ããªã³ã°ãšã¯ïœå®æœæé ãšæåã®ããã®ãã€ã³ãã解説 Monthly Research ãè
åšåæã®åœ¹å²ãšææ³ã®ç޹ä»ã DFD
ãã®èšäºã¯ã BASEå€ã®ããã°ãªã¬ãŒ 6æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ãããã¯ããã°ç·šéå§å¡ã®æŸåïŒ @simezi9 ïŒã§ãã BASE Tech Blog ã¯ãã¯ãŠãªããã°ã§éçšããŠããŸãã æšä»ã§ã¯ããã°ãäŒæ¥ãéå¶ããããšèªäœã®äŸ¡å€ãæ¹ããŠåãããŠããããã«ãæããŸãããBASEãšããäŒç€Ÿã®æŽ»åãäžã®äžã«çºä¿¡ããŠãããããšããæãã§åŒãç¶ã掻åãç¶ããŠããŸãã ãããªBASEã®ããã¯ããã°ããéçšéå§ãã10幎ãéããŸããã ãã®éãç·šééšå¡ãå
¥ãæ¿ããéå¶ã®ã«ãŒã«ãæ§ã
ã«åœ¢ãå€ããŠããããã§ããã ããã«ããŠèšäºã®å·çã®ä»çµã¿ã«å€§ãããã³å
¥ããããŠãAIæä»£æºæ ã«ã¢ããããŒããããŸããã æ¬èšäºã§ã¯ã©ãããæ¹åãè¡ã£ããã解説ããŠãããŸãã åŸæ¥ã®å
¥çš¿ã®ä»çµã¿ ãããŸã§èšäºãå
¥çš¿ããéã«ã¯äž»ã«Notionãäžå¿ã«æ®ããã¯ãŒã¯ãããŒãå©çšããŠããŸããã å
·äœçã«ã¯Notionã®ããŒã¿ããŒã¹ã«èšäºãå·çããç·šééšå¡ãã¬ãã¥ãŒããŠèšäºã«ã³ã¡ã³ããæ®ããã¬ãã¥ãŒãå®äºãããèšäºãå·çè
ãã¯ãŠãªããã°ã«è»¢èŒããŠå
¬éãããšããã·ã³ãã«ãªã¯ãŒã¯ãããŒã§ããã ïŒå·çè
ã¯ã¯ãŠãªããã°åŽã«ç·šéè
ãšããŠã¯ãŠãªIDãç»é²ããåœ¢ïŒ ãã®ã¯ãŒã¯ãããŒèªäœã¯ãããªãã«å®æããããŠããŸããã ãšã¯ãã现ããäžäŸ¿ã¯è²ã
ãšãããå
·äœçã«ã¯ä»¥äžã®ãããªãã®ã§ãã ã¬ãã¥ãŒã®ææãç
©ããã ïŒæç« ã®ä¿®æ£æ¡ããã®ãŸãŸæž¡ãææ®µããªããããããããçŽããŠã»ããããéäžèª¬æããããšã«ãªã å®éã«èšäºã衚瀺ãããç¶æ
ã§ã®ãã¬ãã¥ãŒãé¢å ïŒå®éã®ã¯ãŠãªããã°äžã§ã©ã®ããã«è¡šç€ºããããã¯ããã¡ãã¡ã¯ãŠãªããã°åŽã«åæ ãããäžã§ãã¬ãã¥ãŒããå¿
èŠããããããé¢åã«ãªã£ãŠåŸåãã«ãããã¡ å
¥çš¿ãæäœæ¥ ïŒå
¬éã®ãã³ã«æ¬æãç§»ããç»åã¯ã¯ãŠãªãã©ãã©ã€ãã«äžãçŽããŠæ¿å
¥ãçŽããªããã°ãªããªã å·çè
ããšã«ã¢ã«ãŠã³ãããã ïŒã¯ãŠãªããã°ã«å·çè
ãç»é²ããå¿
èŠããããå
¥ç€Ÿãšéè·ã«åãããŠãã®ç®¡çãããªããã°ãªããªã Notionèšæ³ãšã¯ãŠãªèšæ³ã«äºææ§ããªã ïŒæ®µèœãæ¹è¡ã®æºããç»åã®æ¿å
¥ãªã©ããã¡ãã¡ç®èŠã§ç¢ºèªããŠèª¿æŽããªãããªããŠã¯ãããªã ã¯ãŠãªããã°ã®ç®¡çç»é¢ã§ã¢ããããŒãããç»åããå·çè
ã®ã¯ãŠãªãã©ãã©ã€ãã¢ã«ãŠã³ãã«çŽã¥ããŠããŸã ïŒèšäºã«æ¿å
¥ããŠããç»åã¯å·çè
ã®ã¯ãŠãªãã©ãã©ã€ãã¢ã«ãŠã³ãã«ãªããããéè·åŸãªã©äžæã®ã¿ã€ãã³ã°ã§ç»åãæ¶ããŠããŸã£ããã管çã§ããªãå¯èœæ§ããã ã¯ãŠãªããã°ãšNotionåŽã§åæãåããŠããä¿èšŒããªã ïŒå
¬éçŽåçŽåŸã§ã¯ãŠãªããã°åŽã®ã¿ç·šéããŠããŸã£ãå Žåã«å
容ããºã¬ãŠããŸããåæããææ®µããªãã£ã ãããã®åé¡ãæ·±å»ã«ãªãããšã¯ããŸããªãäžåäžåã¯å°ããäžäŸ¿ã§ãããé«é »åºŠã«èšäºãå
¥çš¿ãããããªç°å¢ã§ããªãã£ããããããã¯åŠ¥åã®ç¯å²ã§éå¶ã«ãã£ãŠã«ããŒãããŠããŸããã ä»çµã¿ãæ ¹æ¬çã«æ¹åããã«ã¯åŽåããããŸãããããã¯ããã°ã®ããã«ããã ãã®åãããã人ã¯å€ããªãããšããã®ã¯å€ãã®ããã¯ããã°ã®æ©ã¿ãšããŠããã®ã§ã¯ãªãã§ããããã HatenaBlog Workflowsã®å°å
¥ãšãã®åŸã®å€å ãããªäžã§æ°ããã¯ãŒã¯ãããŒã®äžå¿ãšããŠæ³šç®ããã®ãã HatenaBlog Workflows ã§ãã ããã¯ã¯ãŠãªããã°ã®åºæ¬çãªæäœããŸãšããŠãGitHubããããã°ç®¡çãå¯èœã«ããããã®ã©ã€ãã©ãªã§ãã ãã®ã©ã€ãã©ãªèªäœã¯ 2023幎ã«Boilerplateçµç±ã§å°å
¥ãããŠã㊠èšäºã®å
¥çš¿ãGitHubããå¯èœã ã£ãã®ã§ãããäºçŽæçš¿ã«å¯Ÿå¿ããŠããªãã£ãã现ãã察å¿ãã§ããªãéšåãããã€ãã®ãã£ãŠããŠã ãã€ç€Ÿå
åãã®ããã¥ã¢ã«ãªã©ãããŸãæŽåãããŠããªãã£ãããäžæçã«å©çšãããŠã¯ãããã®ã®ããã®åŸã¯æ®åããŠããŸããã§ããã ïŒå°ããããã«ããã®ã§ãããåºåºãšãªããŠãŒãã£ãªãã£ãšããŠHatenaBlog Workflowsãããããã®ãµã³ãã«å®è£
ãšã㊠HatenaBlog Workflows Boilerplate(β) ããããBASEã§ã¯åŸè
ãã«ã¹ã¿ã ããŠå©çšããŠããŸãïŒ ãã®ãããŒãå©çšããå
¥çš¿ãæ®åããªãã£ãããšèªäœã¯ä»æ¹ã®ãªã話ã§ãã©ã€ãã©ãªèªäœã¯äŸ¿å©ã§ãã£ããã®ã®ãã»ãšãã©ã®å·çè
ã«ãšã£ãŠããŸã«ããå·çããªãäŒç€Ÿã®ããã°ã·ã¹ãã ã§GitHub Actionsãå©çšããŠèšäºãæžãã»æçš¿ããããšããã®ã¯ããã説æãåããŠãå¿ççãªéå£ãé«ãã§ããããã æ±ãã«æ
£ããŠããNotionã§æäœæ¥ã§å·çãé²ãããããªãããã£ã¡ã§æžãŸããŠããŸãã ãããšæããŸãã ããããŠæä»£ã¯æµããŠãã£ãã®ã§ãããæšä»ã®AIæä»£ãBASE瀟å
ã§ã誰ããåœããåã®ããã«Claude CodeãCodexãæ±ãäžã§ã HatenaBlog WorkflowsãAIã§æ±ããããããã ãã§ããã°ã®å·çãGitHubäžã§å®çµããã¯ãŒã¯ãããŒãç°¡åã«æŽåã§ããã®ã§ã¯ãªããïŒãšèããŸããã ãšãŒãžã§ã³ããæé ãåŒãåããŠãããã°ããããŸã§GitHubããŒã¹ã§ã®å·çãæ®åããªãã£ãçç±ãè§£æ¶ã§ããã¯ãã§ãã ããã«ã¿ã€ãã³ã°ã®ããããšã«ãHatenaBlog Workflowsãå
éšã§å©çšããŠãã blogsyncã4æã«ã¯ãŠãªããã°ã®äºçŽæçš¿ã«å¯Ÿå¿ããŠãã ããã ãã®æŽæ°ãåã蟌ãã§ãããããšãã§ããã°ããäºçŽæçš¿ã§ããªãããšããGitHub管çã§ã®æå€§ã®èª²é¡ãå
¬åŒã®ã¯ãŒã¯ãããŒã§è§£æ¶ã§ãããã ãšå€æããã®ã倧ããã£ãã§ãã (å®éã« blogsyncã®ããŒãžã§ã³ãäžããŠã»ãããšããèŠæãIssueã§åºãããšãã ã3æ¥ã§å¯Ÿå¿çããªãªãŒã¹ãããŸããã ãããã§ããŸã¯ãfront matterã« Scheduled: true ãšå
¬éãããæ¥æãæžããŠpushããã ãã§äºçŽæçš¿ãç»é²ãããããã«ãªãã管çç»é¢ã«è§Šãå¿
èŠã¯ãªããªããŸããã) æ°ããå
¥çš¿ã®æµã ãããŠå®éã«ãªããžããªã«ãšãŒãžã§ã³ãã®ããã®SkillãããŒãã¹ãçšæããŠã以äžã®ãããªå·çã¯ãŒã¯ãããŒãæŽåããŸããã ããŒãã¹ã®æ¹ã«ã¯HatenaBlog Workflowsã«é¢ããç¥èãšãã¯ãŠãªèšæ³ã«é¢ããç¥èããªãã¡ã¬ã³ã¹ãšããŠæž¡ããŠããŸãã ãŸãããã®éçšã§å¿
èŠã«ãªãGitHub Actionsã®çæãšããã¥ã¡ã³ãæŽåãæ
ã£ãŠããããŸããã å·çè
ã¯ããã°ã®ãªããžããªãçšæããŠãClaude Codeãèµ·åãã ãèšäºãæžãããããšäŒãã ãšãŒãžã§ã³ãã«ãããæçš¿ã«å¯Ÿããåºæ¬çãªæ
å ±ïŒã¿ã€ãã«ãªã©ïŒãèãããåŸãHatenaBlog Workflowsãå©çšããŠGitHubåŽã«èšäºã®PRãäœæãããå·çã»ãã¬ãã¥ãŒãå¯èœãªç¶æ
ãšãªã 以éã¯GitHubã«åçš¿ã®æŽæ°ãpushãããã³ã«ãã¬ãã¥ãŒãèªåã§æŽæ°ããã å·çãã ç»åã®æ¿å
¥ãããå Žåã«ã¯PRã«æ¿å
¥äºå®ã®ç»åãã³ã¡ã³ããããšGitHub Actionsçµç±ã§èªåçã«ã¯ãŠãªãã©ãã©ã€ãã«ã¢ããããŒããããã¯ãŠãªèšæ³ã§ã®ã³ã¡ã³ããè¿ã£ãŠãã èšäºã宿ãããGitHubäžã§PRã®ã¬ãã¥ãŒãåãã ApproveããããããšãŒãžã§ã³ãã«æéãæå®ããŠå
¬éäŸé ŒãäŒããã°äºçŽæçš¿ã®èšå®ãå®äºãã ãšããæµãã§ããå®éã®åèã€ã¡ãŒãžã§ãã以äžã®ããã«ãªããŸãã 1. èšäºãæžãå§ããæ§å 2. èšäºã«äœ¿ãç»åã®ã¢ããããŒããããæ§å 3. 瀟å
åãã®éçHTMLã¢ããããŒãããŒã«ã§ããpon ãå©çšããŠå±éãããããã¥ã¢ã« æ§ç¯éçšã§ããã€ãèŠåŽã¯ãã£ããã®ã®ãç¡äºã«ã¯ãŒã¯ãããŒã¯å®æããŠNotionãžã®äŸåãäžåãªãããŠGitHubã ãã§å·çãå®çµããããã«ãªããŸããã å·çè
åŽã¯äœãç¥ããªãç¶æ
ã§ããããã¥ã¢ã«ãSkillãªã©ãæåãçšæããŠããã®ã§AIãšãŒãžã§ã³ããšå¯Ÿè©±ããã ãã§èšäºã®å
¬éã«ãã©ãçãããšãã§ããŸãã çµæ ãããã®ã¯ãŒã¯ãããŒã¯å®éã«æ§ç¯ãããŠ2ã¶æã»ã©ã§ããããã®éã«å
¬éãããèšäºã®ã»ãŒå
šãŠããã®ä»çµã¿ãå©çšããŠå
¬éãããŠããŸãã ãããŸã§ã®Notionã«ããæäœæ¥ã§ã®å
¥çš¿ãããã¯ã¢ãããšããŠæ®ãããŠã¯ããŸããäžæ°ã«åãæ¿ããå®äºããŸããã ïŒãã®éçšã§ããã€ãHatenaBlog WorkflowsåŽã«IssueãæåºããŸããããããããè¿
éã«å¯Ÿå¿ããã ããŸããããã®å ŽãåããŠè¬æã瀺ããŸãïŒ ãããŠãå
è¿°ããäžæºç¹ãå
šãŠè§£æ¶ãããããã«ä»¥äžã®ãããªå¬ããç¹ãçãŸããŠããŸããã å·çè
ã®ã¯ãŠãªIDãäžèŠã«ãªã£ãïŒå·çè
ãã¯ãŠãªããã°ã«ãã°ã€ã³ããŠèšäºã®èª¿æŽãããå¿
èŠããªããªã£ããããã¯ãŠãªIDãäžèŠã«ãªããŸãããããã«äŒŽã£ãŠããã°ç·šééšã«ããå·çè
ã®ã¢ã«ãŠã³ã管çãäžèŠã«ãªããŸãã ç»åã®ç®¡çãããã°ã®ã¢ã«ãŠã³ãã«äžå
åãããïŒäžèšã®è©±ãšè¿ã話ã§ãããå·çè
ã®ã¯ãŠãªãã©ãã©ã€ãã«äŸåããªããªã£ããã責任ãæã£ãŠç·šééšãç»åãäžå
管çã§ããããã«ãªããŸãã GitHubã®Suggested Changeãå©çšããæçãªã¬ãã¥ãŒã®ãã£ãŒãããã¯ãå¯èœã« GitHub Projectsãå©çšããå·çç¶æ
ã®ç®¡çãšã¹ããŒã¿ã¹ãã©ããã³ã°ã®èªååãå¯èœã« GitHub Issuesãå©çšããèšäºãã¿ã®ç®¡çã®äžå
å ããŸããŸå·çã®ééã空ããŠããŸã£ãããããšãèšäºã®å
¥çš¿ã®ãããŒã¯ã©ããªã£ãŠããã ã£ãïŒãšããããªããªãããšããããŸããã ããããšãŒãžã§ã³ããšã®å¯Ÿè©±ã ãã§æãåºããŠå
¥çš¿ãŸã§ãã¹ãŠã§ããããã«ãªã£ãã®ã¯ç®¡çã®æéãå·çã®å¿ççãªéå£ãäžãããšãããšããã§å€§ããã¡ãªããããã£ããšæããŠããŸãã ãŸãšã æ¢åã®HatenaBlog Workflowsã®ä»çµã¿ãAIãšãŒãžã§ã³ãåãã«æ¡åŒµããããšã§ã¯ãŠãªããã°ã®å·çéçšãAIæä»£ã®ã¯ãŒã¯ãããŒã«èŒãæ¿ããŠã¿ãŸããã AIãšHatenaBlog Workflowsã®çµã¿åããã¯åŒ·åã§ãæå°éã®ç®¡çã§å€æ°ã®å·çè
ãåå ããäŒæ¥ããã°ãã¹ã ãŒãºã«éçšããããšãã§ããããã«ãªããŸããã äžæ¹ã§ããããã®è©±ãšããŠãAIã«ããã¢ãŠãããããäžã«æº¢ããããŠãããã°ãšããã¡ãã£ã¢ã®äŸ¡å€èªäœãäœäžããŠãããªãã§ç·šééšã¯äœã倧äºã«ããã¹ãããäžæ©å
ã®èŠããªãæä»£ã§ã¯ãããŸãã ãã ç·šééšå¡ãšããŠã¯ããã°ãæžãæåã颚åããªãããã«ãäŒæ¥ã®æŽ»åãåºãçºä¿¡ããŠãããã©ãããã©ãŒã ãå»ããŠããŸããªãããã«ãæç« ãæžã以å€ã®æéãæ¥µåæé€ããŠãµããŒãããããšæã£ãŠããŸãã å®éã«ãä»çµã¿ã§éåãã¹ãããã§ããããã«ãªã£ãåãæ¬èšäºã®å·çãã®ãã®ã«ã¯AIãæ¥µå䜿ããã«èªåã§æç« ãæžããŠãããããŸãã 人éèããšããã人éã®æè§Šããããæç« ã£ãŠãªãã ãçŽ æµã ããªããšæãã€ã€ãŸãããã°æåãçãäžãã£ãŠããããšãæåŸ
ããŠããŸãã ææ¥ã®ããã°ãªã¬ãŒã¯Capiããã®èšäºã§ãããæ¥œãã¿ã«ïŒ
ã¯ããã« ãã®èšäºã¯ãBASEå€ã®ããã°ãªã¬ãŒ5æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ãBASE ã§ããã¯ãšã³ããšã³ãžãã¢ãããŠãã倧å¡ã§ãã ãããªãã§ããããšã©ãŒãã°ã¢ã©ãŒããéç¥ãã£ã³ãã«ã«ã¯æµããŠãããã®ã®ãæ¥ã
ã®éçºã«è¿œãããŠèª°ãããã«ã¯èŠã«è¡ããªãââãããªçµéšã¯ãªãã§ããããïŒ ã¢ã©ãŒãã«æ°ã¥ãã人ããã°ãèŠã«ããã該åœã³ãŒãã grep ããŠâŠâŠãšããåå調æ»ã¯ãæ
£ããŠããŠã 30 åãã 1 æéãããäœæ¥ã§ãã BASE ã§ã¯ãšã©ãŒãäŸå€ã Sentry ã«éçŽããŠããã®ã§ããããã®åå調æ»ã AI ãšãŒãžã§ã³ãã«ä»»ãã Slack Botãsentry-analyzerããå
補ããŠéçšããŠããŸãã Slack ã§ Bot ã«èª¿æ»ãäŸé ŒãããšãAI ã Sentryã»New Relicã»ã¢ããªã±ãŒã·ã§ã³ã³ãŒããèªåã§èª¿ã¹ãŠãåå ã®ä»®èª¬ãšèšŒè·¡ããŸãšããã¬ããŒããã¹ã¬ããã«è¿ããŠãããŸãã æ¬èšäºã§ã¯ãsentry-analyzer ã®ä»çµã¿ãšèšèšäžã®å·¥å€«ãéçšããŠèŠããŠããããšã玹ä»ããŸãã sentry-analyzer ãšã¯ sentry-analyzer ãšã¯ãSentry ããéç¥ããããšã©ãŒãäŸå€ã®èª¿æ»ã»ä¿®æ£ãããŠããã Bot ã§ãã äœ¿ãæ¹ã¯ã·ã³ãã«ã§ãSlack ã®ãšã©ãŒéç¥ãã£ã³ãã«ã§ Bot ã«èª¿æ»ãäŸé Œããã ãã§ããããã«ãSentry ã®ã¢ã©ãŒããå±ããã¹ã¬ããã«ã¯ Bot ããð 調æ»ãéå§ããã¿ã³ãèªåæçš¿ããã®ã§ããã¿ã³ 1 ã€ã§ã調æ»ãå§ããããŸã (工倫ãããã€ã³ãã§åŸè¿°)ã 調æ»çµæã Slack ã®ã¹ã¬ããã«è¿ä¿¡ãããŠããæ§å ãããš Bot ãè£åŽã§æ¬¡ã®ãããªèª¿æ»ãèªåŸçã«è¡ããæ°åã§ã¬ããŒããã¹ã¬ããã«æçš¿ããŸãã Sentry ããã€ãã³ã詳现 (ã¹ã¿ãã¯ãã¬ãŒã¹ãé »åºŠã圱é¿ãŠãŒã¶ãŒæ°) ãååŸ New Relic ã« NRQL ãçºè¡ããŠããšã©ãŒã¬ãŒãã»ã¬ã€ãã³ã·ã»çŽè¿ãããã€ãªã©ã®é¢é£ã¡ããªã¯ã¹ãç¢ºèª å¯Ÿè±¡ãªããžããªã®ã³ãŒãã Read / Grep ããŠãã¹ã¿ãã¯ãã¬ãŒã¹ãæãå®è£
ãèªè§£ 以äžãçªãåãããŠãåå ã®ä»®èª¬ã»åœ±é¿ç¯å²ã»ä¿®æ£ã®æ¹åæ§ãã¬ããŒãã«ãŸãšãã ã¬ããŒã㯠2 å±€æ§æã«ããŠããŠãèŠçŽã¯ Slack ã®ã¹ã¬ããã«ããã£ãŒãããµããªãŒã«ãŒãä»ãã®è©³çްã¬ããŒã㯠HTML ã«å€æããŠç€Ÿå
ãã¹ãã£ã³ã°ã«ã¢ããããŒãããURL ãã¹ã¬ããã«æ·»ããŸãã ã¬ããŒããåãåã£ãŠçµããã§ã¯ãªãããã®ãŸãŸ äŒè©±ãç¶ãããã ã®ããã€ã³ãã§ããããã®ä»®èª¬ã®æ ¹æ ããã£ãšè©³ããããå¥ã®æé垯ãèŠãŠããšã¹ã¬ããã«è¿ä¿¡ãããšãBot ã¯èª¿æ»ã®ã³ã³ããã¹ããä¿æãããŸãŸæ·±æãããŠãããŸãã ããã«ã調æ»ã®å
ã«ãããä¿®æ£ããŸã§èžã¿èŸŒãã§ããŸããåæã¬ããŒãã®çŽåŸã«è¡šç€ºããããã¿ã³ãæŒãããä¿®æ£ããŠããšã¡ã³ã·ã§ã³ãããšããšãŒãžã§ã³ããåæã³ã³ããã¹ããåŒãç¶ãã§ã³ãŒããä¿®æ£ãã Draft PR ã®äœæãŸã§ è¡ããŸã (詳现ã¯åŸè¿°)ã ã¢ãŒããã¯ã㣠sentry-analyzer ã¯ã瀟å
ã®ãªãã¬ãŒã·ã§ã³åã AI ãšãŒãžã§ã³ã矀ãéçŽããã¢ãã¬ã base-operation-ai-agents ã®äžå¡ãšããŠãã»ã«ããã¹ãã® Coolify äžã§ã³ã³ãããšããŠçšŒåããŠããŸãããšãŒãžã§ã³ãæ¬äœã¯ 1 ã€ã® Node.js ããã»ã¹ã§ãæ§æèŠçŽ ã¯æ¬¡ã®ãšããã§ãã Slack åãå£ : Slack Bolt ã® Socket Modeãã¢ãŠãããŠã³ãã® WebSocket ã ãã§åããããã€ã³ããŠã³ãã®ãšã³ããã€ã³ãå
¬éãäžèŠ ãšãŒãžã§ã³ãæ¬äœ : Claude Agent SDKããã ã SDK ã«çŽæ¥äŸåããã®ã¯ã¢ãã¬ãå
±éã® LLM å±€ packages/llm ã ãã§ããšãŒãžã§ã³ãã¯ãã®èãã©ãããŒçµç±ã§å®è¡ãã (åŸè¿°) å€éšããŒã¿ã¢ã¯ã»ã¹ : Sentry / New Relic ãžã®ã¢ã¯ã»ã¹ã¯ in-process ã®èªäœ MCP ããŒã« ( get_sentry_issue / execute_nrql ãªã©)ãã³ãŒãèªè§£ã¯ SDK çµã¿èŸŒã¿ã® Read / Grep / Glob / Bash ããŒã« ã³ãŒãåç
§ : 調æ»å¯Ÿè±¡ãªããžããªã®ãã©ãŒã¯å°çšã®åæãµãŒãã¹ (repo-sync) ãå
±æããªã¥ãŒã äžã«å®æåæããŠãããåãšãŒãžã§ã³ãã¯ãããåç
§ããŠãã®å Žã§ grep ã§ãã ã»ãã·ã§ã³ç®¡ç : Slack ã®ã¹ã¬ããåäœã§ã»ãã·ã§ã³ ID ãä¿æ (TTL 1 æé)ãã¹ã¬ããè¿ä¿¡æã¯ SDK ã®ã»ãã·ã§ã³ resume ã§äŒè©±ãç¶ç¶ ãšãŒãžã§ã³ãåºç€ã« Claude Agent SDK ãéžãã ã®ã¯ã èªåå®è£
ãæå°ã«ã§ãã ããã§ããLLM ãšãŒãžã§ã³ããäœãããšãããšãããŒã«åŒã³åºãã®ã«ãŒããäŒè©±å±¥æŽã®ç®¡çãã³ã³ããã¹ãã®æ°žç¶åãš resume ããããèªåã§æžãããšã«ãªããã¡ã§ãããSDK ã¯ããããäžžããšæã£ãŠããŸãããã¡ãã§æžããã®ã¯ Slack ã®ãã³ãã©ãMCP ããŒã«ãèª¿æ»æé ãèšè¿°ããããã³ãããäžå¿ã§ããšãŒãžã§ã³ããããéšåã®ã³ãŒãã¯ã»ãšãã©ãããŸããã 調æ»ã®ãè³¢ããã¯ã¢ãã«ã§ã¯ãªãããã³ããåŽã«å¯ããŠããŸããèª¿æ»æé ã¯ããŒã¯ããŠã³ã®ããã³ãããã³ãã¬ãŒããšããŠç®¡çããŠããããNRQL ã¯ããããã¯ãšãªããã®é ã§è©Šãããtrace.id ã¯ãã®ç¹ã«æ³šæããšãã£ã瀟å
ã®å¯èŠ³æž¬æ§ããŠããŠãããã«èç©ããŠããŸããéçšããªãããã®ãã¡ã€ã«ãè²ãŠãããšãããã®ãŸãŸ Bot ã®èª¿æ»åè³ªã®æ¹åã«ãªãæ§é ã§ãã 工倫ãããã€ã³ã 1. ä¿®æ£ PR èªåäœæ â ãšãŒãžã§ã³ãã®è²¬åããã³ãŒãä¿®æ£ãŸã§ãã«çµã åæã»ãã·ã§ã³ã¯åå ç®æãšä¿®æ£æ¹éãŸã§ææ¡ããŠããã®ã«ããã®ã³ã³ããã¹ããæšãŠãŠäººéããŒãããä¿®æ£ã«çæããã®ã¯ãã£ãããªããããã§åæã®å»¶é·ã§ä¿®æ£ Draft PR ãŸã§äœããããã«ããŸãããèšèšã§ç¹ã«æèããã®ã¯ ãšãŒãžã§ã³ãã«æž¡ãæš©éãæå°ã«ãã ããšã§ãã ãšãŒãžã§ã³ãã®è²¬åã¯ãäœ¿ãæšãŠã® git worktree å
ã§ã³ãŒããä¿®æ£ããPR ã¿ã€ãã«ã»æ¬æãçæããããŸã§ git push ãš GitHub API åŒã³åºã (GitHub App èªèšŒ) ã¯ããšãŒãžã§ã³ãã§ã¯ãªããã¹ãåŽ (orchestrator) ãå®è¡ãããèªèšŒããŒã¯ã³ããšãŒãžã§ã³ãç°å¢ã«æž¡ããªã ä¿®æ£ã¯å
±æã®ã³ãŒãåç
§ãã£ã¬ã¯ããªã§ã¯ãªããäŸé Œããšã«åã git worktree ã§è¡ããçµãã£ããæåã»å€±æãåããåé€ ããã«ãèªåçæãããã³ãŒãããã®ãŸãŸæ¬çªã«åãããªããããæ©æ¢°çãªã¬ãŒããäœæ®µãå
¥ããŠããŸãã ã¬ãŒã å
容 Draft PR åºå® èªåããŒãžæ©æ§ã¯æããªãã人éãã¬ãã¥ãŒã㊠Ready åãã 倿Žéäžé äžå®ã®ãã¡ã€ã«æ°ã»è¡æ°ãè¶
ãã diff 㯠PR ãäœããå ±åã®ã¿ ä¿è·ãã¹ CI èšå®ãã€ã³ãã©å®çŸ©ãlockfile ãªã©ãžã®å€æŽã¯ããã©ã«ãæåŠ åºèªæèš PR æ¬æã« AI çæã§ããæšã»å
ã® Sentry Issueã»äŸé Œè
ãæèš ããªã¬ãŒã¯ãææ§ãªããŒã¯ãŒãå€å®ã§èªåçºç«ãããåœ¢ã¯æ¡ããã åæã¬ããŒãçŽåŸã«è¡šç€ºãããã¿ã³ (確èªãã€ã¢ãã°ä»ã) ãšããä¿®æ£ããŠããPR äœã£ãŠãã®ãã㪠æç€ºçãªäŸé Œã¡ã³ã·ã§ã³ ã® 2 ã€ã ããå
¥å£ã«ããŠããŸããèšãåãã®æºãã«ãã誀çãé¿ãã€ã€ããã¿ã³ã®ãããã§æ©èœã®çºèŠæ§ãäžãããŸããã 2. 䜿ã£ãŠãããããã®å·¥å€« â ã¢ã©ãŒãã« Bot ãå
åããã 瀟å
ããŒã«ã¯äœã£ãã ãã§ã¯äœ¿ãããŸãããsentry-analyzer ãåœåã¯ãã¡ã³ã·ã§ã³ã®æžãæ¹ãç¥ã£ãŠãã人ã ãã䜿ãããç¶æ
ã§ãã¢ã©ãŒããèŠã人ã Bot ã®ååšãæãåºããªããã°ãããã§ååã¯æ¢ãŸã£ãŠããŸããŸãã ããã§ãBot ãåå ããŠãããã£ã³ãã«ã« Sentry ã®ã¢ã©ãŒããå±ããããBot èªèº«ããã®ã¹ã¬ããã«äœ¿ãæ¹ã®æ¡å
ãšãð 調æ»ãéå§ããã¿ã³ãèªåæçš¿ããããã«ããŸããã調æ»ã®å
¥å£ãã¢ã©ãŒãã«å¿
ãçŸããã®ã§ãã¡ã³ã·ã§ã³ã®æžãæ¹ãèŠããŠããªããŠããã¿ã³ 1 ã€ã§ååãå§ãŸããŸãã å°å³ã§ããå¹ããŠããé
æ
®ã 2 ã€ãããŸãã åæã§ããªãã¢ã©ãŒãã«ã¯æ¡å
ãåºããªã : Issue ID ãæœåºã§ããã¢ã©ãŒãã ããæ¡å
察象ã«ããããã¿ã³ãæŒããã®ã«ãåæã§ããŸããã§ããããšè¿ã£ãŠããäœéšãäœããªã ãã¿ã³æŒäžåŸã¯ãã¿ã³ãå€ãããâ¯â¯ããã調æ»ãéå§ããŸãããã«çœ®ãæãã : 飿ã«ããäºéå®è¡ãé²ãã€ã€ã誰ã調æ»ãå§ããããã¹ã¬ããã«æ®ã ä¿®æ£ PR ã®äœæããã¿ã³ã«ããããš (åè¿°) ãåãçºæ³ã§ããæ©èœãããããšã«æ°ã¥ããå°ç·ãã䜿ãå Žæã®ãããã°ã«çœ®ããããšãæèããŠããŸãã 3. ãšãŒãžã§ã³ããåç¬ã§éçšããã瀟å
å
±éåºç€ (ã¢ãã¬ã) ã«ä¹ãã 瀟å
ã«ã¯ sentry-analyzer 以å€ã«ã Slack ã§åããªãã¬ãŒã·ã§ã³åã AI ãšãŒãžã§ã³ããããããããããå¥ãªããžããªã§ãããã€ã»ç°å¢å€æ°ã»ãã°ã»LLM åŒã³åºããå¥ã
ã«äœããšãéçšãç¥èŠãåæãããŠããŸããŸãã å®éãsentry-analyzer ãéå»ã«ã¯åç¬ãªããžã㪠+ EC2 (systemd åžžé§) ã§éçšããŠããããã®åæã身ããã£ãŠæããŠããŸãããããã§ãšãŒãžã§ã³ã矀㯠1 ã€ã®ã¢ãã¬ã base-operation-ai-agents ã«éçŽããŠããŠãsentry-analyzer ããã® 1 ãšãŒãžã§ã³ããšããŠåããŠããŸãã å
±éåºç€ã«ä¹ãããšã§åŸããã®ã¯å€§ãã 3 ã€ãããŸãã LLM å±€ã®å
±æ : Claude Agent SDK ãžã®çŽæ¥äŸåã¯å
±éããã±ãŒãž packages/llm ã® 1 ç®æã ãããšããå¢çèŠçŽã CI ã§æ€æ»ãå
±é局㯠SDK ãã»ãŒçŽ éããã€ã€ããšã©ãŒåé¡ (åä»ãäŸå€) ãš usage èšé²ã ããè¶³ãèãèšèšã§ãSDK ã®ããŒãžã§ã³è¿œåŸãèšé²åºç€ã®æ¹åãå
šãšãŒãžã§ã³ãã«äžåºŠã«å¹ã å¯èŠ³æž¬æ§ : éçšãè»éã«ä¹ããšã誰ãã©ãããã䜿ã£ãŠããã®ããã1 åã®èª¿æ»ã«äœã¿ãŒã³ã»ãããããã£ãŠããã®ãããç¥ããããªããŸããã以åã¯ãã°ã console.log ã®ã¿ã§ãããã«çããããŸããã§ãããããŸã¯å
±éå±€ã 1 å®è¡ããšã® usage (ã¿ãŒã³æ°ã»ããŒã¯ã³éã»ã³ã¹ã)ã»ã¢ãã«å¥å
èš³ã»ã¹ããããã¬ãŒã¹ (ã©ã®ããŒã«ãäœ ms æç¹ã§åããã) ãå
±æ MySQL ã«èšé²ãã瀟å
ã® Web UI ããé²èЧã§ããŸãããšã©ãŒæãã¡ããªã¯ã¹ã¯ååŸãããã®ã§ã倱æãã調æ»ã®ã³ã¹ããèšé²ã«æ®ããŸã ãããã€ã®æšæºå : push ã§ã³ã³ããã€ã¡ãŒãžããã«ãããèªåãããã€ãæ¬çªããã»ã¹äžã§ãã«ãããªãã®ã§ãEC2 æä»£ã«èžãã ãããã€äºæ
(åŸè¿°) ã¯æ§é ããšè§£æ¶ 調æ»å¯Ÿè±¡ãªããžããªã®åæ (repo-sync) ã®ãããªåšèŸºæ©èœãå
±çšã«ãªãããšãŒãžã§ã³ããå¢ãããã³ã«äœãçŽãå¿
èŠããªããªããŸãããäžæ¹ã§ãšãŒãžã§ã³ãå士㯠import ãåããªãççµåãä¿ã£ãŠããŠãåãšãŒãžã§ã³ãã¯ç¬ç«ãããããã¯ããšããŠéçºã§ããŸãããå
±æããã®ã¯åºç€ãšèŠçŽããããã¯ãã¯ç¬ç«ããšãããã©ã³ã¹ã®è¯ãéçšãã§ããŠãããšæããŠããŸãã éçšããŠã¿ãŠ åå調æ»ããæããŠããã°é²ãããã®ã«ãªã£ã äžçªå€§ããå€åã¯ãã¢ã©ãŒã察å¿ã®å¿ççãªããŒãã«ãäžãã£ãããšã§ããåŸæ¥ã¯ããŸãšãŸã£ãæéãåãããèŠããããšåŸåãã«ãªããã¡ã ã£ã調æ»ããBot ã«æããŠããã°ã¬ããŒããè¿ã£ãŠããã®ã§ããšããããæãã â ã¬ããŒããèŠãŠå€æããããšããæµãã«ãªããŸãããã¬ããŒãã«ã¯ NRQL ã®å®è¡çµæã該åœã³ãŒãã®åŒçšã蚌跡ãšããŠä»ãã®ã§ããã®ãŸãŸããŒã ã®è°è«ã®åå°ã«ãªããŸãã å®éçãªææãšããŠãéçšéå§ããã®çŽ 5 ã¶æã§çŽ 150 åã®åå調æ»ãå®è¡ããŠããŸãïŒæ 30 åããŒã¹ïŒã 人æãªã 30 åã1 æéããã£ãŠããåå調æ»ããBot ãªãæ°åã§ã¬ããŒããåºãŠããããã«ãªããŸãããèª¿æ»æéãã®ãã®ã¯èšæž¬ããŠããŸããããååãŸã§ã®éãã¯äœæã§ã倧ããå€ãã£ãŠããŸãã èžãã çœ : æ¬çªãµãŒãäžã§ npm ci ãããŠã¯ãããªã é 颚æºåžã ã£ãããã§ã¯ãªããEC2 ã§éçšããŠããææã«ã¯ãããã€äºæ
ããããããŠããŸããdependabot ã® major ããŒãžã§ã³ã¢ãã PR ãçæéã«é£ç¶ããŒãžããéããããã€ã®ãã³ã«æ¬çª EC2 äžã§ npm ci + tsc ãèµ°ãããæ§æã ã£ããããå°ããã€ã³ã¹ã¿ã³ã¹ã®ã¡ã¢ãªãæ¯æžã npm ci ãäžéåç«¯ã«æ»ãã§ node_modules ãå£ããBot ã restart ã«ãŒãã«é¥ããŸããã ããã«æªãããšã«ããããã€ã¯ãŒã¯ãããŒã SSM å®è¡çµæã®ãšã©ãŒãæ¡ã朰ãå®è£
ã«ãªã£ãŠãããGitHub Actions äžã¯ãã¹ãŠ success 衚瀺ãSlack ã§ Bot ãç¡å¿çãªããšã«æ°ã¥ããŸã§ãæ°æéã®åæ¢ãèŠéããŸããã åŠã³ã¯ã·ã³ãã«ã§ãã æ¬çªãµãŒãäžã§ãã«ãããªãããã«ãããŠææç©ã ãé
ã CI ã® success 衚瀺ã¯ã宿
ã exit code ã«åæ ããŠããªããã°æå³ããªã major ããŒãžã§ã³ã¢ããã®é£ç¶ããŒãžã¯ããèªäœããªã¹ã¯ ãã®äºæ
ã¯ãç¬èªæ§æã® 1 å°ãç¬èªéçšãç¶ããããšãèªäœã®ãªã¹ã¯ã宿ãããŠãããŠãå
±éåºç€ã«ä¹ãã倿ãåŸæŒãããåºæ¥äºã«ããªããŸããã ä»åŸã®å±æ çç¶èµ·ç¹ããªã¢ãŒãž : å®éã®é害察å¿ã®å
¥å£ã¯ Sentry ã®ã¢ã©ãŒãã ãã§ã¯ãªãããååããŒãžã¡ãã£ãšéããªãïŒãã®ãããªè»œãéåæã®ã€ã¶ããããå§ãŸãããšããããŸããSentry ã® Issue ID ããªããŠãèªç¶èšèªã®çç¶èšè¿°ãã察象ãµãŒãã¹ãæšå®ããŠåå調æ»ãå§ãããããçç¶ã¢ãŒãããæ€èšäžã§ã å質è©äŸ¡ã®ä»çµã¿å : ããã³ãããã¢ãã«ãå€ãããšãã調æ»å質ãèœã¡ãŠããªãããã人ã®ç®èŠä»¥å€ã§å€å®ã§ããããã圢åŒéµå® â 蚌跡ãšã®æŽå (ã°ã©ãŠã³ãã£ã³ã°) â ããã»ã¹å質 â çµè«ã®åŠ¥åœæ§ããšæ®µéãåããè©äŸ¡ãã¬ãŒã ã¯ãŒã¯ãèšèšäžã§ã ãšãŒãžã§ã³ãéã®ããŠããŠå
±æ : ã¢ãã¬ãã«éãŸã£ãããšã§ãããã³ããã®ç¥èŠããµããšãŒãžã§ã³ãã®ã¬ã·ãããšãŒãžã§ã³ã暪æã§å
±æããåå°ãã§ããŸãããsentry-analyzer ã§è²¯ãã調æ»ããŠããŠãä»ã®ãšãŒãžã§ã³ãã«ãéæµãããŠãããŸã 調æ»ããŠããŠã®èç© : èª¿æ»æé ã®ããã³ãããã³ãã¬ãŒãã¯ãéçšã§åŸãç¥èŠãè¶³ãã»ã©è³¢ããªããŸãã宿çãªæŽæ°ã¯ã§ããŠããŸããããé·æã§éçšããäžã§å¿
é ã®äœæ¥ã§ã ãããã« sentry-analyzer ã¯ããšã©ãŒã®åæèª¿æ»ã®ã³ã¹ãåæžãã«å€§ããè²¢ç®ããŠãããšæããŠããŸãã ãŸã ãŸã æ¹åã®äœå°ã¯ãããŸãããæã
ãšåãããã«ãã¢ã©ãŒãã¯æ¥ããååãéããããŒã ã®åèã«ãªãã°å¹žãã§ãã ææ¥ã¯ãmatzzããã®èšäºã§ãããæ¥œãã¿ã«ïŒ
ãã®èšäºã¯ãBASEããã¯ããã°å€ã®ããã°ãªã¬ãŒ4æ¥ç®ã®èšäºã§ãã BASEæ ªåŒäŒç€Ÿã§ PAY IDã¢ããªã®iOSã¢ããªãšã³ãžãã¢ãããŠãã kakkki ã§ãã æè¿ãã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®é²åã«ãã£ãŠéçºã®ã¹ããŒããäžããããã«ãªã¯ãšã¹ãïŒä»¥äžããã«ãªã¯ïŒã®æ°ã倧ããå¢ããŸãããåŒç€Ÿã®iOSã¢ããªããŒã ã§ããgit worktreeãæŽ»çšããŠè€æ°ã®éçºã䞊è¡ããŠé²ããå Žé¢ãå¢ããŠããŸãã éçºãéããªãã®ã¯ããããäžæ¹ã§ã次ã®ãããªèª²é¡ãç®ç«ã€ããã«ãªã£ãŠããŸããã éçºã®ãã³ã«å¿
èŠãªã·ãã¥ã¬ãŒã¿ãŒã宿©ã§ã®åäœç¢ºèªã®æéãã©ãæžããã å¢ããŠãããã«ãªã¯ã®ã¬ãã¥ã¯ãŒããã¶ã€ããŒã®UI確èªã®è² æ
ãã©ã軜ãããã ãããªäžæã
ã工倫ããŠãåãçµã¿ãšããŠã次ã®2ã€ã®ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãåãã¹ãã«ã«ã€ããŠç޹ä»ããŸãã iOSã·ãã¥ã¬ãŒã¿ãæäœããåäœç¢ºèªãšã¹ã¯ãªãŒã³ã·ã§ããæ®åœ±ãè¡ãã¹ãã« æ®åœ±ããã¹ã¯ãªãŒã³ã·ã§ãããã¢ããããŒããããã«ãªã¯ã«è²Œãä»ããã¹ãã« ãã®2ã€ãçµã¿åãããUI倿Žã®åäœç¢ºèªãããã«ãªã¯ãžã®ã¹ã¯ãªãŒã³ã·ã§ããæ·»ä»ãŸã§ããã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã«ä»»ãããããŒã確ç«ããŠããŸãã ãã£ããïŒèšå€§ãªUIãã¿ãŒã³ã®ãã°ã¬ãã§ã㯠ãã£ããã¯ãåŒç€Ÿã®ã¢ããªãPAY IDãã®åå詳现ç»é¢ã®æ©èœè¿œå ã®ããã®éçºãããŠãããšãã®ããšã§ããã åå詳现ç»é¢ã¯ã10幎以äžã«ããã£ãŠäœãç¶ããããŠããŸãããæ©èœè¿œå ã仿§å€æŽãéããçµæãæ©èœãååã®ç¶æ
ã«å¿ããUIãã¿ãŒã³ã¯èšå€§ãªæ°ã«ã®ãŒããé·å¹Žã®ä»æ§ãæ¯ããæ¡ä»¶åå²ãç©ã¿éãªã£ãŠããŸãããã®ãããã¡ãã£ãšããæ¹ä¿®ã§ããä»ã®è¡šç€ºãã¿ãŒã³ã«æå³ããªã圱é¿ãåºãŠããªããããšãããã°ã¬ãã§ãã¯ãæ¬ ãããããã®UI確èªãšã¬ãã¥ãŒã«å€§ããªã³ã¹ããããã£ãŠããŸããã PAY IDã¢ã㪠åå詳现ç»é¢ã®ã¹ã¯ã·ã§ã§ã åãåå詳现ç»é¢ã§ããååã®ç¶æ
ã«ãã£ãŠãããžããã¿ã³ã®æ§æãå€ãããŸãïŒç»é¢ã¯éçºç°å¢ã®ãã¹ãããŒã¿ã§ãïŒã ãããªäžã§æãã€ããã®ããUI確èªãã¹ã¯ã·ã§ãšãã£ããèšŒè·¡ãæ®ãäœæ¥ããã®ãã®ããã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã«ä»»ããããªãããšããã¢ã€ãã¢ã§ããã 倿Žç®æã«åœ±é¿ããããªUIãã¿ãŒã³ããšãŒãžã§ã³ããã²ãšã€ãã€æŽãåºããã·ãã¥ã¬ãŒã¿ãŒã§åäœç¢ºèªãããŠãã¹ã¯ãªãŒã³ã·ã§ãããéããŠãã«ãªã¯ã«è²Œã£ãŠãããããšãã£ããããŒã§ãã ãããã§ããã°ã圱é¿ããããªãã¿ãŒã³ã®æŽãåºããããããã®ãã¿ãŒã³ã®UI倿Žã®ç¢ºèªããšãŠã楜ã«ãªããšèããŸããã ãšãŒãžã§ã³ãã«åäœç¢ºèªããããã®ã¯ãæå€ãšãã£ããã§ãã æè¿ã¯ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ããã·ãã¥ã¬ãŒã¿ãæäœããŠãèªåŸçã«åäœç¢ºèªãŸã§è¡ããããã«ããããŒã«ã掻çºã«éçºã»å
¬éãããŠããŸãã ç§ãã¡ã®iOSã¢ããªããŒã ã§ã¯çŸåšãSoftware MansionãéçºããArgentã䜿ã£ãŠããšãŒãžã§ã³ããåäœç¢ºèªããããã®ã¹ãã«ããªããžããªå
ã«çœ®ããŠããŸããArgentã¯ãã³ãŒãã£ã³ã°ãšãŒãžã§ã³ããiOSã·ãã¥ã¬ãŒã¿ãæäœã»ãããã°ã§ããããã®ããŒã«ãããã§ãã¿ãããã¹ã¯ããŒã«ãªã©ã®æäœããšãŒãžã§ã³ãã«æäŸããŸãã ããã«ããã倿Žå¯Ÿè±¡ã®ç»é¢ã«ãšãŒãžã§ã³ããèªåã§é·ç§»ããããåUIãã¿ãŒã³ã®ç»é¢ãèªåŸçã«æ¢çŽ¢ã»ä¿®æ£ããç®æãŸã§ã¹ã¯ããŒã«ããããšãããšããã¯æå€ãšæ©ãå®çŸã§ããŸããã ã·ãã¥ã¬ãŒã¿æäœåŽã®ã¹ãã«ïŒios-simulator-controllerïŒã®äžèº«ã¯ããããªå
容ã§ãïŒæç²ã»äžéšäžè¬åããŠããŸãïŒã --- name : ios-simulator-controller description : | Argentã䜿ã£ãŠãiOSã·ãã¥ã¬ãŒã¿äžã®ã¢ããªã ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ããæäœããã ç»é¢é·ç§»ãUIæäœãç¶æ
確èªãã¹ã¯ãªãŒã³ã·ã§ããæ®åœ±ãŸã§ãæ±ãã --- ãåºæ¬æ¹éã - ç®çã®ç»é¢ã«ã¯ãå¯èœã§ããã°deeplinkã䜿ã£ãŠçŽæ¥ç§»åãã - æäœåã«çŸåšã®UIèŠçŽ ãååŸããã¢ã¯ã»ã·ããªãã£IDãã©ãã«ãã察象ãç¹å®ãã - åºå®åº§æšã«ããæäœã¯ãã»ãã®æ¹æ³ã§èŠçŽ ãç¹å®ã§ããªãå Žåã«éå®ãã - æäœåŸã¯ç»é¢ã®ç¶æ
å€åã確èªããŠãããæ¬¡ã®æäœãžé²ã ãæäœã§ããããšã - ã¢ããªã®èµ·åã»åèµ·å - deeplinkã«ããç»é¢é·ç§» - UIèŠçŽ ã®ååŸ - ã¿ãããã¹ã¯ããŒã«ãããã¹ãå
¥å - UIèŠçŽ ã®è¡šç€ºã»é衚瀺ã®åŸ
æ© - ã¹ã¯ãªãŒã³ã·ã§ããã»ç»é¢é²ç» ãã¯ãŒã¯ãããŒã 1. æäœå¯Ÿè±¡ã®ã·ãã¥ã¬ãŒã¿ãç¹å®ãã 2. ç®çã®ç»é¢ãžç§»åãã 3. çŸåšã®UIèŠçŽ ãååŸãã 4. ã¢ã¯ã»ã·ããªãã£IDãã©ãã«ããæäœå¯Ÿè±¡ãæ¢ã 5. ã¿ãããã¹ã¯ããŒã«ãªã©ã®æäœãè¡ã 6. ç®çã®ç¶æ
ãžå€åããããšã確èªãã 7. å¿
èŠãªç»é¢ã®ã¹ã¯ãªãŒã³ã·ã§ãããä¿åãã ãæäœã®å®ç³ã - ç»é¢é·ç§»åŸã¯äžå®æéåŸ
ã€ã®ã§ã¯ãªããç®çã®UIã衚瀺ããããŸã§åŸ
æ©ãã - ã¹ã¯ããŒã«ã¯ãã¹ã¯ããŒã« â UIã確èªãããäžéãæ±ºããŠç¹°ãè¿ã - ãã€ã¢ãã°ãªã©ãæäœã劚ããŠããå Žåã¯ãå
ã«éããŠããæ¬æ¥ã®æäœãžæ»ã - æäœãåå¿ããªãã£ãå Žåã¯ç¶æ
ã確èªããå¥ã®åè£ãçµè·¯ãè©Šã æäœã®ãã³ã«çŸåšã®UIãèªã¿åããç»é¢é·ç§»ã®å®äºãæäœçµæã確èªããªããæ¬¡ãžé²ãããšã§ããšãŒãžã§ã³ãã«ããåäœç¢ºèªã®åçŸæ§ãé«ããŠããŸãããŸããéçšäžã«èŠã€ãã£ãã¢ããªåºæã®æäœæ¹æ³ãäŸå€ãã¿ãŒã³ããå°ããã€ã¹ãã«ãžèç©ããŠããŸãã ã¹ã¯ã·ã§ã¯æ®ãããæ©ãã ã®ã¯ã眮ãå Žæãã§ãã æ©ãã ã®ã¯ãã®å
ã§ãã æ®ã£ãã¹ã¯ã·ã§ãã©ãã«çœ®ããŠãã¬ãã¥ã¢ãŒããã¶ã€ããŒãªã©ä»ã®ã¡ã³ããŒãšã©ãå
±æãããã 2026幎8æçŸåšãGitHub APIãGitHub CLIã«ã¯ããã«ãªã¯ã®ãã£ã¹ã¯ãªãã·ã§ã³ã«ç»åãã¡ã€ã«ãã¢ããããŒãããå
¬åŒãªææ®µããããŸããã 人éãææäœã§è²Œãä»ããããšã¯ãã¡ããã§ããŸãããComputer Useã®ãããªä»çµã¿ã§ãšãŒãžã§ã³ãã«çŽæ¥è²Œãããããšãã§ããªãã¯ãªãã®ã§ãããã©ã¡ãã人éã®æéãããŒã¯ã³ã³ã¹ãããããã§ããŸããããããããšã«å¯ŸããŠå€§ãããªãããŒã«ãªã£ãŠããŸããŸãã ãããªãšãã«ç¥ã£ãã®ãããããããCompanion Branch Approachããšããæ¹æ³ã§ãããç»åã眮ãããã®å°çšãã©ã³ããå¥ã«çšæããŠãããã«ç»åãã³ãããããŠããã·ã¥ãã€ã€ããã«ãªã¯ã®ãã£ã¹ã¯ãªãã·ã§ã³ããã¯ãã®ãã©ã³ãäžã®ç»åURLãåç
§ããããšããã¢ãããŒãã§ãã ããšãã°ããã«ãªã¯ã®ãã£ã¹ã¯ãªãã·ã§ã³ã«æ¬¡ã®ãããªã€ã¡ãŒãžã¿ã°ãæžãã€ã¡ãŒãžã§ãã < img src = "https://github.com/sample-org/sample-app/blob/screenshots/pr-1234/item_detail.png?raw=true" width = "300" /> ç»åçšãã©ã³ãäžã®ãã¡ã€ã«ã ?raw=true ä»ãã®URLã§åç
§ãããšããã£ã¹ã¯ãªãã·ã§ã³äžã§ãã®ãŸãŸç»åãšããŠè¡šç€ºãããŸãã ãã®æ¹æ³ã®ãããšããã¯ãéçºçšã®ãã©ã³ãã«ç»åãæ··ããªããŠæžãããšã§ããå°çšãã©ã³ãã«åããŠããã°ããœãŒã¹ã³ãŒãã®å±¥æŽãæ±ãããšãªããGitHubäžã®URLã§ç»åãåç
§ã§ããŸãã ç§ãã¡ã®ããŒã ã§ã¯Gitã®orphanãªãã·ã§ã³ïŒ --orphan ïŒã§çæãããã©ã³ããå©çšããŠããŸããç»åã眮ãã ãã®ãã©ã³ãã«ããœãŒã¹ã³ãŒãã®å±¥æŽã¯èŠããŸãããorphanãªãã·ã§ã³ã®ãã©ã³ããªãããŸã£ãããªå±¥æŽããã¹ã¿ãŒãã§ããŸãã orphan The act of getting on a branch that does not exist yet (i.e., an unborn branch). After such an operation, the commit first created becomes a commit without a parent, starting a new history. â gitglossary - orphan | git-scm.com ãã®orphanãªãã·ã§ã³ã®ãã©ã³ãããç§ãã¡ã¯ _assets ãšããååã§éçšããŠããŸããäžèº«ã¯ããã«ãªã¯ã®çªå·ããšã«ãã£ã¬ã¯ããªãåã£ãŠç»åã眮ãã ãã®ããšãŠãã·ã³ãã«ãªæ§é ã§ãã _assets ãã©ã³ã âââ README.md âââ pr-1234/ â âââ item_detail_default.png â âââ item_detail_soldout.png â âââ item_detail_campaign.png âââ pr-1235/ â âââ cart_badge_count.png âââ pr-1250/ âââ search_result_grid.png âââ search_result_empty.png _assets ãã©ã³ããžã®ç»åã¢ããããŒããšãã£ã¹ã¯ãªãã·ã§ã³ãžã®ç»å貌ãä»ãã®åŠçã¯ã以äžã®ãããªã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®ã¹ãã«ã«èœãšã蟌ã¿ãŸããã ç»åã¢ããããŒãåŽã®ã¹ãã«ïŒpr-screenshot-uploaderïŒã®äžèº«ã¯ããããªå
容ã§ãïŒæç²ã»äžéšç°¡ç¥åããŠããŸãïŒã --- name : pr-screenshot-uploader description : | ã¹ã¯ãªãŒã³ã·ã§ãããæ°žç¶ç㪠_assets orphan branch ã«ã¢ããããŒããã PR description ã« markdown ããŒãã«ãšããŠåã蟌ãã ãã£ãŒãã£ãŒãã©ã³ããæ±ããã«ç»åã GitHub äžã§åç
§å¯èœã«ããã --- ãæŠèŠã - ` _assets ` ã¯ãããžã§ã¯ãå
šäœã§1ã€ã ãã®æ°žç¶ orphan branchãPR ããšã«ãµããã£ã¬ã¯ããªã§ç®¡çãã - äžæ clone ã䜿ã£ãŠæäœãããããå
ã®ã¯ãŒãã³ã°ããªãŒã«ã¯äžåè§Šããªã - git æäœã¯ãã¹ãŠã·ã§ã«ã¹ã¯ãªããå
ã§å®çµããAI ãçŽæ¥ git ã³ãã³ããå®è¡ããªã - PR description ã®æŽæ°ã¯ HTML ã³ã¡ã³ãããŒã«ãŒã§å¢çãå®çŸ©ããäœåºŠã§ãåå®è¡ã§ãã ãã¯ãŒã¯ãããŒã 1. ã¹ã¯ã·ã§ã®ä¿åå
ãã£ã¬ã¯ããªã確èªããïŒè¡šç€ºé床ã®ããå¿
èŠã«å¿ããŠãªãµã€ãºïŒ 2. ã¹ã¯ãªããã§ ` _assets ` ãã©ã³ããžã¢ããããŒãããç»å URL ã®äžèЧïŒJSONïŒãåãåã 3. ç»å URL ãã markdown ããŒãã«ãçµã¿ç«ãŠãïŒã«ã©ã æ§æãè¡æ°ã¯ AI ãæè»ã«æ±ºããïŒ 4. ã¹ã¯ãªããã§ PR description ã®ãã¹ã¯ãªãŒã³ã·ã§ãããã»ã¯ã·ã§ã³ãæŽæ°ãã 5. å®äºå ±åïŒãã©ã³ã / PR / ç»åæ°ïŒ ã¹ã¯ãªããå
šæã¯é·ããªãããçç¥ããŸãããåŠçã¯å€§ãã2ã€ã«åãããŸãã ç»åã _assets ãã©ã³ããžã¢ããããŒããã _assets ãã©ã³ãã ããäžæãã£ã¬ã¯ããªã« clone ãã pr-<çªå·> ãžç»åãã³ããŒã㊠commit ã» push ãã åç
§ããç»åURLã®äžèЧ(JSON)ãååŸãã push ãç«¶åããå Žå㯠rebase ããŠå詊è¡ãã ãã«ãªã¯ã®èª¬ææãæŽæ°ãã çŸåšã®èª¬ææãããã¯ã¢ãããã HTMLã³ã¡ã³ãã§å²ãã ãã¹ã¯ãªãŒã³ã·ã§ãããã»ã¯ã·ã§ã³ã«å¯ŸããŠãååŸããç»åURLãå«ãã å
容ã§è¿œèšãã æŽæ°çµæãååŸããæ£ããåæ ãããããšã確èªãã git æäœããã«ãªã¯ã®æŽæ°ã®ãããªãééããããªãéšåãã¯ã·ã§ã«ã¹ã¯ãªããã«éã蟌ããŠããŸããã©ã®ããã«ã¹ã¯ã·ã§ç»åã䞊ã¹ãŠããã¹ãã«ãã説æã远èšãããã¯AIã®å€æã«ä»»ããŠããŸãã ä»ã§ã¯ãéçºã»ãã·ã§ã³ã®äžã§ããã«ãªã¯ã®ãã£ã¹ã¯ãªãã·ã§ã³ã«ãä¿®æ£ããç¯å²ã®ã¹ã¯ã·ã§ã貌ã£ãŠãããŠããšèªç¶èšèªã§æç€ºããã ãã§ããšãŒãžã§ã³ããä¿®æ£ç®æã®ã¹ã¯ã·ã§ããã«ãªã¯ã®ãã£ã¹ã¯ãªãã·ã§ã³ã«äžããŠãããŸãã å°å
¥ããŠäœãå€ãã£ãã ãããã®ã¹ãã«ããªããžããªã«çœ®ããŠããããã«ãªã¯äœææã®ã¹ã¯ãªãŒã³ã·ã§ããæ·»ä»ãåçã«æ¥œã«ãªããŸãããä»ã§ã¯ã·ãã¥ã¬ãŒã¿ãŒã§ã®ã¹ã¯ã·ã§ã®æ®åœ±ãããã«ãªã¯ãžã®è²Œãä»ããŸã§ããšãŒãžã§ã³ããäžæ°é貫ã§ãã£ãŠãããŸãã ãã ãããã°ã€ã³ãå¿
èŠãªç»é¢ãªã©ããšãŒãžã§ã³ãåäœã§ã¯ãã©ãçãã«ããç»é¢ãããã®ã§ããã¹ãŠã®ç»é¢ã§æåæäœããŒãã«ã§ããããã§ã¯ãããŸããã ããã§ããæ¥ã
ã®iOSã¢ããªéçºã®å€§åã§ãã®ä»çµã¿ã掻çšã§ããããã«ãªãããããããªé¢ã§è¯ã广ããããŸããã ãã¶ã€ããŒãšã®ãããšããéããªã£ã ããšãã°äœãã¿ãŒã³ãã®UIããªãšãŒã·ã§ã³ãããç»é¢ããã¶ã€ããŒã宿©ã§ãã§ãã¯ããããšãããšãæåã§ã²ãšã€ãã€ç»é¢é·ç§»ããŠç®èŠç¢ºèªããŠããããšã«ãªãããšãŠãåŽåãããããŸãã æè¿ã¯ã倿ŽããUIãã¿ãŒã³ãç¶²çŸ
ããã¹ã¯ã·ã§äžèЧã貌ã£ããã«ãªã¯ãå
±æããããšãå€ãã§ãããã¶ã€ããŒã¯éçºã¢ããªãçŽæ¥æäœããªããŠããäžèЧåãããã¹ã¯ã·ã§ãèŠãã ãã§ææ©ããã£ãŒãããã¯ã§ããããã«ãªããŸããã ãã¡ããä»ã§ãæçµçã«ã¯å®æ©ç¢ºèªã¯ããŠããã ãã®ã§ãããããšã³ãžãã¢ãéçºãã â ãã¶ã€ããŒãUIãã¬ãã¥ãŒããŠãã£ãŒãããã¯ãã â ãšã³ãžãã¢ãä¿®æ£ããããšãããã£ãŒãããã¯ã«ãŒããã以åããéãåãããã«ãªããŸããã ããŒã¿ã®ç¶æ
ã«å¿ããŠUIã®ããªãšãŒã·ã§ã³æ°ãå€ãç»é¢ã»ã©å°å³ã«å¹ããŠããŸãã ã¹ã¯ã·ã§ãããã«äžãçŽããã®ã§ä¿®æ£ãµã€ã¯ã«ãæ©ããªã£ã æåã§ã¹ã¯ã·ã§ã貌ã£ãŠããé ã¯ãå®è£
ãä¿®æ£ããã人åã§ç»åãäžãçŽãã®ãé 匵ãããå€ãã¹ã¯ã·ã§ã®ãŸãŸæŸçœ®ããããã®ã©ã¡ããã«ãªããã¡ã§ããã ä»ã§ã¯ãä¿®æ£åŸã«ãããäžååäœç¢ºèªããŠãã¹ã¯ã·ã§ãäžãçŽããŠãããŠããš1ããã³ããæããã ãã§ããšãŒãžã§ã³ãããã¹ãŠã®ã¹ã¯ã·ã§ãèªåã§ã¢ããããŒããçŽããŠãããŸãã æ°è»œã«ä¿®æ£ããŠäžãçŽããã®ã§ãéçºãããã®ãã¯ã€ãã¯ã«å
±æããŠãã£ãŒãããã¯ãããã£ãŠä¿®æ£ãããšããã«ãŒããåãããããªã£ããšæããŠããŸãã ã¹ã¯ã·ã§ã®ãããã«ãªã¯ãåœããåã«ãªã£ãŠã¬ãã¥ãŒã³ã¹ããäžãã£ã ãã«ãªã¯ã®æ°ãå¢ããŠããäžã§ãã¬ãã¥ãŒããã³ã¹ãã®å¢å€§ã¯èŠéããŸãããUIã®å€æŽãå«ãŸãããã«ãªã¯ã§ããã°ã極åä¿®æ£ç®æã®ã¹ã¯ã·ã§ãæ·»ä»ããããšã§å°ãã§ãã¬ãã¥ã¢ãŒã®ã³ã¹ãã軜æžã§ãããšèããŠããŸãã iOSã¢ããªããŒã å
ã§ã¯ãã®å
±éèªèãããã®ã§ããšããšã¹ã¯ã·ã§ãæåã§äžããããšã«ãæµæããªãã£ãã®ã§ãããæè¿ã¯iOSã¢ããªãšã³ãžãã¢ä»¥å€ã®æ¹ãiOSã¢ããªã®ãã«ãªã¯ãäžããŠãããæ©äŒãå¢ããŠããŸããã ãã®ã¹ãã«ãããã°æ°è»œã«ã¹ã¯ã·ã§ããã«ãªã¯ã«çšæã§ããã®ã§ãã¬ãã¥ãŒã³ã¹ãã®è»œæžã«åœ¹ç«ã£ãŠããŸãã ãŸãšã ãã®ä»çµã¿ãå°å
¥ããŠããã4ã¶æã»ã©çµã¡ãŸãããä»ã§ã¯ãä¿®æ£ããç¯å²ã®ã¹ã¯ã·ã§ã貌ã£ãŠãããŠãã®ã²ãšããšããåãšã³ãžãã¢ã®ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ããšã®ãããšãã®äžã«å®çããŠããŸãã ããŒã å
šäœãšããŠããéçºãã倿Žãåšãã«äŒããããŒãã«ããäžãã£ã ãšå®æããŠããŸãã ã³ãŒãã£ã³ã°ãšãŒãžã§ã³ãã®é²åã§ãã³ãŒããæžãããšèªäœã¯ã©ãã©ãéããªã£ãŠããŸããäžæ¹ã§ãããã®å€æŽãæ£ãããã確ãããããšããšãäœãããã®ããåšãã«å
±æããããšãã¯ããŸã ãŸã ããŒã ããšã®å·¥å€«ãå¿
èŠãªé åã ãšæããŠããŸãã éçºãããã®ã®ç¢ºèªãå
±æã®ããæ¹ã«äŒŒããããªèª²é¡ãæããŠããæ¹ã®åèã«ãªãã°å¬ããã§ããå°ããªä»çµã¿ã§ãããããŒã ã®ãã£ãŒãããã¯ã«ãŒãã¯æã£ã以äžã«éãåãããã«ãªãã¯ãã§ãã BASEã§ã¯ãäžç·ã«ãããã¯ããäœã£ãŠããããšã³ãžãã¢ãåéããŠããŸãããã²ãæ°è»œã«æ¡çšæ
å ±ãã確èªãã ããã open.talentio.com ææ¥ã¯ãOtsukaããã®èšäºã§ãããæ¥œãã¿ã«ïŒ
ãã®èšäºã¯ã BASE PRODUCT TEAM å€ã®ããã°ãªã¬ãŒ2026 ã®3æ¥ç®ã®èšäºã§ãã ã¯ããã« PAY ID Dept & Data Strategy Group ã§æ€çŽ¢ãã¬ã³ã¡ã³ããŸãããæ
åœããŠããæç°ã§ãã ç§ãã¡ã®ããŒã ã§ã¯ã倧ããªãã£ã³ããŒã³ã宿œããããã³ã«ãæ€çŽ¢ãã¬ã³ã¡ã³ããšãã£ã API ã®ã¹ã±ãŒã«ã¢ãŠãã»ã¹ã±ãŒã«ã€ã³ã®èšå®ãäºåã«å
¥ããäœæ¥ãæåã§è¡ã£ãŠããŸãããPAY ID ã§ã¯æã«äœåºŠããã£ã³ããŒã³ãè¡ãããããšãããããã®èšå®äœæ¥ãå°å³ã«æéã§ããã 瀟å
ã«ã¯ãã£ã³ããŒã³ã®åç¥ãæµã Slack ãã£ã³ãã«ããããåç¥ã¯ Slack ã¯ãŒã¯ãããŒã§æçš¿ãããŠããŸããããã§ããã®åç¥ãäœãããã¿ã€ãã³ã°ã§ Slack ã¯ãŒã¯ãããŒãèµ·ç¹ã« GitHub Actions ãåãããèšå®å€æŽã® Pull Request ãèªåçæãã ä»çµã¿ãäœããŸããã Slack ã¯ãŒã¯ãããŒãã GitHub Actions ãèµ·åããããšããã®ã¯äžèŠãããããããªèŠæ±ãªã®ã§ãããå
¬åŒã«çšæãããçŽ çŽãªéããªããå®éã«ãã£ãŠã¿ããšãããã©ãããå€ããããŸããããã®èšäºã§ã¯ããã®æ§æãšãéäžã§èžãã èœãšã穎ãå
±æããŸãã ãã®èšäºã®å¯Ÿè±¡èªè
Slack ã¯ãŒã¯ãããŒãã GitHub ã®åŠçãèµ·åãããæ¹ å®åçãªç³è«äœæ¥ããäžç¶ãµãŒããŒãç«ãŠãã«èªååãããæ¹ åæ Slack ã® GitHub ã³ãã¯ã¿ãå©çšã§ããããš GitHub Actions ã䜿ãããªããžããªãããããš èšè¿°ããŠãã Slack / GitHub ã®æåã¯ããããã 2026 幎 7 ææç¹ã§ç§ãã¡ã®ç°å¢ã«ãããŠç¢ºèªãããã®ã§ãããã©ã³ãèšå®ã«ãã£ãŠç°ãªãå¯èœæ§ããããŸã äœãèªååãããã£ãã®ã åæãšããŠãç§ãã¡ã®ãµãŒãã¹ã§ã¯å€§ããªãã£ã³ããŒã³ã宿œããéãã¢ã¯ã»ã¹å¢ã«åããŠäºåã«ãµãŒããŒã®å°æ°ãå¢ãããŠããå¿
èŠããããŸããå
·äœçã«ã¯ãECS ãµãŒãã¹ã Aurora ã®ãªãŒãã¬ããªã«ã«å¯Ÿãã AWS Application Auto Scaling ã®ã¹ã±ãžã¥ãŒã«ãã¢ã¯ã·ã§ã³ïŒæå®ããæå»ã«æå°ã»æå€§ãã£ãã·ãã£ã倿Žããèšå®ïŒã Terraform ã§ç®¡çããŠããŠãéå§åã«ã¹ã±ãŒã«ã¢ãŠããçµäºåŸã«ã¹ã±ãŒã«ã€ã³ããäºå®ã cron åŒã§æžããŠåæ ãã圢ã§ãã ãã®äœæ¥ã«ã¯ãããã€ãé¢åãªç¹ããããŸããã ãã£ã³ããŒã³ã®åç¥ã¯ Slack ã®ã¯ãŒã¯ãããŒã§æµããŠããããèšå®å€æŽã® PR ãäœãã®ã¯äººå èšå®ãæžããã¡ã€ã«ãè€æ°ã«åãããŠããŠãåãæ¥æãäœåºŠã転èšããå¿
èŠããã æ¥æã cron åŒã«å€æããå¿
èŠããããééãããã ã€ãŸããå
¥åïŒãã£ã³ããŒã³ã®æ¥æïŒã¯ãã§ã« Slack äžã«æ±ºãŸã£ã圢åŒã§ããã£ãŠããã®ã«ãããããå
ãæäœæ¥ããšããç¶æ
ã§ããããããã€ãªãã°èªååã§ãããã ããšããã®ãåºçºç¹ã§ãã Slack ã¯ãŒã¯ãããŒãã GitHub Actions ãèµ·åãã çŽæ¥ã€ãªãæ¹æ³ããªã ãŸãèããã®ã¯ãSlack ã¯ãŒã¯ãããŒãã GitHub Actions ã® workflow_dispatch ãå©ãããšããæ¹æ³ã§ããããã Slack ã®ã¯ãŒã¯ãããŒãã«ããŒã«ã¯ã ä»»æã® HTTP ãªã¯ãšã¹ããéãã¹ããããçšæãããŠããŸãã ïŒWebhook ã¯å€éšããã¯ãŒã¯ãããŒãèµ·åããåä¿¡åŽã«ã¯çšæãããŠããŸãããã¯ãŒã¯ãããŒããå€éšãžéãåŽã«ã¯ãããŸããïŒã ãããªããšéžæè¢ã¯æ¬¡ã®2ã€ã§ãã ã«ã¹ã¿ã Slack ã¢ããªãäœã£ãŠã¯ãŒã¯ãããŒã«ç¬èªã®ã¹ãããã远å ãããã®ã¹ããããåŠçãããµãŒããŒåŽã§ GitHub API ãå©ãïŒã¹ãããã®è¿œå 㯠Slack å
¬åŒã®ã«ã¹ã¿ã ã¹ãããæ©èœ ã§å¯èœã§ã Workflow Buddy ã®ãããªå
è¡äºäŸããããŸãïŒ Slack ã¯ãŒã¯ãããŒã® GitHub ã³ãã¯ã¿ã§ issue ãäœæãããããããªã¬ãŒã«ãã 1 ã¯èªç±åºŠãé«ãäžæ¹ãã¢ããªãšãµãŒããŒã®éçºã»éçšããŸãããšå¢ããŸããç³è«ã®èšé²ãåŠçã®èµ·ç¹ã GitHub åŽã«å¯ãããã 2 ãéžã³ãŸããã issue ãæ©æž¡ãã«äœ¿ã GitHub Actions ã«ã¯ on: issues ãšããããªã¬ãŒããããissue ãäœæãããã¿ã€ãã³ã°ã§ã¯ãŒã¯ãããŒãèµ·åã§ããŸããå
šäœã®æµãã¯æ¬¡ã®ãšããã§ãã issue æ¬æãã€ã³ã¿ãŒãã§ãŒã¹ã«ãã GitHub ã³ãã¯ã¿ã® issue äœæã¹ãããã§ã¯ãissue ã®æ¬æãèªç±ã«çµã¿ç«ãŠãããŸããåºå®ã®ããã¹ããšãã©ãŒã ã®åçïŒå€æ°ïŒãçµã¿åããããã³ãã¬ãŒããèšå®ããŠãã圢ã§ãããã®ãšããããšã§æ©æ¢°çã«ããŒã¹ã§ãã圢ã«ããŠããã®ããã€ã³ãã§ãã type: ãã£ã³ããŒã³ start: 2026/07/24 18:00 end: 2026/07/25 00:00 name: ãããã£ã³ããŒã³ requested_by: @xxxx announce_url: https://xxx.slack.com/archives/CXXXXXXXX/pXXXXXXXXXXXXXXXX ããŒã¹åŽã¯ããã®çšåºŠã®å®è£
ã§æžã¿ãŸãã import re FIELD_RE = re.compile( r"^\s*(type|start|end|name|requested_by|announce_url)\s*[:ïŒ]\s*(.*?)\s*$" , re.IGNORECASE) def parse_issue_body (body: str ) -> dict [ str , str ]: fields = {} for line in body.splitlines(): m = FIELD_RE.match(line) # åãããŒãè€æ°ãã£ãå Žåã¯æåã®è¡ãæ¡çšãã if m and m.group( 1 ).lower() not in fields: fields[m.group( 1 ).lower()] = m.group( 2 ) return fields å®éã«éçšããäžã§ã¯ã次ã®ãããªç¹ã決ããŠããå¿
èŠããããŸããã 察象㮠issue ãçµã â äœãããªããšãªããžããªã«äœããããã¹ãŠã® issue ãåŠç察象ã«ãªã£ãŠããŸãã®ã§ãã¿ã€ãã«ãç¹å®ã®ãã¬ãã£ãã¯ã¹ïŒä»å㯠[campaign-scale] ïŒã§å§ãŸã issue ã ããåŠçããŸã ã¿ã€ã ãŸãŒã³ãåºå®ãã â æ¥æã¯ JST ãšããŠè§£éãããšæ±ºãæã¡ããcron åŒã«å€æããéãã¿ã€ã ãŸãŒã³æå®ãæç€ºããŸã æ³å®å€ã®å
¥åã¯ãšã©ãŒã«ãã â æ¥æãšããŠããŒã¹ã§ããªããå¿
é é
ç®ã空ããšãã£ãå Žå㯠PR ãäœããã«åŠçãæ¢ããçç±ã issue ã«ã³ã¡ã³ãããŸã å
¥åã«äžåããã£ãŠ PR ãäœãããªãã£ãå Žåã¯ãissue æ¬æãæã§çŽããŠåŸ©æ§ããéçšã«ããŠããŸããããšã§è§ŠããŸããããã©ãŒã åŽã§ãç¹å®ã®éžæè¢ã®ãšãã ãå¿
é ããšãã£ãå¶åŸ¡ãã§ããªããããå
¥åæŒãã¯å¿
ãèµ·ããŸããissue ãç·šéãããšèªåã§ãªãã©ã€ãããããã«ããŠããã®ã§ãçŽããŠä¿åããã ãã§æžã¿ãŸãã æåŸã® announce_url ã«ã¯ãã¯ãŒã¯ãããŒãæçš¿ããåç¥ã¡ãã»ãŒãžãžã®ãªã³ã¯ãå
¥ããŸããSlack ã®ã¡ãã»ãŒãžéä¿¡ã¹ãããã«ã¯ãã¡ãã»ãŒãžã®ãªã³ã¯ããšããåºå倿°ãããããããåŸç¶ã® issue äœæã¹ãããã«æž¡ããã®ã§ãã©ã®åç¥ã«å¯Ÿããã¹ã±ãŒãªã³ã°èšå®ãªã®ãã issue ã PR ã«æ®ãããšãã§ããŸãã ããã£ããšãã 1. ã³ãã¯ã¿ã®ãªããžããªäžèЧãéäžã§åãã GitHub ã³ãã¯ã¿ã®ãissue ãäœæãããã¹ãããã§ã¯ã察象ãªããžããªãããããããŠã³ããéžã³ãŸãããšãããç§ãã¡ã®ç°å¢ã§ã¯ããã®ãªã¹ããã¢ã«ãã¡ãããé ã« 300 ä»¶ã»ã©ã§æã¡åãããŠããŠãç®çã®ãªããžããªãŸã§ãã©ãçããŸããã§ãããçµç¹ã®ãªããžããªæ°ãå€ããšãããã§è©°ãŸããŸããæ€çŽ¢çªããããŸãããèªã¿èŸŒã¿æžã¿ã®ãªã¹ããçµã蟌ãã§ããã ãã®ããã§ããªã¹ãã«èŒã£ãŠããªããªããžããªã¯æ€çŽ¢ããŠãåºãŠããŸããã§ããã 解決çã¯ã 察象ãªããžããªã«ã ãã¢ã¯ã»ã¹ã§ãã machine userïŒbot çšã¢ã«ãŠã³ãïŒã§ã³ãã¯ã¿ãæ¥ç¶ãçŽã ããšã§ãããããããããŠã³ã«åºãã®ã¯æ¥ç¶ããã¢ã«ãŠã³ããã¢ã¯ã»ã¹ã§ãããªããžããªãªã®ã§ãæš©éãçµãã°ãªã¹ããçããªããç®çã®ãªããžããªãéžã¹ãããã«ãªããŸãã 坿¬¡çãªå¹æãšããŠãå人ã¢ã«ãŠã³ããžã®äŸåããªããªããŸãããå人ã¢ã«ãŠã³ãã§æ¥ç¶ããŠãããšããã®äººãç°åã»éè·ãããšãã«ã¯ãŒã¯ãããŒãæ¢ãŸã£ãŠããŸããŸãã 2. èªåçæãã PR ã§ã¯ CI ãèµ·åããªã ä»åã®ãªããžããªã§ã¯ãPR ãäœããšèªåã§ terraform plan ãèµ°ã CI ãèšå®ãããŠããŸãããšããããGitHub Actions ãäœæãã PR ã§ã¯ãããåããŸããã§ããã ãã㯠GitHub Actions ã®ããã¥ã¡ã³ãã«æèšãããŠããæåã§ã GITHUB_TOKEN ã䜿ã£ãŠè¡ã£ãæäœã¯ãååãšããŠå¥ã®ã¯ãŒã¯ãããŒãèµ·åããŸãã ïŒã¯ãŒã¯ãããŒãç¡éã«é£éããã®ãé²ãããã®ä»æ§ã§ãïŒã When you use the repository's GITHUB_TOKEN to perform tasks, events triggered by the GITHUB_TOKEN , with the exception of workflow_dispatch and repository_dispatch , will not create a new workflow run. åŒçšïŒ Triggering a workflowïœGitHub Docs ããã§äžã€èœãšã穎ããããŸããããã®ä»¶ã§ãã玹ä»ãããåé¿çã«ãPR ãæåã§ Close ã㊠Reopen ããããšãããã®ãããã®ã§ãããä»åã®ãªããžããªã§ã¯äœ¿ããŸããã§ãããCI åŽã®ããªã¬ãŒå®çŸ©ã on : pull_request : types : [ opened, synchronize ] ãšãªã£ãŠããŠã reopened ãå«ãŸããŠããªãã£ãããã§ããããªã¬ãŒå®çŸ©ã« reopened ãè¶³ãã°è§£æ±ºããŸãããæ¢å CI ã®å®çŸ©ã«ã¯æãå
¥ããããªãã£ãã®ã§ãä»å㯠PR ã®ãã©ã³ããžæå
ãã空ã³ãããã push ããïŒïŒ synchronize ãçºç«ãããïŒåé¿çãåããŸããã git commit --allow-empty -m "ci: trigger plan" && git push ããããäºæ
ããªããã°ãçŽ çŽã«ããªã¬ãŒå®çŸ©ãž reopened ãè¶³ãã®ã§ãããšæããŸããæä¹
çã«è§£æ±ºãããªãã GITHUB_TOKEN ã§ã¯ãªã GitHub App ã®ããŒã¯ã³ã§ PR ãäœãæ¹æ³ããããŸãã 3. ãã©ãŒã ã®æ¡ä»¶åå²ã䜿ããªã ä»åããã©ãŒã ã§ããã£ã³ããŒã³ã®å Žåã¯çµäºæ¥æãå¿
é ã«ãããããšããèŠæ±ããããŸãããã¯ãŒã¯ãããŒãã«ããŒã«ã¯ããã©ã³ãã远å ãããïŒif/else åå²ïŒãšããæ©èœãããã®ã§ãããããã¯äžäœãã©ã³åãã®æ©èœã§ãç§ãã¡ã®ç°å¢ã§ã¯å©çšã§ããŸããã§ããã ãã®çµæã ãç¹å®ã®éžæè¢ãéžãã ãšãã ãå¿
é ããšããå¶åŸ¡ã¯ã§ãã ããã©ãŒã äžã®å¿
é èšå®ã¯çš®å¥ã«ãããäžåŸã«ãªããŸãã ããã§ã次ã®ãããªæ¹éã«ããŸããã ã©ãã«ãšãã³ãæã§äŒãã â ãçµäºæ¥æïŒãã£ã³ããŒã³ã®å Žåã¯å¿
é ïŒãã®ããã«ãæ¡ä»¶ãã©ãã«èªäœã«æžã蟌ã å
¥åæŒãã¯åãå
¥ããŠãåŸæ®µã§åŠçãã â GitHub Actions åŽã§æ€ç¥ããPR ãäœããã«ãšã©ãŒãšããŠéç¥ãã æ¢å®å€ã§åããªã â ãæªå
¥åãªãéå§+1æéãã®ãããªè£å®ã¯ãããŠããªã 3ã€ç®ã¯æå³çãªå€æã§ããæ¢å®å€ã§åããŠããŸããšãèšå®ããã€ãããå®éã«ã¯éäžã§å
ã«æ»ãããšããäºæ
ã«ã€ãªãããŸããããã¯äœãèšå®ãããŠããªãç¶æ
ããå±éºãªã®ã§ãæç€ºçã«æ¢ããŠäººéã«å€æããŠãããæ¹ãå®å
šãšèããŸããã ãã®ä»£ãããissue æ¬æãç·šéããã°èªåã§ãªãã©ã€ãããããã«ããŠããŸããä»åäœã£ãèªååã¯ãŒã¯ãããŒåŽã® on: issues ããªã¬ãŒã« edited ãè¶³ãã ãã§ãïŒå
ã»ã©è§Šããæ¢å CI ãšã¯å¥ã®ããã®ä»çµã¿çšã®ã¯ãŒã¯ãããŒã§ãïŒã on : issues : types : [ opened, edited ] 4. edited ããªã¬ãŒã§ PR ãäºéã«äœããã ãšãããã edited ãè¶³ããããšã§å¥ã®åé¡ãèžã¿ãŸããã PR ãäœæããããšãããã® PR ãããŒãžããããŸã§ issue 㯠open ã®ãŸãŸã§ãããã®ç¶æ
ã§ issue æ¬æãç·šéãããšïŒèª€åä¿®æ£ã§ãïŒã¯ãŒã¯ãããŒãåå®è¡ãããŸãããã®ãšãããã©ã«ããã©ã³ãã«ã¯ãŸã 倿Žãåæ ãããŠããªããããããŸã èšå®ãããŠããªãããšå€å®ããã åãå
容㮠PR ããã1æ¬äœãããŠããŸããŸã ã 察çãšããŠãåå®è¡ããŠããããå€å®ãã軜éãªãžã§ããåæ®µã«çœ®ããŸããïŒä»¥äžã¯èŠç¹ã ãã®æç²ã§ãïŒã jobs : precheck : outputs : proceed : ${{ steps.check.outputs.proceed }} steps : - id : check run : | # ç·šéã«ããèµ·åã§ãªããã°ãã®ãŸãŸé²ã # ç·šéã®å ŽåãPR äœææžã¿ãã©ããã issue ã®ã³ã¡ã³ãã§å€å®ãã ... create-pr : needs : precheck if : needs.precheck.outputs.proceed == 'true' äœææžã¿ãã©ããã®å€å®ã« GitHub ã®æ€çŽ¢ APIïŒ Closes #N in:body ãªã©ïŒã䜿ãæããããŸãããæ€çŽ¢ã€ã³ããã¯ã¹ã«ã¯é
å»¶ããããããäœæçŽåŸã®ç·šéãåãããŒãå¯èœæ§ããããŸããä»åã®ã¯ãŒã¯ãããŒã¯ PR ãäœæãããš issue ã« PR ã®ãªã³ã¯ãã³ã¡ã³ãã§æ®ãã®ã§ïŒåé ã®æ§æå³ã«ããã¹ãããã§ãïŒããã®ã³ã¡ã³ãã®æç¡ãçŽæ¥ API ã§ç¢ºèªãã圢ã«ããŸããããã¡ãã¯æ€çŽ¢ã€ã³ããã¯ã¹ã®é
å»¶ã«å·Šå³ãããŸããã ãã ããã®æ¹åŒã¯ãçæéã«é£ç¶ã§ç·šéãããå Žåã®åæå®è¡ãŸã§ã¯é²ããŸãããã³ã¡ã³ãã®æç¡ã確èªããŠãããPR ãäœããã³ã¡ã³ããæ®ããŸã§ã«ã¯æ°åç§ããããŸãããã®éã« 2 åç®ã®ç·šéã§èµ·åããå®è¡ããã§ãã¯ã«å°éãããšããŸã ã³ã¡ã³ããååšããªãããããæããŠããŸããŸããå³å¯ã«é²ããªããissue çªå·ãããŒã«ãã concurrency ã䜵çšããŠå®è¡ãçŽååããŸãã concurrency ãä¿èšŒããã®ã¯åæã«èµ°ããªãããšã ããªã®ã§ãçŽååããäžã§ãé çªãåã£ãŠããå®è¡ãã³ã¡ã³ãã®æç¡ã確èªããŠæ¢ãŸãããšããçµã¿åããã§åããŠé²ããŸãã concurrency : group : campaign-scale-${{ github.event.issue.number }} cancel-in-progress : false ãããã« ãã®ä»çµã¿ã«ãã£ãŠããããŸã§ãã£ã³ããŒã³ã®ãã³ã«æäœæ¥ã§è¡ã£ãŠããèšå®å€æŽãèªååãããã®ã§ãä»åŸã¯å°ã楜ã«ãªãããã§ãã ææ¥ã¯ @kakkki ããã®èšäºã§ãããæ¥œãã¿ã«ïŒ BASE ã§ã¯äžç·ã«åã仲éãåéããŠããŸãã binc.jp
ã¯ããã« BASEã®Product Divisionã§ãšã³ãžãã¢ãããŠãã Kondo ãšç³ããŸãã ãã®èšäºã¯ãBASEå€ã®ããã°ãªã¬ãŒ2æ¥ç®ã®èšäºã§ãã çæAIã®é²åã宿ããªããããããããšã³ãžãã¢ãšããŠã©ãçãæ®ã£ãŠããã°è¯ãã®ã ãããšèããããšãå¢ããŸãããããã§ãããçãæ®ãããšã¯ãAIã«ä»£æ¿ãããããšãªããå€åã®äžã§ãããŒã ããããžã§ã¯ãã«å¿
èŠãšããç¶ããããšã§ããçæAIã§ã³ãŒããæžããåæã«ãªãããã³ãŒããæžãããããšèªäœã匷ã¿ã«ãªãã«ããå Žé¢ãå¢ãããšæããŠããŸãããŸãæè¡çãªèª¿æ»ãããã¥ã¡ã³ããæžãã¹ãã«ããAIã«é Œãã°è³ªã®è¯ããã®ãããã«åºãŠããããã«ãªããã¹ãã«ã®å·®å¥åãšããæå³ã§ã¯é£ãããªã£ãããã«æããŸãã äžæ¹ã§ãAIã«ä»»ããŠçæãåŸ
ã£ãŠããã ãã§ã¯ããããžã§ã¯ããæã£ãã»ã©åã«é²ãŸãªãããšããå®éã®ä»äºã®äžã§åãã£ãŠããŸããã AIæä»£ã«ãšã³ãžãã¢ãšããŠçãæ®ãããã®æ£è§£ããšãããã®ã¯ç§èªèº«ã¯ãŸã æãŠãŠã¯ããŸããããããããã®AIæä»£ã ããããã詊è¡é¯èª€ãããªããèªåãã©ã®ããã«èããŠããããæžããŠã¿ãããšæããŸãã AIã§å€§éã®ã³ãŒããçæããŠãããããžã§ã¯ãã®éçºãéããªããªãã£ã AIã䜿ãããšã§ã倧éã®ã³ãŒããããã«çæã§ããããã«ãªããŸããããããããã®ã³ãŒããçè§£ããŠã責任ãæã£ãŠãªãªãŒã¹ããã®ã¯å®è£
è
ãšã¬ãã¥ã¢ãŒã§ããAIã¯æ¬¡ã
ã«ã³ãŒããçæããŠãããäžæ¹ã§ãå®è£
éãå¢ããã»ã©ãã¬ãã¥ãŒã§ç¢ºèªãã¹ã倿Žãå¢ããŸããã å°ã£ãã®ã¯ãåºãŠããã³ãŒãããããã£ãœãããã©ãæ¢åã³ãŒãããŒã¹ã®æèãæŸããããŠããªããã±ãŒã¹ã§ããäžèŠæ£ããããªã®ã«å®éã«ã¯åããªããæ¢åã³ãŒããšèšèšãæžãæ¹ãããã£ãŠããªãããšãã£ãããšãèµ·ããŸãããããã«ãå®è£
è
ã䜿ãããããã®AIãã³ãŒãããŒã¹ã®ç°ãªãåæã眮ããŠå®è£
ããå
šäœãšããŠã®çµ±äžæããªããªã£ãŠãããŸãããããã人éãã¬ãã¥ãŒã§éäžææããŠããã®ã§ãããææã®éã¯ã³ãŒãã®çæéã«æ¯äŸããŠå¢ããŠãããŸããã¬ãã¥ãŒã§æ¯åèšãç¶ããããæ¹ã¯ç¶ããªããšæããŸããã ããäžã€ãããæ·±ãåé¡ãšããŠãAIã«ããå®è£
ã®çæé床ã«ã人éã®çè§£ãšæ€èšŒã远ãã€ããªãããšããããŸãããå®è£
è
ã¯ãçæããã倧éã®ã³ãŒããçè§£ããæ¢åå®è£
ãå€éšAPIã®ä»æ§ãšæŽåããŠããããæ€èšŒããããã«ãå€ãã®æéãèŠããŸãããåæ§ã«ãã¬ãã¥ã¢ãŒã倿Žå
å®¹ãæ€èšŒçµæã確èªãã責任ãæã£ãŠãªãªãŒã¹å¯åŠã倿ããå¿
èŠããããŸããæçµçã«ã¯èªä¿¡ãæã£ãŠãªãªãŒã¹ããã®ã§ãããããã«è³ããŸã§ã«ã¯æéãããããçµæãšããŠãªãªãŒã¹é床ã¯ããŸãäžãããŸããã§ããã ãããžã§ã¯ãã®éçºã¯ããã ã³ãŒããæžãã ãã§ã¯ãªããããŒã ã倿Žãçè§£ããŠããªãªãŒã¹ããŠãOKããã®åŸã®éçšãèªä¿¡ãæã£ãŠè¡ããããšãã倿ãã¬ãã¥ãŒã§äžããŠããªãªãŒã¹ããŠé²ããã®ã§ãããã ã³ãŒããçæããã°è¯ãããããææã§ããããšããããšã«ã¯ãªããŸããã ããã§ãã³ãŒããéãçæããããšããããããŒã ã倿ã§ããç¶æ
ãäœãããšãåªå
ããŸããã ãŸããããŒã ãé©åã«ã¬ãã¥ãŒã§ãããã«ãªã¯ãšã¹ãã®ç²åºŠã«ãªã£ãŠããããèŠçŽããŸããããŸããAIãçæããã³ãŒããããŒã ãçè§£ãããã®åŸã®éçšãŸã§é²ãããããã確èªããããã«ããŸãããå¿
èŠã§ããã°ããŒã ã§éãŸãã仿§ãšã³ãŒããåæçã«ç¢ºèªããªããåäœç¢ºèªãè¡ããŸããããŸããã¬ãã¥ã¢ãŒã ãã§ã¯ãªããå®è£
è
èªèº«ãçæãããã³ãŒãã®çްéšãŸã§çè§£ã§ããŠãããã確èªããããã«ãªããŸãããAIãã³ãŒããçŽ æ©ãçæããã ãã§ã¯ããããžã§ã¯ãå
šäœã¯éããªããŸãããã¬ãã¥ãŒããã®åŸã®éçšãŸã§å«ããŠãããŒã ã倿ã§ããç¶æ
ãäœãããšãæèããããã«ãªããŸããã è³æãAIã§è¿
éã«çšæããŠãããããžã§ã¯ãã¯åã«ã¯é²ãŸãªãã£ã åãåé¡ã¯ãã³ãŒã以å€ã§ãèµ·ããŸãããç§ãã¡ã¯ããããã¯ãã®ããæ©èœã§å©çšããŠããå€éšAPIã®ãµããŒãçµäºã«äŒŽããåŸç¶ãšãªãAPIãžç§»è¡ãããããžã§ã¯ãã«åãçµãã§ããŸãããç§»è¡å
APIã®ä»æ§ãAIã«èª¿æ»ããããšãç¶²çŸ
çãªé
ç®ãããã«åºããŠãããŸããæ€èšŒã³ãŒããè³æãçæéã§å€§éã«äœããŸãããããããããããããžã§ã¯ãã§äœã倿ãããã®ããæ±ºãŸã£ãŠããªããšãè³æãäœã£ãŠãæ¬¡ã®æææ±ºå®ã«ã¯ã€ãªãããŸããã§ãããããã倧éã®è³æã挫ç¶ãšèªãã§ããã ãã§ãèªç¥è² è·ããã å¢ããã ãã®ããã«ãæããŸããã æ¹ããŠãããžã§ã¯ãã®èª²é¡ãèãããšãçŸåšã®åŠçéãç¶æãããŸãŸæ¬¡ã®APIã«ç§»è¡ã§ãããã§ããããããããç§»è¡å¯åŠã倿ããããã«å¿
èŠãªçŸåšã®è² è·ãç§»è¡å
APIã®ã¬ãŒããªããããããŒã¯æã®ãªã¯ãšã¹ãæ°ãå¶éãè¶
ããå Žåã®æåãªã©ã«çµã£ãŠAIã«è³æãäœãããŸãããããããŠåããŠãããžã§ã¯ãã®æææ±ºå®ã«å¿
èŠãªè³æãäœæããããšãã§ããŸããã AIã¯è³æãäžç¬ã§äœã£ãŠã¯ãããŸããããã AIã«èª¿æ»ãäŸé Œããã ãã§ã¯ãä»ã®ãããžã§ã¯ãã§è§£ãã¹ã課é¡ããæææ±ºå®ã«å¿
èŠãªæ
å ±ãŸã§ã¯å®ãŸããŸãããããã¯äººéããã£ãããšèããäžã§AIã«æç€ºãåºãããšã§ãåããŠãããžã§ã¯ãã«å¿
èŠãªè³æãè¿
éã«çšæããŠã次ã«é²ããšããããšãã§ããŸããã ã§ã¯ãAIæä»£ã«ãšã³ãžãã¢ãšããŠã©ãçãæ®ãã®ã ä»åãAIã䜿ã£ãŠå€§éã®ã³ãŒããçæããŠãã人éãçè§£ãã責任ãæã£ãŠã¬ãã¥ãŒã§ããªããã°ããããžã§ã¯ãå
šäœã®éçºã¯éããªããŸããã§ãããåãããã«ãAIã䜿ã£ãŠç¶²çŸ
çãªè³æãäœã£ãŠããäœã倿ãããã®ããæ±ºãŸã£ãŠããªããã°ã次ã®è¡åã«ã¯ã€ãªãããŸããã§ãããã©ã¡ãã®çµéšã§ããAIãäœã£ãéã§ã¯ãªãããã®çµæãšããŠããŒã ã®çè§£ãæææ±ºå®ãã©ãã ãé²ãã ããéèŠã§ããã ãããã®çµéšãããAIã«ä»»ããããšãšã人éãèããã¹ãããšãèŠæ¥µããå¿
èŠããããšæããŸããããŸããAIã®çæèœåããããžã§ã¯ãã®ææã«ã€ãªããããšããããããã®ãšã³ãžãã¢ã«å¿
èŠãªåœ¹å²ã ãšèããŠããŸãã ãã®ããã«ããŸãéèŠã ãšèããŠããã®ãããããžã§ã¯ãã®äžã«ããææ§ãªå°ãããšãã課é¡ãšããŠç¹å®ããŠèšèªåããããšã§ããã¬ãã¥ãŒãé²ãŸãªããè³æãããã®ã«å€æã§ããªããåã確èªãäœåºŠãããŠããããšãã£ãç¶æ³ã¯ãæåããæç¢ºãªã¿ã¹ã¯ãšããŠçŸãããšã¯éããŸããã誰ãäœã«å°ã£ãŠããã®ããæ¬æ¥ã©ã®ãããªç¶æ
ã«ãªã£ãŠãããã®ãããã®å·®ãæŽçããŠãåãçµãã課é¡ã«ããå¿
èŠããããŸãã ããäžã€ã¯ããããžã§ã¯ãã®äžç¢ºå®èŠçŽ ãç¹å®ããããšã§ããäœãåãã£ãŠããªãããã«å€æã§ããªãã®ããã©ã®äžç¢ºå®èŠçŽ ã倧ããªãªã¹ã¯ãªã®ããäœãæ€èšŒããã°æ¬¡ã«é²ããã®ããèããŸããAIã¯æ€èšŒã³ãŒããè³æãäœã£ãŠãããŸãããä»ã®ãããžã§ã¯ãã§ã©ã®äžç¢ºå®èŠçŽ ãåªå
ããŠè§£æ¶ããã¹ããã¯ããããžã§ã¯ãã®ç¶æ³ãèžãŸããŠäººéãèããªããã°ãªããŸããã ãŸããèªåã®ã¿ã¹ã¯ã ãã§ã¯ãªããããŒã ã®äžã§å°ã£ãŠããã¡ã³ããŒãèŠã€ããŠå©ããåããéèŠã«ãªããšèããŠããŸããAIã«ãã£ãŠå人ãã³ãŒããè³æãäœãèœåã¯é«ããªããŸããããã®äžæ¹ã§ãããŒã ã®èªèã®ãããèŠã€ãããã¬ãã¥ãŒãæææ±ºå®ã®è©°ãŸããè§£æ¶ãããçžæã倿ã§ããåœ¢ã«æ
å ±ãæŽçããããšãã£ãåãã¯ãAIã«äŸé ŒããŠåŸ
ã£ãŠããã ãã§ã¯èµ·ãããŸããã AIã䜿ã£ãŠèªåã®ã¿ã¹ã¯ãæ©ãçµããããã ãã§ã¯ãªããããŒã ããããžã§ã¯ãå
šäœãåã«é²ããã«ã¯ã©ãããã°ããã®ãããããããå®éã®ä»äºã®äžã§è©Šè¡é¯èª€ããªãããèªåãçµç¹ããããžã§ã¯ãã«ã©ã®ãããªäŸ¡å€ãåºããã®ããèãç¶ããŠãããããšæããŸãã ãããã« ãã®èšäºã§ã¯ãAIæä»£ã«ãšã³ãžãã¢ãšããŠçãæ®ãããã«äœãå¿
èŠããèããŠã¿ãŸãããäžç·ã«AIæä»£ãçãæ®ã£ãŠãããæ¹ã¯ããã²æ¡çšæ
å ±ãã芧ãã ãããææ¥ã¯ãMochidaHarukaããã®èšäºã§ãããæ¥œãã¿ã«ïŒ binc.jp
ãã®èšäºã¯ãBASEå€ã®ããã°ãªã¬ãŒ1æ¥ç®ã®èšäºã§ãã ããã«ã¡ã¯ãBASE ProductDiv ItemSection ã® Torata ã§ãã çŽè¿å幎ã§ç§ãäœã£ãåãåãã調æ»AIãšãŒãžã§ã³ãã®åãçµã¿ã玹ä»ããããšæããŸããæè¡çã«ã¯ãããŸã§é£ããããšãããŠããªãã®ã§ãæè¡æ§æã®è©±ã§ã¯ãªããå°å
¥ã«ããã£ãŠã¶ã€ãã£ãå£ãšãããã©ãä¹ãè¶ããããäžå¿ã«æžããŠãããŸãã åæ:BASEã®åãåãã察å¿ã®æµã åæãšããŠBASEã®åãåãããã©ã®ãããªæµãã§ãç§ãäœæããAIãšãŒãžã§ã³ããã©ã®ãã§ãŒãºã«ãã©ãŒã«ã¹ãããã®ãã説æããŸãã BASEã§ã¯ã·ã§ãããªãŒããŒã賌å
¥è
ïŒä»¥äžãããããŠãŠãŒã¶ãŒãšåŒã³ãŸãïŒããåãåã£ãåãåãããCSããŒã ãäžæ¬¡åãããŠãããŸãã æè¡çãªç¥èŠãæš©éãå¿
èŠã§CSããŒã ã§ã¯è§£æ±ºã§ããªããã®ããšã³ãžãã¢ã«ãšã¹ã«ã¬ãŒã·ã§ã³ãããŸãã ãã®ãšã³ãžãã¢ãžãšã¹ã«ã¬ãŒã·ã§ã³ãããåãåãããBASEã§ã¯cs_qãšåŒãã§ãããåŸè¿°ããcs_aãšããAIãšãŒãžã§ã³ããå«ãããããŒã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã cs_qã®æ¥åè² è·ãæžããããã«cs_aãšããçžæ£ãäœã£ã ãŠãŒã¶ãŒããã®åãåãããšããã®ã¯æ¥ã
çºçãããã®ã§ããããããã¯ãã®èŠæš¡ã倧ãããªãã°åãåããã®æ°ãèªç¶ãšå¢ããŠãããŸãã ãããããã®åãåããã«å¯Ÿå¿ãããšã³ãžãã¢ã®æ°ãæ¯äŸããŠå¢ããããã§ã¯ãããŸãããèªç¶ãšcs_qã®æ¥åè² è·ãå¢ããéåžžã®éçºæ¥åãå§è¿«ããã·ãŒã³ãã¿ãããããã«ãªã£ãŠããŸããã ããã§cs_qã®æ¥åè² è·ã軜æžããAIãšãŒãžã§ã³ããäœæããŸããã cs_qãã¢ã·ã¹ãããAIãªã®ã§cs_aãšåä»ããSlack BotãšããŠåãåãããã±ããã®æçš¿ã«å¿ããŠèªåã§èª¿æ»ãè¡ããåçæ¡ãäœã£ãŠãããŸãããã ããcs_aã®åçã¯ãããŸã§äžæžãã§ããããšã³ãžãã¢ãå
容ã確èªããŠããCSããŒã ãžè¿ä¿¡ããéçšã«ããŠããŸãã å®éã®Slackäžã§ã®ãããšãã¯ãã®ãããªæ§åã§ãã cs_aãå°å
¥ããŠããã®èª²é¡ãšåãçµã¿ cs_aãå°å
¥ããŠããã«å¹æãåºããšããããã§ã¯ãããŸããã§ããã ããããã¯cs_aãéçšããäžã§åºãŠãã課é¡ãšãããã解決ããããã«è¡ã£ãåãçµã¿ã«ã€ããŠç޹ä»ããŸãã 調ã¹ãããç¯å²ãåºãã å°å
¥åœåãcs_aã¯ã³ãŒãã®ã¿ãåç
§ããŠåçãããŠããŸããã ããããããã ãšãããã¯ãã«å¯Ÿããäºåç¥èããŠãŒã¶ãŒã®çŸåšã®ç¶æ³ãšãã£ãåãåããæ¥åã«å¿
èŠãªã³ã³ããã¹ããèžãŸããäžã§ã®èª¿æ»ãã§ããŠããŸããã§ããã ããã§ãã«ããšãŒãžã§ã³ãåã«ããåãåããå
容ã«å¿ããŠNew Relicã®ãã°ãåãåãããåããæ©èœã®ä»æ§æžãCSããŒã ã®å©çšããŠããSOPïŒStandard Operating ProceduresïŒãéå»åãåãããããšã«ãããã¬ããžãååŸããããã«ããŸãããããã«ããšãŒãžã§ã³ããååŸã§ããªãããŒã¿ã«é¢ããŠã¯åãåããæ
åœè
ã«å¿
èŠãªæ
å ±ãå°ããããã«ããŸããã ããã«ããããããã¯ãã®ç¥èããŠãŒã¶ãŒã®è¡åãããšã«ãã調æ»ãã§ããããã«ãªããŸããã ç¹ã«ãã°ãåç
§ããããšã§ããŠãŒã¶ãŒãã³ãŒãã§ããã©ãã®åå²ã«å
¥ã£ãã®ããç¹å®ã§ããããã«ãªãã調æ»ç²ŸåºŠãäžãããŸããã åç粟床ã®äœäžã«æ°ã¥ããããã«ãã 調ã¹ãããç¯å²ãåºããããšã§cs_aãåç
§ã§ãããã®ãå¢ããäžæ¹ãLLMã®åºåãæºããèŠå ãå¢ããŠããŸããŸããã ããã³ãããå°ãå€ãããæ°ããåç
§ã§ããèŠçŽ ãå¢ãããã³ã«ã粟床ãèœã¡ãŠããªããããããããŠèŠå®ããªããã°ãããªãã®ã¯éçºè
ã«ãšã£ãŠåªããç¶æ
ã§ã¯ãããŸããã ããã§éå»ã®cs_qãå©çšããŠãcs_aã®åçãè©äŸ¡ïŒevalïŒããä»çµã¿ãäœããŸããã éå»ã®cs_qã«ã¯ããšã³ãžãã¢ãå®éã«è¡ã£ãåçã調æ»çµç·¯ãæ®ã£ãŠããã®ã§ããã®ãŸãŸæ£è§£ããŒã¿ãšããŠäœ¿ããŸãã LLMã®è©äŸ¡ã«ãããŠæ£è§£ãçšæãããŠããã®ã¯ãšãŠããããããããšã§ãããŸãcs_qã®ãã±ããã«ã¯äºåã«ã©ãã«ä»ããããŠãã£ãã®ã§ãã©ãã«ããšã«ã±ãŒã¹ãçšæããç¹å®ã®é åã§ã®ã¿ç²ŸåºŠãèœã¡ãŠããã®ãèŠéããªãããã«ããããšãã§ããŸããã 調æ»ã®çéãèŠãã cs_aã¯ããŸããŸãªã³ã³ããã¹ããã調æ»ãã§ããããã«ãªããå®å¿ããŠå€æŽãå ããããç¶æ
ãæŽããŸããã ãããšcs_aã¯æåŸ
éãã®èª¿æ»çµæãè¿ããŠãããããã«ãªããŸããã倧éã®æç« ãšãšãã«... Slackäžã§åãBotãšããæ§è³ªäžãæéãå€ããšSlackã§è¡šçŸã§ããããŒã¯ããŠã³ã§ã¯å¯èªæ§ãèœã¡ãŠããŸããŸããããšãã£ãŠæéãå°ãªãããŠããŸããšã調æ»çµæãäœãããšã«ãããã®ãªã®ãããšã³ãžãã¢ãç¥ãããšãã§ãããçµæçã«ãšã³ãžãã¢ãè£ä»ãã®ããã«èª¿æ»ãçŽããããªäºåºŠæéãçºçããŠããŸããŸããã ããã解決ããããã«ã瀟å
çšã®HTMLãã¹ãã£ã³ã°ç°å¢ãå©çšããŠã調æ»ã®çéãHTMLã§èŠãããããã«ããŸããã ãã®ç°å¢ã«ã€ããŠã¯CTOã®èšäºã§ã説æãããŠããŸãã devblog.thebase.in ããã«ããå¯èªæ§é«ã倧éã®æ
å ±ããšã³ãžãã¢ãcs_aããåŸãããããã«ãªããçµæçã«cs_aã®èª¿æ»çµæã®ä¿¡é Œæ§ãäžããããšã«ç¹ãããŸããã åçã®7å²ãäžèŽããããã«ãªã£ã ãããã®æŽ»åã«ãããäžéšã®é åãã«ããŽãªãé€ããcs_qã®7å²ã§ãcs_aã®åçããšã³ãžãã¢ã®åçãšã»ãŒäžèŽããããã«ãªããŸããã åãåããã®Slackã¹ã¬ããã®äžã§ã¯ããšã³ãžãã¢ããcs_aã®åçã®éãã§ããããšè¿ãã ãã§å¯Ÿå¿ãå®äºããã±ãŒã¹ãã¡ãã»ãåºãŠããããã«ãªããŸããã ããã§ãããšã³ãžãã¢ã®å·¥æ°ã¯æžã£ãŠããªãã£ã åçãèããŠæžãäœæ¥ã¯ãããã«æ¥œã«ãªããŸããããããããŠãŒã¶ãŒããã®åãåããå
容ã確èªããCSããŒã ãžè¿ä¿¡ãããšããæ¥åèªäœã¯äœãå€ãã£ãŠããŸããã cs_aãžäœæ¥ãä»»ããããšã¯ã§ããããã«ãªããŸãããã倿ãä»»ããããšã¯ãŸã ã§ããŠããªãã®ã§ãã çµæãšããŠãæ¥åè² è·ã¯å€å°æžã£ããã®ã®ããåçã«æ¥œã«ãªã£ãããšèšããç¶æ³ã«ã¯ãŸã æã£ãŠããããšãã§ããŸããã§ããã ããããç®æããã® ä»åŸã¯å€æãcs_aã«ä»»ããããšã§cs_q察å¿ãåçã«æ¥œã«ãªã£ããšããç¶æ
ãç®æãããšæã£ãŠããŸãã 倿ãcs_aã«ä»»ãããšããããšã¯cs_aãä¿¡é Œãããšããããšã§ãã ãã®ããã«ã¯CSããŒã ãšé£æºããªãããã©ãããã¿ã€ãã³ã°ã§ãšã³ãžãã¢ã«èª¿æ»ãäŸé Œãããããã©ãããç¶æ
ãªãAIã«ä»»ããŠãããããšãã£ãåºæºã決ãããã®åºæºã誰ã§ãèŠããã圢ã«ããããšã§ãå®å¿ããŠcs_aã®åçããã®ãŸãŸå©çšã§ããç¶æ
ã«ããå¿
èŠããããŸãã ããããå®çŸããŠcs_aã®åçããã®ãŸãŸäœ¿ããç¯å²ãåºãããšã³ãžãã¢ã察å¿ããcs_qã®ä»¶æ°èªäœãæžãããŠããããšã§ããšã³ãžãã¢ãåãåããã®æ ¹æ¬å¯Ÿå¿ããŠãŒã¶ãŒäœéšãèããããšã«éäžããããäžçãäœããããšèããŠããŸãã ãŸãšã cs_aãéçšããŠããäžã§ãCSããŒã ãèª¿æ»æ
åœè
ãcs_aã®éçºè
ã®ããããã«ãšã£ãŠäŸ¡å€ã®ããéçšãç®æããåãçµã¿ã玹ä»ããŸããã ä»åŸã¯ãã®åãçµã¿ã®äŸ¡å€ããã倧ããããŠãããããšæã£ãŠããŸãã BASEã§ã¯cs_a以å€ã«ãããŸããŸãªæ¥åãAIã«ä»»ããããšããåããåºãŸãã€ã€ãããŸãã èå³ã®ããæ¹ã¯ããã²ãæ°è»œã«æ¡çšæ
å ±ãã確èªãã ããã binc.jp ææ¥ã¯ãKondoããã®èšäºã§ãããæ¥œãã¿ã«ïŒ
ããã«ã¡ã¯ïŒBASE PRODUCT TEAM BLOG ç·šééšã§ãã ãçãéããŠããŸã ãŸã å€çã£çããšãã仿¥ãã®é ã§ãããã¿ãªããŸããããéããã§ãããããçªç¶ã§ããããã®ãã³ãå€ã®ããã°ãªã¬ãŒ2026ããšé¡ããŠãããã°èšäºã®éäžå
¬éã€ãã³ããéå¬ããŸãïŒ ãã®èšäºã§ã¯ããã®æŠèŠãšèŠã©ãããã玹ä»ããŸãã å€ã®ããã°ãªã¬ãŒãšã¯ BASE ã§ã¯ããããŸã§å¹Žã®ç¬ã®ã¢ããã³ãã«ã¬ã³ããŒã8幎ç¶ããŠéå¬ããŠããŸããã devblog.thebase.in äžæ¹ã§ããã以å€ã§ã¯éäžé£èŒäŒç»ãšãã£ããããªãã®ã¯ããŸã宿œããŠããªãã£ãããšããŸãäºå®ã§ãã æ¥ã
ã®ãããã¯ãéçºã»éçšã®äžã§ã¯ã1幎ãéããŠããŸããŸãªç¥èŠã工倫ãçãŸããŠããŸããããããæ
å ±ã鮮床ã®é«ãã¿ã€ãã³ã°ã§ã«ãžã¥ã¢ã«ã«çºä¿¡ã§ããã°ãèªãã§ãã ããæ¹ã«ãšã£ãŠãèšäºãæžãã¡ã³ããŒã«ãšã£ãŠããããè¯ãæ©äŒã«ã§ããã®ã§ã¯ãªãããšèããŸããã ããã§å€ã«ãã¢ãŠããããã®å ŽãäœããBASE ã®ãããã¯ãéçºã«ãããæ¥ã
ã®åãçµã¿ããã®é
åã幎æ«ã«éããã©ãã©ãçºä¿¡ããŠãããããéå¬ããéã³ãšãªããŸããã å
¬éäºå®äžèЧ çŸæç¹ã§ã®äºå®ã¯ä»¥äžã®éãã§ããå
容ãé çªã¯å€æŽã«ãªãå ŽåããããŸãããŸããä»åŸããã«ã©ã€ã³ãããã远å ãããå¯èœæ§ããããŸãã®ã§ããã²æ¥œãã¿ã«ãåŸ
ã¡ãã ããã æ¥ä» å·çè
ã¿ã€ãã« 2026-08-25 @Torata åãåãã調æ»AIãšãŒãžã§ã³ãcs_aå°å
¥ã®èŠé£ãšãããã 2026-08-26 @Hirotaka Kondo AIæä»£ã®ãšã³ãžãã¢ã«äœãå¿
èŠããããŸèªåãèããŠããããš 2026-08-27 @ichimu_HarukaMochida Slack ã¯ãŒã¯ãããŒãã GitHub Actions ãèµ·åãã 2026-08-28 @kakkki ãã«ãªã¯ã«åäœç¢ºèªã¹ã¯ã·ã§ãããã®ãåœããåã«ãããiOSã¢ããªéçºã§ã®AIæŽ»çš 2026-08-29 @Hiroki Otsuka Sentryã¢ã©ãŒããAIã§èªå調æ»ããSlack BotãClaude Agent SDKã§äœã£ã話 2026-08-30 @matzz ã¯ãŠãªããã°ã®éçšãã·ã³ãã«ã«ããåãçµã¿ 2026-08-31 @Capi è
åšã¢ããªã³ã°ãã¯ãããŸãã 2026-09-01 @wakana SLOãå
šç€Ÿã®å
±éèšèªã«ããããã®ãäž»èŠSLOãã®çŸåšå°ã𿬡ã®ãã§ãŒãº 2026-09-02 @ema Claude Code ã§äœ¿ã£ãŠããããŒã«ãGo補CLIã§äœã£ãŠãã 2026-09-03 @Sho Takeuchi ãã«ãã¢ãŒãã«ãªååã«ããŽãªã®åé¡ã¢ãã« 2026-09-04 @oliver 顧客äžå¿äž»çŸ©ãéçºã®æææ±ºå®ã«çµã¿èŸŒãããã«å®è·µããããš 2026-09-05 @rerenote ããã°ç·šééšå¡ãšã㊠ãããã« æ°ã«ãªãããŒãã¯ãããŸããã§ããããïŒæ®æ®µãªããªãå€ã«åºããŠããªãç¥èŠãã¡ãã£ãšãã Tips ãšãã£ããã®ãŸã§ãå¹
åºããå±ãããäºå®ã§ããæéäžã¯æ¯æ¥èšäºãå
¬éãããŸãã®ã§ããã²æ¥œãã¿ã«ããŠããŠãã ããïŒ åæ¥ãšãªãææ¥ã¯ @Torata ããã®èšäºã§ãïŒã楜ãã¿ã«ïŒ binc.jp
ã¯ããã« ããã«ã¡ã¯ãããã¯ãšã³ããšã³ãžãã¢ã®ããã®ïŒ @ykagano ïŒã§ãã 2026/8/6ïŒæšïŒã«ãPHPã«ã³ãã¡ã¬ã³ã¹2026 ãªãžã§ã¯ãã³ã³&ã¢ãã¿ãŒã€ãã³ãããå
±åéå¬ããŸããã æ¬èšäºã§ã¯ãåœæ¥ã®ç»å£å
容ãäŒå Žã®æ§åã«ã€ããŠãå±ãããŸãïŒ ã€ãã³ãæŠèŠ 2026/7/20ã«éå¬ãããPHPã«ã³ãã¡ã¬ã³ã¹2026ã®ã¹ãã³ãµãŒ3ç€ŸïŒæ ªåŒäŒç€Ÿã³ãã¢ã³ãBASEæ ªåŒäŒç€Ÿãæ ªåŒäŒç€Ÿã¯ã€ãã¯ïŒã«ããå
±åéå¬ã§ãäŒå Žã¯æ ªåŒäŒç€Ÿã³ãã¢ã³ããŸã®ãªãã£ã¹ããåãããŸããã codmon.connpass.com BASEããã®ç»å£ ã«ãŒãã®ä¿¡é Œæ§ãæ
ä¿ããWireMockã䜿ã£ãe2eãã¹ãïŒããã®ïŒ ä»åã³ãã¢ã³ããŸããã話ãããã ããå
±åéå¬ããããšãã§ããŠå€§å€å
æ ã§ããã å®ã¯10å話ãã€ãããåœæ¥ã«æã¡æé8åã ãšåãããçµæå°ãæ©å£ã«9åã»ã©ã§ã話ããããŠããã ããŸããïŒæ±ïŒã Xã®æçš¿ãªã©èŠããšãåå ããã ããçããŸã«æ¥œããã§ããã ããããã§ããã£ãã§ãïŒ speakerdeck.com ãšã³ãžãã¢ã®å°åã®éãæ¹ïŒãšã©ãŒãã£ã³ãã«ã®ããŒã«ãæŸãç¶ããããšïŒmeiheiïŒ PHPã«ã³ãã¡ã¬ã³ã¹ã«ããããŒã¶ã«ãåºãããã®ã®ãæãããæ¡æã«è³ããªãã£ãããŒã¯ãšããŠããšã³ãžãã¢ã®å°åã®éãæ¹ïŒãšã©ãŒãã£ã³ãã«ã®ããŒã«ãæŸãç¶ããããšããã話ããããŠããã ããŸããã éãããçºè¡šæéã§ã¯åããããªãã£ãéšåãæèŠªäŒãªã©ã§æ²¢å±±ã話ããã§ããŠããšãŠã楜ããçºè¡šã«ãªããŸããïŒ ãããããããšã«ã11æã«éå¬ããã PHPã«ã³ãã¡ã¬ã³ã¹æ°æœ ã§ãã話ã§ããäºãšãªã£ãã®ã§ãä»åã®ããŒã¯ããããèžã¿èŸŒãã å
容ã§çºè¡šã§ããããªãšèããŠãããŸãã çºè¡šè³æã¯ãã®ã¿ã€ãã³ã°ã§å
¬éããäºå®ã§ãã®ã§ããã²ã楜ãã¿ã«ãåŸ
ã¡ãã ããïŒ åå ããã¡ã³ããŒã®ã³ã¡ã³ã wakanaïŒ @ wakanaction ïŒ ä»åã¯ç»å£ãã2人ã®å¿æŽãšããŠã²ã¹ãåå ããŸããã ã©ã¡ãã®ã»ãã·ã§ã³ããèæ¯ãªã©ãç¥ã£ãŠããç§ããããŠãéåžžã«èŽãå¿ããããããŸãç¥èŠãåŸãããçºè¡šã§ãèçã䌞ã³ãæãã§ããã æèŠªäŒã§ã¯2人ãšã¯å¥ã®ããŒãã«ã«ããã®ã§ãããããã§ã2人ã®ããŒã¯ããããããæŽŸçãã話é¡ã§çãäžãã£ãŠããŸãããäŒå Žã®å€ãã®æ¹ã«é¿ããçºè¡šã ã£ãã®ã§ã¯ãªãããšæããŸãã ãããŠãããŠããªäŒå Žãã貞ããã ãããåœæ¥ã®éå¶ãåããŸãšããŠãã ãã£ãã³ãã¢ã³ããŸãåžäŒé²è¡ãã¹ã ãŒãºãã€éœæ°ã«çãäžããŠãã ãã£ãã¯ã€ãã¯ããŸã«ããã®å ŽãåããŠæè¬ç³ãäžããŸãã äŒå Žã»æèŠªäŒã®æ§å èçã®äžã«ããŒãºã¯ãã·ã§ã³ã座åžå£ãæ·ãããŠããŸããã åŸæ¹ã«ã¯ã¢ãŠããã¢ãã§ã¢ãçšæãããŠããŠãšãŠããªã©ãã¯ã¹ã§ãã空éã§ããã æèŠªäŒã§ã¯ãBASEãã飲é£ãæäŸãããŠããã ããåå è
å士ã§äº€æµãæ·±ããããšãã§ããŸããã ãããã« å
±åéå¬ãšãã圢ã§ãPHPã³ãã¥ããã£ã®çãäžããã«å°ãã§ãé¢ãããŠããã°å¬ããæããŸããäŒå ŽããæäŸããã ããæ ªåŒäŒç€Ÿã³ãã¢ã³ããŸãå
±åéå¬ã®æ ªåŒäŒç€Ÿã¯ã€ãã¯ããŸããããŠãåå ããã ããçããŸããããšãããããŸããïŒ BASEã§ã¯ãšã³ãžãã¢ãåéããŠãããŸãããããããã°ãæ¡çšæ
å ±ããã²ã芧ããã ããŸããšå¹žãã§ãã binc.jp
ããã«ã¡ã¯ãããã¯ãšã³ããšã³ãžãã¢ã®ããã®ïŒ @ykagano ïŒã§ãã BASEã¯2026幎8æ6æ¥(æš)ã«æ ªåŒäŒç€Ÿã³ãã¢ã³ãæ ªåŒäŒç€Ÿã¯ã€ãã¯ãšå
±åã§ãPHPã«ã³ãã¡ã¬ã³ã¹2026 ãªãžã§ã¯ãã³ã³&ã¢ãã¿ãŒã€ãã³ãããéå¬ããŸãã PHPã«ã³ãã¡ã¬ã³ã¹2026 ãªãžã§ã¯ãã³ã³&ã¢ãã¿ãŒã€ãã³ãã«ã€ã㊠2026幎7æ20æ¥(æã»ç¥)ã«éå¬ãããPHPã«ã³ãã¡ã¬ã³ã¹2026ã®ã¹ãã³ãµãŒã§ãããã³ãã¢ã³ã»BASEã»ã¯ã€ãã¯ã®3瀟ååã§ããªãžã§ã¯ãã³ã³&ã¢ãã¿ãŒã€ãã³ããéå¬ããŸãã ãªãžã§ã¯ãã³ã³ãšã¯ããããŒã¶ã«ãæåºãããã®ã®ãæãããæ¡æãããªãã£ãããŒã¯ãçºè¡šããã€ãã³ãã§ãã ãã®ãããç»å£è
ã¯PHPã«ã³ãã¡ã¬ã³ã¹2026ã«ããããŒã¶ã«ãæåºããã¡ã³ããŒã§ãã codmon.connpass.com æ¥æ: 2026幎8æ6æ¥(æš) 19:00ã21:00 äŒå Ž: ã³ãã¢ã³ãªãã£ã¹ïŒæ±äº¬éœåå·åºè¥¿äºåç°å
«äžç®4çª13å· äºåç°JPãã«ãã£ã³ã°10éïŒ åå è²»: ç¡æ PHPã«ã³ãã¡ã¬ã³ã¹2026ãžã®BASEã®åè³ã»ç»å£ã®æ§åã¯ãã¡ããã芧ãã ããïŒ devblog.thebase.in ã»ãã·ã§ã³ã®çŽ¹ä» åœæ¥ã¯6æ¬ã®LTãäºå®ãããŠãããBASEããã¯2åãç»å£ããŸãã ãã«ãŒãã®ä¿¡é Œæ§ãæ
ä¿ããWireMockã䜿ã£ãe2eãã¹ãã 19:20ã LT2 ç§ãããã®ãçºè¡šãããŠããã ããŸããECãµã€ãã®ã·ã§ããã³ã°ã«ãŒãã§ã¯ãe2eãã¹ãã宿œããéã«ããŸããŸãªèª²é¡ããããŸããWireMockãçšããŠãããã®èª²é¡ãã©ã®ããã«è§£æ±ºããŠããããã玹ä»ããŸãã ããšã³ãžãã¢ã®å°åã®éãæ¹ïŒãšã©ãŒãã£ã³ãã«ã®ããŒã«ãæŸãç¶ããããšã 19:50ã LT5 meiheiãããçºè¡šãããŸããmeiheiããã¯ç§ãšã¯å¥ã®ã¢ãžã¥ãŒã«ãæ
åœãããŠããã®ã§ãããç§ãæ
åœããŠããã¢ãžã¥ãŒã«ã§ãšã©ãŒãçºçãããšãmeiheiãããããã«æ°ä»ããŠé£çµ¡ããã ããããšãããããã€ãå©ãã£ãŠããŸãã LTã®ããšã«ã¯æèŠªäŒãäºå®ãããŠããŸãã ç»å£è
ãåå è
ã®ã¿ãªããŸãšããã£ããã話ã§ããã®ã楜ãã¿ã«ããŠããŸãïŒ ãããã« åå è²»ã¯ç¡æã§ãconnpassããå
çé ã§ãç³ã蟌ã¿ããã ããŸãã PHPã«ã³ãã¡ã¬ã³ã¹2026ã«åå ãããæ¹ããæãããåå ã§ããªãã£ãæ¹ãããã²ãæ°è»œã«ãåå ãã ããïŒ BASEã¯ã«ã³ãã¡ã¬ã³ã¹ãã€ãã³ããžã®åå ãç»å£ãç©æ¥µçã«æ¯æŽããŠããŸãã ãããèå³ããããŸããããæ¡çšæ
å ±ãã確èªããã ãããšå¹žãã§ãã binc.jp
ã¯ããã« ããã«ã¡ã¯ãBASEæ ªåŒäŒç€Ÿã§ PHPer ãããŠãã @meihei ã§ãã çŽè¿ã§ New Relic ã® Terraform 管çãæ¹ä¿®ããAI ã䜿ããªãã New Relic ãå©çšããããç°å¢ãæŽããŸãããèšèšææ³ãå
·äœçãªåãçµã¿ãªã©ãã話ããŸãã èæ¯ äžåºŠã¢ãŒã«ã€ãããã Terraform 管ç BASE ã§ã¯ä»¥åãã New Relic ãå°å
¥ããŠãããBASE BANK ã§ã¯ New Relic ã Terraform ã§ç®¡çããåãçµã¿ããããŸããã devblog.thebase.in ãã ãããã®åãçµã¿ã§äœ¿ã£ãŠãããªããžããªã¯ãçŸåšã¢ãŒã«ã€ããããŠããŸããéçšãç¶ããã«ã¯ New Relic ãš Terraform ã®äž¡æ¹ã«è©³ãã人ãç¶ç¶çã«é¢ããå¿
èŠããããã¡ã³ããã³ã¹ããç¶ããŠããã«ã¯é£ããããããŸããã New Relic 掻çšã®åºãããš Terraform åã®åé ããããã®åŸã瀟å
ã§ã¯ãµãŒãã¹ã¬ãã«ãããžã¡ã³ãã®åãçµã¿ãå°ããã€é²ã¿ãNew Relic ãæŽ»çšããå Žé¢ãå¢ããŠãããŸããã devblog.thebase.in devblog.thebase.in ãŸããNew Relic ã®ããã·ã¥ããŒãã Terraform ã§ç®¡çãããåã仿§æžããšããŠæ±ãåãçµã¿ãå§ãŸããŸããã devblog.thebase.in ããã㊠New Relic ã® Terraform åãåã³å§ãŸããŸãããæ¬æ Œçã« New Relic ãæŽ»çšããããã«ãªã£ããæ
ã«ããã®ç®¡çã»ä¿å®éçšãã³ãŒãã§ç®¡çããã¢ãããŒã·ã§ã³ãé«ãŸã£ãããšãçç±ã®äžã€ã§ãããã ãããã®æç¹ã§å®è£
ãããŠããã®ã¯ããã·ã¥ããŒãã®ã¿ã§ãããService Level ãªã©ã® New Relic ã®ä»ã®æ©èœãŸã§åºã Terraform 管çããã«ã¯ããŸã å®è£
ãšã¡ã³ããã³ã¹ã®ã³ã¹ãã倧ããç¶æ
ã§ããã Agentic AI ãå€ããããš æã¯éããçŸåšã¯ Agentic AI ã®åºããã«ãã£ãŠãTerraform ã®å®è£
ã倿޿¡ã®äœæã以åããããããããªã£ãŠããŸããNew Relic Provider ã®ä»æ§ã調ã¹ãããTerraform ã³ãŒããèªã¿è§£ããããæ¢åã® New Relic ãªãœãŒã¹ã import ã㊠Terraform 管çãžç§»ãäœæ¥ãŸã§ã AI ã«æ¯æŽããŠãããããšã§é²ãããããªããŸããããããŠããããŸã§ããããã£ã New Relic ã®ç£èŠèšå®ã Terraform ã§ç®¡çããããšã®çŸå®å³ãé«ãŸããŸããã äžæ¹ã§ãAI ã®æ¯æŽã«ãã£ãŠ Terraform ãæžããããã«ãªã£ããšããŠãããããç¶ç¶çã«å®å
šã«éçšã§ãããšã¯éããŸãããããããTerraform ã§ç®¡çãã察象ãå¢ããã»ã©ãã³ãŒãã®æ§é ãæææš©ãã¬ãã¥ãŒã®ãããããå®å
šæ§ãèšå®æå³ã®å
±æãéèŠã«ãªããŸãã ç¹ã« New Relic ã®ç£èŠèšå®ã¯ãéçšäœå¶ãšåŒ·ãçµã³ã€ããŸããã©ã®ããŒã ãã©ã®é åã«è²¬ä»»ãæã€ã®ããšããç£èŠèšå®ã®æææš©ãã³ãŒãäžã§è¡šçŸããããããšãéèŠã«ãªããŸãã ãŸããç£èŠèšå®ã®æææš©ã çŸåšã® çµç¹æ§é ã ããåæã«èšèšãããšãå°æ¥ã®å€æŽã«åŒ±ããªããŸããçµç¹ã¯æéã®çµéãšãšãã«å€åããéçšäœå¶ãããã«åãããŠå€ãããŸããAgentic AI ã®æ®åã«ãã£ãŠäºæ¥ç°å¢ã®å€åãéããªãã§ãããããçµç¹ã責任ç¯å²ã®èŠçŽããå¢ããå¯èœæ§ããããŸãããã®ãããç£èŠèšå®ã®æææš©ã¯ãå€åãåæã«è¡šçŸã§ãã圢ã«ããŠããå¿
èŠããããŸãã ä»åç®æããããš ä»åŸã¯ãNew Relic ã Terraform ã«è©³ããäžéšã®ã¡ã³ããŒã ãã§ãªããåé åã®ãšã³ãžãã¢ã AI ã®æ¯æŽãåããéçºè
ããç£èŠèšå®ã®å€æŽã«é¢ããå Žé¢ãå¢ããŠãããšèããŠããŸãã ãã®åæã§ã¯ãTerraform ãæžããããããã ãã§ã¯äžååã§ãã誰ãã©ã®ç£èŠèšå®ã«è²¬ä»»ãæã€ã®ããã©ã®çµè·¯ã§ã¬ãã¥ãŒããã®ããå±éºãªå€æŽãã©ãæ€ç¥ããã®ãããããŠèšå®ã®æå³ãã©ãå
±æããã®ãããç¶ç¶çã«ä¿ãŠãæ§é ãå¿
èŠã«ãªããŸãã ä»åã®åãçµã¿ã§ã¯ãNew Relic ã® Terraform 管çããAIã«æžããããããšã§ã¯ãªãã人éãš AI ãç¶ç¶çã«å®å
šã«å€æŽã§ããæ§é ãžæŽããããšãç®æããŸããã èª²é¡ ãŸããåèšèšããåã® New Relic ã®ããã·ã¥ããŒãã®ã¿ã管çããã Terraform ãªããžããªã¯ä»¥äžã®ãããªæ§æã«ãªã£ãŠããŸããã âââ .github/ âââ modules/ # åå©çšãç®çãšããå
±é module â âââ dashboard/ â âââ standard_feature_dashboard/ # å
±éã¬ã€ã¢ãŠãã®ããã·ã¥ããŒããçæãã module âââ services/ # ãããã¯ãã»ãµãŒãã¹ããšã® Terraform èšå® â âââ base/ â âââ prod/ # ç°å¢ããšã®èšå® â â âââ checkout/ # 決æžé å â â â âââ dashboards/ # 決æžé åã®ããã·ã¥ããŒãèšå®ãbase/prod/main.tf ããããŒã«ã« module ãšããŠèªã¿èŸŒãŸãã â â â âââ hoge_dashboard.tf # å
±é module ãåŒã³åºããŠã1ã€ã®ããã·ã¥ããŒããå®çŸ©ãããã¡ã€ã« â â âââ item/ # ååé å â â âââ order/ # 泚æé å â â âââ main.tf # ãµãŒãã¹ x ç°å¢åäœã® Terraform ãšã³ããªãã€ã³ããåé åã®ããŒã«ã« module ãèªã¿èŸŒã â âââ dev/ âââ README.md # ãããžã§ã¯ãå
šäœã®èª¬æ æ¢åæ§æã§ã¯ãæšæºåãããããã·ã¥ããŒããäœæããããã®å
±é module ããããŸãããããšããšãããã·ã¥ããŒããæšæºåãããä¹±ç«ã»å±äººåããã¡ã³ããã³ã¹ãå°é£ã«ãªã£ãŠãããããå
±é module ã«ããã¢ãããŒãã¯æå¹ã§ããããŸããé åããšã«ãã£ã¬ã¯ããªãåãããŠããã2026幎以éã®çµç¹å³ïŒ ECã®ã³ã¢æ©èœã軞ã«ããçµç¹èšèš ïŒãšãããããä¿å®éçšãã¹ãã³ãŒããæç¢ºã«ãªã£ãŠããŸãã 課é¡1ïŒã¬ãŒãã¬ãŒã«æªæŽå New Relic ã® Terraform 管çãå§ãŸã£ãŠãŸã éããªããšããããšããããTerraform éçšã«å¿
èŠãªã¬ãŒãã¬ãŒã«ã¯ååã«æŽã£ãŠããŸããã§ããã ä»åŸãNew Relic ã Terraform ã«è©³ãããªããšã³ãžãã¢ã倿Žã«é¢ããããšãèãããšãã¬ãã¥ãŒã ãã«äŸåãããå質ãšã»ãã¥ãªãã£ãæ©æ¢°çã«æ
ä¿ã§ããä»çµã¿ãå¿
èŠã§ããã 課é¡2ïŒå
±é module ã®éçšãšéçºé床ã®ããã«ãã㯠å
±é module ã䜿ããšæšæºåãåå©çšæ§ãé«ãŸãåé¢ãå©çšè
ïŒãã®ãªããžããªã§ã¯ module ãåŒã³åºãé åïŒããšã®å·®ç°ãåããããè€éããå¢ãããã倿Žã«å¯ŸããŠæè»ããæ¬ ããããšããããŸãã ãŸããããæç¹ã®å
±é module ã§å©çšè
ãç®çãéæã§ããªãå Žåãå
±é module ãæ¹ä¿®ããããå
±é module ã䜿ããªãåé¿çã§äœæããããšãã倿ãå¿
èŠã«ãªããŸãããããã¯ã©ã¡ããã倿Žãããé åã®å€åŽã«ããé¢å¿äºãèããå¿
èŠããããŸãã ããšã AI ã«ãã£ãŠ Terraform ã®å®è£
ã倿޿¡ã®äœæããããããªã£ããšããŠããå
±é module ã®ååšã¯ãã®ãããªè¿œå ã®å€æãå¿
èŠãšãªããçµæãšããŠå€æãè¡ã人éãããã«ããã¯ãšãªã£ãŠããŸããŸãã 課é¡3ïŒNew Relic ã® UI äžã§ããã·ã¥ããŒãã倿Žã§ããªã ããã·ã¥ããŒãã®å
±é module ã§ã¯ newrelic_one_dashboard ã䜿ã£ãŠããŸãããTerraform ã®ãªãœãŒã¹ãšããŠã¯ newrelic_one_dashboard ã®ä»ã«ã newrelic_one_dashboard_json ããããŸãããã®2ã€ã«ã¯ããã·ã¥ããŒãã HCL ã§æžãã JSON ãæžãããšããéãããããŸãã New Relic ã® UI äžã§ã¯ããã·ã¥ããŒãã GUI Editor ã JSON ã§ç·šéãã§ãããã®ããã·ã¥ããŒãã® Export 㯠JSON 圢åŒã®ã¿ã§ãããã®ãã HCL ã§æžãããããã·ã¥ããŒãã¯ç°¡åã« New Relic ã® UI äžã§å€æŽããããšãã§ããŸããã§ããã äžæ¹ã§ newrelic_one_dashboard_json ã«ããŠãExport ããããã·ã¥ããŒãããã®ãŸãŸäœ¿ãéçšã ãšãæåã®ç®çã®ããã·ã¥ããŒãã®æšæºåãé£ãããšãã課é¡ããããŸããã 課é¡4ïŒéçšã«ã¯ New Relic ã®å°éç¥èãå¿
èŠ New Relic ã®èšå®ã§ã¯ãã·ã¹ãã ã®æ¯ãèããç°åžžæ€ç¥ã®æ¡ä»¶ã New Relic åŽã®è¡šçŸã«èœãšã蟌ãå¿
èŠããããŸããäžæ¹ã§ãéçºãäºæ¥ã®äŒè©±ã¯ãŠãŒã¶ãŒãžã£ãŒããŒããŠããã¿ã¹èšèªãäžå¿ã«è¡ãããŸãããã®å¯Ÿå¿é¢ä¿ãæé»ç¥ã®ãŸãŸã ãšãNew Relic ã«è©³ãã人以å€ãç£èŠèšå®ã®æå³ãçè§£ãã¥ãããªããŸãããAI ã«ããçæç©ã®ç²ŸåºŠãæªããªããŸãã åãçµã¿ Terraform 管çã®æ¹é 課é¡ã«ã¯æç¢ºã«çãããããã®ãããã°ããã¬ãŒããªãã䌎ããã®ããããŸããããã§ãŸãã¯ä»¥äžã®æ¹éãæ±ºããŸããã New Relic 㯠UI ã§ã®ç·šéã蚱容ãããTerraform 㯠UI ã§ã®å€æŽãã³ãŒãã§ã®å€æŽãäž¡æ¹ãåã蟌ã圢ã§ç®¡çããã ãµãŒãã¹ãçµç¹æ§é ã®å€åã«è¿œåŸããããããšãåªå
ãããªãã¹ããã©ããã§è³ªçŽ ãªæ§æã«å¯ããã 1ã¯ãNew Relic ã® UI Editor ã§ã®ç·šéã®ããããã«å ããNew Relic ææ°æ©èœããã¡æ©ãåãå
¥ããããããããã®å€æã§ããUI æäœã§æ©èœãçè§£ããããã§ Terraform 管çã«ç§»ãããšããæµããæ³å®ããŠããŸãã 2ã¯èæ¯ã§ãè¿°ã¹ãéããAgentic AI ã®æ®åã«ãã£ãŠäºæ¥ç°å¢ã®å€åãéããªãããšãåæã«ãçµç¹ã責任ç¯å²ã®èŠçŽããå¢ããããšãæ³å®ãã倿ã§ãã ãã®æ¹éã®äžã§ã課é¡ã«å¯ŸããŠ4ã€ã®åãçµã¿ãè¡ããŸããã åãçµã¿1ïŒã¬ãŒãã¬ãŒã«ã®æŽå ãŸãã¯ã課é¡1ã解決ããããã«ãTerraform ã® CI/CD ãæŽåããŸããã User Key ãçºè¡ãã New Relic ãŠãŒã¶ãŒã®æš©éãæå°å ã¢ã¯ã»ã¹ããŒã¯ã³ãªã©ã® Secrets ã GitHub ãã AWS ã«ç§»è¡ AWS ãžã¯ OIDC ã§æå°æš©éã§ã¢ã¯ã»ã¹ããããã«å€æŽ GitHub Actions ã®ããŒãžã§ã³ã¯ SHA Pinning ã§åºå® Dependabot ã§ã®æŽæ°ã¯ cooldown æéãèšãã tflint ãš secretlint ãå°å
¥ éèŠãªéšå㯠CODEOWNERS ã§ã¬ãã¥ãŒå¿
é ã« ãã®ãã¡ SHA Pinning ã Dependabot ã® cooldown ã¯ã tj-actions/changed-files ã®äŸµå®³ïŒCVE-2025-30066ïŒ ã®ãããªãµãã©ã€ãã§ãŒã³æ»æãžã®åãã§ããæªæããããŒãžã§ã³ã®å€ãã¯å
¬éããéããªãææã«çºèŠãããããã æ°ããããŒãžã§ã³ã®é©çšããããŠé
ããã cooldown ã¯ã·ã³ãã«ã§ããæå¹ãªå¯Ÿçã«ãªããŸãã speakerdeck.com ãã㯠AI å°çšã®ä»çµã¿ã§ã¯ãªãã人éã倿ŽããŠã AI ã倿ŽããŠããå±éºãªå€æŽãæ€ç¥ããããããããã®åå°ãšãªããŸãã åãçµã¿2ïŒå
±é module ã廿¢ ç¶ããŠèª²é¡2ã解決ããããã«ãçŸæç¹ã§ã¯å
±é module ã廿¢ããã©ãããªæ§æã«å¯ããããšã«ããŸããã ãã¡ã€ã«åã« prefix ãã€ããã ããšããã·ã³ãã«ãªäœããš CODEOWNERS ã§ã責任ç¯å²ãææè
ã衚çŸããããã«ããŸããã âââ services/ â âââ base/ â âââ prod/ â â âââ main.tf # ãšã³ããªãã€ã³ã â â âââ item_alerts.tf # ååé åã®ã¢ã©ãŒã â â âââ item_dashboards.tf # ååé åã®ããã·ã¥ããŒã â â âââ item_service_levels.tf # ååé åã® Service Level â â âââ item_*.tf # ååé åãã®ä» â â âââ checkout_*.tf # 決æžé å â â âââ order_*.tf # 泚æé å â â âââ notifications.tf # å
±éã®éç¥èšå® â â âââ ... # .github/CODEOWNERS services/base/*/item*.tf @baseinc/item-team services/base/*/checkout*.tf @baseinc/checkout-team services/base/*/order*.tf @baseinc/order-team â» ãã£ã¬ã¯ããªæ§æäžã®ãã¡ã€ã«åãããŒã åã¯äŸã§ãã åãã¡ã€ã«ã§ã¯ New Relic ã®ãªãœãŒã¹ãå®çŸ©ããã ããšãªã£ãŠããŸãã ãªããmodule ãå
šåŠå®ããŠããããã§ã¯ãããŸããã倧éã®åçš®ãªãœãŒã¹ãæ±ãå¿
èŠãåºãŠããæã«ã¯ã¹ã³ãŒããéå®ããç¶æ
ã§ module ã®å°å
¥ãæ¹ããŠæ€èšããäœå°ãæ®ããŠããŸãã åãçµã¿3ïŒæšæºåãããããã·ã¥ããŒãäœæã®ã¹ãã«å å
±é module ã廿¢ããããšãããšãæšæºåãããããã·ã¥ããŒããäœæããããã®å
±é moduleããã©ãåãæ±ãããé¢é£ããŠåé¡ã«ãªããŸãããã¡ã㯠AI ã New Relic ããã·ã¥ããŒããäœæããæã«ãæšæºåãããããã·ã¥ããŒããçæãã SkillïŒAgent SkillsïŒãçšæããŠå¯Ÿå¿ããŸããã èæ¯ã§ç޹ä»ãããåã仿§æžãã®èšäºã§ã¯æšæºåãå
±é module ãšããã³ãŒãã®å¶çŽã§æ
ä¿ããŠããŸããããããã Skill ãšã¬ãã¥ãŒãšããçææã®èŠçŽã§æ
ä¿ãã圢ã«çœ®ãæããããšã«ãªããŸãã ãããŠããã·ã¥ããŒãèªäœã HCL ã§æžãå¿
èŠæ§ããªããªã£ããããJSON ã§æžãããã«ãã newrelic_one_dashboard_json ã䜿ãããšã§èª²é¡3ã解決ããŸãããJSON ã§ããã·ã¥ããŒãã管çããæ¹æ³ã¯ New Relic å
¬åŒããã°ã§ã玹ä»ãããŠããŸã ã ãŸãããã·ã¥ããŒãã®æ¬äœã JSON ã§æžãããããšã§ãããã³ããšã³ãã®ã³ãŒãããåŒã³åºãããããªããã¢ãã¯ããŒã¿ã§ HTML ãçæããããŒã«ãäœã£ãŠ CI ãã瀟å
HTML ãã¹ãã£ã³ã°ç°å¢ã«ã¢ããããŒãããããã«ããŸããã devblog.thebase.in ã¢ãã¯ããŒã¿ã§ HTML ãçæããŠããããããŒã¹ã« PR ã®è°è«ãé²ãã§ããŒãžãããäŸã§ãã åãçµã¿4ïŒãŠããã¿ã¹èšèªãš New Relic ã®ç£èŠèšå®ãã€ãªã Catalog file ããã¯ãŸã PoC ã§ãããçšèªãããã³ã°ãã¡ã€ã«ãšã㊠Catalog file ãçšæããŸããã Catalog file ã¯ãããžãã¹ããããã¯ãã®èšèãšãNew Relic ã®ç£èŠèšå®ã察å¿ã¥ããããã®ç¿»èš³ã¬ã€ã€ãŒã§ãã ã€ã¡ãŒãžãšããŠã¯ãããã³ããšã³ããšããã¯ãšã³ãã®éã«ããã€ã³ã¿ãŒãã§ãŒã¹ãçè§£ããããã« OpenAPI ã䜿ããããªãã®ã§ãã çŸæç¹ã§ã¯ãOpenAPI ã®ãããªå³å¯ãªå¥çŽãæåããç®æãã®ã§ã¯ãªãããŠãŒã¶ãŒãžã£ãŒããŒããŠããã¿ã¹èšèªãšãNew Relic ã®ç£èŠèšå®ã察å¿ã¥ããããã®èã翻蚳ã¬ã€ã€ãŒãšããŠçšæããŸããã ããšãã° itemïŒååïŒé åã® Catalog file ã§ã¯ã次ã®ãããªå¯Ÿå¿é¢ä¿ã衚çŸããŸãïŒã¯ã©ã¹åãªã©ã®å€ã¯äŸã§ãïŒã domain : item critical_user_journeys : - id : item_register name : æ°ããååã远å ã§ããããš # 瀟å
ã§ç®¡çããŠãã SLO äžèЧãšçµåããããã®ã㌠code_paths : backend : - 'ItemController::register' service_levels : - tf : newrelic_service_level.item_register_success # Terraform ã® state ã¢ãã¬ã¹ å®ã¯æåã¯ããŠãŒã¶ãŒãžã£ãŒããŒã®èª¬æãç®æšå€ããªãŒããŒãªã©ã Catalog file ã«æãããããšããŠããŸããããããå®éã«æžããŠã¿ããšããããã¯ç€Ÿå
ã® SLO 管çããã¥ã¡ã³ãã Terraform åŽã«ãã§ã«ååšããæ
å ±ã§ãCatalog file ã«è»¢èšãããšã©ã¡ãããå¿
ãå€ããªããŸãã ãã®ããçŸåšã¯ãCatalog file ã«ã¯ä»ã®ã©ãã«ãååšããªãæ
å ±ïŒãŠãŒã¶ãŒãžã£ãŒããŒãšã³ãŒããš New Relic ãªãœãŒã¹ãçµã³ã€ãã察å¿é¢ä¿ïŒã ããæããããã以å€ã¯çµåããŒãšåç
§ãªã³ã¯ã§æžãŸãã圢ã詊ããŠããŸãã ããã«ãããAI ã« New Relic ã® Terraform èšå®ã ããèªãŸããã®ã§ã¯ãªãã人éãæ®æ®µäœ¿ã£ãŠãããŠãŒã¶ãŒãžã£ãŒããŒããŠããã¿ã¹èšèªãèµ·ç¹ã«ãNew Relic ã§èŠ³æž¬ã§ããèšå®ãžå€æããããããããšãç®æããŠããŸãã ãšã¯ãããããã翻蚳ã¬ã€ã€ãŒãšããŠæ©èœããã®ããæãããæ
å ±ã®ç²åºŠã¯ããã§è¯ãã®ãã¯ããŸã æ€èšŒã®éäžã§ããCatalog file ã¯å¥ãã¡ã€ã«ãšããŠååšãã以äžãçŸå®ã®ã·ã¹ãã ã New Relic ã®èšå®ãšä¹é¢ãããªã¹ã¯ãåžžã«ãããä»åŸã¯ Terraform ã New Relic ã®å®æ
ãšã®å·®åãæ©æ¢°çã«æ€æ»ããŠããããšã課é¡ã«ãªããŸãã åèšèšåŸã®æ§æ æçµçã«çŸåšã® Terraform ãªããžããªã¯ä»¥äžã®ãããªæ§æã«ãªããŸããã âââ .claude/ â âââ skills/ â âââ newrelic-dashboard # æšæºããã·ã¥ããŒããäœæããããã® Claude ã¹ãã« âââ .github/ â âââ CODEOWNERS # é åããšæ
åœããŒã ããªãŒããŒã«èšå®ãã âââ services/ # ãããã¯ãã»ãµãŒãã¹ããšã® Terraform èšå® â âââ base/ â âââ prod/ # ç°å¢ããšã®èšå® â â âââ item_alerts.tf # ååé åã®ã¢ã©ãŒãèšå®ã管ç â â âââ item_dashboards.tf # ååé åã®ããã·ã¥ããŒãã管ç â â âââ item_service_levels.tf # ååé åã® Service Level ã管ç â â âââ checkout_*.tf # 決æžé å â â âââ order_*.tf # 泚æé å â â âââ dashboards/ # ããã·ã¥ããŒãæ¬äœã® JSONãé åããšã«ãã£ã¬ã¯ããªãåãã â â â âââ item/ â â â âââ hoge_dashboard.json â â âââ main.tf # ãµãŒãã¹ x ç°å¢åäœã® Terraform ãšã³ããªãã€ã³ã â âââ dev/ âââ observability-catalog/ â âââ domains/ # ãã¡ã€ã³ããšã®ãŠããã¿ã¹èšèªãš New Relic ã®ç£èŠèšå®ã®å¯Ÿå¿é¢ä¿ãå®çŸ©ãã â â âââ item.yml â âââ applications.yml # ãªããžããªãš New Relic ã察å¿ä»ããããã®å®çŸ©æž âââ tools/ â âââ dashboard-viewer/ # ããã·ã¥ããŒã JSON ãã¢ãã¯ããŒã¿ã§æç»ããããŒã«ã« viewer âââ README.md # ãããžã§ã¯ãå
šäœã®èª¬æ å·çæç¹ã§ã¯ãããã·ã¥ããŒã6æã«å ããŠãService Level 15æ¬ãšãã® burn-rate ã¢ã©ãŒããªã©ãéç¥èšå®ãŸã§ã Terraform 管çäžã«å
¥ã£ãŠããŸããããã·ã¥ããŒãã ãã ã£ãå幎åãšæ¯ã¹ããšã管ç察象㯠New Relic ã®ç£èŠèšå®ã²ãšéãã«åºãããŸããã ãŸãšã New Relic ã® Terraform 管çãåéããã«ããããAI ã«æžãããããšã§ã¯ãªãã人éïŒçµç¹ïŒãš AI ãç¶ç¶çã«å®å
šã«å€æŽã§ããæ§é ãæŽããããšãç®æããŸããã ã¬ãŒãã¬ãŒã«ã§ã誰ã®å€æŽã§ãã£ãŠãæ©æ¢°çã«æ€èšŒãããåå°ãäœã å
±é module ã廿¢ãããã©ãããªæ§æãš CODEOWNERS ã§ãæææš©ãçµç¹ã®å€åã«è¿œåŸãããã圢ã§è¡šçŸãã ããã·ã¥ããŒã㯠JSON ãš Skill ã§ãUI ã§ã®ç·šéãããããšæšæºåãäž¡ç«ãã Catalog file ã§ããŠããã¿ã¹èšèªãšç£èŠèšå®ã®å¯Ÿå¿é¢ä¿ãæç€ºãã çµç¹ãäºæ¥ç°å¢ãå€ããç¶ããåæã«ç«ã€ãšãç£èŠèšå®ã®ç®¡çã¯ãäžåºŠäœã£ãŠçµãããã«ã¯ãªããŸããã倿Žã«é¢ãã人ïŒãš AIïŒãå¢ããŠãå£ããªãæ§é ãå
ã«çšæããŠããããšããããããã® New Relic éçšã®åå°ã«ãªããšèããŠããŸãã BASE ã§ã¯ããªãã¶ãŒãããªã㣠à AIããªåãçµã¿ã«ãææŠããŠããŸãã äžç·ã«é²ããŠãã仲éãåéããŠããŸããèå³ã®ããæ¹ã¯ããã²ãæ°è»œã«æ¡çšæ
å ±ãã確èªãã ããã binc.jp
ã¯ããã« 2026/7/20ïŒæã»ç¥ïŒãBASEæ ªåŒäŒç€Ÿãã ç»å£ & ãŽãŒã«ãã¹ãã³ãµãŒãšããŠåè³ãã PHP Conference Japan 2026ãéå¬ãããŸããã ä»åã¯PHP Conferenceã«ååå ããã¡ã³ããŒãå€ãã£ããããååå ãªãã§ã¯ã®ææ³ã³ã¡ã³ããäŒå Žãã¹ãã³ãµãŒããŒã¹ã®æ§åã«ã€ããŠãå±ãããŸãïŒ BASEã®ã¹ãã³ãµãŒããŒã¹ã®çŽ¹ä» ä»å¹Žã¯ Yell Bank ãš PAY ID ãããŽããªãã¥ãŒã¢ã«ãããããããã«ã¡ãªãã§ãBASEããŽæ€å®ãããªããBASEã®GEEKã«ãªãããããšé¡ããŠãBASEãå±éãããµãŒãã¹ã®ããŽã«ãŸã€ããã¯ã€ãºäŒç»ã宿œããŸããïŒ âããã°æçš¿çšã«ããåçããã ããäžããå³éžãããŠããã ããŠè²Œã£ãŠããŸãããåçã«ãªãä»ç®ã100æããããããŸããã éåžžã«å€ãã®æ¹ã«ãåçããã ããããã«ãã£ãšããŠçšæããŠããŸãããBASEããŽä»æ²»ããã¿ãªã«ãã14æé ã«é
åžçµäºããŠããŸããŸãããïŒãæž¡ãã§ããªãã£ãæ¹ããã¿ãŸããâŠïŒïŒ ä»åäœæããã¯ã€ãºã®ãã¡åïŒãåïŒãŸã§ã¯ãã€ãã³ãåœæ¥ã«åä»ã§å
¥å Žè
ã«é
ããããã©ã·ã«ããŽã®èª¬æãšããŠåçãæ²èŒããŠããŸããã ãŸããåïŒã¯ãšã¯ã¹ãã©åé¡ãšããŠãã©ã·ã«ã¯çããèŒã£ãŠããªãåé¡ãçšæããŠããŸããããã®ããã«èª¬æãããšãæããã¯ããšçå£ã«èããŠãã ããæ¹ãå€ããã¿ãªããæ¥œããã§ææŠããŠãã ãããŸãããïŒãã®åé¡ã®çãã¯ãã¡ãã® PAY ID ããŽãªãã¥ãŒã¢ã« ã®ããã°ã«æ²èŒãããŠããŸãïŒ ããã«ãã£ãšããŠãé
ãããŠããBASEããŽä»æ²»ããã¿ãªã«ããã ãã£ãŠäœæããŠããããå¬ããã声ãããããããã ããŠãããžãå¬ããã£ãã§ãã ç»å£ã®çŽ¹ä» ããã®ïŒ @ykagano ïŒ speakerdeck.com ä»åã¯è³Œå
¥ã«å€±æããã€ã³ã·ãã³ãã«ã€ããŠã話ããããŠããã ããŸããã ãã€ã³ããšããŠã¯ä»¥äžã®2ç¹ãšèããŠããŸãã ã¯ã©ã¹åãã·ãªã¢ã©ã€ãºããŠä¿åããèšèšã«ãããã¯ã©ã¹åé€ã®åœ±é¿æŒã æ¬äŒŒä¹±æ°ã®æ¶è²»äœçœ®ã倿Žããããšã«ãããããŒè¡çªã®ç¢ºçå€å çºçåå ãæ·±æããããšè€æ°ã®èŠå ãéãªã£ãŠçºçãããåŠã³ã®ããã€ã³ã·ãã³ãã§ããã ç¹ã«2ã¯è³æã§ã¯å²æããŠããŸãããæ¬äŒŒä¹±æ°ã®æ¶è²»äœçœ®ãçªãæ¢ããããã«ãAIã䜿ã£ãŠçºçãã¿ãŒã³ïŒã·ãŒã43åéã à æ¶è²»äœçœ®15ãŸã§ïŒã®ç·åœãããè¡ãããšã©ãŒãçºçãã2ã€ã®ããŒã®æ¶è²»äœçœ®ãã©ã¡ãã5ã§ããããšã確èªããŠããŸãã ã€ã³ã·ãã³ãã¯ãªãã¹ãçºçãããªãããã«ãããã§ãããã€ã³ã·ãã³ããéããŠPHPã®æ¬äŒŒä¹±æ°ã®ä»çµã¿ãç¥ãããšãã§ããã®ã¯ããã£ããšæããŸãã PHP Conferenceã§ã®ç»å£ã¯åããŠã§ç·åŒµããŸããããããããã®æ¹ã«ãèãããã ãããããšãããããŸããããŸã次åã®é嬿ã«ãåå ãããŠããã ããŸãã çŸå°ã§èŠãã»ãã·ã§ã³ããåŸãåŠã³ã»ææ³ïŒ @wakana ïŒ ããŒã¹ã¹ã¿ãããšããŠåŸäºããŠããæéãé·ãã£ãããæ°åã®ã»ãã·ã§ã³ããèŠãããšãã§ããŸããã§ãããããã®äžã§ãç¹ã«å°è±¡ã«æ®ã£ãã»ãã·ã§ã³ã®ææ³ã§ãã ïŒç»å£ã®è©³çްã«ã€ããŠã¯ãç»å£è
æ§ããã¢ããããŒããããŠããè³æããåŸæ¥å
¬éäºå®ãšãªã£ãŠããã€ãã³ãå
¬åŒã¢ãŒã«ã€ããã芧ãã ããïŒ Laravelã§åŠã¶ Webã¢ããªã±ãŒã·ã§ã³ãã¥ãŒãã³ã°å
¥éãRyo Tomidokoroæ° speakerdeck.com ãã¡ãã®ã»ãã·ã§ã³ã§ã¯ãLaravelã§ã®ã¢ããªã±ãŒã·ã§ã³éçºã»éçšãäŸã«åã£ãã¢ããªã±ãŒã·ã§ã³ã®ãã¥ãŒãã³ã°æ¹æ³ã®åºç€ãèãæ¹ã«ã€ããŠçºèŠã»å確èªããããšãã§ããŸããã å°è±¡ã«æ®ã£ãåŠã³ã¯ä»¥äžã§ãã ããªããé
ãæ°ããããã§ã¯ãªãããAPIã®ã¬ã¹ãã³ã¹è¿åŽãæ®æ®µãã500msé
ããªã£ãŠããããªã©ã®å®éçãªæ°å€ã«å€æããããšã§è°è«ãè¡ããããã«ãªãã調æ»ãéå§ããããšãã§ããã ãã©ãŠã¶ã«è¡šç€ºããããŸã§ã®çµè·¯ã®ãã¡ãWebã¢ããªã±ãŒã·ã§ã³ãå ããå²åã¯äžéšã§ãããªããWebã¢ããªã±ãŒã·ã§ã³ãæ¹ä¿®ãããšæ±ºããåã«ããããã¡ã€ã©ãŒã䜿ã£ãŠæ¬åœã«Webã¢ããªã±ãŒã·ã§ã³ãé
ãããšãç¹å®ããã Webã¢ããªã±ãŒã·ã§ã³ãé
ãããšãããã£ãããNew Relicãdatadogãªã©ã®ãããã¡ã€ã©ãŒã䜿ã£ãŠé
ãåŠçãç¹å®ãããããã«ããã¯ã¯åŸã
ã«ããŠè§£æ±ºãé£ããäºãå€ãããããã«åãåãããšãéèŠã ããã«ããã¯ããç®ãéžãããªã ããã«ããã¯ã®ç¹å®ããæ¹ä¿®ã«ããã£ãŠã¯æ¥é ããèªåã®äžã«äœ¿ããææãå¢ãããŠããããšã倧äºãïŒã¹ã©ã€ãå
ã§ç޹ä»ãããŠãããã®ã®äžéšæç²ïŒ PHP ã§åŠã¶ Cache ã®è·é¢ã®è©± / study_cache_with_php PHPerã®ããã®èšç®éå
¥é/Complexity101 for PHPer é人ãæããWebããã©ãŒãã³ã¹ãã¥ãŒãã³ã° ãISUCONããåŠã¶é«éåã®å®è·µ å人çã«ãçŽè¿ã®æ¥åã§ã¯ãããã¡ã€ã©ãŒããŒã«ãçšããŠãã¥ãŒãã³ã°ã®ããã®åæãè¡ãããšãå¢ããŠããŠãããããã¿ã€ãã³ã°ããä»ã®èªåã«å¿
èŠãªçºè¡šãèãããšãã§ããŸããã æ¥ã
ã®ææãå¢ãããŠããããããäžå±€ç²Ÿé²ããŠãããããšæããŸããã ãããŠãããã«ããã¯ããç®ãéžãããªãèã«éããŸã ðª ã»ã¬ã³ãã£ããã£ïœAIã§çããåºãæä»£ã«ããªãã³ãã¥ããã£ãžè¡ãã®ãïŒ å°æ³å²³äºº æ° www.docswell.com ãã¡ãã®LTã§ã¯ããAIæä»£ã«ããããã³ãã¥ããã£ã«è¶³ãéã¶æçŸ©ã¯ã©ãã«ããã®ãããšããç¹ã䌺ãããšãã§ããŸããã å人çã«ãå¥ã®ã«ã³ãã¡ã¬ã³ã¹ããã®åŸã®æèŠªäŒã§ãè³ã«ããããšãå¢ããŠããããŒãã ã£ããããèŠèŽåããèå³ã®åŒ·ãçºè¡šã§ããã ãã¡ãã®LTã§ã¯ãäž»ã«æ¬¡ã®ãããªåŠã³ãåŸãããšãã§ããŸããã åãã«å¯Ÿããçããç¥ãã ããªãAIã§è¡ãããšãã§ããŠããŸãããã³ãã¥ããã£ã«æ¥ããšæããããªãåºäŒãïŒäººã»æ
å ±ã»etcâŠïŒã«å¿ãåããããããšããã æ§ã
ãªçºè¡šãèããŠãããã«çãã®åºãªãåããèããåŸãŠããããæã¡åž°ãããšã§ã èªåã®äžã§åããè²ãŠãããšãã§ãã åããè²ãŠãªããäœåºŠãè¶³ãéã¶ããšã§ã仲éãäœãããšãã§ãã ç¹ã«å°è±¡çã ã£ããã¬ãŒãºã¯ã åããè²ãŠã ããšãããã®ã§ããã AIã䜿ã£ãéçºãã¹ã¿ã³ããŒãã«ãªãããªãã§ãããã«AIã«èãã®ãåœããåã«ãªã£ãããŸãèªåã§èããåãèœã¡ãŠããŠããã®ã§ã¯ãšãå人çã«ã屿©æãæã£ãŠããã¿ã€ãã³ã°ã§ããã ãããªäžã§èããã åããè²ãŠã ããšãããã¬ãŒãºã¯ããããŸã§ã®èªåã«ã¯ãªãã£ãèŠç¹ã§ãã·ã³ãã«ãªãã匷ãå¿ã«æ®ããŸããã ãã®çºè¡šãäžæ¥ã®ã¿ã€ã ããŒãã«ã®æåŸã«çœ®ãããçŽåŸã«æèŠªäŒãæ§ããŠããããšãããã³ãã¥ããã£ã«éãŸãæçŸ©ããç©èªããããªæ§æã«æããããŠæåããŸããã å®éããã®åŸã®æèŠªäŒã§ã¯ãæ®æ®µãããããã«æ·±ã亀æµã楜ããããšãã§ãããšæããŠããŸãã åå ã¡ã³ããŒããã®ã³ã¡ã³ã wakana ä»ååããŠPHP Conferenceã«åå ããããšãã§ããŸããïŒ ããŒã¹ã¹ã¿ãããšããŠææ©ãããéãŸããã«ã³ãã¡ã¬ã³ã¹åŸã®æèŠªäŒãŸã§åå ããŸããã1æ¥ãéããŠãšãŠã楜ããå
å®ããŠããŠãåž°ãé ã«ã¯åŠçæä»£ã®æåç¥åŸã®ãããªæž
ã
ããç²åŽæããããŸããã ã¹ãã³ãµãŒããŒã¹ã§ã¯ããããã®æ¥å Žè
ã®æ¹ãšã話ããããšãã§ããããµãŒãã¹äœ¿ã£ãŠãŸãïŒããããã«ãã£ããããïŒããšãã£ãå¬ããã声ãããã ããããããã«ã¯ãä»ã®ä»äºãé²ããããã§å°ã£ãŠããããšããããBASEããã§ã¯ã©ã®ããã«è§£æ±ºããŠããŸããïŒããšãã£ããã£ãŒããªå
容ã®ã話ãŸã§æ¥œãã亀æµãããŠããã ããŸããã ä»ã®ã¹ãã³ãµãŒäŒæ¥æ§ã®ããŒã¹ã«ãéªéããéããè¿ãæ©ã¿ãå
±æã§ããŠç«ã¡è©±ãæãã¬çãäžãããèŠããŸãããå®ã¯åœæ¥ã®æãŸã§ã¯å€ã®æèŠªäŒã«åå ããªãäºå®ã ã£ãã®ã§ããããæ¥ããããªããã²ã話ãããŸãããããšã声æãããã ããã®ããã£ããã«ããã®å Žã§ãã±ããã賌å
¥ããŸããïŒç¬ïŒããããã§ãä»åŸã®å
±åã€ãã³ãããäžç·ããäºå®ã®äŒç€Ÿæ§ã®ãšã³ãžãã¢ã®æ¹ãšã亀æµãæ·±ããããæãåã£ãŠåå ããŠæ¬åœã«ããã£ããšæããŠããŸãã ã»ãã·ã§ã³ã§åŸãããåŠã³ã¯ãã¡ããã§ãããã³ãã¥ããã£ã®æž©ããããŠã§ã«ã«ã ãªé°å²æ°ã¯ããããŸã§åå ããã€ãã³ãã®äžã§ããã³ããã§ããã ãã²ãŸãåå ãããã§ãïŒ çœæ°ïŒ ããã
ïŒ ä»åãPHP Conferenceã«ã¹ãã³ãµãŒããŒã¹ã¹ã¿ãããšããŠåããŠåå ããŸããã ã¹ãã³ãµãŒããŒã¹ã®äŒç»æ®µéããé¢ããããããã¯ã©ãïŒããããã¯ã©ãïŒããšã¡ã³ããŒã§ããããæèŠãåºãåããªãããæ¥œããæºåãé²ããããšãã§ããŸããã 宿œãããBASEããŽæ€å®ãããã£ããã«ã1人ã§ãå€ãã®æ¹ã«BASEãéå¶ãããµãŒãã¹ã«ã€ããŠç¥ã£ãŠããã ãããå¬ããã§ãã åœæ¥ã¯ãåããŠãäŒãããæ¹ã
ãšäŒç»ãäŒè©±ãéããŠäº€æµããã»ãã·ã§ã³ãããã€ãèŽãããšãã§ããŸããã PHPã³ãã¥ããã£ã®æŽ»æ°ãçŽæ¥æãããã貎éãªæ©äŒãšãªããŸããã äžäœå ååå ã® PHP Conference ã§ããïŒ æ®æ®µ PHP ãããŸãæžããŠããªã身ãšããŠã¯ããåå ããŠã倧äžå€«ããªâŠããšæåã¯å°ãäžå®ããããŸããããã¹ãã³ãµãŒããŒã¹ã®äŒç»ããåœæ¥ãŸã§æºããããšãã§ãããšãŠã貎éãªçµéšã«ãªããŸããã åœæ¥ã¯ããŒã¹ã«æ¥ãŠãã ãã£ãæ¹ã
ãã¯ã€ãºãéã㊠BASE ã®ãµãŒãã¹ã«èå³ãæã£ãŠãã ããæ§åãèŠãããšãã§ããããæ®æ®µå©çšããŠãããµãŒãã¹ã®ææ³ãçŽæ¥èããããšãæ¥å Žè
ã®æ¹ã
ãšéè«ã亀ããªããã話ãããæéããšãŠã楜ããã£ãã§ãã ãŸããã¹ã¿ã³ãã©ãªãŒã«ãåå ããŠã¿ãŸããããå瀟ããããäŒç»ã ãã§ãªãããã«ãã£ã«ãåæ§ãç¹è²ã衚ããŠããŠãããŒã¹ããšã«ç°ãªãé°å²æ°ã楜ãããã®ãå°è±¡çã§ããã ä»åã®ã«ã³ãã¡ã¬ã³ã¹ãéããŠãæè¡ã ãã§ãªãã人ãšäººãäŒæ¥å士ãã€ãªããããšã®é
åããã€ãã³ãã¥ããã®é¢çœããæããããšãã§ããŸããã ãŸãæ©äŒãããã°ãã²åå ãããã§ãïŒ å°åŒ åããŠPHP Conferenceã«åå ããŸããïŒ ç§ã¯ã¹ãã³ãµãŒã¹ã¿ããã§ã¯ãªããã€ã³ã¿ãŒã³çãšããŠå
茩ïŒCapi(ããŽ) ããïŒãšäžç·ã«äžè¬åå ãããŠããã ããŸããã çŸå°ã§åå ããã»ãã·ã§ã³ã¯ã©ããåºæ¿çã§ããã®ã¥ãããã³ãŒãã£ã³ã°ãçŽç²ã«æ¥œããã§ããç±éããµããæ¹ã
ã®çºè¡šããšãŠãå°è±¡çã§ãããAIæä»£ãªãã§ã¯ã®éçºã®å·¥å€«ãèãæ¹ã«ãè§Šããããšãã§ãããã®ã¥ããã®é¢çœããæ¹ããŠå®æããŸããã æèŠªäŒã§ã¯ãBASEã®å
茩æ¹ãæ¬åœã«æž©ãããä»ç€Ÿã®ãšã³ãžãã¢ã®æ¹ãå
茩ã®ãç¥ãåãã®æ¹ããããã玹ä»ããŠãã ãããŸãããåšãã«åŠçãå°ãªãç·åŒµããŠããã®ã§ããããããããªæ¹ãšäº€æµãããã£ãããäœã£ãŠããã ããããšããšãŠãå¬ãããæ¹ããŠBASEã®æž©ãããæããŸããã æè¡çãªåŠã³ã ãã§ãªããæ°ãã人ãšã®ã€ãªãããã³ãã¥ããã£ã®æž©ãããæããããã€ãã³ãã§ãåå ããŠããã£ããšå¿ããæããäžæ¥ã§ããã ãŸããã²åå ãããã§ãïŒ ãããã« ã«ã³ãã¡ã¬ã³ã¹ã®ã¯ããŒãžã³ã°åŸãäžæ¥ããŒã¹ã¹ã¿ãããç²ãæ§ããããŠããã®ããLTãç²ãæ§ã§ãããïŒãšããããšã§ã¿ããªã§ãã·ã£ãªãïŒäžè¬åå ãšããŠæ¥ãŠãã Capi(ããŽ) ãã å°åŒãã ãå ãã£ãŠãããŸããïŒïŒ ããŒã¹ã¹ã¿ãããšããŠåå ããã¡ã³ããŒã®å
åå以äžãååå ãšãããã¬ãã·ã¥ãªæ§æã§ããããå
šå¡ã®ååã®ãããã§äœäºããªãçµããããšãã§ããŸããã ãŸããPHP Conference ã®éå¶ã¹ã¿ããã®ã¿ãªããŸãããå¿ããäžãå€ãã®æéãã€ãã³ãæºåã«å²ããŠãã ãã£ãããšãšæããŸãã ãããªã«è²Žéãªæ©äŒãããã ããããšã«ããã®å ŽãåããŠå¿ããæè¬ç³ãäžããŸãã BASEã§ã¯ãšã³ãžãã¢ãåéããŠããŸãããããããã°ãæ¡çšæ
å ±ããã²ã芧ãã ããïŒ binc.jp