Watchy ãå®è·µããAIæŽ»çš ã¯ããã« ð ããã«ã¡ã¯ãã¹ã¿ã¡ã³ã§ãœãããŠã§ã¢ãšã³ãžãã¢ãããŠãã yunboo ã§ãã AI æè¡ã®æ¥éãªçºå±ã«ããããããã¯ãéçºã®çŸå Žã倧ããå€ããããšããŠããŸããããããåçŽã« AI ããŒã«ãå°å
¥ããã ãã§ã¯ããã®ç䟡ãçºæ®ããããšã¯é£ãããã®ã§ãã ãã®èšäºã§ã¯ãç§ãã¡ Watchy ãå®è·µããŠãããAI 掻çšã«ããã¯ãŒã¯ãããŒæ¹åã«ã€ããŠç޹ä»ããŸãããããã¯ãéçºã«ãããæ ¹æ¬çãªèª²é¡ã解決ããAI ãã䜿çšãããã ãã§ãªããæŽ»çšãããããã®ã¢ãããŒãããäŒãããŸãã ãããã¯ãéçºã«ãããæ ¹æ¬çãªèª²é¡ ð€ ããªãäœãã®ãããäžæç¢ºãªéçºèŠæ± ãããã¯ãéçºã®çŸå Žã§ã¯ã以äžã®ãããªææ§ãªèŠæ±ã«ééããããšããããããŸãã ãããäœã£ãã売ããã ãã客æ§ã欲ãããšèšã£ãããã ãããã®èŠæ±ã¯äžèŠãã£ãšããããèãããŸããã詳现ãèããŠã¿ããšå®ã¯äœããªããŠã解決ã§ããããšãå€ã
ãããŸãã ããªãäœãã®ãã(Why) ãäžæç¢º ãªãŸãŸã§ã¯ãçã«äŸ¡å€ã®ãããããã¯ããäœãããšã¯ã§ããŸããã èæ¯æ
å ±ã®å±äººåãšããåé¡ ãã®åé¡ã®æ ¹æ¬ã«ã¯ã èæ¯æ
å ±ã®å±äººå ããããŸãã ã»ãŒã«ã¹ã¯åè«ä»¥å€ã®æ¥åãå€ããéèŠãªé¡§å®¢ã®å£°ãèšé²ã»å
±æãããªããŸãŸå€±ãããã ããŒã å
šäœã§ããªãäœãã®ãããè
¹èœã¡ããŠéçºã§ããªãç¶æ³ãçãŸããã ãã®ãããªèª²é¡ã解決ããããã«ãç§ãã¡ã¯ AI ãæŽ»çšããã¯ãŒã¯ãããŒæ¹åã«åãçµãã§ããŸãã AI ãæŽ»çšããã¯ãŒã¯ãããŒæ¹åïŒãã§ãŒãº 1 ð¯ ç®æšïŒããªãäœãã®ãããå¯èŠåããããŒã å
šäœã§å
±æ ãã§ãŒãº 1 ã§ã¯ãå¶æ¥ã»é¡§å®¢å¯Ÿå¿ãã PRDïŒProduct Requirements DocumentïŒäœæãŸã§ã®ããã»ã¹ãæ¹åããŸããã Step 1: "Why" ãå¯èŠåãã ð tl;dv ãæŽ»çšããåè«ã®èšé²ãšåæ ãã¹ãŠã®åè«ãèªåã§é²ç»ã»æåèµ·ãããããã€ã§ãæ¯ãè¿ããç¶æ
ã«ããŠããŸããç¹ã«éèŠãªã®ã¯ãMeeting Template æ©èœã䜿ã£ãŠä»¥äžã®ãããªããŒã¯ãŒããèšå®ãã顧客ã®å£°ãèªåã§æœåºããããšã§ãã Current workflowïŒçŸåšã®ã¯ãŒã¯ãããŒïŒ MotivationïŒåæ©ã»èª²é¡æïŒ ProblemsïŒå
·äœçãªåé¡ïŒ Feature requestsïŒæ©èœèŠæïŒ ããã«ãããããªããã®æ©èœãå¿
èŠãªã®ãããšããèæ¯ã確å®ã«ãã£ããã§ããããã«ãªããŸããã Step 2: ããŒã ã«èæ¯ãå
±æãã ð€ tl;dv + Zapier + Notion ã«ããæ
å ±ã®èªåèç© æœåºãã顧客ã®å£°ããããŒã ã®è³ç£ãšããŠç¢ºå®ã«èç©ããããã« tl;dv ã§çæããããµããªãŒãæåèµ·ããã Zapier çµç±ã§ Notion ããŒã¿ããŒã¹ã«èªåæ ŒçŽ éèŠãªæ
å ±ãå±äººåããããããŒæ
å ±ã§ã¯ãªãã¹ããã¯æ
å ±ãšããŠèç©ãããä»çµã¿ãæ§ç¯ Step 3: æ¥åžžæ¥åãå¹çåãã â¡ Notion AI ã«ããã«ã¹ã¿ã èªåå
¥å åè«åŸã®ä»åž¯æ¥åã倧å¹
ã«åæžããããã«ãNotion ããŒã¿ããŒã¹ãžã®ã¢ã€ãã 远å ãããªã¬ãŒãšã㊠åè«åŸã®åŸ¡ç€Œã¡ãŒã«æ¬æ ãèªåäœæ Salesforce çšã®è°äºé² ãèªåäœæ ããã«ãããå¶æ¥æ
åœè
ã¯åè«ãã®ãã®ã«éäžã§ããããã«ãªããŸããã Step 4: ä»åŸã®å±é ð® çŸåšèšç»ããŠããæ¹åé
ç® Notion AI ã«ããèŠæã®éçŽ : åè« DB ããèŠæããŸãšããèŠæ DB ãžèªå起祚 PRD äœæããã»ã¹ã®ãµããŒã : èŠæ DB ãã PRD ã®ãã¡ãŒã¹ããã©ãããèªåäœæ ãããã¯ãããžã§ã³ãç«¶åæ
å ±ãåžå Žåæãä»æã®æ³šåãã€ã³ããªã©ãã³ã³ããã¹ããšããŠæŽ»çš AI ãæŽ»çšããã¯ãŒã¯ãããŒæ¹åïŒãã§ãŒãº 2 ð PRD äœæãããªãªãŒã¹ãŸã§ã®èªåå AI ã®é²åã«äŒŽããéçºããã»ã¹å
šäœã®æé©åãé²ããŠããŸããçŸåšå®éšçã«åãããŠããã¯ãŒã¯ãããŒã¯ä»¥äžã®éãã§ãã Notion ã«èµ·æ¡ã¢ã€ãã ã远å åªå
é äœã確å®ããã¹ããŒã¿ã¹ã çæå¯èœ ã«å€æŽ ã¹ããŒã¿ã¹å€æŽãããªã¬ãŒã« GitHub Issue ãèªåäœæ Notion + Slack + Devin Notion MCP + Cursor + GitHub MCP Zapier ã䜿ã£ãã¯ãŒã¯ãããŒæ§ç¯ãªã©ãæ€èšäž Issue ã®ã¬ãã¥ãŒ Claude Code Action ãªã©ã§ ãã«ãªã¯ãšã¹ã ãäœæ ãã«ãªã¯ãšã¹ã ã®ã¬ãã¥ãŒã»ãªãªãŒã¹ ãã®ããã«ãäŒç»ããå®è£
ãŸã§äžè²«ããèªååãç®æããŠããŸãã ãã®ä»ã® AI 掻çšäºäŸð¡ åãåãã察å¿ã®å¹çå èª²é¡ åãåãã察å¿ã®å±¥æŽãã¡ãŒã«ããã£ããã«æ£åšãããã¬ããžãå±äººå é¡äŒŒã®åãåããã«æ¯å察å¿ããã³ã¹ããçºç 解決ç å
šãŠã®åãåããå
容ã Notion ããŒã¿ããŒã¹ ã«éçŽ Notion AI ã䜿ã£ãŠãéå»ã®é¡äŒŒåãåããããªããæ€çŽ¢ã§ããä»çµã¿ãæ§ç¯ æ
å ±ã®ãµã€ãåãé²ã èª²é¡ ããã®ããã¥ã¡ã³ãã©ãã ã£ãïŒã ãããæ©èœã®ããåãã©ãã®ãã£ã³ãã«ã§ããŠãã£ããç¢ºèªæŒããªãããªã æ¢ãæéã人ã«èãæéã§äœæ¥ãäžæããã 解決ç Notion AI ã§æ€çŽ¢èœåã匷åïŒæšæºæ€çŽ¢ã§ã¯èŠã€ãã«ããæ
å ±ãçºèŠå¯èœïŒ Notion AI ã³ãã¯ã¿ãŒ ã§ SlackãGitHubãGoogle Drive ãæšªææ€çŽ¢ ã¹ã©ã€ãäœæã® AI æŽ»çš èª²é¡ ã¹ã©ã€ãäœæããŒã«ã®æäœããã¶ã€ã³èª¿æŽã«æéãåãããæ¬æ¥äŒãããå
容ã«éäžãã¥ãã ã¬ãã¥ãŒãä¿®æ£ãç
©éã«ãªãã㡠解決ç Cursor + Marp ã䜿ãã¹ã©ã€ããäœæ Markdown ã§ã¹ã©ã€ããããã¹ãããŒã¹ã§ AIïŒCursorïŒã«çžè«ããªãããã©ãã·ã¥ã¢ãã Marp ã§ Markdown ããçŽæ¥ã¹ã©ã€ãåãèŠãç®ã®èª¿æŽã CSS ã§äžæ¬ç®¡ç ããã¹ããã¡ã€ã«ãªã®ã§ Git ã§ããŒãžã§ã³ç®¡çãå
±åç·šéã容æ ãŸãšãïŒAI ããæŽ»çšãããããã«éèŠãªããš ð¯ ã解空éããæèããã¢ãããŒã AI ã®èœåãæå€§éã«åŒãåºãã«ã¯ã ã€ã³ããããšãªãæ
å ±ã®æŽç ãš ã¯ãŒã¯ãããŒã®èŠçŽã ãäžå¯æ¬ ã§ããç¹ã« ã解空éããæè ããŠæ¥åãããã¥ã¡ã³ããæŽåããããšãéèŠã§ãã 解空éãææ§ã ãš AI ãææ§ãªçãããè¿ããªã 解空éãæç¢ºã«å®çŸ©ããå¿
èŠãªæ
å ±ãæŽçããŠããããšã§ãAI ã¯ããçç¢ºãªææ¡ãã¢ãŠãããããã§ãã ãã ããåµé åãè±ãã«ããããã«æå³çã«éå®ããªãã±ãŒã¹ããã Notion ãçµç¹ã®ãè³ã¿ããã« Watchy ã§ã¯ãNotion ãäžå¿ãšããæ
å ±éçŽã»AI 掻çšãé²ããŠããŸãã ããŸã Notion ãèŠãããããŸã Notion AI ã«èããŠã¿ããããåœããåã®æå ãéžæããããšã§ãæ
å ±ã®æŽ»çšåºŠã倧å¹
ã«åäžããŸããã ä»åŸã®å±æ AI 掻çšã®ãã¹ããã©ã¯ãã£ã¹ã瀟å
ã§äœç³»åãã誰ã§ã掻çšã§ããããã«ããã ãããã¯ãã®èŠæãåãåãããèªåã§åé¡ã»åªå
é äœä»ãããä»çµã¿ãäœããã tl;dv ããã£ãšæŽ»çšããã AI ãã¡ãŒã¹ãã§æ¥åãä»çµã¿ãèšèšãçŽãããšããçµç¹ã®çç£æ§ãç«¶äºååäžã«ã€ãªããã®ã§ã¯ ãããã« ð AI ã¯åãªãããŒã«ã§ã¯ãªããçµç¹ã®ã¯ãŒã¯ãããŒå
šäœãå€é©ããå¯èœæ§ãç§ããŠããŸããéèŠãªã®ã¯ãAI ã«äœãæ±ããã®ããã©ããªæ
å ±ãäžããã®ããæç¢ºã«ããããšãã€ãŸãã解空éããæèããèšèšã§ãã ç§ãã¡ Watchy ã®åãçµã¿ããçããã®ãããã¯ãéçºã«ãå°ãã§ãåèã«ãªãã°å¹žãã§ããAI 掻çšã«ã€ããŠã質åããæèŠãããã°ããã²ãèãããã ããã Watchyã§ã¯ãšã³ãžãã¢ãçµ¶è³åéäžã§ã ð herp.careers watchy.biz
ã¯ããã« ããã«ã¡ã¯ãã¹ã¿ã¡ã³ã§ããã¯ãšã³ããšã³ãžãã¢ãããŠãããããã§ãã ä»åã2025幎6æ28æ¥ïŒåïŒã«äº¬éœã®å
æçºæèç·Žå Žã«ãŠéå¬ãããé¢è¥¿RubyäŒè°08ã«Takeã¹ãã³ãµãŒãšããŠåºå±ããŠããŸããã®ã§ããã®æ¯ãè¿ãã¬ããŒããæžããããšæããŸãã é¢è¥¿RubyäŒè°ãªãã§ã¯ãªã®ãã¹ãã³ãµãŒã°ã«ãŒããMatzãTakeãUmeãªã®ã¯é¢çœãã§ãããïŒæå"ãã€ã¯"ã¹ãã³ãµãŒãšèªãã§ããïŒ ã«ã³ãã¡ã¬ã³ã¹äŒå Žã®å
æçºæèç·Žå Žã è»å
ã«äžŠã¶åã¹ãã³ãµãŒããŒã¹ã®ã®ãŒãæã壮芳ã çæžãã¿ããã®ãã©ã³ãã§å人çã«ã¯å¥œã¿ã§ãã ã»ãã·ã§ã³éå Ž éå Žè¿ãã®éŽšå·ããã®æ¥ã¯æé«æ°æž©ã34床ãŸã§äžãã£ãå¿«æŽã§ãããïŸïœ¶ïœ¯ïŸ... äŒæ¥ããŒã¹ ãã®æ¥å±ç€ºããŠããããŒã¹ã®æ§åã§ãã ã¹ã¿ã¡ã³ã®ã¡ã€ã³ãããã¯ãã§ããTUNAGã®æ©èœ TUNAGãããã£ãã ã«ã¡ãªãã æœéžãè¡ããŸããã æ¥å Žè
ã®æ¹ã«ãã®å Žã§æœéžã«ãã£ã¬ã³ãžããŠããããåœãã£ãæ¹ã«Ankerã®å
é»åšããã¬ãŒã³ãããŸããããŸããããŒã¹ã«èšªåããŠããã ããæ¹å
šå¡ã«ãªãªãžãã«ã¹ããã«ãŒãé
åžããŸããã é¢è¥¿RubyäŒè°08 #kanrk08 ïŒ ã¹ã¿ã¡ã³ããŒã¹ãæºåå®äºããŸããïŒ ã¹ããã«ãŒãç¡æã§é
åžããŸãïŒïŒ åŒç€Ÿãããã¯ãã®TUNAGïŒããã°ïŒã®æœéžæ©èœãäœéšã§ããŸãïŒ åœãããšAnkerã®å
é»åšãã²ããã§ããŸãã ãæ°è»œã«ãè¶ããã ããïŒ #TUNAG #kanrk08 pic.twitter.com/HQWRAINvL6 — stmn, inc. Developers (@stmn_eng) 2025幎6æ28æ¥ æ°ã«ãªã£ãã»ãã·ã§ã³ Rubyã䜿ã£ã10幎ã®å人éçºã§ãã£ãŠããããš speakerdeck.com èªåãå°è±¡ã«æ®ã£ããã€ã³ãã¯ä»¥äžã§ãã èªç±ã«ã¯ã©ã¹èšèšãããããŠæ¥œãã å人éçºãªã®ã§èªåãæ¬²ãããã®ãäœãïŒç¡çããªãïŒ æå±ãããã¯ãããŒã ãå°å
¥ããã³ãŒãèŠçŽãæ¢åèšèšã«çžãããããšãªããèªç±ã«èªåã®ããããèšèšãã§ããã®ã¯å人éçºã®ééå³ããªãšã¯æããŸãã ã¯ã©ã¹èšèšã«ã€ããŠããã®æè¯ããã¿ãŒã³ã ãšæã£ãèšèšãå°å
¥ããŠãåŸããèŠããš...ãšããç¹ã«ã¯èªåã®éå»ã®å®è£
ã§ãçãã»ã©æãå
¥ãéšåããããéŠãããããã«ãªããŸãããïŒèªåã®ã¯èšèšãšããããå®è£
ãã€ã±ãŠãªããããã®è»œåŸ®ãªãã®ã§ããïŒ ããã§ããã®æã«ä¿¡ããèšèšãéœåºŠå°å
¥ããŠæ¯ãè¿ã£ãŠããããšã倧åãªã®ã ãšå人çã«ã¯æããŸããã åãããªãã©ã€ã³åæŠãã ãŸã£ããŒ ã®ææ³ Witchcraft for Memory speakerdeck.com memory_profiler gemã§ã¯ããŒã¯æã®ã¡ã¢ãªäœ¿çšéãèšæž¬ããããšãé£ããã majo ãšããã¡ã¢ãªãããã¡ã€ã©ãå®è£
ãããšããçºè¡šã§ããã ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãçãå»¶ã³ãã寿åœã®é·ããªããžã§ã¯ããèšæž¬ããæ©èœããããšã®ããšã GCåšãã®æåã®è©±ãèããŠãnative extensionãå«ãruby gemã®å®è£
ã®é£æåºŠãç¥ããããšãå°è±¡ã«æ®ããŸããã ãŸããCèšèªåšãã®è©±ãã³ããŒãªã³ã©ã€ã/ããã»ã¹fork/ãœã±ãã/ãã€ããªã©ãåŠçæä»£ã«Linuxã«ãŒãã«ã®ææ¥ãåããŠããæã«ããèããŠããåèªãåºãŠããŠæãããæ°æã¡ã«ãªããŸããã ãããã« ä¹
ã
ã®äº¬éœã®å ªèœãã€ã€ãé¢è¥¿ã®Rubyistãã¡ãšäº€æµãæ·±ããããè¯ãã«ã³ãã¡ã¬ã³ã¹ã§ããã æ¬¡ã®éå¬å Žæã¯æ»è³çã ããã§ããæ¬¡ã®å°å亀æµã楜ãã¿ã§ãã ã¹ã¿ã¡ã³ã§ã¯Rubyãšã³ãžãã¢ãçµ¶è³åéäžã§ãð herp.careers
ããã«ã¡ã¯ïŒãããã¯ãéçºéšã®ããã( @38Punkd )ã§ãã ã¹ã¿ã¡ã³ã¯ãçµç¹æ¹åã¯ã©ãŠããµãŒãã¹ã TUNAG ããæäŸããŠããŸãããã®ã³ã¢æ©èœã§ãããã¿ã€ã ã©ã€ã³ãããã¢ãã€ã«ã¢ããªã§WebViewããSwiftUI / Jetpack Composeã«ãªãã¬ã€ã¹ããŸãããä»åã¯ããã®èæ¯ãšæè¡éžå®ããããŠå®çŸãŸã§ã®éã®ããã玹ä»ããŸãã ãªãã¬ã€ã¹ã®èæ¯ ã¹ã¿ã¡ã³ã®äž»å¹¹ãµãŒãã¹ã§ãããTUNAGãã¯ãã人ãšçµç¹ã«åãããããæäŸããããšãããã·ã§ã³ã«æ²ããã³ãã¥ãã±ãŒã·ã§ã³ã®æŽ»æ§åãæ
å ±å
±æã®ä¿é²ãããžã§ã³æµžéã人æå®çããããŠæ¥åå¹çåãã¡ã€ã³ã«ãã客æ§ã®çµç¹èª²é¡ã解決ãããµãŒãã¹ã§ãã TUNAGã«ã¯Webã¢ããªçãšã¢ãã€ã«ã¢ããªçãããããã¡ãŒã¹ããªãªãŒã¹ã¯Webçãå
è¡ããã¢ãã€ã«ã¢ããªçãããã«è¿œåŸãã圢ã§ãªãªãŒã¹ãããŸãããåœæã®çµç¹ã®ã±ã€ãããªãã£ãWebæè¡ã«å¯ã£ãŠããããšããããã¢ãã€ã«ã¢ããªã¯ããããã ã¬ã¯ãã€ãã£ã ã®åœ¢åŒã§éçºãé²ããŠããŸããã ããããTUNAGããå©çšããã ããŠãŒã¶ãŒå±€ã倿§åããã«ã€ããŠãã¢ããªã®ããã©ãŒãã³ã¹æ¹åãæ±ããå£°ãæ¬¡ç¬¬ã«å¢ããŠããŸãããäŸãã°ãå°äžè¡ã®ã¬ã¹ãã©ã³ãå·¥å Žã§åãããæ¹ããããã¯ç€Ÿçšç«¯æ«ãäžåŸã§é
åžãããæäœéã®ã¹ããã¯ãšåŒ±ãéä¿¡ç°å¢ã§TUNAGããå©çšãããŠããã客æ§ãå°ãªããããŸããã ç§ãã¡ã¯ããããã£ãæ¹ã
ã®ãŠãŒã¶ãŒäœéšã®èª²é¡ã解決ãããããã¢ãã€ã«ã¢ããªã®ããã©ãŒãã³ã¹æ¹åãçå£ã«æ€èšããæè¡éžå®ã®èŠçŽããè¡ãããšã«ãªããŸããã æè¡éžå®ã®èŠçŽã ã¢ãã€ã«ã¢ããªéçºã«ãããæ§ã
ãªã¢ãããŒãæ¹æ³ã®ãäžè¬çãªã¡ãªããã»ãã¡ãªãããæŽçããŸããã éçºã¢ãããŒã ã¡ãªãã ãã¡ãªãã 1. SwiftUI / Jetpack Compose é«ãããã©ãŒãã³ã¹ãšUX: OSã®UIã³ã³ããŒãã³ãã䜿çšãããããé«éã§ã¹ã ãŒãºãªåäœãåãã©ãããã©ãŒã ã®ã¬ã€ãã©ã€ã³ã«æºæ ããUI/UXãæäŸå¯ã ãã«æ©èœãžã®ã¢ã¯ã»ã¹: ã«ã¡ã©ãGPSç端æ«ã®å
šãŠã®æ©èœã«çŽæ¥ã¢ã¯ã»ã¹ã§ããOSã®ææ°æ©èœãAPIã«ãã¡æ©ã察å¿å¯ã éçºã³ã¹ã: iOS, Androidããããå¥ã®éçºãå¿
èŠã«ãªãã 2. Flutter / React Native éçºã³ã¹ãåæž: äžã€ã®ã³ãŒãããŒã¹ã§iOS, Androidã®äž¡æ¹ã«å¯Ÿå¿å¯ã ãã€ãã£ãã«è¿ãããã©ãŒãã³ã¹ãšUI: Flutterã¯ç¬èªã®ã¬ã³ããªã³ã°ãšã³ãžã³ãæã¡ãReact Nativeã¯OSã®UIã³ã³ããŒãã³ãã«ããªããžãããããSwift / Kotlinã«è¿ãããã©ãŒãã³ã¹ãšUIã OSæ©èœãžã®ã¢ã¯ã»ã¹å¶éãã©ã€ãã©ãªäŸå: äžéšã®OSæ©èœã«ã¯å¥éããªããžå®è£
ããµãŒãããŒãã£è£œã©ã€ãã©ãªãžã®äŸåãå¿
èŠãšãªãå Žåãããã 3. KMP / CMP (KMP/CMP)ããžãã¹ããžãã¯ã®å
±æã«ããå¹çå: å
±éã®ããžãã¹ããžãã¯ãKotlinã§èšè¿°ããiOS, Androidã§å
±æå¯ã OSã®UIã®æŽ»çšãšæè»æ§: UIã¯åOSã®UIã§å®è£
ãããããã¬ã€ãã©ã€ã³ã«æºæ ããUIãšããã©ãŒãã³ã¹ã (KMP)ãã¬ãŒã³ããŒã·ã§ã³å±€ã®éçºãäºéã«ãªãå¯èœæ§: UIå±€ã¯iOS, Androidã§ããããéçºããå¿
èŠããããããæ¥ç¶éšåã®å·¥æ°ã¯åæžãããªãã (CMP)æç床ãšã³ãã¥ããã£ã®èŠæš¡: æ¯èŒçæ°ããæè¡ãªãããå©çšå¯èœãªã©ã€ãã©ãªãããŒã«ãçºå±éäžãªããšãã 4. WebView éçºã³ã¹ãåæž: æ¢åã®Webã³ã³ãã³ããæµçšã§ããWebéçºã®ç¥èãçšããŠéçºå¯ã è¿
éãªãããã€: App StoreãGoogle Playã®å¯©æ»ãéããã«ã³ã³ãã³ãæŽæ°å¯ã ããã©ãŒãã³ã¹ã®éç: Webã³ã³ãã³ããWebViewå
ã§è¡šç€ºãããããè€éãªUIãã¢ãã¡ãŒã·ã§ã³ã§ããã€ããã«ã¯ã€ããçºçããããã OSæ©èœãžã®å¶éãšUXã®äœäž: ã¢ã¯ã»ã¹ãå¶éãããããããªããžãå¿
èŠãªå ŽåãããŸããã¹ãã¢ã®å¯©æ»åºæºã§åãªãWebãµã€ãã®è¡šç€ºã§ã¯åŽäžã®å¯èœæ§ãã ç§ãã¡ã®å Žåã 瀟å
ã«Swift / Kotlinã®çµéšè
ã¯ããããè€æ°ååšç±ããŠããããFlutterãReact Nativeã®çµéšè
ã¯äžåšã ã£ãããš ã¯ã©ã€ã¢ã³ãåŽã«ãããŸã§è€éãªããžãã¯ãå€ããªãããš ããã©ãŒãã³ã¹èª²é¡ã倧ãããããUIã®äœã蟌ã¿ãããããæè¡ãå¿
èŠãªããš ãšããçç±ãããã³ã¢æ©èœã§ãããã¿ã€ã ã©ã€ã³ãããWebViewããSwiftUI / Jetpack Componseãžãªãã¬ã€ã¹ããããšã«èžã¿åããŸããã ãŽãŒã«ãšããã®çå®èæ¯ å®ã¯ããããŸã§ãã³ã¢æ©èœã§ãããã¿ã€ã ã©ã€ã³ãããã€ãã£ãåããããšãã詊ã¿ã¯ã瀟å
ã§äœåºŠã話é¡ã«äžãã£ãŠããŸããã ããããåªå
床ã®é«ãæ°æ©èœéçºããã¢ãã€ã«ãšã³ãžãã¢ã®ãªãœãŒã¹äžè¶³ã®åé¡ã§ãæ®å¿µãªããä¿çã«ãªã£ãŠããçµç·¯ããããŸããä»®ã«ãã€ãã£ãåã«åãã£ã¬ã³ãžãããšããŠããäžéå端ã«ã¿ã€ã ã©ã€ã³ã®WebViewã®äžéšã³ã³ããŒãã³ãã ãããã€ãã£ãåããŠããŠã¯ãããã£ãŠæè¡è² åµã«ã€ãªãããããŸããã ããã§ç§ãã¡ã¯ã ç»é¢åäœã§ãã¡æ©ãå·æ°ããªãªãŒã¹ããããš ãä»åã®ãããžã§ã¯ãã®ãŽãŒã«ãšããŸããã ãŽãŒã«éæã«åããæŠç¥ ãã®å€§ããªç®æšãéæããããã«ãç§ãã¡ã¯2ã€ã®æŠç¥ãç«ãŠãŸããã 1. 瀟å
ããã®å
±æãåŸã ã¿ã€ã ã©ã€ã³ã¯ã20çš®é¡ä»¥äžã®é
ç®ã®çµã¿åãããããªãæçš¿ã®äžèЧã䞊ã¶ãéåžžã«è€éãªä»æ§ã§ãã ãã®ããããšã³ãžãã¢ãµã€ãã®QAã ãã§ã¯ãäžå
·åãçºèŠããããªããšæžå¿µããŠããŸããããªã®ã§ãããå€ãã®äººã«è§Šã£ãŠããã瀟å
ãªãªãŒã¹ã§ã®äžå
·åã®æ©æçºèŠãéèŠãšèããŸããã ãšã³ãžãã¢ãé·æéãæè¡å·æ°ã«æéãå²ãããšã®æå³ã¯ããšã³ãžãã¢å士ãªãçè§£ãããããããããŸããããããããšã³ãžãã¢ã§ã¯ãªã瀟å¡ããã¯äžã
æ³åãã€ãã«ããæ³åãã«ãããã®ã«å¯ŸããŠã¯èå³ãé¢å¿ãæã£ãŠãããã«ãããšèããããããããã€ãã£ãåãšã¯äœãããããŠç¹ã«ãããã€ãã£ãåãããäœãå¬ããã®ããã®2ç¹ã«çµã£ãŠãå
šç€Ÿãžã®å
±æã培åºããŸãããããããŠãããžã§ã¯ããžã®çè§£ãšååãåŸãããšã«åªããŸããã å®éã«ãããžã§ã¯ãéå§åãããå€ãã®ç€Ÿå¡ããã瀟å
ãªãªãŒã¹ãããã¢ããªã«å¯ŸããŠããã£ããã§ãªã¢ã¯ã·ã§ã³ãããã£ãããæ°ã¥ããããšãææãããããŠãããããã«ãªããŸããã 瀟å
ãªãªãŒã¹æéäžãäžå
·åã®ä¿®æ£å
容ã瀟å
ã«å ±åããæã®æ§å 2. æ¹å欲ãæãã æè¡å·æ°ãé²ããäžã§ãéçºãµã€ãããæ¹åããã仿§ãUI/UXãæ¬¡ã
ãšåºãŠããå¯èœæ§ãèããŸããã ãããããããå
šãŠãéœåºŠè°è«ããŠããŠã¯ãã¹ã±ãžã¥ãŒã«ãå»¶ã³ãŠããäžæ¹ãªã®ã§ããããããæ¹åããã仿§ãUI/UXããããŒã ã¡ã³ããŒã§ã¹ãã¬ããã·ãŒãã«æŽãåºãããã¶ã€ããŒãšåŸ¹åºçã«çžè«ããŸããã æ¹åããã仿§ãUIUXäžèЧ ããã§æŽãåºãããªãã£ããã®ã«ã€ããŠã¯ãè°è«ãå¿
èŠãšå€æãããå Žåãé€ããåºæ¬çã«æ¢åã®ä»æ§ãUI/UXã«åãããæ¹éã培åºããŸãããéœåºŠåºãŠããè«ç¹ãæ¹åç¹ã«ã€ããŠã¯ãä»åã®ãªãªãŒã¹åŸã®ç¶ç¶æ¹åã®äžç°ãšããŠãæ¹ããŠå¯Ÿå¿ããŠããããšãšããŸããã ããã«ããããããžã§ã¯ãã®ã¹ã³ãŒããæç¢ºã«ããã¹ããŒãã£ã«é²ããããšãã§ãããããžã§ã¯ãéå§ããçŽ8ã¶æã§ãªãªãŒã¹ãå®éã§ããŸããã ææãšä»åŸã®å±æ ããã©ãŒãã³ã¹æ¹åãæ€èšŒãããããSwiftUIçãšWebViewçã®ã¿ã€ã ã©ã€ã³ããããã§ã倧ããªç»åãå«ãå
šãŠã®ã³ã³ãã³ãã衚瀺ããããŸã§ã®éåºŠãæ¯èŒããŸããïŒäžã®å³ïŒçžŠè»žã¯ã³ã³ãã³ãã衚瀺ããããŸã§ã®çžå¯Ÿå€ïŒã ãã®çµæãéä¿¡ç°å¢ã匱ããã°åŒ±ãçšããã®å·®ã¯å€§ãããªãäºãããããŸããã ãããã¯ãŒã¯æ¯ã®é床æ¯èŒ ïŒâ»ïŒãVery Bad Networkã ã¯ãiPhoneã®ãããããçšãããã¯ãŒã¯ãªã³ã¯èª¿ç¯åšã«ããããªã»ããã§ããã3Gããã匱ãéä¿¡ç°å¢ã§ãã ä»åã®æè¡å·æ°ã«ãã£ãŠãTUNAGããå©çšããã ã倿§ãªã客æ§ã®ç°å¢ã«åãããããã©ãŒãã³ã¹æ¹åãå®çŸã§ããŸããã ããããç§ãã¡ã®ããã·ã§ã³ã¯ãããã©ãŒãã³ã¹ãæ¹åããã ãã§ã¯ãããŸãããTUNAGã䜿ã£ãŠãããããšã§ãã人ãšçµç¹ã«åãããããæå€§éãããããããã«ããããšããç§ãã¡ãµãŒãã¹éçºè
ã®æ¬è³ªçãªããã·ã§ã³ã§ãã ãã®ããã«ããä»åã®ã¿ã€ã ã©ã€ã³ã®ããã©ãŒãã³ã¹æ¹åãè¶³ãããã«ãããã«ãããã¯ãæ¹åãé²ããŠãããããšèããŠããŸãã ã¹ã¿ã¡ã³ã§ã¯ãšã³ãžãã¢ãçµ¶è³åéäžã§ãð https://herp.careers/v1/stmn/requisition-groups/8d5d0858-2bda-4167-80f2-2401d8fb1891 herp.careers
ç®ãŸããããå€åããITæ¥çã«ãããŠãäŒæ¥ãç«¶äºåãç¶æãç¶ããããã«ã¯ãåžžã«æ°ããç¥èãåãå
¥ãããäºãã«åŠã³åãæåãäžå¯æ¬ ã§ããããã§ããããã¯ãéšéã§ã¯å
æ¥ããšã³ãžãã¢ã»ãããã¯ããããŒãžã£ãŒïŒPdMïŒã»ãã¶ã€ããŒãäžå ã«äŒãã瀟å
LTäŒãéå¬ããŸããïŒ éå¬ã®çãïŒå
šå¡ã§é«ãåãåŠã³ã®å Žã¥ãã ä»åã®LTäŒã¯ãéšéå
šäœã®ç¥èå
±æãšäº€æµãæ·±ãããããã¯ãéçºã«ããã飿ºã匷åããããšãç®çãšããŠããŸããç°ãªãè·çš®ã®ã¡ã³ããŒãããããã®ç¥èŠãçºè¡šãã質çå¿çãéããŠçžäºçè§£ãæ·±ããããšã§ãå人ã®ã¹ãã«ã¢ããã¯ãã¡ããã®ããšãçµç¹å
šäœã®æé·ã«ç¹ããããšãç®æããŸããã ä»åã®LTäŒã®çºè¡šå
容 ä»åã®LTäŒã§ã¯ãå€å²ã«ãããããŒãã§çºè¡šãè¡ãããŸããã ã¿ã€ãã« ç»å£è
ããŒããŒãïŒ ãã¢ãŠããããããããã ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒ ãããã ããŽã«ãããåŠã¶PdMã®ä»äºè¡ã ãããã¯ããããŒãžã£ãŒ ãããŸã ãã¢ãã€ã«ã¢ããªãã¯ããã®äžæ©ã ã¢ãã€ã«ã¢ããªãšã³ãžã㢠ãšããšã㌠ãAsk Devinã§å€ããéçºã¹ã¿ã€ã«ã ããã³ããšã³ããšã³ãžã㢠森 ãäŒç»ãåãããã¶ã€ããŒã®æèïŒãåºããŠçµããã¢ãããŒããã ãããã¯ããã¶ã€ã㌠ããã ãHotwireãå°å
¥ããŸããïŒã ãã©ãããã©ãŒã éšããã¯ãšã³ããšã³ãžã㢠è¿è€ ã5åã§ã®ããïŒã»ãã¥ãªãã£çªå£ã®èå°è£ã ãããã¯ãéçºéšããã¯ãšã³ããšã³ãžã㢠ãã
ãã ãçæAIã§ã©ã®éšçœ²ã§ãæ¬æ¥ã«éäžã§ããããŒã äœãã Watchyäºæ¥éš ãšã³ãžã㢠ãã㟠éåžžæ¥åãããäžãã¯ãªãªãã£ã®é«ãLTã°ããã§ãéå¶ããŒã ãšããŠã¯æè¬ããŠãããããŸãã...ïŒ ä»åã®LTäŒã§è¡ã£ãåãçµã¿ã®çŽ¹ä» ä»åã®LTäŒã§ã¯ããããŸã§ã®éå¬ã§åŸãåŠã³ã掻ãããããã€ãã®æ°ããåãçµã¿ã«ææŠããŸããã äºåã¢ã³ã±ãŒãã«ããçºè¡šå
å®¹ã®æ±ºå®: éå¬ãŸã§ã®æéãéãããŠãããããä»åã¯äºåã«æ¯ãåããåããŒã ã§äºåã«ãä»ã®ããŒã ã«èãããããšããã¢ã³ã±ãŒãã§åéããŸãããããã«ãããçæéã§ãä»è
ã«äŸ¡å€ãæäŸã§ããGiveãæèããçºè¡šãæãã誰ããèãããã»èå³ã®ããåŠã³ãæäŸã§ããŸããã åããŒã 代衚è
ããã®ç»å£è
éžåº: éå»ã¯ç«åè£åœ¢åŒãå€ãã£ãã®ã§ãããåããŒã ãã1åãã€ç»å£è
ãæ±ºããŠããã圢åŒãæ¡çšããŸãããããã«ããããšã³ãžãã¢ãPdMããã¶ã€ããŒãšãã£ãæ§ã
ãªè·çš®ã®çºè¡šããã©ã³ã¹ããèãããšãã§ããå¹
åºãç¥èŠã«è§Šããæ©äŒãšãªããŸããã ããŒããŒãã»ãã·ã§ã³ã®çšæ: åœåäºå®ããŠããªãã£ãããŒããŒãã»ãã·ã§ã³ã§ããããããã¯ãéšéã®EMïŒãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒïŒãšã®éè«ã®äžã§ãã¢ãŠãããããžã®ç±ãæ³ããèããçºè¡šããé¡ãããŸãããã¢ã³ã±ãŒãçµæã§ã¯ããã®ã»ãã·ã§ã³ãåå è
ã«ãåºãã£ãããšãåãããæãã¬ãšããããããçºèŠããããŸããã ããã·ã¥ã¿ã°ãäœã£ãŠXã«æçš¿ãã: 瀟å
å匷äŒã§ã¯ããã®ã§ãããããã·ã¥ã¿ã°ãäœã£ãŠå
¬éOKãªç¯å²ã«ã€ããŠã¯SNSãžã®æçš¿ãOKã«ããŸãããäœäººããååããã ããŸããïŒå°ãã§ã瀟å€ã®çããã«åœæ¥ã®é°å²æ°ãäŒããã°ããããã§ãïŒã #ã¹ã¿ã¡ã³ãã㯠ããã芧ãã ããïŒ çãäžãã°ããºãšããŠãã³ã©ã€ããšãã¡ãã䜿ã: é²èЧåŽããªãã¹ãåå ã§ãã圢ã«ãããã£ãã®ã§ã質çå¿çã®æéãèšãããææããé¡ããããã¯ãã¡ãããçãäžãã°ããºãšããŠã¿ããªã«ãã³ã©ã€ããå¿æŽãã¡ããæž¡ããŠäŒå ŽãçãäžããŠããããŸããããŸããç»å£è
ã人çã§ãã³ã©ã€ãã§å¿æŽããŠãããæãæ¥ããšã¯æããªãã£ãã§ããã...ãïŒããªã®ããã¿ããªã«æè¬ã§ãïŒïŒ ãªãŒããã³ã°ã®æç¹ã§ã¶ãåããŠãããŠããŸãðª #ã¹ã¿ã¡ã³ãã㯠ã¯ããŸããŸãããŒïŒ pic.twitter.com/Pe2IYVHdD8 — hisayuki (@hisayuki_mori) 2025幎7æ3æ¥ éå¬ããçµæãšä»åŸã®éå¬ éå¬åŸã®ã¢ã³ã±ãŒãã§ã¯ããå°éå€ã®åéãç¥ããæ©äŒã«ãªã£ãŠãšãŠããããããã£ãããç䌌ããŠã¿ãããããã§ããããããšãã£ããã³ãã«ãªã£ãããã©ã®çºè¡šãããã€ã圹ã«ç«ã€ãã§ã¯ãªããä»ãã圹ã«ç«ã€ãã ã£ãã®ãããã£ãããšãã£ããããžãã£ããªææ³ã倿°å¯ããããŸãããããã ãããæèŠãåèã«ãä»åŸãç¶ç¶çã«å匷äŒãäŒç»ããŠããäºå®ã§ãã ä»åã¯éå¶ããŒã 3人ã®ãã¶ã€ããŒãšãšã³ãžãã¢ã®æå¿ã§éå¬ããŠããã®ã§ããã以äžã®ãããªææ³ãããã ããŠéå¶ããŒã ãšããŠãéå¬ããŠããã£ãã§ãã ãçµç¹ã®ã³ãã¥ãã±ãŒã·ã§ã³ã掻çºã«ãç¶ããã®ã«åªåãšè¡åãããŠããæ¹ãããã£ããã£ãŠãè¯ãçµç¹ãæãç«ã€ãšæããŸãããèªåããã®äžå¡ã«ãªãããã«é 匵ãããšæããŸãããã ããã«å¬ããããšã«ãä»åã®LTäŒããã£ããã«éå¶ã¡ã³ããŒä»¥å€ãããããšã³ãžãã¢åãã®å匷äŒã宿çã«éå¬ãããããšãã声ãäžãããçŸåšã¯ãã®å®çŸã«åããŠåãåºããŠããŸãã ç§ãã¡ã¯ããäºããç©æ¥µçã«åŠã³åãããããçºä¿¡ãå
±æããããšã倧åã«ããŠããŸããããããããäŒç€Ÿå
šäœã§æé·ãç¶ãããããããåŠã³ã®æ©äŒãç©æ¥µçã«äœã£ãŠãããããšæã£ãŠããŸãã æåŸã« ã¹ã¿ã¡ã³ã§ã¯ãRubyãšã³ãžãã¢ã«éããå
šæè¡é åã§ããããã¯ããæé·ãããŠãããšã³ãžãã¢ããã¶ã€ããŒããããã¯ããããŒãžã£ãŒã®æ¹ãåéããŠããŸãã ç§ãã¡ã®åŠã³åãæåã«å
±æããäžç·ã«ãããã¯ããåµã£ãŠãããããšæããæ¹ã¯ããã²æ¡çšæ
å ±ãã芧ãã ããïŒ herp.careers herp.careers
ããã«ã¡ã¯ïŒ æ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ ããã©ãããã©ãŒã éšã®ããããã§ãã å
æ¥ã7æ11æ¥ïŒéïŒãã12æ¥ïŒåïŒã«ãããŠæ±äº¬ã®TOCææã§éå¬ãããã SRE NEXT 2025 ãã«ãªãã©ã€ã³ã§åå ããŠããŸããïŒSRE NEXTãžã®åå ã¯ä»åãåããŠã§ããããéåžžã«åŠã³ãå€ããå
å®ãã2æ¥éãéããããšãã§ããŸããã sre-next.dev åå ã¡ã³ããŒéååçïŒããããã¯åçæ®åœ±ä¿ããŠãŸãïŒ ãªãSRE NEXTã«åå ããã®ãïŒ ç§ã¯SREæ¥åãããã·ã§ã³ã®äžã€ãšãããã©ãããã©ãŒã éšã«æå±ããŠããŸããæ¥ã
ã®æ¥åã®äžã§ãSREãšããŠãããããäœã«åãçµãã¹ããïŒããšããåãã«å¯Ÿããå
·äœçãªãã³ããåŸãããšããæåŸ
ãæ±ããŠããŸããã ä»å¹Žã¯ã SREをはじめよう - O'Reilly Japan ããã¯ãããšããSREé¢é£æžç±ãå€ãèªã¿èŸŒãã§ããŸãããã座åŠã§åŸãç¥èãå®éã®æ¥åã§ã©ã®ããã«å®è·µããã°è¯ãã®ããå
·äœçãªã€ã¡ãŒãžãæ¹§ããªããšããæ©ã¿ããããŸããããã®ãããä»ç€ŸäºäŸããåŠã¶ããšãæã广çã ãšèããä»åã®SRE NEXTãžã®åå ãæ±ºããŸããã www.oreilly.co.jp SRE NEXT ãšã¯ïŒ SRE NEXTã«ã€ããŠãåããªãæ¹ã®ããã«ãç°¡åã«ã玹ä»ããŸãã SRE NEXTã¯ã SRE Lounge ã®ã¡ã³ããŒã®æ¹ã
ãäžå¿ãšãªã£ãŠéå¶ã»éå¬ããŠãããä¿¡é Œæ§ã«é¢ãããã©ã¯ãã£ã¹ã«æ·±ãé¢å¿ãæã€ãšã³ãžãã¢ã®ããã®ã«ã³ãã¡ã¬ã³ã¹ã§ãã2020幎ã«åéå¬ãããŠä»¥æ¥ãä»åã§5åç®ã®éå¬ãšãªããŸãã â» SRE : Site Reliability Engineering ã®ç¥ãGoogleãæå±ããã·ã¹ãã 管çãšãµãŒãã¹éçšã®æ¹æ³è«ã§ã ã¹ã¿ã¡ã³ã¯ããŽã¹ãã³ãµãŒãšããŠSRE NEXTãå¿æŽïŒ 第5åç®ãšãªãSRE NEXT 2025ã§ããªããšåŒç€Ÿã¹ã¿ã¡ã³ã¯ããŽã¹ãã³ãµãŒãåããããŠããã ããŸããïŒäŒå Žã®Track Aã»ãã·ã§ã³äŒå Žã®ã¹ã¯ãªãŒã³ã§ã¹ãã³ãµãŒç޹ä»ãæµããŠããã®ã§ãããã芧ããã ããã§ããããïŒ ããŽã¹ãã³ãµãŒç޹ä»ãå³äžãåŒç€Ÿã¹ã¿ã¡ã³ã®ããŽã§ã æ¥å Žè
æ°ããèŠãSRE NEXTã®ç±æ° éäŒåŒã§çºè¡šãããæ
å ±ã«ãããšãä»åã®SRE NEXT 2025ã®æ¥å Žè
ã¯åèš 1,272 人ã§ããããªã³ã©ã€ã³ãšã®ãã€ããªããéå¬ã§ãããããªãã©ã€ã³åå è
ãçŽ1.4åãšå€ãããã®å
èš³ã¯ä»¥äžã®éãã§ãã åèš: 1,272人 å
èš³: ãªã³ã©ã€ã³ 532人 / ãªãã©ã€ã³ 740人 ãªãã©ã€ã³åå è
ãå€ãã£ãã®ã¯ããã¯ãSpeakerãä»ã®åå è
ã®ç±éãçŽæ¥æããããããããŒã¹ãå·¡ãæ¥œãããªã©ããªãã©ã€ã³ãªãã§ã¯ã®é
åããã£ãããã ãšæããŸããã çŸå°ã®é°å²æ°ãåçã§ã玹ä»ïŒ äŒå Žã®æ§åãå°ãã§ãæããŠããã ãããããããã€ãåçãæ²èŒããŸããïŒé¡ãåã蟌ãã§ããç®æã¯ãã¹ãã³ã°ããŠããŸãïŒ SREã«é¢ããã¢ã³ã±ãŒãããŒã äŒå Žããã¢ã®4Fã«ãšã¹ã«ã¬ãŒã¿ãŒã§äžãããšãSREã«é¢ããè峿·±ãã¢ã³ã±ãŒãããŒãããããŸããã ã¢ã³ã±ãŒãããŒãå
šäœ ã¢ã³ã±ãŒãããŒãå·ŠåŽ Q1ãQ5ã®åçããæããããšïŒ Q1ïŒããªãã®SREã¿ã€ãã¯ïŒïŒ: Platform Engineeringã®åçãå€ããçŸåšã®ãã¬ã³ããåæ ããŠããããã«æããŸãããïŒç§ããã©ãããã©ãŒã éšãªã®ã§çŽåŸã§ãïŒïŒ Q2ïŒSLOå°å
¥ã¬ãã«ïŒ: ãŸã SLOã®å°å
¥ãé²ãã§ããªãäŒæ¥ãå€ãããã§ããã Q3ïŒSRE Practice ã©ãã奜ãïŒïŒ: Toilåæžããã¹ãã¢ãŒãã ã¯å€ãã®æ¹ãå®è·µãããŠããããã§ãããã¹ãã¢ãŒãã ã¯éçšãé£ããåŽé¢ãããã®ã§ãä»ç€ŸäºäŸãããã«èããŠã¿ãããšæããŸããã Q4ïŒããªãã®SREã»ãšã³ãžãã¢æŽã¯ïŒïŒ: ã SRE サイトリライアビリティエンジニアリング - O'Reilly Japan ããçºå£²ãããSREã®ååšãåºãèªç¥ãããŠãããšæ¯èŒãããšã10å¹Žæªæºã®SREæŽã®æ¹ãå€ãããšãããããŸãã Q5ïŒäœ¿çšããŠããç£èŠããŒã«ïŒ: Datadog ã¯åŒç€Ÿã§ãå©çšããŠããŸãããããã«äœ¿ãããªããããšæ¹ããŠæããŸããã ã¢ã³ã±ãŒãããŒãå³åŽ Q6ãQ7ã®åçããæããããšïŒ Q6ïŒSREæ¬èªãã§ããïŒïŒ: ã SRE サイトリライアビリティエンジニアリング - O'Reilly Japan ãã®èªè
æ°ãå§åçã§ãããç§ãããªãåã«èªã¿ãŸããããSREã®ãã€ãã«ã§ãããæ¬¡ã«å€ãã 入門 監視 - O'Reilly Japan ãããã²èªç Žãããã§ãã Q7ïŒSREããŒã ã®æ
ã£ãŠãã圹å²ïŒ: SREããªã³ã³ãŒã«æ
åœã®ãæ¯æŽãã«åãããšãå€ããšããç¹ã¯è峿·±ãã£ãã§ããããã¯ãå®éã«éçºããŠããããŒã ãäž»äœãšãªã£ãŠãªã³ã³ãŒã«å¯Ÿå¿ãè¡ããSREããã®ãµããŒãã«åŸ¹ãããšãã圹å²åæ
ã瀺ããŠããã®ãããããŸããã ç±æ°ã«å
ãŸããã»ãã·ã§ã³äŒå Ž éäŒåŒå éäŒåŒãTrack Aã®ã»ãã·ã§ã³ã¯åºã
ãšããäŒå Žã§è¡ãããŸãããäŒå Žãåºããããã¹ã¯ãªãŒã³ã2ã€çšæãããŠãããã©ã®åžãããèŠããã工倫ããããŠããŸããã ïŒæ©ãæéã«çåžãããããåçã§ã¯ãŸã åå 人æ°ã¯å°ãªãã§ãïŒ è³ããããŒã¹äŒå Ž ããŒã¹äŒå Ž ã»ãã·ã§ã³ã®åéã«ã¯ãå瀟ã®ããŒã¹ã䞊ã¶äŒå Žãžã ã¬ãã£ã¬ãã£ãåããããçŸå³ããã³ãŒããŒãããã ããããšããç¥ãæ°åã§æ¥œãããŸãããå€ãã®åå è
ã§è³ãã£ãŠãããæŽ»æ°ã«æºã¡ãŠããŸããã åå è
ã®ç±æ°ãäŒããæèŠªäŒ æèŠªäŒã§ã®ä¹Ÿæ¯ éäŒåŒåŸã«ã¯æèŠªäŒã«åå ããŸããã ãšã«ãã人ãå€ãããªãã©ã€ã³åå è
ã®ã»ãšãã©ãåå ããŠããã®ã§ã¯ãªãã§ããããã Speakerã®æ¹ã
ã¯ç¹ã«äººæ°ã§ã話ãèãããåå è
ã«å²ãŸããŠããã®ãå°è±¡çã§ããã ç¹ã«æ³šç®ããã»ãã·ã§ã³ãšLTïŒSREã«ãããAI掻çšã®æåç· 2æ¥éã§Keynoteãã»ãã·ã§ã³ãLTãåãããŠ20è¿ãèããŸããã å
šäœãéããŠæããã®ã¯ã AIæŽ»çš ãããŒãã«ããã»ãã·ã§ã³ãå€ãã£ãããšã§ãã AIãã¡ã€ã³ããŒããšããŠããªãå Žåã§ããå
容ã«AIãç»å Žããæ©äŒãå€ããã·ã¹ãã éçºã«ãããAIã®æµžéã匷ãæããŸããã ä»åã¯ãAI掻çšã«æ³šç®ããŠç¹ã«å°è±¡ã«æ®ã£ãã»ãã·ã§ã³ãšLTããããã1ã€ãã€ã玹ä»ããŸãã SRE ãžã®ãµããŒãã±ãŒã¹ãAIã«ç®¡çãããæ¹æ³ speakerdeck.com Ubieæ ªåŒäŒç€Ÿ SREã®Gumiããã«ããã»ãã·ã§ã³ã§ãã SREããŒã ã«å¯ããããåãåãã察å¿ã«ããæ¥åè² æ
ããAIãæŽ»çšããŠè»œæžããäºäŸã玹ä»ãããŸããã å
補ã§äœã蟌ãŸããAI BotãWebã¢ããªã±ãŒã·ã§ã³ã¯ãç°¡åã«ç䌌ã§ããã¬ãã«ã§ã¯ãªããšæããŸããããããããªãã®ãäœã£ãŠã¿ããïŒããã©ããã£ãŠåããŠããã®ããã£ãšç¥ãããïŒããšåŒ·ãæããŸããã ç¹ã«è峿·±ãã£ãã®ã¯ã ãAIããªã³ããŒãã£ã³ã°ãå¿
èŠã ãšããç¹ã§ãã æ°ãããšã³ãžãã¢ãå
¥ç€Ÿããéãšåæ§ã«ãAIãç«ã¡äžããããã«ã¯ãä»åã®ã±ãŒã¹ã§ã¯ããã¥ã¡ã³ãæŽåãšãã£ãæºåãå¿
èŠãªãã§ããã MCPãµãŒãã§å§ããã¢ã©ãŒãæŽçã®å®éšçåãçµã¿ speakerdeck.com æ ªåŒäŒç€Ÿã¢ãã¯ã« SREã®Erika Takadaããã«ããLTã§ãã ãã¡ããAI掻çšã®äºäŸã§ããã ãå°ãããšããããå§ããããAI掻çšã ãšããç¹ãéåžžã«åèã«ãªããŸããã ã¢ã©ãŒãéç¥ã®ããªã¢ãŒãžã¯çµéšå€ã«å€§ããå·Šå³ããããªã³ã³ãŒã«ã«å ãã£ãã°ããã®ã¡ã³ããŒã«ãšã£ãŠã¯äžå®ã倧ããæ¥åã§ãã ãã®LTã§ã¯ãMCPãµãŒããæŽ»çšããŠèª¿æ»ã®ãã³ããšãªãæ
å ±ãåŸããããã工倫ãããŠããŸããã ããã«ãããã¢ã©ãŒã察å¿ã®ç²Ÿç¥çãªè² æ
ã倧å¹
ã«è»œæžãããã ãããšæããŸããã ãããã« SRE NEXT 2025ã«åå ããSREã®æåç·ãšAI掻çšã®å¯èœæ§ãèã§æããããšãã§ããŸãããä»åã®åŠã³ãæ¥ã
ã®æ¥åã«æŽ»ãããã¹ã¿ã¡ã³ã®ãã©ãããã©ãŒã ããã匷åºãªãã®ã«ããŠãããããšæããŸãã æ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ã§ã¯ããããã¯ãéçºã«é¢ããå
šãŠã®é åã§ããããã¯ãè·çš®ã®æ¡çšãç©æ¥µçã«è¡ã£ãŠããŸãã ä»åã¬ããŒãããSite Reliability Engineer (SRE)ã®é åã«ãèå³ããæã¡ããã ãããªãããã²ãã©ãããã©ãŒã éšã«ãå¿åãã ããïŒ çãããšã話ã§ããããšã楜ãã¿ã«ããŠããŸãã herp.careers herp.careers herp.careers
ã¯ããã« ããã«ã¡ã¯ããããã¯ãéçºéšã® åéç° ã§ãã å
æ¥ããµãŒãã¹ã®ããã©ãŒãã³ã¹åäžã®ãããECSã§çšŒåããŠããSidekiqã³ã³ããã®vCPUãã¹ã±ãŒã«ã¢ããããŸãããå¢ãããCPUãªãœãŒã¹ãæå€§éã«æŽ»çšãã¹ããSidekiqã®concurrencyãåŒãäžããã®ã§ãããCPU䜿çšçãæåŸ
éãã«äžãããããªãŒãã¹ã±ãŒã«ãæ©èœããªããšããäºæ
ã«é¥ããŸããã ãã®åºæ¥äºããã£ããã«ãCPUãããã»ã¹ãã¹ã¬ãã(concurrency)ããããŠRubyã®GVLïŒGlobal VM LockïŒã«ã€ããŠèªåã®çè§£ãäžååã ãšæ°ã¥ããŸããã®ã§ããããã«ã€ããŠèª¿æ»ã»æ€èšŒãè¡ããŸããã ãã£ããïŒäºæãã¬CPU䜿çšçã®äœäž ç§ãã¡ã®ãµãŒãã¹ã§ã¯ãããã¯ã°ã©ãŠã³ããžã§ãã®å®è¡ã«Sidekiqãå©çšããŠããŸããCPU䜿çšçã«åºã¥ãããªãŒãã¹ã±ãŒã«ãèšå®ããŠããã1vCPU 8GBã®ç°å¢ã§åŠçããŠããŸããã ããæè¿ã¡ããªã¯ã¹ã確èªãããšã¡ã¢ãªäœ¿çšçãé »ç¹ã«100%è¿ãã«éããããšããã£ããããå®å®æ§åäžã»ããã©ãŒãã³ã¹åäžãç®æããã³ã³ããã®ã¹ããã¯ã1vCPUâ2vCPUã8GB â 16GBã«ã¹ã±ãŒã«ã¢ããããŸããã ãåœåã®æåŸ
ã vCPUã2åã«ãªã£ãã®ã§ãSidekiqã®concurrencyïŒåæã«åŠçããã¹ã¬ããæ°ïŒãçŽ2åã«åŒãäžããã ããã«ãããCPU䜿çšçã¯ä»¥åãšåæ°Žæºãç¶æãã€ã€ãåŠçã¹ã«ãŒãããã2åã«ãªãã¯ãã ã£ãã ãå®éã®çµæã concurrencyãå¢ãããã«ãããããããCPU䜿çšçãã¹ã±ãŒã«ã¢ããåã®ååçšåºŠã«äœäžããŠããŸã£ãã ãã®çµæããªãŒãã¹ã±ãŒãªã³ã°ã®éŸå€ã«ãéããªãç¶æ
ã«ãªã£ãŠããŸã£ãã 1vCPUã®æç¹ã§ã¯CPUãªãœãŒã¹ã䜿ãåãã»ã©ãžã§ããæããŠããã®ã§ããã2vCPUã«ãããšããå¢ãããåã®CPUãéãã§ããŸããŸããã åå ã¯åçŽã§å®è¡è
ã§ããRubyããã»ã¹ã1ã€ã®ãŸãŸã ã£ãç¹ã«ãããŸããã æ¢ã«ãåç¥ã®æ¹ãå€ããããããŸããããRubyã«ã¯ GVL ãšããã1ã€ã®Rubyããã»ã¹å
ã§ãåæã«è€æ°ã®ã¹ã¬ãããRubyã®ã³ãŒãã䞊åã§å®è¡ããããšãé²ããä»çµã¿ããããŸãã ã€ãŸããè€æ°ã®ã¹ã¬ãããååšããŠããŠããå®éã«CPUã䜿ã£ãŠRubyã®ã³ãŒããå®è¡ã§ããã®ã¯ãåžžã«ãã£ã1ã€ã®ã¹ã¬ããã ãã§ãã åè: class Thread (Ruby 3.4 ãªãã¡ã¬ã³ã¹ããã¥ã¢ã«) ãã®ããè¯ãããšæã£ãŠã¹ã±ãŒã«ã¢ãããããã®ã®ãçµæçã«ã¯æä»ããã®ã空ãCPUãã1ã€äœã£ãŠããŸã£ãã ãã§ããã concurrencyã§æå®ããåãåæã«åŠçãããŠãããšåéããããŠãããå®éã«ã¯ããçãæéã§ã¹ã¬ãããåãæ¿ããªããåŠçãé²ããŠãããèŠããäžã®äžŠååŠçïŒäžŠè¡åŠçïŒãã§ããããšãçè§£ããŸããã ã¹ã¬ããã®åãæ¿ãã¯ä»¥äžã®æ¡ä»¶ã§è¡ãããŸãã ã¹ã¬ãããCPUããŠã³ã(åŠçé床ãCPUã®èšç®æ§èœã«ãã£ãŠå¶éãããŠããç¶æ
)ã®åŠçãå®äºããã ã¹ã¬ãããI/Oæäœãå®è¡ããïŒãã®å Žåèªåçã«GVLãè§£æŸããïŒ GVLä¿ææéãè¶
ãã(ããã©ã«ã100msïŒ åèïŒ ã¹ã¬ããã®åãæ¿ã I/OåŸ
ã¡ãçºçããåŠçïŒäŸïŒããŒã¿ããŒã¹ãžã®ã¯ãšãªãå€éšAPIåŒã³åºãããã¡ã€ã«ã®èªã¿æžããªã©ïŒãè¡ã£ãŠããéã¯ãGVLãè§£æŸããä»çµã¿ã«ãªã£ãŠããŸãã ããã¹ã¬ãããI/OåŸ
ã¡ã§ãããã¯ããããšããã®ã¹ã¬ããã¯GVLãè§£æŸããåŸ
æ©ããŠããå¥ã®ã¹ã¬ãããå®è¡æš©ãåŸãŠåŠçãéå§ã§ããŸããããã«ãããI/OããŠã³ã(åŠçé床ãInput/Outputã®é床ã«ãã£ãŠå¶éãããŠããç¶æ
)ãªåŠçãäžå¿ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã«ãã¹ã¬ããã«ããã¹ã«ãŒãããã®åäžãæåŸ
ã§ããŸãã ã³ã³ã«ã¬ã³ã·ãŒãšãã©ã¬ãªãºã ããŸãGVLãè¡ã£ãŠããããšãã¹ãŒããŒããŒã±ããã®ã¬ãžã«äŸãã解説ãããããããã£ãã§ãâ techracho.bpsinc.jp æ€èšŒïŒGVLã®åã çè«ã¯ããã£ãã®ã§ãããå®éã«GVLãã©ã®ããã«åäœããŠããã®ãã確ããããããCPUã«è² è·ããããCPUããŠã³ããªã¯ãŒã«ãŒãçšæããŠæ€èšŒãè¡ããŸããã å®è¡ç°å¢ïŒRuby 3.4.3 æ€èšŒçšã¯ãŒã«ãŒ(Geminiã«ãé¡ãããŸãã) class BenchmarkWorker include Sidekiq :: Job def perform (worker_id, iterations = 50_000_000_0 ) puts " [éå§] Worker #{ worker_id }" start_time = Time .now result = 1 counter = 0 while counter < iterations counter += 1 result = (result + counter + worker_id) % 1000000 # 1000äžåããšã«é²æãåºå if counter % 10_000_000 == 0 progress = (counter.to_f / iterations * 100 ).round( 1 ) puts " [ #{ Time .now.strftime( ' %H:%M:%S.%3N ' ) } ] Worker #{ worker_id } : #{ progress } % " end end duration = Time .now - start_time puts " [å®äº] Worker #{ worker_id } : #{ duration.round( 3 ) } ç§ " return duration end end åç¬ã§ã¯ãŒã«ãŒãåããããã°ã¯ä»¥äžã§ãã åŠçå®äºãŸã§ çŽ25ç§ ããããŸããã ãŸãputsã® ééã¯çŽ0.5ç§ ã»ã©ã§ããã INFO 2025-06-17T00:30:58.839Z pid=1 tid=cqx jid=bde01311593723bcb73d5bbc class=BenchmarkWorker: start [éå§] Worker1 [09:31:01.059] Worker1: 2.0% (10000000/500000000) result=1 [09:31:01.552] Worker1: 4.0% (20000000/500000000) result=1 [09:31:02.089] Worker1: 6.0% (30000000/500000000) result=1 [09:31:02.606] Worker1: 8.0% (40000000/500000000) result=1 ... [09:31:24.922] Worker1: 98.0% (490000000/500000000) result=1 [09:31:25.393] Worker1: 100.0% (500000000/500000000) result=1 [å®äº] Worker1: 24.825ç§ INFO 2025-06-17T00:31:25.401Z pid=1 tid=cqx jid=bde01311593723bcb73d5bbc class=BenchmarkWorker elapsed=26.562: done 仮説 çã®äžŠååŠçã®å Žå: 1ã€ã®ã¯ãŒã«ãŒãå®è¡ããæéãšã2ã€ã®ã¯ãŒã«ãŒãåæã«å®è¡ããæéã¯ãã»ãŒåãã«ãªãã¯ãã GVLãå¹ããŠããå Žå: 2ã€ã®ã¯ãŒã«ãŒãåæã«å®è¡ãããšã1ã€ã®ã¯ãŒã«ãŒãå®è¡ããæéã®çŽ2åã®æéããããã¯ãã concurrencyã2以äžã®ãã¥ãŒã«å¯ŸããŠïŒã€åæã«ãšã³ãã¥ãŒãããã°ã以äžã§ãã INFO 2025-06-17T00:31:32.045Z pid=1 tid=crd jid=89ef0d0e04252a9dd9dd6e12 class=BenchmarkWorker: start INFO 2025-06-17T00:31:32.045Z pid=1 tid=cpl jid=97b2acb34b6ff2c8dcf5a4fd class=BenchmarkWorker: start [éå§] Worker1 [09:31:32.540] Worker1: 2.0% (10000000/500000000) result=1 [éå§] Worker2 [09:31:33.200] Worker1: 4.0% (20000000/500000000) result=1 [09:31:33.932] Worker2: 2.0% (10000000/500000000) result=1 [09:31:34.103] Worker1: 6.0% (30000000/500000000) result=1 [09:31:34.980] Worker2: 4.0% (20000000/500000000) result=1 [09:31:35.104] Worker1: 8.0% (40000000/500000000) result=1 [09:31:35.929] Worker2: 6.0% (30000000/500000000) result=1 ... [09:32:19.217] Worker1: 96.0% (480000000/500000000) result=1 [09:32:19.251] Worker2: 92.0% (460000000/500000000) result=1 [09:32:20.123] Worker1: 98.0% (490000000/500000000) result=1 [09:32:20.258] Worker2: 94.0% (470000000/500000000) result=1 [09:32:21.086] Worker1: 100.0% (500000000/500000000) result=1 [å®äº] Worker1: 49.083ç§ INFO 2025-06-17T00:32:21.159Z pid=1 tid=crd jid=89ef0d0e04252a9dd9dd6e12 class=BenchmarkWorker elapsed=49.114: done (Worker2ã®å®äºãã°ã¯å²æããŸãããã»ãŒåæã«å®äºããŠããŸã) ãã°ãèŠããšãWorker1ãšWorker2ã®é²æã亀äºã«åºåãããŠããããšãããããŸãã ãããŠãå®äºãŸã§ã«ããã£ãæé㯠çŽ49ç§ ãš åç¬å®è¡ã®ã»ãŒ2å ã«ãªããŸããã Worker1ãšWorker2ããããã®putsã®ééãïŒåè¿ãã®å€ ã«ãªã£ãŠããŸãã 2ã€ã®ã¹ã¬ãããåæã«ããããå®è¡ãããŠããã®ã§ã¯ãªããGVLã«ãã£ãŠäº€äºã«å®è¡ãããŠããïŒã³ã³ããã¹ãã¹ã€ãããç¹°ãè¿ããŠããïŒããšãããããŸããã ç¶ããŠconcurrency: 1ã®Sidekiqãã¥ãŒã«å¯ŸããŠãïŒã€åæã«ãšã³ãã¥ãŒããå Žåã®æåã«ã€ããŠãæ€èšŒããŸããã INFO 2025-06-17T00:51:47.438Z pid=1 tid=cs9 jid=6f918c7413e8b90a82687d50 class=BenchmarkWorker: start [éå§] Worker1 [09:51:49.372] Worker1: 2.0% (10000000/500000000) result=1 [09:51:49.867] Worker1: 4.0% (20000000/500000000) result=1 ... [09:52:14.165] Worker1: 100.0% (500000000/500000000) result=1 [å®äº] Worker1: 25.375ç§ INFO 2025-06-17T00:52:14.174Z pid=1 tid=cs9 jid=6f918c7413e8b90a82687d50 class=BenchmarkWorker elapsed=26.737: done INFO 2025-06-17T00:52:14.176Z pid=1 tid=cs9 jid=f29879723f0eb233ea8f5c10 class=BenchmarkWorker: start [éå§] Worker2 [09:52:14.663] Worker2: 2.0% (10000000/500000000) result=1 [09:52:15.146] Worker2: 4.0% (20000000/500000000) result=1 ... [09:52:38.078] Worker2: 98.0% (490000000/500000000) result=1 [09:52:38.556] Worker2: 100.0% (500000000/500000000) result=1 [å®äº] Worker2: 24.376ç§ INFO 2025-06-17T00:52:38.556Z pid=1 tid=cs9 jid=f29879723f0eb233ea8f5c10 class=BenchmarkWorker elapsed=24.381: done ãã°ãããWorker1ãå®å
šã«çµäºããåŸã«Worker2ãéå§ãããŠããããšãããããŸãã concurrencyã®èšå®ãæ£ããæ©èœãããžã§ããäžã€ãã€åŠçãããŠããããšã確èªã§ããŸããã ãŸãšã ä»åã®çµéšããRubyã«ããéçºã«ãããŠã以äžã®ãããªåŠã³ãåŸãããšãã§ããŸããã GVLïŒGlobal VM LockïŒã¯åäžã®Rubyããã»ã¹å
ã§ã¯ãåæã«1ã€ã®ã¹ã¬ããã ããCPUããŠã³ãã®ã³ãŒããå®è¡ã§ããããã«ãã Rubyã®ãã«ãã¹ã¬ããã¯èŠããã®äžŠååã§ãããæ¬åœã«äžŠåã§åŠçãé²ãã§ããããã§ã¯ãªã I/OããŠã³ããªåŠçãå€ãå ŽåãI/OåŸ
ã¡ã®éã«GVLãè§£æŸããããããã¹ã¬ããïŒconcurrencyïŒãå¢ããããšã§ã¹ã«ãŒãããã®åäžãæåŸ
ã§ãã CPUããŠã³ããªåŠçãã¹ã±ãŒã«ããããå Žåãã¹ã¬ããïŒconcurrencyïŒã§ã¯ãªãããã»ã¹ãå¢ããå¿
èŠããã Sidekiqã®concurrencyã®èšå®å€ããã 倧ããããã ãã§ã¯æ¹åã«ç¹ãããªãå¯èœæ§ããã Sidekiqã®ã¹ã±ãŒã«ã¢ããã§concurrencyãå¢ãããéãããã»ã¹æ°èªäœã¯å€ãã£ãŠããªãããçµæCPUãæå¹æŽ»çšã§ããªãããšã«æ°ã¥ããŸããããã®çµéšããããã»ã¹ãconcurrencyããããŠRubyã®GVLã«ã€ããŠçè§£ãæ·±ãããã£ãããšãªããŸããã åŸãåŠã³ãçãããå¹ççã§ããã©ãŒãã³ã¹ã®é«ãèšå®ã远æ±ããŠãããããšæã£ãŠããŸãã æåŸã« ã¹ã¿ã¡ã³ã§ã¯ãRubyãšã³ãžãã¢ã«éããå
šæè¡é åã§ããããã¯ããæé·ãããŠãããšã³ãžãã¢ããã¶ã€ããŒããããã¯ããããŒãžã£ãŒã®æ¹ãåéããŠããŸãã herp.careers
ã¯ããã« ããã«ã¡ã¯ïŒã¹ã¿ã¡ã³ã§ãšã³ãžãã¢ãããŠãã hisa ã§ãã 2025幎5æ23æ¥ã»24æ¥ã«æ±äº¬ã»ãã«ãµãŒã«ç¥ç°ã§éå¬ããã TSKaigi 2025 ã«ãäž¡æ¥çŸå°åå ããŠããŸããïŒ ä»åã¯ãã€ãã³ãã®é°å²æ°ãã»ãã·ã§ã³ã§ã®åŠã³ãåå è
ãšã®äº€æµãªã©ãäžå¿ã«æ¯ãè¿ã£ãŠãããããšæããŸãã ã¡ãªã¿ã«ã¹ã¿ã¡ã³ã¯ä»åã®TSKaigiã« Goldã¹ãã³ãµãŒ ãšããŠåè³ããåœæ¥ã¯ããŒã¹åºå±ãè¡ããŸããïŒ ã¹ã¿ã¡ã³ã§ã¯äž»åäºæ¥ã®TUNAGãã°ã«ãŒãäºæ¥ã®Watchyã§å¹
åºãTypeScriptãæŽ»çšããŠããŸãã ããã³ããšã³ãã®ã¿ãªãããããã¯ãšã³ããReactNativeã§ã®ã¢ãã€ã«ã¢ããªéçºãªã©å¹
åºãæè¡é åã§TypeScriptã«ãããããã¯ãéçºãè¡ãªã£ãŠããŸãã ããããéçºãéããŠãç§ãã¡ãTypeScriptã³ãã¥ããã£ã®å€ãã®ç¥èŠã«æ¯ããããŠããŸããããããããäžç·ã«ã³ãã¥ããã£ãçãäžããŠãããããšæãããTSKaigi 2025ãã«åè³ãããŠããã ããŸããïŒ ãã¹ãã³ãµãŒããŒã¹ç޹ä»ã @stmn_eng ããã®ããŒã¹ã§ã #TSKaigi #TSKaigi2025 pic.twitter.com/7kgCYAH7Qn — TSKaigi (@tskaigi) 2025幎5æ24æ¥ äŒå Žã®é°å²æ°ãšçãäžãã äŒå Žãšãªã£ããã«ãµãŒã«ç¥ç°ã«ã¯ãå
šåœããTypeScript奜ããªãšã³ãžãã¢ãéãŸããæããããªãã®çãäžããã äŒæ¥ã¹ãã³ãµãŒã¯ãªããš 61瀟 ã«ãåã³ãã»ãã·ã§ã³äŒå ŽãããŒã¹ãšãªã¢ã人ã§ããµããŠããŠãTypeScriptã³ãã¥ããã£ã®ç±éãèã§æããããšãã§ããŸããã ã»ãã·ã§ã³ã®äººæ°å
·åã¯ãããŸãããç«ã¡èŠãéè·¯ã§èãæ¹ãå€ãããTypeScriptã£ãŠãããªã«äººãéããããŒãã«ãªã£ãŠãã®ãâŠïŒããšæ¹ããŠå®æããŸããã æãšã¬ã€ãã³ããéå¬ããŸãã ä»åã¹ã¿ã¡ã³ãšããŠåããŠãèªç€Ÿäž»å¬ã®ãµã€ãã€ãã³ãã æYOGA ããTSKaigi Day1ã®æã«éå¬ããŸããïŒ äŒå Žã¯åŒç€Ÿæ±äº¬ãªãã£ã¹ã«ãŠããšã¬ã€ã³ã¹ãã©ã¯ã¿ãŒã®æ¹ããæãããã«ã³ãã¡ã¬ã³ã¹åã«äœãšæ°æã¡ãæŽããæéãæäŸããŸããã ããšã¬æªçµéšã§ãOKããäŒè©±ã ãã®åå ãOKããšããããããããªã¹ã¿ã€ã«ã ã£ãããšããããæããåããã§æž©ããé°å²æ°ã®ã€ãã³ãã«ãªããŸããïŒ æ¹ããŠãåå ãã ããçæ§ãããããšãããããŸããïŒ ã¹ãã³ãµãŒäŒæ¥ããŒã¹å·¡ã äŒå Ž2ããã¢ã«åºããã¹ãã³ãµãŒãšãªã¢ã«ã¯ã 19瀟 ã®ããŒã¹ããããã å瀟ãããã工倫ãåãããäŒç»ã䞊ã³ãTypeScriptã®åã¯ã€ãºãããã«ãã£é
åžãã¹ããã«ãŒäº€æã軜é£ã³ãŒããŒãŸã§ãçµå§ãããããšããé°å²æ°ã§ããã ã¹ã¿ã¡ã³ã®ããŒã¹ã§ã¯ã瀟å
ãããã¯ããTUNAGïŒããã°ïŒãã® æœéžæ©èœ ã䜿ã£ãäœéšäŒç»ã宿œïŒ æ¥å Žè
ã®æ¹ã«ãã®å Žã§æœéžã«ãã£ã¬ã³ãžããŠããããåœãã£ãæ¹ã«ã¯Anker補ã®ã°ããºããã¬ãŒã³ãð ãŸããåå è
å
šå¡ã«ãªãªãžãã«ã¹ããã«ãŒããæž¡ãããŸããïŒ ããã«ä»åã¯ãTypeScriptã®ç¥èã詊ãããåã¯ã€ãºãããããã®ã³ãŒãã©ãã¬ãã¥ãŒããïŒããšããã¬ãã¥ãŒåãåãå±ç€ºã³ã³ãã³ãããçšæããŸããã ãèããã®ã楜ããã£ãããååãšäžç·ã«çãäžãããïŒããšãã£ã声ãå€ãããã ããããŒã¹æ
åœãšããŠãšãŠãå¬ããæéã§ããã æ¹ããŠãããŒã¹ã«ãç«ã¡å¯ãããã ããçããŸãåå ããã ããçããŸãæ¬åœã«ããããšãããããŸããïŒ ð仿¥ã®åé¡ã®çããçºè¡šããŸãð¢ ãšã©ãŒãåºãã®ã¯ç»åã®éšåð åçã«æ±ºããããŠããåã ãš ã©ã®Propsã«ã該åœããªãããã§ãâš ã¿ãªããè§£ããŸãããðïŒ ãåå ãã ãã£ãçãããããããšãããããŸããð ææ¥ãé¢çœãåé¡ãçšæããŠããã®ã§ææŠããŠã¿ãŠãã ããð¥ #TSKaigi #TSKaigi2025 pic.twitter.com/9BYz8PJnTH — stmn, inc. Developers (@stmn_eng) 2025幎5æ23æ¥ åå è
亀æµã®æ§å ã€ãã³ãäžã¯ãã»ãã·ã§ã³ã®åéãã©ã³ãæéãã³ãŒããŒãã¬ã€ã¯äžãªã©ã«ãèªç¶ãšåå è
å士ã®äº€æµãçãŸããŠããŸããã æè¡ã®è©±ããæ¥ã
ã®èª²é¡æãäŒç€Ÿã§ã®éçºäœå¶ãŸã§ãããããæ¿ãäŒè©±ã亀ããããŠããŠãåå è
ã®æž©åºŠæã®é«ãã宿ã å人çã«å°è±¡æ·±ãã£ãã®ã¯ãDay1çµäºåŸã«éå¬ãããããã€ããŒããäž»å¬ã®ããªã³ã¯ã¢ããã ã«åå ãããŠããã£ãããšã§ãã ã»ãã·ã§ã³ã§ã¯è©±ããããªãã£ãããŒããæ·±å ãããããç»å£è
ãä»ç€Ÿãšã³ãžãã¢ã®æ¹ãšãã©ããã«æèŠäº€æãã§ããããšãæè¡è
å士ã®ãªã¢ã«ãªã€ãªãããæããæéã«ãªããŸããã Day2ã®å€ã«ã¯ãå
¬åŒã®æèŠªäŒã宿œããããã¡ããããªãã®çãäžããïŒ ãæ¥å¹Žã¯ç»å£ããŠã¿ããã§ããããéå¶ãã£ãŠã¿ããïŒããããŒã ã«æã¡åž°ã£ãŠå
±æããŸãïŒããšãã£ã声ãå€ãèãããTypeScriptãšããå
±éèšèªã§åºããã³ãã¥ããã£ã®æž©ãããæ¹ããŠæããŸããã ã»ãã·ã§ã³ã§åŸãããåŠã³ å
šäœçã«å®è·µç¥ã®è©°ãŸã£ãã»ãã·ã§ã³ãå€ããããã§ã¯ç¹ã«å°è±¡ã«æ®ã£ãããŒããããã€ãããã¯ã¢ããããŠç޹ä»ããŸãã AI à TypeScriptã®å¯èœæ§ è€æ°ã®ã»ãã·ã§ã³ã§è§ŠããããŠããã®ãã LLMïŒå€§èŠæš¡èšèªã¢ãã«ïŒãšTypeScriptã®å調 ã«ã€ããŠã äŸãã°ïŒ åå®çŸ©ãèªç¶èšèªããèªåçæ åã«åºã¥ããã¢ãã¯ããŒã¿ã®èªåäœæ zod ã®ãããªã¹ããŒãããŒã¹ã®åãLLMã§çµã¿ç«ãŠã ãšãã£ãäŸã玹ä»ãããŠããããAIã®åºåã«åã§ æ ãäžãããèšèšææ³ã«éåžžã«çŽåŸæããããŸããã ä»åŸAIãšäººéã®åœ¹å²åæ
ãå€ãã£ãŠããäžã§ã åããã®æ©æž¡ãã«ãªã ãšããèŠç¹ã¯ããŸãã«TypeScriptã ããããçãŸãã屿ã ãšæããŸããã ããŒã«ãã§ãŒã³ã®é²åãšåå®å
šæ§ã®åäž TypeScript Language Service Plugin ã®æŽ»çšäŸãéåžžã«å°è±¡çã§ããã ESLintã§ã¯æŸããªãæèäŸåã®åãã¹ãæ€ç¥ åæ
å ±ãããšã«ç¬èªã«ãŒã«ã§éçè§£æ ts-morphã䜿ã£ãã³ãŒãã®èªåçæ ãªã©ã åãã®ãã®ãããŒã«ã«çµã¿èŸŒãã§ããŒã ã®éçºäœéšãæé©åããŠããåãçµã¿ ã玹ä»ãããŠããŸããã çŸå Žã§ããã䜿ããããªç¥èŠãå€ããç¹ã«ãå
±éåããã¯ã©ã€ã¢ã³ããšAPIã®äž¡æ¹ãèªåçæãããèšèšã«ã¯ããªãèå³ãæ¹ãããŸããïŒ TypeScript Native Preview ã«ã³ãã¡ã¬ã³ã¹åœæ¥ã«çºè¡šãããã TypeScript Nativeã®Preview ã ããã¯ãtscãéãããã®ãŸãŸTypeScriptãå®è¡ã§ãããšãã話ã§ãäŒå Žäžãããã€ããŠãããããã¯ã®ã²ãšã€ã§ããã ãŸã æè¡çãªçްéšã¯ããããã®ããã§ãããããã«ãã¬ã¹ãªTypeScriptã®æªæ¥ãã瀺ãããããšã¯éåžžã«åºæ¿çã§ãã»ãã·ã§ã³å€ã§ã話é¡ã«äºæ¬ ããªãå
容ã§ããã ã»ãã·ã§ã³å€ã§ãåŠã³ã¯ãã ã€ãã³ãã®äžã§ãã»ãã·ã§ã³ä»¥å€ã®å Žæââå»äžãããŒã¹ãæèŠªäŒãããªã³ã¯ã¢ããââãªã©ã®äœæ°ãªãäŒè©±ã®äžã«ãåŠã³ã®ã¿ãããããããããŸããã ããã®ã©ã€ãã©ãªã£ãŠã©ããã£ãŠå°å
¥ããŠãïŒãããã¶ã€ããŒãšåã©ããã£ãŠæŠãåãããŠãïŒããšãã£ãæ¥åžžã®æ©ã¿ããããªã¢ã«ãªçŸå Žæããã£ãŠãå®ã¯äžçªãããããã£ããããŸãã ãããã« 2æ¥éã«ããã£ãŠéå¬ãããTSKaigi 2025ã¯ãTypeScriptã軞ã«ããæè¡ã»äººã»æåã亀差ãããéåžžã«æ¿å¯ãªæéã§ããã ãªã³ã©ã€ã³ã§åŸãæ
å ±ã ãã§ã¯åŸãããªãã空æ°ã®æ¿ããç±éããèã§æããããã®ãäžçªã®åç©«ã§ãã ä»åãã¹ã¿ã¡ã³ã¯Goldã¹ãã³ãµãŒãšããŠããŒã¹ãåºå±ããŠããŸããããããããã¯ããäœã£ãŠããããŒã ã®é°å²æ°ãããåŒç€Ÿãããã¯ã TUNAG ã®é
åããåå è
ã®æ¹ã
ã«äŒãã£ããªãå¬ããã§ãã ç»å£è
ãéå¶ãåå è
ã®ã¿ãªããããããŠããŒã¹ã§äº€æµããŠãã ãã£ãæ¹ã
ãæ¬åœã«ããããšãããããŸããïŒ ãŸãæ¥å¹Žãã©ããã§ãäŒãã§ããããšã楜ãã¿ã«ããŠããŸãïŒ ã¹ã¿ã¡ã³ã§ã¯ããšã³ãžãã¢ãçµ¶è³åéäžã§ãð herp.careers åèïŒãšã³ãžãã¢ã®ã«ãžã¥ã¢ã«é¢è«Q&AããèŠãã¹ã¿ã¡ã³ã®å§¿ note.com
ã¿ãªããããã«ã¡ã¯ïŒã¯ãããŸããŠïŒ ãããã¯ãéçºéšã§ãããã¯ããããŒãžã£ãŒãããŠãã å±±æ¬ ã§ãã å
æ¥ã5/19(æ)ã«ãªã³ã©ã€ã³ã§éå¬ãããPdMã€ãã³ãã ãäžäººPMçµéšè
NightãäžäººPMã®çµéšã«åŠã¶ããããã¯ã&çµç¹æé·ã®ãªã¢ã« ãã«ãŠã1人PdMã®ç«ã¡åããšãã€ã³ãã 䟡å€çºæ®ããããã«åãçµãã§ããããšããšããã¿ã€ãã«ã§çºè¡šãããŸããã ç§èªèº«ã瀟å€ã§ã®ç»å£ã¯åããŠãšããããšããã£ãã®ã§ããã¯ããã°ã§ãå
¬éããŠã¿ãããšã«ããŸããïŒïŒ ç»å£ããè³æã«ã€ããŠã¯ X ãSpeakerDeckã§å
¬éããŠããŸãã®ã§ãã¡ãããã²ã¿ãŠããã ããã幞ãã§ãâïž ã¯ããã« ã€ãã³ãã¿ã€ãã«ã«ãããéãã1人PMçµéšãããåœæã©ããªããšãããŠããã®ããã©ã®ããã«ãã®æéãä¹ãè¶ããŠããã®ããªã©ãããç«ã¡åããã»ããã€ã³ããã»ã䟡å€çºæ®ãã®èгç¹ããããªã¢ã«ãªåãçµã¿äŸã亀ããŠãæ°åPdMèŠç¹ã§ã話ããŸããã ç®æ¬¡ 1人PdMãšããŠãã©ã䟡å€ãåºããã 1人PdMã ããããã®ãèŠåŽãšè©Šè¡é¯èª€ã 1人PdMãšããŠã®ãèªåãšãã€ã³ãã®åšãæ¹ã ãŸãšã 01_1人PdMãšããŠãã©ã䟡å€ãåºããã PdMãšããŠã®åœ¹å²ãåºãããŠéæ¹ã«æ®ãããã«ãªã£ãæãç§ãæèããŠããã®ã¯ãã¹ããŒãããšãå
åããã§ãã ç¹ã«ã1人PdMã®ç°å¢ã§ã¯ã ããããçµç¹ãããã»ã¹ã確ç«ãããŠããªãããšãå€ããéçºã¡ã³ããŒãä»éšçœ²ãšã®åœ¹å²åæ
ãã§ããŠããªãããã¹ãŠèªåã«ã¡ã³ã·ã§ã³ãéäžããããéã«è²ã
ãªå Žé¢ã§ããŒã«ãèœã¡ãŸãã£ãŠããããšãå€ããããšæããŸãã ãããªç°å¢ã®äžã§ç§ã¯ã1人PdMãšããŠç€Ÿå
ã§äŸ¡å€çºæ®ããããã« ããããã¯ããäžçªçè§£ããŠãã人ã«ãªããã¹ããŒãéèŠã§ã¢ãŠãããããåºãã ããšã培åºããŠããŸããã å®éã«ã©ããªåãçµã¿ãããã®ããšãããšã ãããããã§ææ»ãããªãã ããšãš ãã¹ããŒã¯ãã«ããŒã«åãããŠå
åãã®æ
å ±å
±æã ãããŸããã ðãããããã§ææ»ãããªãã 仿§æžïŒPRDïŒãäœãåã«ããŸãææžãã®ã©ããã«ã¹ã¿ããŒãžã£ãŒããŒããããæããŠãé¢ä¿è
ãšããããããããã£ãŠäœã®ããã ã£ãïŒããšããç®çã®ããåããã5W1HãçšããŠãŠãŒã¶ãŒã¹ããŒãªãŒã®æŽãåºãã培åºããŸããã ãã®ã²ãšæéã§èªèã®ãºã¬ããªããªãããã®åŸã®éçºãã¹ã ãŒãºã«é²ã¿ãŸããã çµæçã«ãCPOãšã®åæåœ¢æã¬ãã¥ãŒã§ã®ææ»ããã»ãŒãŒãã«ãªããŸããâšïž 仿§æ€èšæã«èª²é¡ãæ§æ³ãå³è§£å ðãã¹ããŒã¯ãã«ããŒã«åãããŠå
åãã®æ
å ±å
±æã äŒç»ãé²ããããã§å€ãã®é¢ä¿è
ãããäžã§ããã®äººãã¡ã®è©±ãæ¹ã泚ç®ãã€ã³ããã©ãããåžåããªãããããã®äººã«ã¯å³ãèŠããªãããããã®äººã«ã¯èŠç¹ããããšãçžæã«åãããŠèª¬æã®ä»æ¹ãå€ããŠã¿ãŸããã çµæçã«ãçžæãæ°ã«ããããªããšãå
åãããŠè©±ããããã«ãªãã®ã§ãä¿¡é Œã«ãç¹ãããéçºã¡ã³ããŒãšã®è°è«ã建èšçã«ãªããŸããã 02_1人PdMã ããããã®ãèŠåŽãšè©Šè¡é¯èª€ã 1人ã§ã®æææ±ºå®ã®ãã¬ãã·ã£ãŒãå€ç¬æããããããŒã«ã¢ãã«ãçµéšè
ãããªãäžã§ãä¹ãè¶ããããã®ã¯ééããªãããŒã ã¡ã³ããŒã®ãããã ãšæã£ãŠããŸãã ç¹ã«ç§èªèº«ãæ°åã»æªçµéšã§èªåããããããã¯ãéçºçµéšãããã¡ã³ããŒããããªãã£ãç°å¢ã ã£ãã®ã§ãããŒã ã®å¿ççå®å
šæ§ãäœããã倧åã«ããŠããŸããã ãã®äžã§ãããŒã ã§ã®ãç§°è³æåã®éžæããšãæ©ãã®èª²é¡è§£æ±ºããæåªå
ã«åãçµãã§ããŸããã å®éã«ã©ããªåãçµã¿ãããã®ããšãããšã ããã€ãªãŒãæ¯ãè¿ãã§ã®ããŸããªç§°è³ãšèªå·±ã¢ããŒã«ã ãããããšãšã ããšã³ãžãã¢ãšã®é¢ä¿æ§ç¯ïŒèªåã®åãããªãŒãã³ã ã«ããŠããŸããã ðããã€ãªãŒãæ¯ãè¿ãã§ã®ããŸããªç§°è³ãšèªå·±ã¢ããŒã«ã ããŒã ã§ã®æ¯ãè¿ããããéã«ãäžè¬çãªKPTïŒKeep, Problem, TryïŒã«ããThanksïŒæè¬ïŒããDOYAïŒãã€ãããããšïŒããMOYAïŒã¢ã€ã¢ã€ïŒããå ããŠããŸãã ããã«ãããäºçްãªããšã§ãæè¬ãæ¬äººã«äŒããããæ©äŒãå¢ããŠååäœå¶ãäœãããããªã£ãããæ®æ®µæããŠããèª²é¡æãäžé·æçã«è§£æ±ºããŠããããã»ãã£ãŠããããããšãæ°è»œã«å
±æã§ããé°å²æ°ãçãŸããŸããã KPTTDMãšããç¬èªã®ããæ¹ãæ§ç¯ ðããšã³ãžãã¢ãšã®é¢ä¿æ§ç¯ïŒèªåã®åãããªãŒãã³ã ããŒã ãåæ»ããŠããïŒå
šäœçã«é²æãè¯ããªããã³ãã¥ãã±ãŒã·ã§ã³ãçºèšãå°ãªããªã©ïŒæã¯ãã¡ã³ããŒãš1on1ãããŠããäºãã®æåŸ
å€ãã®ã£ããéšåã話ãããã«ããŸããã ããã«æ¥åžžçã«ãã³ãã¥ãã±ãŒã·ã§ã³ãšãããšã倧äºã«ããŠããŸãã æ¥ã
ã®æäŒã§ã®éè«ãªã©ãéããŠãæè¿ã®ãã¬ã³ãã®è©±ãè¯ãã£ãæ¬ãèšäºæ
å ±ãªã©ã®å
±æããããããã©ã€ããŒãã§ã®è¯ãã£ãããšããã¥ãŒã¹ã«ã€ããŠãã©ãã«è©±ãããããŠããŸãã æåŸ
å€èª¿æŽãšæ¥é ã®éè« 03_1人PdMãšããŠã®ãèªåãšãã€ã³ãã®åšãæ¹ã æ£è§£ã®ãªããã¬ãã·ã£ãŒã®äžã§æææ±ºå®ãPJæšé²ãããŠããå¿
èŠããããŸãã ãã®äžã§PdMèªèº«ãæææ±ºå®ã«ãã¬ãŠããŸãããŒã å
šäœãäžå®ã«ãªã£ãŠããŸã£ããPdMãšããŠããŒã ãããŸããªãŒãã§ãããçµéšå€ã®ããããã©ã³ã«ãã€ã®éã«ããããžã§ã¯ããå
å°ããŠããã£ãŠããããªã©å®éã«PdMãšããŠå€±æããŸã£ãããšããããŸããã ãããã®çµéšãããã€ãéçºã¡ã³ããŒã§ããããšãã¡ã³ããŒã«èªèããŠããããªãããå人ãšããŠã¯ãã¯ããPdMãšããŠå®å®çã«ç«ã¡åããããã«ããããšããšãèªåã«å°ãè² è·ãããçãã¬ç¶æ
ã€ããPDCAãåãç¶ããããšããæèããŠããŸããã å®éã«ã©ããªããšãå®è·µããŠããããšãããšã ãããŒã ã®ã€ãã¡ã³ããŒãšããŠãPdMãšããŠçžè«ãããã人ã«ãªãã ããšãš ãéçãæ±ºããã«åžžã«çãã¬ç¶æ
ãå¿ãããã ããã«ããŠããŸããã ðãããŒã ã®ã€ãã¡ã³ããŒãšããŠãPdMãšããŠçžè«ãããã人ã«ãªãã ãããã¯ãéçºã«ãããŠPdMã ãããŠãéçºãã§ããªãã®ã§ããšã³ãžãã¢ããã¶ã€ããŒãšäžç·ã«éçºããã¡ã³ããŒã§ããæèãæã€ããã«ããŠããŸãã ããã«ãPdMãäžã«ç«ã€ããšãå€ãã§ããæç€ºããã ãã®äººã§ã¯ãªããããŒã ã«é Œãã»é Œãããã®é¢ä¿æ§ãæ§ç¯ããããšãã¡ãããšPdMãšããŠããªã¥ãŒçºæ®ã§ããç®æã培åºããŠç¹°ãæ¿ããããšã§ãããŒã ãšã®ä¿¡é Œãæ§ç¯ããŠå®å®çã«èªåèªèº«ãç«ã¡åãããšãã§ããããã«ãªããšå®æããŠããŸãã é Œãé Œãããããã«ãé¢ä¿æ§ç¯ãäžçªå€§äº ðãéçãæ±ºããã«åžžã«çãã¬ç¶æ
ãå¿ãããã æ
£ããŠãããã³ããæŽã¿ãå®å®ãããŠåããããã«ãªã£ãŠãããããå®å®ãã«ãã©ã¹Î±è¶ããåããåžžã«ãç¶ããããšã ã³ã³ãã©ãŒããŸãŒã³ãããã¹ãã¬ãããŸãŒã³/ã©ãŒãã³ã°ãŸãŒã³ãã«ã§ããã ãå±
ç¶ããããšã倧äºã ãšèããŠããŸãã åžžã«çãã¬ç¶æ
ãæèããŠåãããšã§ãèªåã®éçå€ãåããããã«ãªãã®ãšãåžžã«èªåã俯ç°ããŠã¿ããããã«ãªã£ãŠããã®ã§ããã«ãã¿ã¹ã¯ãããŸããªããšæã£ãŠããŸãã 04_ãŸãšã äžèšã3ã€ã®èгç¹ã«ã€ããŠã話ãããŠããã ããŸããã ç§èªèº«ã¯1人PdMæéãšããŠã¯çŽ1幎ã»ã©ã§ãããã1人äœå¶ã¯å€§å€ãªç°å¢ã§ã¯ãããšæããŸãð ã§ãããå人çã«ã¯äžçªæé·å®æããããèªç±ãšè²¬ä»»ãã®äžã§è²ã
PDCAãåãã貎éãªæéã ã£ããšæããŠããŸãã èªåãæ¢ãŸããšéçºåŽãåããªãã®ã§ã¯ãªããïŒãªã©ãã¬ãã·ã£ãŒãæããããšããããŸãããã¡ãããšPdMãšããŠã¡ã³ããŒãšããŠã©ããã¹ãããèããŠåãããšã§ãããŒã ãšã®ä¿¡é Œãç¯ãåãå
ãåããŠãããã¯ãã¥ãããã§ãããšæã£ãŠããŸãã ãŸããã¹ã¿ã¡ã³ã§ã¯ãã£ã¬ã³ãžãæé·ã§ããç°å¢ãããã ãã§ãªããåšãã«ã¯ãµããŒãããŠããããäžç·ã«é 匵ã£ãŠããã仲éãæ²¢å±±ããã®ã§ãæªçµéšäžã€1人PdMã®ç§ã§ãè€æ°ã®PJãæ
åœããªãªãŒã¹ãæ¹åãŸã§æ
åœããšãã§ããŸããð ãã®èšäºããåã1人PdMçµéšè
ã®æ¹ã»çµéšäžã®æ¹ã«ãå
±æããŠããã ããããæ°åPdMã»æªçµéšPdMã»PdMãç®æããŠããæ¹ã«ãåèã«ãªãã°å¬ããã§ãð SpeakerDeckã¯ãã¡ã⌠speakerdeck.com æåŸã«ïŒ ã¹ã¿ã¡ã³ã§ã¯äžç·ã«åã仲éãåéããŠãããŸãïŒïŒ ããžã·ã§ã³ã¯çµããããããã¯ãè·å
šæ¹äœã§æ¡çšããŠãŸãã®ã§ããã²ãèå³ããæ¹ããŸãããæ¡çšãµã€ãå®ã«ãé£çµ¡ãã ããâïž ãåŸ
ã¡ããŠãããŸãïŒïŒïŒ recruit.stmn.co.jp ãæåŸãŸã§èªãã§ããã ãããããšãããããŸããð·ã
ã¯ããã« ã¯ãããŸããŠïŒ 2025幎2æãããæ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ã«ãããã¯ããããŒãžã£ãŒïŒPdMïŒãšããŠãžã§ã€ã³ããŸããããããŸãã§ããåŒç€Ÿã§ã¯ãã åæåãããããããŸãããšåŒã°ããŠããŸãã ç§ã¯ä»¥åWebãšã³ãžãã¢ãšããŠãã£ãªã¢ãã¹ã¿ãŒãããŸãããããããPdMãšããæ°ããªåœ¹å²ã«ææŠãããããŠãã®ãã³ãããšã³ã²ãŒãžã¡ã³ãçµå¶ãã©ãããã©ãŒã ãTUNAGãããªã©ãæäŸããæ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ã®äžå¡ãšãªããŸããã ããªãWebãšã³ãžãã¢ããPdMãžïŒãããããŠããªãã¹ã¿ã¡ã³ãéžãã ã®ãïŒã ãã®ãšã³ããªã¯ããããªç§ã®ãã£ãªã¢ã®è»¢æ©ãã¹ã¿ã¡ã³ãžã®å
¥ç€Ÿçç±ãèªããã®ã§ãããããã ãã§ã¯ãããŸããã ãã¹ã¿ã¡ã³ã£ãŠã©ããªäŒç€ŸïŒã ãšèå³ãæã£ãŠãã ãã£ãæ¹ ãä»ã®äººã¯è»¢è·ã§äŒç€Ÿã決ãããšããäœãèããŠãããã ããïŒã ãšæ°ã«ãªãæ¹ ããã£ãªã¢ãã§ã³ãžã£ãŠå®éã©ããªã®ïŒã ãšèããŠããæ¹ ãªã©ãè·çš®ãç«å Žã«é¢ããããå€ãã®æ¹ã«èªãã§ããã ãããšå¬ããã§ãã ãã®ãšã³ããªã§ã¯ãç§ã®ãããŸã§ã®éã®ãããã¹ã¿ã¡ã³ãšããäŒç€Ÿã«æããé
åããããŠããããããã§äœãæãéãããã®ãããã®ããªãïŒãã®éšåãå°ã詳ããã話ãã§ããã°ãšæã£ãŠããŸãã 転è·ã®ãã£ãã åè·ã§ã¯ãå®åå£ã³ãã®ã°ã«ã¡ãµã€ããRettyããéå¶ããRettyæ ªåŒäŒç€Ÿã«çŽ9幎éãWebãšã³ãžãã¢ãšããŠå€åããŠããŸããã Rettyã§ã¯ããµãŒãã¹ã®æé·ãšå
±ã«å人ãšããŠãå€ãã®è²ŽéãªçµéšããããŠããã ããç¹ã«äŒç€Ÿã®äžå Žãšãã倧ããªç¯ç®ã«ç«ã¡äŒããããšã¯ãç§ã«ãšã£ãŠéåžžã«ææçŸ©ãªæéã§ãããéçºæ¥åãéããŠãŠãŒã¶ãŒã«äŸ¡å€ãå±ããããšã®åã³ãæããªãããå
å®ããæ¥ã
ãéã£ãŠããŸããã ãããªäžãæ°ãã€ãã°å€ç¶9幎ã40æ³ãšãã幎霢ãç®åã«è¿«ã£ãŠãããšãããµãšããã®å
ã®èªåã®ãã£ãªã¢ãã©ãæããŠããããããšæ·±ãèããããã«ãªããŸããããããŸã§ã®çµéšãåå°ã«ãæ°ããææŠãããããšã§ãããã«èªåèªèº«ãæé·ããããããã®æ³ããæ¬¡ç¬¬ã«åŒ·ããªããé·å¹Žãäžè©±ã«ãªã£ãRettyãéè·ããæ°ããªç°å¢ã§ããæ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ãžã®è»¢è·ã決æããŸããã è»¢è·æã«äœã軞ãšããŠããã æ°ããªãã£ãªã¢ãèããã«ããããç§ã¯ããã€ãã®è²ããªã軞ãæã£ãŠè»¢è·æŽ»åã«èšã¿ãŸããããããŸã§ã®çµéšãèžãŸããããããã®èªåãæãèŒããå Žæã¯ã©ãããçå£ã«èããçµæã以äžã®3ã€ã®ãã€ã³ããç¹ã«éèŠããŠããŸããã 1. ã誰ãšåãããââå
±ã«åãã€ã¡ãŒãžãæããã ãŸãæã倧åã ãšæããã®ã¯ãã誰ãšåããããšããããšã§ããç§èªèº«ã颿¥ãåããããŠããã ãç«å Žã§ãããªãããéå»ã«ã¯é¢æ¥ãæ
åœããçµéšããããŸãããã®çµéšããã颿¥ã®å Žã§ãäŒãããæ¹ã
ã«å¯ŸããŠããã®æ¹ãã¡ãšããããäžç·ã«åãå§¿ãå
·äœçã«ã€ã¡ãŒãžã§ãããããåãç®æšã«åãã£ãŠãæ°æã¡ãã飿ºããªããä»äºãé²ããããããããšããç¹ããèªåã®äžã§éåžžã«éèŠãªå€æåºæºãšããŠæã£ãŠããŸãããäºãã«å°æ¬ãåããåç£ç¢ç£šã§ãã仲éãããç°å¢ãæ±ããŠããŸããã 2. ãèªèº«ã®åŒ·ã¿ã掻ãããããââçµéšãç³§ã«ãæ°ããªäŸ¡å€ãåµåº 次ã«ãWebãšã³ãžãã¢ãšããŠã®é·å¹Žã®çµéšããããããå¹ã£ãŠãã課é¡è§£æ±ºèœåããããŠPdMãšããŠæ°ãã«ææŠããããšããæ³ããããããèªèº«ã®åŒ·ã¿ããæå€§éã«æŽ»ãããç°å¢ã§ããããšãéèŠãªè»žã§ãããåã«ã¹ãã«ãçºæ®ããã ãã§ãªãããã®åŒ·ã¿ããã£ãŠäºæ¥ããããã¯ãã®æé·ã«ãã€ã¬ã¯ãã«è²¢ç®ã§ãã宿ãåŸãããšèããŠããŸããã 3. ãäŒç€Ÿã®æåãã³ãã¥ãã±ãŒã·ã§ã³ãââè·çš®ãè¶
ããæŽ»çºãªé£æº æåŸã«ãäŒç€Ÿã®æåãã³ãã¥ãã±ãŒã·ã§ã³ã®ããæ¹ãéèŠããŸãããç¹ã«ããšã³ãžãã¢ããã¶ã€ããŒãããžãã¹ãµã€ããšãã£ãè·çš®ã®å£æ ¹ãè¶ããŠãæ¥é ããã³ãã¥ãã±ãŒã·ã§ã³ã掻çºã«è¡ãããŠããããšããç¹ã¯éåžžã«æ°ã«ããŠããŸãããããããã®å°éæ§ãå°éãã€ã€ããããã¯ããšããå
±éã®ç®æšã«åãã£ãŠèª°ãããªãŒãã³ã«æèŠã亀ããã建èšçãªè°è«ãã§ããããããã£ã颚éãã®è¯ãç°å¢ããããäžäœæãéžæããããè¯ããããã¯ããçã¿åºãåååã«ãªããšèããŠããŸããã ãããã®è»žãæºããäŒæ¥ã§åãããšããããèªåèªèº«ã®åããããã¯ãã¡ãããPdMãšããŠã®ãããªãæé·ã«ãç¹ãããšä¿¡ããŠããŸããã ã¹ã¿ã¡ã³ã«æ±ºããçç± ç§ãè»¢è·æŽ»åã§å€§åã«ããŠãã3ã€ã®è»žãããããæ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ãšã©ã®ããã«åèŽããæçµçã«å
¥ç€Ÿã決æããã«è³ã£ãã®ããã話ãããŸãã 1. ã誰ãšåãããââé®®æã«æãããå
±ã«åãæªæ¥ããšãæž©ããæè¿ã®å¿ 転è·è»žã®çé ã«æããŠããã誰ãšåããããããã«ã€ããŠã¯ãã¹ã¿ã¡ã³ã®éžèããã»ã¹ãéããŠãä»ç€Ÿãšã¯æ¯èŒã«ãªããªãã»ã©é®®æã«ããã®äººãã¡ãšäžç·ã«åãããããšããã€ã¡ãŒãžãæ±ãããšãã§ããŸããã 颿¥ã§ãäŒãããæ¹ã
ãšã¯ãç§ã颿¥å®ã®çµéšãèžãŸããŠéèŠããŠãããå
±ã«åãå§¿ãå
·äœçã«ã€ã¡ãŒãžã§ãããããšããç¹ã§ãæãããžãã£ããªæè§ŠãåŸãããŸãããããã«ã¹ã¿ã¡ã³ã§ã¯ãéžèã®éçšã§ãããããäžç·ã«åãããšã«ãªãã§ãããã¡ã³ããŒãšã®åº§è«äŒãå¿
ãèšããŠãã ãã£ãã®ã§ããããã§ã¯ãå®éã®æ¥åã®é²ãæ¹ãããŒã ã®é°å²æ°ãªã©ãããèžã¿èŸŒãã 質åãããããšãã§ããå
¥ç€Ÿåã«æ°ã«ãªãç¹ãäžå¯§ã«è§£æ¶ããŠãããŸããã ãããŠäœãããå¿ãåããããã®ããéžèã®æåŸã«ã颿¥ã座è«äŒã§ãäŒãããæ¹ã
å
šå¡ããå¿ã®ããã£ããæçŽãããã ããããšã§ããäžäººã²ãšãããã®æž©ããã¡ãã»ãŒãžã¯ãç§ãšããå人ããã£ãããšèŠãŠãããŠãããšãã宿ãšå
±ã«ãããã²ãã®ä»²éãã¡ãšåãããããšããæ°æã¡ã決å®çãªãã®ã«ããŠãããŸããã 2. ãèªèº«ã®åŒ·ã¿ã掻ãããããââæè¡çèæ¯ãæã€PdMãžã®æåŸ
次ã«éèŠããŠãããèªèº«ã®åŒ·ã¿ã掻ããããããšããç¹ã§ããPdMãšããŠã®ãã£ãªã¢ã¯ãŸã æµ
ãç§ã«ãšã£ãŠãé·å¹Žå¹ã£ãŠããWebãšã³ãžãã¢ãšããŠã®çµéšãæè¡çãªç¥èŠããæ°ãã圹å²ã§ã©ã®ããã«æŽ»ããããã¯éåžžã«éèŠãªãã€ã³ãã§ããã 颿¥ã§ã¯ããã®ç¹ãççŽã«ãäŒãããçŸæç¹ã§èªåã«ã§ããããšããããŠãããã䌞ã°ããŠããããã¹ãã«ã«ã€ããŠå
ã¿é ããã話ãããŸããããããšãã¹ã¿ã¡ã³åŽãã¡ããã©ãæè¡çãªããã¯ã°ã©ãŠã³ããçè§£ãããšã³ãžãã¢ãšããã¹ã ãŒãºã«é£æºã§ããããããããTechå¯ãã®PdMãããæ±ããŠããã¿ã€ãã³ã°ã ã£ãã®ã§ããç§ã®ãããŸã§ã®çµéšãšãã¹ã¿ã¡ã³ããããã¯ãéçºãå éãããäžã§å¿
èŠãšããŠãã人ç©åãããŸãã«åèŽããç¬éã§ããã ãã®åºäŒãã«ãããããããªãã°ãç§ã®åŒ·ã¿ãæå€§éã«æŽ»ãããèªèº«ã®æé·ã«ã€ãªããããããšåŒ·ã確信ããããšãã§ããŸããã 3. ãäŒç€Ÿã®æåãã³ãã¥ãã±ãŒã·ã§ã³ãââãšã³ã²ãŒãžã¡ã³ããäœçŸãããå¥å
šã§æŽ»çºãªé¢šå ãããŠæåŸã®è»žãããäŒç€Ÿã®æåãã³ãã¥ãã±ãŒã·ã§ã³ãã§ããã¹ã¿ã¡ã³ã¯ãããšã³ã²ãŒãžã¡ã³ãçµå¶ãã©ãããã©ãŒã ãTUNAGãããã¯ãããšãããµãŒãã¹ãéããŠãçµç¹ã®ãšã³ã²ãŒãžã¡ã³ãåäžãæ¯æŽããŠããäŒæ¥ã§ãããã®äºæ¥å
容ãããæ³åã§ããããã«ãèªç€Ÿå
ã§ãç§°è³ã®å¶åºŠãéçšãããŠããããè·çš®ãè¶
ããã³ãã¥ãã±ãŒã·ã§ã³ãéåžžã«è¯å¥œã§ãããšæããŸããã ïŒå人çã«ã¯ããŽã«ãéšããããšããç¹ããå®ã¯ããªã倧ããªé
åã§ããïŒïŒ ç¹ã«å°è±¡çã ã£ãã®ã¯ã座è«äŒãªã©ãéããŠæãããèšãã¹ãããšã¯ããäºãã®æé·ã®ããã«ççŽã«äŒãããã ãã©ãæ¥åžžã®å°ããªé 匵ããææãèŠéããã«ç§°è³ãããããšããæåã§ããããã¯ãŸãã«ãç§ãçæ³ãšããŠãããªãŒãã³ã§å»ºèšçããã€æž©ããã³ãã¥ãã±ãŒã·ã§ã³ãæ ¹ä»ããŠãã蚌ã ãšæããŸããããã®ãããªå¥å
šã§æŽ»çºãªé¢šåããããå¿ççå®å
šæ§ãé«ããããŒã å
šäœã®ããã©ãŒãã³ã¹ãåäžãããã®ã ãšæ¹ããŠç¢ºä¿¡ããŸããã ããã3ã€ã®è»žããã¹ã¿ã¡ã³ãšããäŒç€ŸãšèŠäºã«åèŽããããšã§ãç§ã¯è¿·ããªãå
¥ç€Ÿã決æããããšãã§ããŸããã å®éã¹ã¿ã¡ã³ã«å
¥ã£ãŠã¿ãŠ ããŠãããããå®éã«å
¥ç€ŸããŠããã®è©±ããããŠããã ããŸãã æ£çŽãªãšãããã¹ã¿ã¡ã³ã§7瀟ç®ãšãç§èªèº«ããªãå€ãã®äŒç€ŸãçµéšããŠããŸããããã®ãããã©ããªäŒç€Ÿã§ãããå
¥ç€Ÿåãšå
¥ç€ŸåŸã§äœãããã®ã®ã£ãããçããã®ã¯ããæå³åœç¶ã®ããšã ãšãããçš®ã®èŠæãæã£ãŠããŸããã ããããã¹ã¿ã¡ã³ã¯è¯ãæå³ã§ãã®ãåæããè£åã£ãŠãããŸããããããŸã§ã話ãããŠããã誰ãšåããããèªèº«ã®åŒ·ã¿ã掻ããããããäŒç€Ÿã®æåãã³ãã¥ãã±ãŒã·ã§ã³ããšãã£ã軞ã®éšåã§ã倧ããªã®ã£ãããæããããšã¯ã»ãšãã©ãããŸããã§ãããé©ããããšã«ãå
¥ç€Ÿåæ¥ããæ¬åœã«ããããã®ç€Ÿå¡ã®æ¹ã
ãšèªç¶ã«ã³ãã¥ãã±ãŒã·ã§ã³ãåãããšãã§ããæž©ããè¿ãå
¥ããŠããããŠããããšã宿ããŸããã ãŸããã¹ã¿ã¡ã³ã¯åå€å±ã«ãæ¬ç€Ÿããããç§ã¯æ±äº¬æ¬ç€Ÿæå±ãªã®ã§ãããåãéšçœ²ã®åå€å±ã¡ã³ããŒãšããªã³ã©ã€ã³ã§ããã«é¡ãåãããè©±ãæ©äŒãç©æ¥µçã«äœã£ãŠãããŸãããç©ççãªè·é¢ã¯ãã£ãŠããããŒã ãšããŠã®äžäœæãã¡ã³ããŒå士ã®ç¹ããã匷ãæããããšãã§ãããé¢ããŠããŠãè¿ãååšãã ãšæããŠããŸãã äœãããããã®èŠæš¡ã®äŒç€Ÿã§ãããã»ã©å
šå¡ãåãæ¹åãåããåãç±éã§ãããã¯ããäºæ¥ã«åãçµãã§ããã®ãããšããäºå®ã¯ãç§ã«ãšã£ãп倧ã®ããžãã£ããªé©ãã§ããã颿¥ã座è«äŒã§æããäžäœæã¯æ¬ç©ã§ããããæ¥ã
ã®æ¥åã®äžã§ãéæã«çŸããŠããã®ã§ãã å
¥ç€Ÿåã«æ±ããŠããæåŸ
ã¯ãè¯ãæå³ã§è£åãããä»ã¯ã¹ã¿ã¡ã³ã®äžå¡ãšããŠåããããšã«å€§ããªåã³ãšæå¿ããæããŠããŸãã ããã㫠以äžããå
Webãšã³ãžãã¢ã§ããç§ããPdMãšããŠæ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ã«å
¥ç€Ÿã決ããçç±ããå®éã«å
¥ã£ãŠã¿ãŠã®ççŽãªææ³ã§ãã ã¹ã¿ã¡ã³ã®äžå¡ãšããŠãç§ãã¡ã¯èªåãã¡èªèº«ãååãã«æ¥œããåãããšã¯ãã¡ãããäž»åãããã¯ãã§ããããšã³ã²ãŒãžã¡ã³ãçµå¶ãã©ãããã©ãŒã ãTUNAGãããéããŠãTUNAGãå©çšããŠãã ããå€ãã®äŒæ¥ã®çæ§ããããŠããã§åãåŸæ¥å¡ã®çæ§ã«ããåãã£ãŠæ¥œããïŒãããã®äŒç€Ÿã§è¯ãã£ãïŒããšæããŠããã ãããããªããããªäžçãå®çŸããããšæ¬æ°ã§æã£ãŠããŸãã ãããã®ãšã³ããªãèªãã§ãå°ãã§ãã¹ã¿ã¡ã³ãç§ãã¡ã®åãçµã¿ããããã¯PdMãšããä»äºã«èå³ãæã£ãŠããã ãããªãããã²ã«ãžã¥ã¢ã«ã«ã話ãããŸãããïŒ æåŸãŸã§ãèªã¿ããã ããæ¬åœã«ããããšãããããŸããïŒ herp.careers herp.careers
ãã®åºŠãæ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ã¯ãTSKaigi 2025ã«Goldã¹ãã³ãµãŒãšããŠåè³ããŸãã ã¹ã¿ã¡ã³ã§ã¯ãäŒæ¥ãçµç¹ã®æ¥åDXã»ãšã³ã²ãŒãžã¡ã³ãåäžãæ¯æŽããã¯ã©ãŠãåãã©ãããã©ãŒã ã TUNAG ããéçºã»æäŸããŠããŸããTUNAGã§ã¯ãããã³ããšã³ãéçºã«TypeScriptãæŽ»çšããŠããŸãã ãŸããã°ã«ãŒãäºæ¥ãšããŠå±éããŠãããã¯ã©ãŠãåã®ITè³ç£ç®¡çã»æäœãã°ç®¡çãµãŒãã¹ã Watchy ãã§ã¯ãããã³ããšã³ãã»ããã¯ãšã³ããšãã«TypeScriptãç©æ¥µçã«æŽ»çšããŠããŸãã ç§ãã¡ã®äºæ¥ãšéçºçµç¹ãæé·ã§ããã®ã¯ TypeScriptã³ãã¥ããã£ã®æ¯ãããã£ãŠããã§ãããä»åŸã®ãããªãã³ãã¥ããã£ã®çºå±ã«è²¢ç®ãããããTSKaigi 2025ããžåè³ããããŸãã æ¬ã«ã³ãã¡ã¬ã³ã¹ãžã®åè³ãéããŠãããããã®TypeScriptã³ãã¥ããã£ã®çºå±ãåŸæŒãããã€ãã³ããäžç·ã«çãäžããŠãããŸãïŒ TSKaigi 2025 é嬿ŠèŠ åç§° TSKaigi 2025 é嬿¥æ 2025幎5æ23æ¥(é)ã24æ¥(å) å Žæ ãã«ãµãŒã«ç¥ç°ïŒæ±äº¬éœå代ç°åºïŒ 詳现ã«ã€ããŠã¯ãäžèšå
¬åŒãµã€ããã芧ãã ãã ð 2025.tskaigi.org ããŒã¹åºå±ã«ã€ã㊠ã¹ã¿ã¡ã³ããŒã¹ã§ã¯ããTUNAGãã®å®éã®æ©èœã掻çšããåå åã€ãã³ãã宿œããŸãïŒ æ¥å Žè
ã®çããŸã«æ¥œããã§ããã ãããããæœéžã€ãã³ãããã¬ãŒã³ãäŒç»ãªã©ããçšæããŠããŸãã æœéžã€ãã³ã å¥ã«ã³ãã¡ã¬ã³ã¹ã§ãã奜è©ããã ããæœéžã€ãã³ãããTSKaigiã§ã宿œããŸãïŒ ãããã¯ããTUNAGãã®äžéšæ©èœãäœéšããªãããåå ããã ãã仿ããšãªã£ãŠãããåå ããã ããæ¹ã«ã¯ãåå è³ãã¡ãã£ãšå¬ããæ¯åããçšæããŠããŸãïŒâ»æ°ã«éããããããŸãïŒã TypeScriptã³ãŒãã¬ãã¥ãŒïŒã¯ã€ãº åŒç€Ÿãšã³ãžãã¢ãçšæããTypeScriptãããŒãã«ãã âèãããé¡â ãããã€ããçšæããŠããŸãã ãæããã¯ïŒããšããçããŸã®ææŠããåŸ
ã¡ããŠããŸãïŒ åœæ¥ããŒã¹ã§åºãäºå®ã®ã³ãŒãã¬ãã¥ãŒã®ãé¡ããå°ãã ãå
åºãããŸãïŒ // ãã®ã³ãŒãããªãã¯ã©ãã¬ãã¥ãŒããŸããïŒïŒ interface Item { id : number ; data : any ; } const processItem = ( item : Item ) => { console .log( `Processing item with ID: ${ item. id} ` ); if ( typeof item.data === 'string' ) { console .log( `Data (string): ${ item.data. toUpperCase () } ` ); } else if ( typeof item.data === 'number' ) { console .log( `Data (number): ${ item.data * 2 } ` ); } else if ( Array . isArray (item.data)) { console .log( `Data (array): ${ item.data. length} elements` ); } else { console .log( `Data (other): ${ JSON . stringify (item.data) } ` ); } } ; // ...ç¶ãã¯ã楜ãã¿ã«ïŒ // TypeScriptã«æ
£ããŠããæ¹ãªããæ°ã«ãªããã€ã³ããããã€ããããããããŸãã...ã // ãã²åœæ¥ããŒã¹ã§ã話ãããŸãããïŒ ä»ã«ãTypeScriptã«ãŸã€ããã¯ã€ãºããçšæããŠããŸãïŒ çããŸã®ãè¶ããå¿ãããåŸ
ã¡ããŠããŸãïŒ ãããã« æåŸãŸã§èªãã§ããã ãããããšãããããŸãã åŒç€Ÿããã¯ãšã³ãžãã¢ãHRå«ã7åãçŸå°åå ããŸãïŒ ããŒã¹ãã€ãã³ãçã§ã話ã§ããããšã楜ãã¿ã«ããŠããŸãïŒ åœæ¥äŒå Žã§ã¯ã©ãããããããé¡ãããããŸãã ãµãã€ãã³ãã®ãæ¡å
stmn.connpass.com stmn.connpass.com ã¹ã¿ã¡ã³ã§ã¯TypeScript ã³ãã¥ããã£ã奜ããªãšã³ãžãã¢ãçµ¶è³åéäžã§ãã herp.careers åèïŒãšã³ãžãã¢ã®ã«ãžã¥ã¢ã«é¢è«Q&AããèŠãã¹ã¿ã¡ã³ã®å§¿ note.com
ã¯ããã« ããã«ã¡ã¯ããã©ãããã©ãŒã éšã® è¿è€ ã§ãã 2025幎4æ9æ¥ã11æ¥ã«ã¢ã¡ãªã«ã»ã©ã¹ãã¬ã¹ã§éå¬ããããGoogle Cloud Next 2025ã *1 ã«ãç§ãšCTOã®éå£ã®2åã§çŸå°åå ããŠããŸããã Google AI Studio ãçšããŠåšå²ã®äººç©ãæ¶ãããšããé¡ãæªãã§ããŸããŸãã äŒç€Ÿå
šäœã§ã® Google Workspace ã®å©çšããååã®èšäºã§åãäžãã Google Kubernetes Engine (GKE) ãªã©ããã®ä»ã«ãæ§ã
ã«åŒç€Ÿã§ã¯ Google Cloud ãæŽ»çšããŠããŸãã tech.stmn.co.jp åŒç€Ÿã®æµ·å€ã€ãã³ããžã®åå ã¯ã2019幎㮠AWS re:Invent 以æ¥ã§ãã tech.stmn.co.jp Looking Back on Next '25 and Its Theme 2025å¹Žã®æ¯ãè¿ãã«ããããéå»ã®ã€ãã³ããæ¹ããŠæŽçããŠã¿ãŸãã ã³ããçŠãçµãŠä¹
ãã¶ãã®ãªã³ãµã€ãéå¬ãšãªã£ã Nextâ23 ã¯ãGoogle Cloud ã çæAI ãžæ¬æ Œçã«åå
¥ããå§¿å¢ãæç¢ºã«ç€ºãã幎ã§ãããGoogle Cloud ã¯ãDuet AI ãGoogle WorkspaceãšGoogle Cloud Platform å
šäœã«å°å
¥ããæ¹éãçºè¡šããŸãã *2 ããã®ææã¯ã¡ããã© OpenAI ã® ChatGPT ã倧ããªè©±é¡ãšãªã£ãŠããé ã§ããããŸãã ç¶ã Nextâ24 ã§ã¯ãDuet AI 㯠Gemini ãžãšãªãã©ã³ãã£ã³ã°ãããçºè¡šãããŸãããGemini Code Assist ã Gemini Cloud Assist ãšãã£ããååéã®å°éçãªã¿ã¹ã¯ãæ¯æŽããAIã¢ã·ã¹ã¿ã³ã矀ãç»å Žããæ±çšçãªAIã¢ã·ã¹ã¿ã³ã¹ããããç¹åããæ©èœãžã®æµããèŠãããŸãããããã«ãããAI ã¯åãªãååçãªæ
å ±æäŸã«çãŸãããèœåçãªã¿ã¹ã¯å®è¡ãžãšé²åããå¯èœæ§ã瀺ãããŸãã *3 ã ãããŸã§ã®æµããèžãŸã㊠Next'25 ãæ¯ãè¿ããšãAIãšãŒãžã§ã³ãæä»£ ã®æ¬æ Œçãªå¹éããšãGoogle Cloud ããã®å®çŸã«å¿
èŠãªæè¡ã¹ã¿ãã¯å
šäœãæ§ç¯ãããšããæç¢ºãªæŠç¥ãæã¡åºãããã€ãã³ãã§ãããç¹ã«ãAgent Development Kit (ADK) ããªãŒãã³ãª Agent2Agent (A2A) ãããã³ã«ã®çºè¡šã¯ããã«ããšãŒãžã§ã³ããšã³ã·ã¹ãã ãšããæ°ããªAIã®æ çµã¿ã瀺åãããã®ã§ãã *4 ããŸãã«ãæ±çšçãªçæAIãããããé«åºŠãªAIãšãŒãžã§ã³ãããããŠãã«ããšãŒãžã§ã³ããšã³ã·ã¹ãã ãžãšæä»£ãé²ãã§ããæ¹åæ§ããé®®æã«ç€ºãããŠããŸãã æé«ã®åžã§ Keynote ã芳ãŸãã The full stack of AI Innovation Keynote ã§ãšãŒãžã§ã³ãã匷ãæã¡åºãããŠããããšã¯ããšãã¹ããšãªã¢ã®æŽ»æ³ãããåŠå®ã«æãåãããšãã§ããŸãããå€ãã®ããŒãããŒäŒæ¥ããããããã®ãã¢ãç©æ¥µçã«å±ç€ºã»ç޹ä»ããŠããŸããããã¢ã®å€ãã¯ãAIã¯ãŒã¯ãããŒãšåŒã°ãããã®ãããããŸãããããšãããAIãšãŒãžã§ã³ãæä»£ãžã®ç§»è¡æã«ããããšãèã§æããããå Žã§ããã GitLab ã®ããŒã¹ã§ãã°ã«ãããšéŽäžãããã ããŸãã ãã®äžã§ Google Cloud ã¯ããã®æ°ã㪠AI ãšãŒãžã§ã³ãæä»£ãæ¬æ Œçã«æšé²ãããããAI ãã€ããŒã³ã³ãã¥ãŒã¿ã髿§èœãªåºç€ã¢ãã«ããšãŒãžã§ã³ãéçºã»å®è¡ç°å¢ããããŠå€æ§ãªãšãŒãžã§ã³ããã®ãã®ã«è³ããŸã§ããšã³ãããŒãšã³ãã®æè¡ã¹ã¿ãã¯ãç¶²çŸ
ããçµ±åçãªãã©ãããã©ãŒã ãã¬ã€ã€ãŒãç®æãæŠç¥ãæç¢ºã«ç€ºããŸããã Google Cloud Next 2025 ãµããªãŒã»ãã·ã§ã³ (æ¥æ¬èª) ãã å
·äœçã«ã¯ãAIã¯ãŒã¯ããŒããæ¯ãã AI ãã€ããŒã³ã³ãã¥ãŒã¿ãšããŠã第7äžä»£TPUã§ãã Ironwood ã玹ä»ãããŸããããŸãããšãŒãžã§ã³ãã®åºç€ã¢ãã«ãšããŠã¯ãé«ãæ§èœãæã€ Gemini 2.5 ã®çºè¡šããããŸãããããã«ããšãŒãžã§ã³ãã®éçºã管çãå¹çåããããã® Vertex AI ã®å€§å¹
ãªæ©èœåŒ·å ããGoogle Agentspace ã®ãããªãšãŒãžã§ã³ãé¢é£ã®å
·äœçãªåãçµã¿ã玹ä»ããããšãŒãžã§ã³ãæ§ç¯ã®ããã®å
æ¬çãªç°å¢ãæŽãã€ã€ããããšã瀺ãããŸããã Multi-Agent Ecosystem ã€ãã³ãåå åœæãŸã§ãAIãšãŒãžã§ã³ãããŸã å
ã®æªæ¥ã®è©±ã ãšæãå芳ããŠããç§ã«ãšã£ãŠãNext'25 ã®ã»ãã·ã§ã³ããšãã¹ããšãªã¢ã§ç®ã«ããçºè¡šã®æ°ã
ã¯ãé©ããšåæã«çŠããæãããããã®ã§ããããããŠãGoogle Cloud ãæå±ãã Agent2Agent (A2A) *5 ã«åºã¥ããã«ããšãŒãžã§ã³ããšã³ã·ã¹ãã ãšããæ°ããªæ çµã¿ã«ã¯ãç¹ã«å€§ããªè¡æãåããŸããã ãšããã§ã2024幎11æã« Anthropic ãå
¬éãã Model Context Protocol (MCP) ã®æ³šç®ããçŸåšé«ãŸã£ãŠããŸã *6 ãMCP ã¯ãAI ã¢ã·ã¹ã¿ã³ããå€éšã®ããŒã¿ãœãŒã¹ãã·ã¹ãã ãšé£æºããããã®ãããã³ã«ãšããŠææ¡ãããŠããŸããMCP ã AI ãšããŒã«éã®é£æºãç®çãšãããããã³ã«ã§ããã®ã«å¯ŸããA2A ã¯ãšãŒãžã§ã³ãå士ãã»ãã¥ã¢ã«çžäºã«é£æºããããã®ãããã³ã«ãšããç¹ãç°ãªããŸããA2A ã¯åäœã®ãšãŒãžã§ã³ãã®èœåæ¡åŒµãç®æã MCP ãè£å®ã *7 ããšãŒãžã§ã³ãéã®å調ã«ãããšã³ã·ã¹ãã ãå®çŸããå¯èœæ§ãç§ããŠããŸãã ãããããšãŒãžã§ã³ãéã®é£æºãé²ãã°ãåãšãŒãžã§ã³ãã¯ç¹å®ã®åœ¹å²ãå°éé åã«ç¹åïŒããŒãã£ã«ã«åïŒããŠããæ¹åã«é²ããšå人çã«ã¯æ³åããŠããŸããMCPã«é¢ããŠã¯ã»ãã¥ãªãã£äžã®æžå¿µãææãããäžãA2A ãã»ãã¥ã¢ãªãããã³ã«ãç®æããŠããç¹ããå°è±¡æ·±ãæããããŸããã Announcing the Agent2Agent Protocol (A2A) ãã ãããã®æ°ããªãããã³ã«ããä»åŸã¹ã¿ã³ããŒããªå°äœã確ç«ã§ãããã¯çŸæç¹ã§ã¯äžéæã§ããããããçŽãããªããªãŒãã£ã³ã°ã«ã³ãããŒã§ãã Google ããããäž»å°ããå§¿å¢ãèŠããããšã«ã¯ãå人çã«ã倧ããªæåŸ
ãå¯ããããåŸãŸãããA2A ã®çºè¡šããŒãããŒãªã¹ãã«ã¯ Anthropic ã®ååãèŠåœãããªãã£ãç¹ã¯æ°ã«ãªããŸããMCP ãäž»å°ãã Anthropic ã A2A ã«å¯ŸããŠä»åŸã©ã®ãããªèŠè§£ãåããèŠããã®ããåŒãç¶ã泚ç®ããŠãããããã€ã³ãã§ããäžæ¹ã§ãGoogle ã Anthropic ãžè¿œå æè³ãè¡ã£ãããšãèšæ¶ã«æ°ãã *8 ã䞡瀟ã®è¯å¥œãªé¢ä¿ãç¶æãããããšãæåŸ
ããŠããŸãã The Innovation of GKE ãã£ãããªã®ã§ãã»ãã·ã§ã³ã«ã€ããŠãç°¡åã«åãäžããããŠãã ãããã€ãã³ãå
šäœã®è©±é¡ã®äžå¿ã¯ AI ã§ããããå人çã«ã¯ Google Kubernetes Engine (GKE) ã®ã¢ããããŒãã«é¢ããã»ãã·ã§ã³ã«ã泚ç®ããŠããŸãããç¹ã«ããGKE turns 10 and looks to the future of Kubernetesããšããã»ãã·ã§ã³ã§ã¯ãGKE ã®10åšå¹Žãèšå¿µãã€ã€ã次äžä»£ã® GKE ã€ãããŒã·ã§ã³ã«ã€ããŠå
·äœçã«ç޹ä»ãããŠããŸããã æ¬ã»ãã·ã§ã³ã§ãŸã匷調ãããŠããã®ã¯ãGoogle Cloud ãå€§èŠæš¡ã¯ã©ã¹ã¿ã®ã¹ã±ãŒã©ããªãã£ã«éç¹çã«æè³ããŠããç¹ã§ããå
·äœçã« 65,000ããŒãèŠæš¡ã®ã¯ã©ã¹ã¿ããµããŒããããšãã話ã¯ãå€§èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºé¡§å®¢ããè€éãã€ãªãœãŒã¹æ¶è²»ã®å€ã AI ã¯ãŒã¯ããŒãã GKE äžã§å®çŸããŠããããšã®ãæç¢ºãªææè¡šç€ºãšèšããã§ãããã ããããçºè¡šã®äžã§ããç§ãå人çã«æãã声ãããããã«ãªã£ãã¢ããããŒãããIn-Place Pod Resizing ã§ããKubernetes v1.27 ã§ã¢ã«ãã¡æ©èœãšããŠå°å
¥ããããã³ã³ãããåèµ·åããããšãªããããã«å²ãåœãŠããã CPU/ã¡ã¢ãªãªãœãŒã¹ã®ãµã€ãºã倿Žã§ããæ©èœã§ã *9 ãKubernetes v1.33 ã§ã¯ãããŒã¿çã«ç§»è¡ãããŸãã *10 ãçŸåšãåŒç€Ÿã§çšŒåããŠãã GKEã¯ã©ã¹ã¿ãŒã§ã¯ Vertical Pod Autoscaler (VPA) ãå©çšãããããã®ãªãœãŒã¹èª¿æŽãè¡ã£ãŠããŸãããåèµ·åãçºçãããšããç¹ããŸãã«éçšäžã®èª²é¡ãšãªã£ãŠããŸããããã® In-Place Pod Resizing æ©èœããGKE Autopilot 1.33 以éã§ã¢ã«ãã¡/ããŒã¿ãšããŠå©çšå¯èœã«ãªãèŠèŸŒã¿ãšã®ããšã§ãéåžžã«æåŸ
ã§ããã¢ããããŒãã§ãã Del Taco ã® BURRITOS ããæ°ã«å
¥ãã§ãã ãããã« ä»åã® Google Cloud Next ã«ã¯ãæ¥åã®äžç°ãšããŠåå ãããŠããã ããäŒç€Ÿã«å®¿æ³è²»ãšäº€éè²»ãè² æ
ããŠããã ããŸãããäžåšäžã«æ¥åããµããŒãããŠãããã¡ã³ããŒã«ãããã®å ŽãåããŠæ¹ããŠæè¬ãç³ãäžããŸãã ã€ãã³ãã§ã®æ§ã
ãªçºè¡šããã¢ã«è§Šããäžã§ãç§èªèº«ã® AI å©çšããŸã éå®çã§ããããšããããŠãã£ãšç©æ¥µçã«ãé«ãè§£ååºŠã§æŽ»çšãé²ããŠããå¿
èŠãããããšã匷ã宿ããŸãããç¹ã«ã2025幎1æãã㯠Google Workspace å
šãã©ã³ã« AI ãæšæºæèŒãããŠããããŸãã¯èº«è¿ãªããŒã«ããç©æ¥µçãªæŽ»çšãå³ã£ãŠãããããšèããŠããŸãã ãŸããã€ãã³ããéã㊠AI ãšãŒãžã§ã³ãæä»£ã«ããããããã¯ããããžã¡ã³ãã®ããæ¹ã«ããå人çãªé¢å¿ã倧ããé«ãŸããŸãããAI ãæ¥åãåçã«å¹çåããå¯èœæ§ã¯æããã§ããããããã¯ãã®æäŸåŽãšããŠã¯ããã®åŒ·å㪠AI ãããã«ãããã¯ãã«çµã¿èŸŒã¿ããŠãŒã¶ãŒã«æ°ããªäŸ¡å€ãšããŠå±ããŠãããããä»åŸãŸããŸãéèŠã«ãªã£ãŠãããšäºæ³ãããŸããã²ãšãã®æè¡è
ãšããŠããAI ã®çè§£ãæ·±ãããã®ããã³ã·ã£ã«ãæå€§éã«åŒãåºãã瀟äŒã«è²¢ç®ã§ãã圢ã§äŸ¡å€ãæäŸããŠãã責åããããšæããŠããŸãã åŒç€Ÿã§ã¯ããšã³ãžãã¢æ¡çšãç©æ¥µçã«è¡ã£ãŠããŸããå°ãã§ãèå³ãæã£ãŠããã ãããããã²ãŸãã¯ã«ãžã¥ã¢ã«é¢è«ã§ã話ãã§ããã°ãšæããŸãã herp.careers *1 : https://cloud.withgoogle.com/next/25 *2 : https://cloud.google.com/blog/topics/google-cloud-next/next-2023-wrap-up?hl=en *3 : https://cloud.google.com/blog/topics/google-cloud-next/google-cloud-next-2024-wrap-up?hl=en *4 : https://cloud.google.com/blog/topics/google-cloud-next/google-cloud-next-2025-wrap-up?hl=en *5 : https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/ *6 : https://www.anthropic.com/news/model-context-protocol *7 : https://google.github.io/A2A/#/topics/a2a_and_mcp.md *8 : https://www.nytimes.com/2025/03/11/technology/google-investment-anthropic.html *9 : https://kubernetes.io/blog/2023/05/12/in-place-pod-resize-alpha/ *10 : https://kubernetes.io/blog/2025/04/23/kubernetes-v1-33-release/#beta-in-place-resource-resize-for-vertical-scaling-of-pods
ã¯ããã« ããã«ã¡ã¯ããããã¯ãéçºéšã® åéç° ã§ãïŒ ããããGWã§ããïŒãŸãšãŸã£ãæéãåãããã®æ©äŒã«ãèªæžãããããšèããŠããæ¹ãå€ãã®ã§ã¯ãªãã§ããããã ä»åã¯ç§å«ããã¹ã¿ã¡ã³ãšã³ãžãã¢ãæè¿ã®ãæ°ã«å
¥ãæžç±ã玹ä»ãããŠããã ããŸãïŒ æè¡æžã»ããžãã¹æžãªã©ãžã£ã³ã«ã¯åãããè¯ãã£ãæ¬ãèªç±ã«æããŠããããŸããã ãã®èšäºã§æ°ã«ãªãã»èªãã§ã¿ãããšæããããªæ¬ãèŠã€ããã°å¹žãã§ãã ã«ããã³ãŒãã®åé¡é ãMySQLã€ã³ããã¯ã¹ã«ç«ã¡åããç·šã æåã¯åéç°ã玹ä»ããŸãïŒæ®æ®µã¯TUNAGã®ããã¯ãšã³ããæ
åœããŠããŸãã ç§ã玹ä»ããæ¬ã¯ãã«ããã³ãŒãã®åé¡é ãMySQLã€ã³ããã¯ã¹ã«ç«ã¡åããç·šããã§ãã ã«ããã³ãŒãã®åé¡é ãMySQLã€ã³ããã¯ã¹ã«ç«ã¡åããç·šã ç§èªèº«ãã€ã³ããã¯ã¹ã«ã€ããŠãªããšãªãããã...ãããEXPLAINã®çµæãèŠãŠãå¹ããŠãããå¹ããŠãªãããããã¯...ããšãããããªç¶æ³ã§ããã ãã®ããEXPLAINã®èŠæ¹ããããããã解説ãããŠããæžç±ãæ¢ããŠãããšããããã®æžç±ã«åºäŒããŸããïŒ MySQLã®ã€ã³ããã¯ã¹ããããããã©ãããä»çµã¿ã§åããŠããã®ãïŒããšããåºæ¬çãªéšåããããªãã€ã³ããã¯ã¹ãå¹ããªããªãããšãããã®ãïŒãããEXPLAINã®çµæã§æ³šç®ãã¹ããã€ã³ãããŸã§äžå¯§ã«è§£èª¬ãããŠããŸãã å
容ãå
·äœçã§ããããã£ã©ã¯ã¿ãŒã«ãã察話圢åŒã®ããæ¥œãã話ãå
¥ã£ãŠããŸããã EXPLAINã®èŠæ¹ã«ã€ããŠã®è§£èª¬ãããããããã£ãã®ããããããã€ã³ãã§ãã ãã®æžç±ã®ãããã§ãå®åã§ã®EXPLAINã®æŽ»çšã€ã¡ãŒãžãæç¢ºã«ãªã£ãæ°ãããŸãã ããŒãžæ°ãçŽ110ããŒãžãšçãã®ã§ãé£äŒã§äžæ°ã«èªã¿åããéããªãšæããŸãïŒ ä»¥äžã®ãããªæ¹ã«ç¹ã«ããããã ãšæããŸããïŒåœãŠã¯ãŸã£ãŠããæ¹ã¯ãã²èªãã§ã¿ãŠãã ããïŒ MySQLã®ã€ã³ããã¯ã¹ã«ã€ããŠåºç€ãããã£ããçè§£ãããæ¹ EXPLAIN ã®çµæããªããšãªãããèŠããŠããªããèªã¿è§£ãæ¹ãã¡ãããšç¥ãããæ¹ ããã©ãŒãã³ã¹ãæèããŠãããé©åãªã€ã³ããã¯ã¹ãèšèšã»å©çšãããæ¹ é£ããæè¡æžã¯æ«æããã¡ã ãã©ã察話圢åŒãªãèªã¿ãããããããšããæ¹ WHYããå§ããïŒ ã€ã³ã¹ãã€ã¢åãªãŒããŒã¯ãããéã ããã( @38Punkd )ã§ãã TUNAG iOS ã®éçºãäž»ã«æ
åœããŠããŸãã åã玹ä»ããæ¬ã¯ ãWHYããå§ããïŒ ã€ã³ã¹ãã€ã¢åãªãŒããŒã¯ãããéããã§ãã WHYããå§ãã! ã€ã³ã¹ãã€ã¢åãªãŒããŒã¯ãããéã äœè
: ãµã€ã¢ã³ã»ã·ããã¯ æ¥æ¬çµæžæ°èåºç Amazon 倧åŠã§åŠçå£äœã®æŽ»åãããŠããé ã«ãçæ³ã®ãªãŒããŒåãããããæ©ãã§ããããšããã£ããã§åºäŒã£ãæ¬ã§ãã WHY, HOW, WHATã®3ã€ã®åããæããŽãŒã«ãã³ãµãŒã¯ã«ã§æåãªãã人ãåããã®ã¯ âäœããããâ ã§ã¯ãªã âãªããããâ ããããŒã¡ãã»ãŒãžã®æ¬ã§ãã ããŒã ãçµç¹ãåããããã®ãªãŒããŒã·ããã®ããæ¹ããâã¢ã売ãâããè±åŽããŠææ
ã§åãã¹ããŒãªãŒãèªãéèŠæ§ã«ã€ããŠåŠã¹ãŸããã ã³ãŒããæžãã®ã¯å¿è«ãšã³ãžãã¢ã®ä»äºã®äžã€ã§ããããã®æ¬ãå§ãããWHYããå§ãããèãæ¹ã§ä»äºãããããšã§ãããžãã¹ãã³ãšããŠã®æé·ã«ãç¹ãããšæã£ãŠããŸãã æ°èŠãããžã§ã¯ããããããæ
åœãããã©ããŒã ãåŒã£åŒµãã®ãäžå®ã«æããæ¹ã«ç¹ã«ããããããŸãã ãããç®æã人Rubyå
¥é ã¹ã¿ã¡ã³ã®ãã
ããã§ãã èªåã¯TUNAGã®ããã¯ãšã³ãéçºãæ
åœããŠããŸãã åã玹ä»ããæ¬ã¯ ãããç®æã人ã®ããã®Rubyå
¥é ã§ãã èªåã¯ãããŸã§Rubyã«è§Šããããšããªãã¹ã¿ã¡ã³ã«å
¥ã£ãŠåããŠè§Šãããšã«ãªããŸãããããã§ããããããã ããæ¬ãæ¬æžã«ãªããŸãã ãããç®æã人ã®ããã®Rubyå
¥é èšèªä»æ§ãããã¹ãé§åéçºã»ãããã°ææ³ãŸã§ (Software Design plusã·ãªãŒãº) äœè
: äŒè€ æ·³äž æè¡è©è«ç€Ÿ Amazon æ¬æžã®ã³ã³ã»ããã¯ç¬¬1ç« ã®ã€ã³ãããã¯ã·ã§ã³ã§ãèªãããŠããéããRubyéçºã§å¿
èŠãªãã¬ããžã®ç¶²çŸ
çãªè§£èª¬ã«ãªããŸãã è¯ããèªãå°œããã«ã¯èªåœãæéãæç« åãè¶³ããªãã®ã§ãèªåãããã«ãªã£ããšæãããã¬ããžãäžéšæç²ããŸãã Rubyã§ã¯nilãtrue/falseãå
šãŠãªããžã§ã¯ãã§æ¯ãèããæã€ pãppãputsãprintã®éã moduleã®mix-in nilãããªããžã§ã¯ãæ±ãã§ã¡ãœãããæã€ãšããã®ã¯æ°é®®ã§ãã ãŸããããªã³ããããã°ã®éã¯å
éšä»æ§çã«ãããã°çšéãªãpã®æ¹ã奜ãŸãããšããã®ã¯çްããããã©éèŠãªéãã ãšæããŸãããïŒã¡ãªã¿ã«ppã¯é
åãªã©ãæž¡ããšå±éããŠåºåããŠãããã®ã§äŸ¿å©ïŒ moduleã®ä»çµã¿ã«ã€ããŠã¯ãç¶æ¿ãªã©ã®ä»å
±éåã¢ãããŒããšã®äœ¿ãåãã®æŽçãäžååã§ã¯ãããŸãããèªåã®äžã§ã®ã¯ã©ã¹èšèšã®å¹
ãåºãããŸããã Rubyã¯æ¹ããŠèšæ³ãå€åœ©ã§èªç±ãªèšèªã ãšæããŸããã现ããªä»æ§ãç¶²çŸ
çãã€äžå¯§ã«è§£èª¬ããŠãããæ¬æžã¯ãRubyã«åããŠè§Šããæ¹ã«ãŽã£ããã®äžåã ãšæããŸãããã²èªãã§ã¿ãŠãã ããã å®è·µVimãæèã®ã¹ããŒãã§ç·šéãããïŒ ãšããšã㌠ã§ããä»å¹Ž(2025幎)4æãã TUNAG ã® iOS ãšã³ãžãã¢ãšããŠã¹ã¿ã¡ã³ã«ãžã§ã€ã³ããŸããïŒ ç§ãä»åã玹ä»ãããã®ã¯ãå€ãã® Vimmer ã«ã¯ããããã銎æã¿ã®åèãå®è·µVimãæèã®ã¹ããŒãã§ç·šéãããïŒãã§ãã å®è·µVimãæèã®ã¹ããŒãã§ç·šéãããïŒ (ã¢ã¹ããŒæžç±) äœè
: ïœïœ
ïœ ïŒ®ïœ
ïœïœ , æ°äž åŸ è§å·ã¢ã¹ããŒç·åç ç©¶æ Amazon ç§èªèº«ãããã°ã©ãã³ã°ãå§ããã°ããã®é ã«ãããŒããŒããšããŠã¹ã®éãé »ç¹ã«è¡ãæ¥ããããšã«ç
©ããããæããããã®åé¡ãã©ãã«ã解決ãããããšèããŠããéãæ¬æžã®ãæèã®ã¹ããŒãã§ç·šéãããïŒããšãããã£ãããŒãªã¿ã€ãã«ã«åŒ·ãæ¹ãããŠæã«åããŸããã æ¬æžã®å€§ããªç¹åŸŽã¯ãçŸå Žã§ããééããã§ãããå
·äœçãªåé¡ãTips圢åŒã§121åãåãäžãããã®è§£æ±ºçã解説ããŠããç¹ã«ãããéåžžã«å®è·µçãªå
容ãšãªã£ãŠããŸããäžã§ãç¹ã«å°è±¡ã«æ®ã£ãŠããã®ã¯ãVimç¹æã®ã¢ãŒãïŒNormal, Insert, VisualïŒã®æŠå¿µãç»å®¶ã«ãªããããŠèª¬æããŠããç®æã§ããã®æ¬ãéããŠVimãç¿åŸããã°ããŸãã§çµµç»ãæãããã«ã³ãŒãã£ã³ã°ãé²ããããããã°ã©ãã³ã°ãããäžå±€æ¥œãããªãã ãããšæããããŠãããŸãã ç§èªèº«ã¯éçºãã©ãããã©ãŒã ã®äºæ
ã§äž»ã«Xcodeã䜿çšããŠããŸãããæ¬æžã®åœ±é¿ããããVimã®ããŒãã€ã³ãã¢ãŒããèšå®ããŠVimã©ã€ã¯ãªæäœã§éçºãé²ããŠããŸãã幞ããªããšã«ãæ¬å®¶ã§ããviãVimãNeovimã¯ãã¡ãããVSCodeãZedãããã«ã¯ç«¶åãšãããEmacsã§ããæ¡åŒµãã©ã°ã€ã³ïŒEvilïŒã䜿ãã°Vimã®ããŒãã€ã³ããå©çšã§ãããããæ¬æžã§åŸãã¹ãã«ã¯æ§ã
ãªãšãã£ã¿ç°å¢ã§å¿çšå¯èœã§ãã Emacs ã§ Vim æäœããå³(Evil) æåŸã« ãããã§ããã§ããããã ä»åã¯ã4åã®ã¡ã³ããŒãããããã®èŠç¹ã§ããããããæžç±ãã玹ä»ããŸããã æè¡çãªåŠã³ãæ·±ããæ¬ãæ°ããèŠç¹ãäžããŠãããæ¬ãªã©ãæ§ã
ãªãžã£ã³ã«ã®æžç±ãéãŸã£ãã®ã§ã¯ãªãã§ããããã æ°ã«ãªãäžåãèŠã€ãã£ãæ¹ã¯ããã®é·æäŒã¿ã®æ©äŒã«ãã²æã«åã£ãŠèªãã§ã¿ãŠãã ããïŒ æåŸãŸã§ãèªã¿ããã ããããããšãããããŸããïŒïŒ æ¡çšæ
å ± ã¹ã¿ã¡ã³ã§ã¯ãå
šæè¡é åã§ãããã¯ããæé·ãããŠãããšã³ãžãã¢ããã¶ã€ããŒããããã¯ããããŒãžã£ãŒã®æ¹ãåéããŠããŸãã ãããèå³ãæã£ãŠããã ããããäžèšãããå¿åãã ããïŒ herp.careers
çãããããã«ã¡ã¯ã æ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ CTOå®€ã®æ ¹å²žã§ãã ä»å¹Žã®4æã« æ°åæªçµéšãšã³ãžã㢠ãšããŠã¹ã¿ã¡ã³ã«å
¥ç€ŸããŸããïŒ ã©ãããããããé¡ãããããŸãâºïž æ¬æ¥ã¯ã RubyKaigi 2025 ã®ã¬ããŒãããå±ãããŸãïŒ ã¹ã¿ã¡ã³ã¯ãä»åãã©ããã¹ãã³ãµãŒãšããŠç·å¢8åã§åå ããŸããð ç§ã¯ä»åãRubyKaigiååå ãªã®ã§ãã©ããªäœéšãåŸ
ã£ãŠããã®ãããããããªããåå ããŸããð³ RubyKaigi 2025æŠèŠ é嬿éïŒ2025幎4æ16æ¥ïŒæ°ŽïŒã18æ¥ïŒéïŒ éå¬å ŽæïŒæåªççæ°æåäŒé€š ä»å¹Žã®éå¬å°ã¯æåªçð ç¹ç£åã®ã¿ããã«ã¡ãªãã ãªã¬ã³ãžè²ã®ããŽããšãŠãå°è±¡çã§ãâš RubyKaigiã§ã¯æ¯æ¥ããŸããŸãªã»ãã·ã§ã³ãšããŒã¹ãéãããŠããããããããšåã£ãã®ã§ããã®æ°ã¥ããåŠã³ãã玹ä»ããŸãð£ïž ã»ãã·ã§ã³åå ã¬ããŒãâïž ãRuby Taught Me About Under the Hoodã / @ima1zumi ãã UnicodeïŒãŠãã³ãŒãïŒã«ã€ããŠã®ãç»å£ã§ãïŒ ããããç§ã¯Unicodeãšãããã®ãç¥ããªãã£ãã®ã§ããã ãšãŠãé¢çœãã£ãã§ãã 以äžãç»å£ã®å
容ãå°ãã玹ä»ããŸãð€ Unicodeãšã¯ãäžçã®æ§ã
ãªèšèªãæžåŒãèšå·ã«ãçªå·ãå²ãåœãŠãŠå®çŸ©ããæšæºã®æåã³ãŒãã 1ã€ã²ãšã€ã®æåã«çªå·ãå²ãåœãŠãããšã§ãããã°ã©ããŒã¯ãã©ã®èšèªãæ··ãã£ãŠããŠããã³ã³ãã¥ãŒã¿ãŒã«ä¿åãåŠçãäŒéããããããªæåãšã³ã³ãŒãã£ã³ã°ãåããã¡ã€ã«ãããã°ã©ã ã®äžã«äœãããšãã§ãããããã§ãð ãããŠããã®Unicodeã«ã¯ã æžèšçŽ ã¯ã©ã¹ã¿ ãšããUnicodeããã¹ãã1æåãã€åå²ããã¢ã«ãŽãªãºã ãããããã§ãð¡ åãããããèšããšãUnicodeã«ãããŠèªç¶ãªâ1æåâã衚ãåäœã§ãïŒ æžèšçŽ ã¯ã©ã¹ã¿ã®æŠå¿µããªããšäœãèµ·ããã®ãïŒ äŸãã°ãð§âð§âð§âãã®çµµæåã¯äœæåã§ããïŒããšèããããã å€ãã®æ¹ã1æåãšçããã®ã§ã¯ãªãã§ããããïŒ ããããªãããå®ã¯ãã®ð§âð§âð§ã¯ã â ðšãâ¡"" ãâ¢ð©ãâ£""ãâ€ðŠãâ¥"" ãâŠð§ ãã®ïŒã€ã®èŠçŽ ãããªã£ãŠããããã§ãð³ 人éã¯ãð§âð§âð§=1æå æ©æ¢°ã¯ããð§âð§âð§=7æå ãšæãããã®å·®åãããã°ã®åå ã«ãªããšã®ããšã ããã§äººéã1æåãšæãããã®ãæ©æ¢°ã1æåãšæããããããã«ããã®ã æžèšçŽ ã¯ã©ã¹ã¿ ãªã®ã ããã§ãð¡ çµµæåã®æžèšçŽ åå²ã®è¡šãçºããŠã¿ãã®ããé¢çœãã£ãã§ãïŒ ãGoodbye fat gem 2025ã / @ktou ãã Fat gemã«ã€ããŠã®ãç»å£ã§ãïŒ ãŸããŸãç§ã¯Fat gemããªããªã®ãç¥ããªãã£ãã®ã§ããã Fat gemãšã¯ããã«ãæžã¿ãã€ããªãŒïŒ0or1ã®äºè
æäžïŒãå
¥ã£ãgemïŒäŸ¿å©ãªæ©èœãããäœ¿ãæ©èœãããããããéšååãããããªãã®ïŒã®ããšã ã€ãŸããããã䟿å©ãªãã®ãªã®ã ãšããããšãããããŸããã ããããªãããäœãåŽã¯å€§å€ãªã®ã ãšããããšãã話ããã ããŸããã å
·äœçã«ã¯ä»¥äžã®3ç¹ã倧å€ãªãã€ã³ããªã®ã ããã§ãã ç°å¢èšå®ãé£ãã è匱æ§å¯Ÿå¿ãé
ããã¡ ã¡ã³ããã³ã¹ãå€§å€ ãã®3ç¹ã«ã€ããŠãå°ãã ã詳现ãç¶ŽããŸãã ç°å¢èšå®ãé£ãã âFat gemã¯ãªãªãŒã¹ã«æéããããããrequireã«ãæéãããããããRubyã䜿ãç°å¢ããªããªãæŽããªãã è匱æ§å¯Ÿå¿ãé
ããã¡ âFat gemå
ã«ããå€éšã©ã€ãã©ãªã«è匱æ§ãèŠã€ãã£ãéã®ä¿®æ£ã倧å€ã ã¡ã³ããã³ã¹ãå€§å€ âFat gemã¯éåžžã¯ãã¹ã³ã³ãã€ã«ããŠäœãã®ã«å¯Ÿããå€ãã®å€éšã©ã€ãã©ãªãããã§ãªããããå€éšã®å€éšã©ã€ãã©ãªãä¿®æ£ããã床ã«åé¡ãèµ·ããŠããŸãã ãã®ãããªçç±ã§äœãã®ã倧å€ã«ãªã£ãŠããããã§ãã ãªããšãªã䜿ã£ãŠããRubyã§ãããRubyããµããŒããããã®ãããªã·ã¹ãã ããã£ãŠåããŠäœ¿ãããã®ãªã®ã ãšããããšãçè§£ããŸããð ãMatz Keynoteã / @yukihiro_matz ãã AIæä»£ã®ããã°ã©ãã³ã°ã«ã€ããŠã®ãç»å£ã§ãïŒ ãã¢ã«ãã¡ã·ã³ãããŒã ïŒç¬ãçãããããŠãããã¡ã«èªåãå®¶æã®äžã®ãªãŒããŒã ãšèª€èªããŠããŸããèšãããšãèããªããªã£ãŠããçŸè±¡ïŒãšéã®çŸè±¡ãã人éãšAIã®é¢ä¿ã®éã§èµ·ããã®ã§ã¯ãªããããšããããšã屿§ããå
容ã§ããã ã€ãŸãã人éãAIããŸããŸã«ãªã£ãŠããŸããšããããšã§ãã ããã§éèŠãªã®ããäœãAIã«ãé¡ãããŠãäœãèªåã§ããã®ãããã£ããèããããšã§ãð¡ äŸãã°ã人éãããã¹ãä»äºãšããŠãé¡§å®¢ã®æåã®æ±²ã¿åããæããããŠããŸããã ç§ãšããŠã¯çŸç¶ãã§ã«ãAIããŸããŸã§ãããšæãããšãå€ã
ãããŸãããä»åŸAIã¢ã·ã¹ãã³ãŒãã£ã³ã°ã«åãçµãã§è¡ãã«ãããããŸãã«ãã®èãæ¹ã¯éèŠãªããšã ãšæããŸããã DrinkUpã§ã®åŠã³ðº RubyKaigiã®çŽ æµãªãšããã¯ã»ãã·ã§ã³ããåŠã¶ã ãã§ãªããã¹ãã³ãµãŒäŒæ¥ãéå¬ããDrinkUpã€ãã³ãã§ã«ãžã¥ã¢ã«ã«ã話ããªããåŠã³ãæ·±ããããããšã§ãïŒç§ãååŠè
ã§ããããšãäŒãããšããšãŠãç±å¿ã«æããŠãããŸããã äŸãã°ãåºç€ã®åºã§ãããªããžã§ã¯ãæåã«ã€ããŠã ããªããžã§ã¯ãæåãšããã®ã¯ãç°¡åã«èšããšãé³¥ãšããããã®ããé£ã¶ãšãããåäœãããããšããé¢ä¿æ§ãå®çŸ©ããããé³¥ãšãããã®ã®ãã¯ã©ã¹ãïŒããç§ãªã©ïŒãå®çŸ©ãããã§ãããããããèãæ¹ã ããããšååŠè
ã«ããããããäŸãçšããŠæããŠãã ãããŸããð¡ ãšãŠããããããããŠãä»ãŸã§ããã€ã¡ãŒãžãæ¹§ããæ°ãããŸãð Rubyã«ç²Ÿéãããæ¹ãã¡ãšè¿ãè·é¢ã§ã話ã§ãã貎éãªæ©äŒã§ããïŒ ä»ç€ŸããŒã¹ã§ã®åŠã³ð åæ§è±ããªããŒã¹ã墿ãã§ãã©ãããåãããè¿·ããŸããð 2æ¥ç®ããã¯åããŒã¹ãåãã¹ã¿ã³ãã©ãªãŒãè¡ãããŠããŠããšãŠãçãäžãã£ãŠããŸããâš ãããªäžãç§ã1çªã«å
¥ã£ãã®ã¯è»¢è·ãã©ããããã®ããŒã¹ã Rubyãéžã°ãç¶ããçç±ãæè¡ãã¬ã³ãã®å€åã«åºã¥ããŠã説æããã ããŸããïŒ RubyKaigi 2025 転職ドラフトPRトーク - Speaker Deck speakerdeck.com ãšã³ãžãã¢ãšããŠã©ããªåã身ã«ã€ããããä»ç®ã«æžããŠè²Œããšããã¯ãŒã¯ã«ããã£ã¬ã³ãžðª ç§ã¯æ°åæªçµéšãšããããšã§ããããã°ã©ãã³ã°åºç€åããšå€§ããæžããŸããâïž åããŒã¹ã§ããããã®å°éé åã«ããããã¬ã³ããç¥ãããšãã§ããå匷ã«ãªããŸããã ã¹ã¿ã¡ã³ã®ããŒã¹åºå±ð ç§ãã¡ãããŒã¹ãåºå±ããŸããïŒ ç§ãã¡ã¯ãèªç€ŸãµãŒãã¹ãTUNAGãã®ãããã£ããæ©èœãçšããŠãæœéžã€ãã³ããè¡ããŸããïŒåœéžãããæ¹ã«ã¯ãã¢ãã€ã«ããããªãŒããã¬ãŒã³ãð å€ãã®æ¹ã«ãTUNAGãã®å®éã®ç»é¢ãèŠãŠããã ããŠãå¬ããã£ãã§ãâºïž ææ³ð ç§ãäœããèšãããã®ã¯ãRubyã³ãã¥ããã£ãŒã ç±ããŠåªããã³ãã¥ããã£ãŒ ã ãšããããšã§ãð èªåãååŠè
ã§ããããšã«ãã¯ããã¯åŒãç®ãæããŠããŸããããçµããããã«ã¯ãã£ãããããªæ°æã¡ãæ¶ãå»ã£ãŠããŸããã ããããã RubyåŠç¿ãžã®ææ¬²ã®é«ãŸã ãæããŠããŸãã ã«ã³ãã¡ã¬ã³ã¹ã®å
容ãä»å¹Žã¯å
šç¶ããããªãã£ãããã©ã1幎éåŠãã æ¥å¹Žã ã£ããã©ãããããããããã«ãªãã ããããšããã¯ã¯ã¯ã¯ããä»å¹ŽåºäŒããRubyistã®çãããšãã£ãšç±ãèªããããã«ãããŸãã¯èªåã®ç¥èéãå¢ãããŠãããªããŠã¯ïŒããšããææãèœçãããšæããŸãã ããããæå³ã§ãå
¥ç€ŸçŽåŸã«ãã®ãããªæž©ããã³ãã¥ããã£ãŒã§ä»åŸã®åŠç¿ã¢ãããŒã·ã§ã³ãé«ããããç§ã¯ããšãŠãæµãŸãããªãšæã£ãŠããŸãã æ¥å¹Žã®RubyKaigiã«æé·ããç§ã§æ»ã£ãŠæ¥ããããããæ¥ã
粟é²ã§ãðª ãŸããä»å¹Žã¯ããŒã¹ã®åºå±ã®ã¿ã ã£ãã®ã§ãããæ¥å¹Žã¯DrinkUpã®äŒç»ã«ãææŠããRubyã³ãã¥ããã£ãŒãšã®ã€ãªãããããã«æ·±ããŠãããããšæã£ãŠããŸãð¥ ã€ãã³ãç»å£ã®ãç¥ããð¢ å®ã¯ã ãã¯ãããŠã®RubyKaigi ãããã£ãšãµããããäŒãã ãšããã€ãã³ãã§ç»å£ããããšã«ãªããŸããâš æ¥æïŒ2025幎5æ20æ¥ïŒç«ïŒ19:00ïœ éå¬å Žæ : primeNumberãOffice Lounge (ç®é»é§
çŽé) åå è²»çš : ç¡æ ãã®ã€ãã³ãã§ã¯ãç§ãã¯ãããŠRubyKaigiã«åå ããŠåŠãã ããšãå¿å¢ã®å€åãªã©ãç身倧ã§ã話ãããäºå®ã§ãã å°ãã§ãèå³ããæã¡ããã ããŸãããããã²ãã§ãã¯ããŠããã ãããå¬ããã§ãïŒ è©³çŽ°ã¯ãã¡ãã®ãªã³ã¯ããã芧ããã ããŸãïŒ pn-developer-lounge.connpass.com äžç·ã«åŠã³ã亀æµã§ããããšã楜ãã¿ã«ããŠããŸãð ãããã«ð· æåŸãŸã§èªãã§ããã ãããããšãããããŸãð ã¹ã¿ã¡ã³ã§ã¯ãRubyãRubyã³ãã¥ããã£ã奜ããªãšã³ãžãã¢ãçµ¶è³åéäžã§ãð herp.careers åèïŒãšã³ãžãã¢ã®ã«ãžã¥ã¢ã«é¢è«Q&AããèŠãã¹ã¿ã¡ã³ã®å§¿ note.com
ã¯ããã« ããã«ã¡ã¯ïŒ æ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ ã«ããã¯ãšã³ããšã³ãžãã¢ãšã㊠2025幎1æ ã«å
¥ç€ŸããŸããããããã§ãã ãããŸã§ã¯äž»ã«Rubyã䜿ã£ãããã¯ãšã³ãéçºã«æºãã£ãŠããŸãããçŸåšã¯ãSREïŒSite Reliability EngineeringïŒãDevExïŒDeveloper ExperienceïŒã®åäžãããã·ã§ã³ãšãããã©ãããã©ãŒã éšã«æå±ããŠããŸãã ãã®èšäºã¯ã ã¹ã¿ã¡ã³ã®æ¡çšãµã€ããèŠãŠãå°ãã§ãèå³ãæã£ãŠãã ãã£ãŠããæ¹ ã«ãžã¥ã¢ã«é¢è«ãåããŠã¿ãããè¿·ã£ãŠããæ¹ å®éã«å
¥ç€Ÿããã¡ã³ããŒã®ãçã®å£°ããèããŠã¿ããæ¹ ã«åããŠæžããŠããŸãã å
¥ç€ŸããçŽ4ã¶æçµéããä»ãèã§æããŠããã¹ã¿ã¡ã³ã®ãªã¢ã«ãªå§¿ããäŒãããããšã§ãçããã®çåãäžå®ãå°ãã§ãè§£æ¶ã§ããã°å¬ããã§ãã ã¹ã¿ã¡ã³ãéžãã çç± - æ°ããªæè¡é åãžã®ææŠãšãéçšçµéšãžã®ææ¬² ç§ãã¹ã¿ã¡ã³ãéžãã çç±ã¯ã倧ããåããŠäºã€ãããŸãã äžã€ã¯ãSREïŒSite Reliability EngineeringïŒãDevExïŒDeveloper ExperienceïŒãšãã£ãããããŸã§æ·±ãé¢ããããšããªãã£ãæ°ããæè¡é åã«ææŠã§ããç°å¢ãžã®åŒ·ãæåŸ
ã§ããèªèº«ã®ã¹ãã«ã»ãããåºããããåžå ŽäŸ¡å€ã®é«ããšã³ãžãã¢ãç®æããããšèããŠããŸããã ãããŠããäžã€ã¯ããã©ãããã©ãŒã éšã§ã·ã¹ãã ã®å®å®çšŒåãæ¯ããããã®ç¥èãã¹ãã«ãç¿åŸããããšããåŒ·ãææ¬²ããã£ãããã§ãããããŸã§ã®éçºçµéšã«å ããã€ã³ã·ãã³ã察å¿ã®èª¿æ»ãåæãšãã£ãéçšçµéšãç©ãããšã¯ããšã³ãžãã¢ãšããŠã®å¹
ãåºããäžã§äžå¯æ¬ ã ãšèããŠããŸãã ã«ãžã¥ã¢ã«é¢è«ã§ã¯ãäž»ã«ã¹ã¿ã¡ã³ã®äºæ¥å
容ãæè¡ã¹ã¿ãã¯ãããŒã ã®é°å²æ°ãªã©ã«ã€ããŠã話ã䌺ããŸããããã®äžã§ããã©ãããã©ãŒã éšãã·ã¹ãã ã®ä¿¡é Œæ§åäžã«éèŠãªåœ¹å²ãæ
ã£ãŠããããšãç¥ããéçºã ãã§ãªããéçšãšããåŽé¢ããããµãŒãã¹ãæ·±ãçè§£ããè²¢ç®ã§ããç°å¢ã«é
åãæããŸããã ã¹ã¿ã¡ã³ã® çµå¶ç念 ããŒãžã«æžãããŠãã Our ValueïŒè¡åæéïŒ ã®1ã€ã« ãWork BravelyïŒå€§èã«æ»ãã倱æãææŠãè®ããïŒã ããããŸããç§ã¯ãã® Value ã«èäžãæŒãããæªçµéšã®é åã«ãç©æ¥µçã«èžã¿åºãããšãåŸæŒãããŠãããæåããããšæããéçšçµéšãéããŠåŸãããç¥èŠã¯ãä»åŸã®éçºæ¥åã«ãããŠãå¿
ãæŽ»ããããšç¢ºä¿¡ããå
¥ç€Ÿã決æããŸããã çŸåšã®æ¥åå
容 - æ°ããããšãžã®ææŠãšåŠã³ã®æ¥ã
ãã©ãããã©ãŒã éšã®äžå¡ãšããŠãçŸåšã¯äž»ã«ä»¥äžã®æ¥åã«æºãã£ãŠããŸãã ã©ã€ãã©ãªã®ããŒãžã§ã³ã¢ããå¯Ÿå¿ : ã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ãšã»ãã¥ãªãã£ãåžžã«é«ãã¬ãã«ã§ç¶æãããããDependabot ãæŽ»çšããååãšããŠå¹³æ¥æ¯æ¥ã©ã€ãã©ãªã®ããŒãžã§ã³ã¢ãã察å¿ãè¡ã£ãŠããŸããæ¥ã
ã®å°ããªå€æŽãç©ã¿éããããšã§ãåžžã«ææ°ã®ç¶æ
ãä¿ã¡ãã»ãã¥ãªãã£ãªã¹ã¯ãæå°éã«æããŠããŸããããŒãžã§ã³ã¢ããã®éã«ã¯ã圱é¿ç¯å²ã®èª¿æ»ãåäœç¢ºèªãäžå¯§ã«è¡ããã·ã¹ãã å
šäœã®çè§£ãæ·±ããŠããŸãã ãããžã§ã¯ãã¡ã³ããŒãšããŠã®ããã¯ãšã³ãéçº : ãã©ãããã©ãŒã éšã®ããã·ã§ã³ã§ããSRE/DevExåäžã«ç¹ããéçºã ãã§ãªãããããã¯ãéçºã®ãããžã§ã¯ãã«ãããã¯ãšã³ããšã³ãžãã¢ãšããŠåå ããæ©èœéçºãªã©ãæ
åœããŠããŸããæè¿ã§ã¯ãTUNAGãæäŸããã¿ã¹ã¯æ©èœã«é¢ããéçºã«æºãã£ãŠããŸãã ãªã³ã³ãŒã«æ
åœ : ã·ã¹ãã ã«åé¡ãçºçããéã«è¿
éã«å¯Ÿå¿ã§ãããããããŒã ã¡ã³ããŒãšäº€ä»£ã§ãªã³ã³ãŒã«å¯Ÿå¿ãè¡ã£ãŠããŸããã¹ã¿ã¡ã³ã§ã®çµéšã¯ãŸã æµ
ããåå ç¹å®ã«æéããããããšãå€ãã§ãããããŒã ã¡ã³ããŒã®ååãåŸãªããç·åŒµæãšè²¬ä»»æãæã£ãŠåãçµãã§ããŸãã ãã©ãããã©ãŒã éšã§ã¯ãçŸåšå°æ°ã®ã¡ã³ããŒã§ãSREãDevExã«é¢ããå¹
åºãæ¥åãååããŠé²ããŠããŸããã©ã€ãã©ãªã®ããŒãžã§ã³ã¢ãã察å¿ãæ©èœéçºã®ãµããŒãããªã³ã³ãŒã«å¯Ÿå¿ãªã©ãæ
åœããäžã§ãããããã®åŸæãªããšãèå³ã®ããåéã§å©ãåããªãããæ¥ã
æ¥åã«åãçµãã§ããŸããå°äººæ°ã®ããŒã ã ããããããäºãã®ã¹ãã«ãç¥èãè£å®ãåããªãããå¹
åºãæè¡é åã«è§Šããããšãã§ããŠããŸãã github.com biz.tunag.jp å
¥ç€ŸããŠåãã£ãã¹ã¿ã¡ã³ã®ç¹åŸŽ - æåŸ
ãè¶
ãããªã¢ã« å®éã«å
¥ç€ŸããŠã¿ãŠãããªãã»ã©ãã¹ã¿ã¡ã³ã¯ããããäŒç€Ÿãªã®ãïŒããšæããç¹åŸŽãããã€ãã玹ä»ããŸãã æè¡çãªç¹åŸŽ - åžžã«é²åãæ±ããå§¿å¢ Dependabotã«ããç¶ç¶çãªã©ã€ãã©ãªæŽæ° : DependabotãæŽ»çšããèªåæŽæ°ã®ä»çµã¿ããã£ãããšæ ¹ä»ããŠãããåžžã«ææ°ã®æè¡ãåãå
¥ããã»ãã¥ãªãã£ãªã¹ã¯ãäœæžããæèã®é«ãã«é©ããŸããã ãã©ã³ã¯ããŒã¹éçº : é »ç¹ãªããŒãžãšè¿
éãªãã£ãŒãããã¯ã«ãŒãã«ãããéçºã¹ããŒããšå質ã®äž¡ç«ãç®æããã©ã³ã¯ããŒã¹éçºãæ¡çšããŠããããšã§ãããŒã ã®äžäœæãšå¹ççãªéçºã宿ããŠããŸãã AIæè¡ã®ç©æ¥µçãªæŽ»çšæšå¥š : éçºå¹çãçç£æ§åäžã®ãããGitHub Copilotãªã©ãå€ãã®ãšã³ãžãã¢ãå©çšããŠãããæ°ããæè¡ãžã®ã¢ã³ããã®é«ããšããããç©æ¥µçã«åãå
¥ããããšããæåãæããŠããŸããDevin ã®æŽ»çšç¶æ³ã«ã€ããŠã¯ã ãã¡ã ã®ããã°èšäºãã芧ãã ããã çµç¹çãªç¹åŸŽ - ãã©ãããªé£æºãšæé·æ¯æŽ æ±äº¬ã»åå€å±ã®äºæ¬ç€Ÿå¶ãšãã©ãããªé£æº : ã¹ã¿ã¡ã³ã¯æ±äº¬ãšåå€å±ã«æ¬ç€Ÿã眮ãäºæ¬ç€Ÿå¶ãæ¡çšããŠããããšã³ãžãã¢ã¯äž¡ãªãã£ã¹ã«åšç±ããŠããŸããããããªãããç©ççãªè·é¢ãæããããªãã¹ã ãŒãºãªã³ãã¥ãã±ãŒã·ã§ã³ãåããŠãããæ ç¹ã«é¢ãããããŒã ãšããŠäžäœæãæã£ãŠåããŠããŸãã 瀟å¡ã³ãã¥ãã±ãŒã·ã§ã³ä¿é²ã®ä»çµã¿ : 瀟å¡å士ã®äº€æµã掻çºã«ããããã瀟å
ã§ã®æèŠªäŒãéšçœ²ãè¶
ããŠã®äº€æµã€ãã³ããªã©ã宿çã«éå¬ããŠããŸãã æè¡ã«ã³ãã¡ã¬ã³ã¹ãžã®ç©æ¥µçãªåå æ¯æŽ : äŒç€ŸãšããŠããšã³ãžãã¢ã®æé·ãæ¯æŽãããããæè¡ã«ã³ãã¡ã¬ã³ã¹ãžã®åå ãç©æ¥µçã«æšå¥šããåå è²»çšã®è£å©ãªã©ã®æ¯æŽå¶åºŠãèšããŠããŸããæè¿ã§ã¯ãRubyKaigi 2025 ã«ä»éšçœ²ãå«ããããã¯ãšã³ããšã³ãžãã¢å
šäœã§åå ããææ°ã®Rubyèšèªã«é¢ããååãä»ç€Ÿã®ãšã³ãžãã¢ãšã®äº€æµãéããŠå€ãã®åºæ¿ãåããŸãããã«ã³ãã¡ã¬ã³ã¹ã§åŸãç¥èãåºæ¿ã¯ãæ¥ã
ã®æ¥åã«ãããè°è«ã®ãã£ãããšãªãã ãã§ãªãããšã³ãžãã¢ãšããŠã®æé·ã®ç³§ãšãªã£ãŠããŸãã rubykaigi.org äŒç€Ÿã®é°å²æ° - ææŠãåŸæŒãããã«ã«ãã£ãŒãšãªãŒãã³ãªå¯Ÿè©± è³è³ã倧åã«ããæå : æ¥ã
ã®æ¥åã«ãããææãè²¢ç®ã«å¯Ÿããéšçœ²ã圹è·ã«é¢ãããäºãã«è³è³ãéãåãæåãæ ¹ä»ããŠããŸãã ãªãŒãã³ãªã³ãã¥ãã±ãŒã·ã§ã³ : éšçœ²ã圹è·ã®å£æ ¹ãè¶ããŠæ°è»œã«ã³ãã¥ãã±ãŒã·ã§ã³ãåããé°å²æ°ããããäŒç€Ÿå
šäœã®åããç®æšãå
±æããããç°å¢ã§ãã æ±äº¬ãªãã£ã¹ã®ç¹åŸŽ : ç§ãæå±ããæ±äº¬ãªãã£ã¹ã¯ãããžãã¹ãµã€ãã®ã¡ã³ããŒãå€ãããªãã£ã¹å
šäœã掻æ°ã«æºã¡æº¢ããŠããŸããæ§ã
ãªéšçœ²ã®ã¡ã³ããŒã掻çºã«ã³ãã¥ãã±ãŒã·ã§ã³ãåã£ãŠããããšãã«ã®ãã·ã¥ãªé°å²æ°ã®äžã§æ¥åã«åãçµãããšãã§ããŸãã ãããã« å
¥ç€ŸããŠãŸã æ¥ã¯æµ
ãã§ãããæè¡çãªææŠãã§ããç°å¢ããããŠéšçœ²ãæ ç¹ãè¶ããŠååãåãçµç¹æåã®äžã§ãæ¥ã
å€ãã®ããšãåŠã³ãåºæ¿ãåããŠããŸãã ãã®èšäºãèªãã§ãã¹ã¿ã¡ã³ã«å°ãã§ãèå³ãæã£ãŠããã ãããå¬ããã§ãã ã¹ã¿ã¡ã³ã§ã¯ããããã¯ãéçºã«é¢ããå
šãŠã®é åã§ãããã¯ãè·çš®ã®æ¡çšãããŠããŸãã ãã©ãããã©ãŒã éšã«èå³ãæã£ãŠããã ããŸããããSite Reliability Engineer (SRE)ããœãããŠã§ã¢ãšã³ãžãã¢ïŒDeveloper ExperienceïŒãããå¿åãã ãããçãããšã話ã§ããã®ã楜ãã¿ã«ããŠããŸãã æåŸãŸã§ãèªã¿ããã ããããããšãããããŸããã herp.careers herp.careers herp.careers
ã¿ãªãããããã«ã¡ã¯ïŒåããŸããŠã®æ¹ã¯ãåããŸããŠïŒ 2025幎4æããæ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ã«ãžã§ã€ã³ããŸãããiOSãšã³ãžãã¢ã®ãšããšããŒ( @Ktombow1110 )ããšãæå²¡ã§ãïŒ 2025幎4æ9æ¥ãã11æ¥ã§éå¬ããã try! Swift Tokyo 2025 ã«åŒç€Ÿããã3åã®ã¡ã³ããŒã§çŸå°åå ããŠããŸããïŒ ä»åã¯å
¥ç€Ÿãšã³ããªå«ããŠãå°è±¡ã«æ®ã£ãã»ãã·ã§ã³ãäŒå Žã®é°å²æ°ãªã©ããäŒãã§ããã°ãªãšæããŸãã try! Swift ãšã¯ try! Swift ãšã¯ãSwift ã䜿ã£ãéçºã®ããŠããŠãææ°ã®äºäŸãåŠã³ãå
±æããããã«äžçäžã®éçºè
ãéãåœéçãªã€ãã³ãã§ããæ¥é ã® Swift ç¥èãã¹ãã«ãæ«é²ããååãåãããšãç®çã«éå¬ãããŸãã tryswift.jp ã€ãã³ãã®äž»ãªããã°ã©ã ã¯ãåºèª¿è¬æŒãLT(ã©ã€ããã³ã°ããŒã¯)ãã¹ãã³ãµãŒããŒã¹ãParty(æèŠªäŒ)ãªã©ã§ãã äžçäžããéçºè
ãéãŸããããäŒå Žã«ã¯æ§ã
ãªåœç±ã®æ¹ãããã£ããããŸãã ãã®ãããã»ãã·ã§ã³ã¯åºæ¬çã«ã¯è±èªã§è¡ãããŸãããè±èªãèŠæãªæ¹ããŸãã¯æ¥æ¬èªãèŠæãªè±èªè©±è
ã«åããŠéèš³ãè¡ãããŸãã ä»åã®ã€ãã³ãã§ã¯ãé蚳㫠AI åæéèš³ãµãŒãã¹ã Flitto ããå°å
¥ãããå
¬åŒã¢ããªãéããŠãªã¢ã«ã¿ã€ã ã§ç¿»èš³ãããçºè¡šãèãããšãã§ããããã«ãªããŸããã Flitto ã®çŽ¹ä» ä»åã®éå¬å°çŽ¹ä» æšå¹Žã¯ãæžè°·ã®ãã«ãµãŒã«æžè°·ãã¡ãŒã¹ãã§éå¬ãããŸããã æšå¹Žã®ã€ãã³ãã®æ§åãææ³ã«ã€ããŠã¯ãåŒç€Ÿã®éæš( @38Punkd )ãèšäºãå
¬éããŠããã®ã§ããã²ã芧ãã ããã tech.stmn.co.jp ä»å¹Žã®äŒå Žã¯ãç«å·åžã«ããç«å·ã¹ããŒãžã¬ãŒãã³ã§ãã äŒå ŽåšèŸºã¯èªç¶ãè±ãã§ãè¿ãã«é£²é£åºãå€ããéåžžã«éãããããå Žæã ãšæããŸããïŒ å£ç¯ãã¡ããã©æ¡ã®ææã§ã飿¥ããæåèšå¿µå
¬åã§æ¡ã楜ããåå è
ãå€ãèŠãããŸããã ããã«ãäŒå Žèªäœãæ¬æ Œçãªã·ã¢ã¿ãŒã®é°å²æ°ã§ãã»ãã·ã§ã³ãèŽãã«ã¯æé«ã®ç°å¢ã ã£ããšæããŸãã ç«å·ã¹ããŒãžã¬ãŒãã³ã®å
¥ãå£ äŒå Žå
ã®æ§å Swift 10åšå¹ŽïŒ ã€ãã³ãå
容 ããŠãããããã€ãã³ãã®å
容ã«ã€ããŠè§ŠããŠãããŸãã æ°ã«ãªã£ãã»ãã·ã§ã³ ä»åã¯LTãå«ããŠ33äººã®æ¹ãç»å£ãããŸããã å
šãŠã®æ¹ã玹ä»ããã®ã¯é£ããã®ã§ãå人çã«å匷ã«ãªã£ãã»ãã·ã§ã³ã玹ä»ããŠãããããšæããŸãã çŽ æ©ãå®çŸããåªããã¢ããªãã¶ã€ã³ ä»åã® try! Swift ã®äžã§ãç§ãæãæåãããŸãã«ãææšãããšèšããã»ãã·ã§ã³ããã¡ãã§ããã人æ°ã«ã¡ã©ã¢ããªãHalideãã®éçºè
ã§ããSebastiaan de With æ°ãç»å£ããã¢ããªã±ãŒã·ã§ã³ã®ãã¶ã€ã³ããããè¯ããã®ãäœãããã«ã¯ã©ãããã°è¯ããããšããæ¬è³ªçãªåãã«ã€ããŠããHalideããå®äŸã«è§£èª¬ããŠãããŸããã ãã®ã»ãã·ã§ã³ã§èªãããããŠãŒã¶ãŒäœéšã远æ±ããããã®åŒ·ããã ããã¯ããŸãã«åŒç€Ÿã® Value ã§ãã âFar Beyondâ ã®ç²Ÿç¥ã«ãéãããã®ããããšæããŸããã ç§ã¯ãã®ã»ãã·ã§ã³ã«æåããŠãæ®ãïŒæ¥éã Halide ãã€ã³ã¹ããŒã«ããŠåçãæ®ã£ãŠããŸããããšãŠãäœéšãè¯ãã£ãã®ã§ãããããã§ãïŒ youtu.be J1ãããµãã«ãŒããŒã FCçºç°ãŒã«ãã¢ã®Immersiveåç»ãæ®åœ±ãSwiftã§Viewerãå®è£
ãäœéšäŒå®æœãã Cyber Agent ã«æå±ãã visionOS Engineer Meetup ãäž»å¬ãããŠããæéšããã®ã»ãã·ã§ã³ã§ãã ãµãã«ãŒJ1ãªãŒã°æå±ã® FCçºç°ãŒã«ãã¢ã® Immersive Video(没å
¥åæ å)ãæ®åœ±ããç¹å¥äŒå¡åãã«å®æœããäœéšäŒã§åŸããã貎éãªç¥èŠã«ã€ããŠã話ã䌺ãããšãã§ããŸããã å®éã«äœéšãããŠãŒã¶ãŒãããæ¥œããã£ãããšã³ã¡ã³ããããããšã³ãžãã¢å¥å©ã«å°œãããªããšèããŠããŠæããŸããã äœéšäŒã«åå ãããŠãŒã¶ãŒããå¯ãããããïŒæ®æ®µèŠãããªãã¢ã³ã°ã«ãã芳æŠã§ããŠïŒæ¥œããã£ãããšãã£ãçŽæ¥çãªã³ã¡ã³ãã玹ä»ãããããããæ°ãã䟡å€ãæäŸã§ããããšã¯ããŸãã«ãšã³ãžãã¢å¥å©ã«å°œããäœéšã ãªãšæããŸããã youtu.be SwiftUI 8çªåºå£ SwiftUI ã§ UI ãå®è£
ããéãç¹å®ã®èª²é¡ã«çŽé¢ãããšããSwiftUI ã§è§£æ±ºçãæ¢ãã¹ããããããšã UIKit ã®åãåããã¹ããããã®éçºè
ããã°ãã°æ©ãã§ããã倿ãããïŒçªåºå£ããšããã²ãŒã ãã¢ããŒãã«ãã²ãŒã æèŠã§è§£èª¬ããŠãããŠããŒã¯ãª LT ã§ããã ã²ãŒã ã®äžç芳ãå·§ã¿ã«åçŸããŠãããéæã«çްããå°ãã¿ãæºèŒã§ããŸãã«LTãããéã³å¿ã«ããµããæ§æã§éåžžã«æ¥œããå
容ã§ããã çºè¡šäžãäŒå Žããã¯äœåºŠãç¬ã声ãäžããããšãŠãåæ°ãããããšããé°å²æ°ã®äžã§ã楜ãã¿ãªããèŽãããšãã§ããŸããã youtu.be ã¹ãã³ãµãŒããŒã¹ ã¹ãã³ãµãŒããŒã¹ãéåžžã«å
å®ããŠããŸãããäŸãã°ãåå è
ã try! Swift ã®ã¿ã€ã ããŒãã«ã¢ããªéçºãã§ããããŒã¹ããã«ãŒã¬ããã»ããåŒããªã©ã§çŽ æµãªæ¯åãåœããäŒç»ãªã©ãå瀟ã蚪åè
ãæ¥œããŸããããã®è¶£åãåãããã³ã³ãã³ãã倿°çšæããŠãããæ¬åœã«çãã ãããã§ããã ã¹ããã«ãŒãåœãŠãŠæµ®ããããšã³ãžã㢠ç§ã¯ãã売äžç«ãããš RevenuCat ã®ã¹ãã³ãµãŒã§åœãŠã売äžç«ãããåžœã2æ¥ç®ãš3æ¥ç®ã«ãã£ãšã€ããŠããŒã¹ãåã£ãŠããŸããã Party ã®é°å²æ° ã€ãã³ã2æ¥ç®ã®æåŸã«ã¯ãæèŠªããŒãã£ãŒãéå¬ãããŸãããä»åã¯äŒå Žè¿ãã«ããéæŸçãªå±å€ã¹ããŒã¹ã§ã®éå¬ã§ããïŒ æ§ã
ãªæ¹ã
ãšãããã¹ããããã鳿¥œã«åãããŠèžã£ãããšããªã©ãã¯ã¹ããé°å²æ°ã®äžã§äº€æµã楜ããããšãã§ãããšãŠã楜ããæéã§ããã å±å€DJããŒã¹ try Swift å
¬åŒã¢ããªã«ã€ã㊠try! Swift ã®å
¬åŒã€ãã³ãã¢ããªã¯ãªãŒãã³ãœãŒã¹ã§å
¬éãããŠããŸãã ç§ã¯æ¯å¹Žãåå ããã«ã³ãã¡ã¬ã³ã¹ãã€ãã³ãã®å
¬åŒã¢ããªã«ã¯ãå°ãªããšãïŒã€ã®Pull Request ãéã£ãŠäœããã®åœ¢ã§è²¢ç®ããããšãå人çãªç®æšã«ããŠããŸããããã¯ããšã³ãžãã¢ãšããŠæè¡ã³ãã¥ããã£ã«å°ãã§ãè²¢ç®ããããšããæããããèªäž»çã«ç¶ããŠããæŽ»åã§ãã ä»å¹Žã¯ãã¢ããªå
ã§äœ¿çšãããŠããã©ã€ãã©ãªã®è¬èŸè¡šç€ºã«é¢ããä¿®æ£ã® Pull Request ãéãããŒãžããŠããã ããŸãããæãè±èªåã®ãããããåãã§ã¡ã³ãããŒã®æ¹ãå°ãããŠããŸãããä»å¹Žã埮åãªããè²¢ç®ã§ããŠå¬ããæã£ãŠããŸãã github.com æ¥å¹ŽããŸãéå¬ããããšã決ãŸã£ãããè²¢ç®ããŠãããããšæããŸãïŒ å
šäœã®ææ³ ä»å¹Žã®éå¬ãå¹³æ¥ã ã£ãããšã«å ããç§èªèº«ãå
¥ç€ŸçŽåŸã®ã¿ã€ãã³ã°ã ã£ãããšããããåœåã¯åå ãèŠéãã€ããã§ãããããããå
¥ç€Ÿãããããã«ãtry Swift è¡ããŸãïŒãã話ã¯ããŠãã®ã§ãåå ãããªãçšè°åºããŠãã ããããšèšãããå¿«ãçéã§éãåºããŠããã ããŸããããããŒããã£ããã æšå¹Žã¯ãã©ã€ããŒãã§äžäººåå ã§ããããä»å¹Žã¯è·å Žã®ãšã³ãžãã¢ååïŒåãšäžç·ã«ããŒã¹ãåã£ãããã»ãã·ã§ã³ãèŽããããšãçµå§ãšãŠã楜ããéããããšãã§ããŸããã ã»ãã·ã§ã³ã§ã¯ãæè¡çãªç¥èã¯ãã¡ããã®ããšããããã¯ãéçºã«åãåãæ
ç±ãå¿æ§ãã«è§Šããããšãã§ããå€ãã®é¢ã§è¯ãåºæ¿ãåããŸããã ãŸããä»å¹Žã®äŒå Žãç«å·ã ã£ãããšããèªç¶è±ããªç°å¢ã§ããªã©ãã¯ã¹ããŠã»ãã·ã§ã³ã«éäžã§ããç¹ã§ãšãŠãè¯ãã£ããšæããŸãã ä»åã®çµéšãç³§ã«ããããããæ¥åã»å人掻ååãããiOSã®éçºã«äžå±€åãå
¥ããŠãããããšæããŸãïŒæ¥å¹Žã® try! Swift Tokyo éå¬ã楜ãã¿ã«ããŠããŸãïŒ äŒå Žé£ãã®ã«ãã§ã§ãã«ããiOSãšã³ãžãã¢é æ¡çšæ
å ± æ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ã¯ãiOSãšã³ãžãã¢ã¯ãã¡ãããå
šãŠã®é åã§ãšã³ãžãã¢ãåéããŠããŸãïŒ ãããèå³ãæã£ãŠããã ããããäžèšãããå¿åãã ããïŒ herp.careers
ãããã¯ãéçºéšã§TUNAGã®éçºãããŠãã hisa ã§ãã ç§ãã¡ã®éçºããŒã ã§ã¯ããããã¯ããããè¯ãè²ãŠãŠããããã«ãæ¥ã
ã®éçºã®é²ãæ¹ãããŒã ã®äœå¶ã«ã€ããŠã詊è¡é¯èª€ãéããŠããŸããã ãã ãæ°æ©èœã®éçºãæ¥åžžçãªå¯Ÿå¿ãåªå
ããäžã§ããæãå
¥ãããã®ã«åŸåãã«ãªã£ãŠããŸããã¿ã¹ã¯ãå°ããã€ç©ã¿äžãã£ãŠããæèŠããããŸããã ããããç¶æ³ãèŠçŽããéçºã®è³ªãšã¹ããŒãã®ãã©ã³ã¹ãåãæ»ãäžæãšããŠãç§ãã¡ã¯Devinã®å°å
¥ã«èžã¿åããŸããã ãã®èšäºã§ã¯ãDevinãããŒã ã«è¿ããŠããã®å€åããæŽ»çšã«ããã工倫ã«ã€ããŠã玹ä»ããŸãã Devinå°å
¥ã®èæ¯ ãããã¯ããç¶ç¶çã«æé·ãããŠããããã«ã¯ãæ©èœéçºã ãã§ãªããåºç€ã®èŠçŽãã现ããªæ¹å察å¿ãšãã£ãã¿ã¹ã¯ã«ãç¶ç¶çã«åãçµãã§ããå¿
èŠããããŸãã ããšãã°ã ãããã¯ãå
šäœã®ãªã¢ãŒããã¯ã㣠ã©ã€ãã©ãªã¢ããããŒãïŒåœ±é¿ç¯å²ã®èª¿æ»å«ãïŒ ç€Ÿå
ãã客æ§ããäžãã£ãæ¹åã¢ã€ãã ããããã¿ã¹ã¯ã¯ããããããããã¯ãã®å¥å
šæ§ããŠãŒã¶ãŒäœéšã«é¢ããéèŠãªããŒãã§ãããã©ãããŠãæ¥ã
ã®éçºãµã€ã¯ã«ã®äžã§ã¯åªå
床ãäžããã«ãããçæã®ã¿ã€ãã³ã°ãéããŠããŸããã¡ã§ãã ç§ãã¡ã¯ããããã®ã¿ã¹ã¯ããåŸåãã«ããªããããã ãã§ãªããããŒã å
šäœãšããŠã®éçºåãåºäžãããããæ¬è³ªçãªèª²é¡ã«éäžã§ããäœå¶ãã€ããäžæãšããŠDevinãå°å
¥ããŸããã Devinã䜿ãããªãããã®5ã€ã®Tips 1. ã¿ã¹ã¯ã¯10ã15åã§å®äºããç²åºŠã«åå²ãã é·æéã¿ã¹ã¯ããã®ãŸãŸæž¡ããš äœæ¥ã®éäžã§èªèããºã¬ãŠããŸã é¢é£ãã¡ã€ã«ã®åç
§æŒããé£èºããå®è£
ãèµ·ãã èŠä»¶ã誀解ãããŸãŸé²è¡ããŠããŸã ãšãã£ããªã¹ã¯ãé«ããªããŸãã ãã®ãããã¿ã¹ã¯ã¯ ãé
ããšã15å以å
ã«çµããã ããšãç®å®ã«åå²ããŠããŸãã 2. å®è£
æ¹éã¯å¿
ãããã¹ãã§ããåããã Devinã¯ä»æ§ãèããã«å®è£
ãå§ããããšããããŸãã å®è·µããŠããã®ã¯ãPRã§ã¯ãªãã ããã¹ãããŒã¹ ã§æ¹éã®ããåãããè¡ãããšã Issueããã®å¯Ÿå¿ãããŠæ¬²ããã§ãã å®è£
åã«å®è£
æ¹éãIssueã®ã³ã¡ã³ãã«èšèŒããŠãã ããã ---> å®è£
æ¹éãã³ã¡ã³ãã«èšèŒããŸããã Buttonã³ã³ããŒãã³ãã¯ãã§ã«ããã§å®è£
ãããŠããŸããä¿®æ£ãé¡ãããŸãã ---> ä¿®æ£æ¡ãã³ã¡ã³ãã«è¿œå ããŸããã å®è£
ææ¡ç¢ºèªããŸããã å®è£
ã®ããªã¥ãŒã ã倧ãããªã£ãŠããã®ã§ãIssueãå°åãã«ããŠããã ããŸããïŒ ---> ãææ¡ããã ããéãã以äžã®3ã€ã®IssueãäœæããŸãã ã§ã¯1ã®å®è£
ãããé¡ãããŸãã ãšãã£ãæµããèžãã§ããäœæ¥ãä»»ããŠããŸãã 3. Devinã«Issueãæžããã Issueãªã©ããªãå Žåããããªãäœæ¥ãããã®ã§ã¯ãªãã ãŸãIssueãæžããã éçšã«ããŠããŸãã èæ¯ ãŽãŒã« äœæ¥å
容 äžèšãèªåã§æŽçããããã®Issueããã®ãŸãŸçæãããããšã§å®è£
粟床ãå®å®ããŸããã 4. ããããªãããšããæç¢ºã«ãã Devinã¯åæã§ ãªãã¡ã¯ã¿ãªã³ã° äžèŠãªãã¹ãã®è¿œå ãšã©ãŒãã³ããªã³ã°ã®åŒ·å ãªã©ã äŸé ŒããŠããªãäœæ¥ ãããããšããããŸãã äŸãã°ãä»åã¯ãã¹ãã¯è¿œå ããªãã§ãããªãã¡ã¯ã¿ãªã³ã°ã¯äžèŠããªã©ã ãããªãããšãã»ããã§æç€º ããããã«ããŠããŸãã 5. äœæ¥ãã°ã¯é次åºåããã äœæ¥äžã«ãäœãèšããã«é²ããŠããŸããããšããããããŸãã åžžã«ãä»ãäœããã£ãŠããã説æããŠãã鲿ã鿬¡å
±æããŠããšãé¡ãããããšã§ã鲿ã®èŠããåãšãæ©æã®ç°åžžæ€ç¥ãã§ããŠããŸãã DevinãæŽ»çšããã¿ã¹ã¯äŸ ãªã¢ãŒããã¯ã㣠çŸç¶æŽçã»ãªãã¡ã¯ã¿æ¹éäœæã»Issueåå²ã»å®è£
ã»ãã¹ã ã©ã€ãã©ãªã¢ããããŒã Release Noteèªè§£ã»ãããã¯ãå
ã®å©çšç®æç¹å®ã»åœ±é¿ã¬ããŒãã®äœæ æ¹åã¢ã€ãã 瀟å
ãã客æ§ããäžãã£ãŠããæ¹åã¢ã€ãã ã®å®è£
Devinãç¹ã«åŸæã ã£ãã¿ã¹ã¯ æ¯ãè¿ã£ãŠã¿ããšãäžèšã®ããã« ã€ã³ããããšã¢ãŠããããã®ã€ã¡ãŒãžãæç¢ºãªã¿ã¹ã¯ ã¯ãç¹ã«å®å®ããŠå¯Ÿå¿ã§ããããã«ãªã£ãŠããŸããã APIå®è£
ããªããŒã·ã§ã³è¿œå ããžãã¯åäœã®æ¹å èšå®ã»ã¹ã¯ãªããç³»ã®äœæ¥ äžæ¹ã§ããã¶ã€ã³ãUIå®è£
ãªã©ãFigmaãèªãåæã®ã¿ã¹ã¯ã¯çŸç¶ã§ã¯ãããŸã§åŸæã§ã¯ãããŸããã Boltãªã©ã¯Figmaãèªã¿åã察å¿ããŠããŸãããDevinãä»åŸã¯å¯Ÿå¿ããã®ã§ã¯ãªãããšæåŸ
ããŠããŸãã ãããã£ã倱æãšæ¹å èª²é¡ åå æ¹åç åæã«èšèšå€æŽ æ¹éããåããäžè¶³ äºåã«ããã¹ãã§ç¢ºèªãããã¬ããžå å®è£
粟床ã®äœäž ã¿ã¹ã¯ãéããã 10ã15ååäœã«åå² åã質åãç¹°ãè¿ã ã³ã³ããã¹ãã®æ¬ èœ or ææ§ãªäŸé Œ åæã»èæ¯ã»å¶çŽæ¡ä»¶ãæ¯åã»ããã§å
±æããå¿
èŠãªãããã¬ããžãšããŠèšæ¶ãããã äœèšãªäœæ¥ã宿œ ãããªãããšãæç€ºããŠããªã ãããªãããšãæç€ºãã Devinã«å®éã«æž¡ããIssueäŸ # Issue: ã©ãžãªãã¿ã³ã®ããŒããŒãæäœã«å¯Ÿå¿ ## å
容 çŸåšã®ã©ãžãªãã¿ã³ãããŒããŒãã§æ£ãããã©ãŒã«ã¹ãããªããã¢ã¯ã»ã·ããªãã£æ¹åã®ãããTabããŒæäœã§ã®ç§»åïŒéžæã«å¯Ÿå¿ããã ## ããããš - components/RadioGroup/index.tsx ãä¿®æ£ - role =radiogroupãaria-checked ãªã©ã®å±æ§ãé©åã«ä»äž - Tab / Shift+Tab / EnterããŒ ã§æäœå¯èœã«ãã ## è£è¶³ - ã¹ã¯ãªãŒã³ãªãŒããŒã§ã®èªã¿äžã確èªã¯äžèŠïŒå¥Issueã§äºå®ïŒ ## ãããªãããš - ã©ãžãªãã¿ã³ã®ãã¶ã€ã³å€æŽ - ãã©ãŒã ããžãã¯ã®ä¿®æ£ Devinå°å
¥ã®å¹æ çæã®ããŒãã«ãé«ãã£ãã¿ã¹ã¯ã«ãæã䌞ã³ãããã« ãæ°ã«ãªã£ãŠããããã©åŸåãã«ãªã£ãŠãããã¿ã¹ã¯ãå°ããã€çä»ããŠããããã«ãªããŸããã å°èŠæš¡ãªæ¹åIssue ã©ã€ãã©ãªã®ã¢ããããŒããšåœ±é¿èª¿æ» ãããã³ãŒãã®æŽçãåœåçµ±äž ãªã© DevinãæŽ»çšããããšã§ãããããã¿ã¹ã¯ã«æãå±ãããããªããã³ãŒãããŒã¹ã®å¥å
šæ§åäžã«ãã€ãªãã£ãŠããŸãã éããã®éçºã«ãèžã¿èŸŒã¿ããããªã£ã ãããã¯ãå
šäœã®ãªã¢ãŒããã¯ãã£æ¹éã®çå®ã»å®è£
ã¢ãžã¥ãŒã«åäœã§ã®æ§æèŠçŽã ã¬ã¬ã·ãŒãªäžæ¬ãããã®åè§£ã»åæ§æ Devinã«ãŸããçŸç¶ææ¡ãâãæ¹éæ¡ã®æç€ºãâãã¿ã¹ã¯ãžã®åå²ããŸã§ãä»»ããããšã§ãå
šäœåãã€ãã¿ããããªããããŒã ãšããŠåãåºãããã®äžæ©ã軜ããªããŸããã PRäœææ°ãçŽ1.5åã«å¢å å®åžžçãªæ¹åã¿ã¹ã¯ãDevinã«ä»»ããããããã«ãªã£ãããšã§ãã¡ã³ããŒã¯ããæ³šåãã¹ãé åã«éäžãããããªããŸããã åçŽãªPRæ°ã®å¢å ã ãã§ãªããã察å¿ãæ©ããªã£ãããšãã声ããããããŒã å
šäœã®ãªãºã ãè¯ããªã£ãŠããæèŠããããŸãã ããŸãDevinã«ä»»ããŠã¿ãããèªç¶ãªéžæè¢ã« ãã¡ãã£ãšæéããããããªã¿ã¹ã¯ããèŠã€ãããããŸãDevinã«æããŠã¿ãããèªç¶ãªãããŒã« Slackäžã§ãããã®IssueDevinåãããïŒããšããããåããå¢å æåãšããŠæ ¹ä»ãã ãšæããããã®ã¯ã倧ããªææã®ã²ãšã€ã§ããã ãŸãšã Devinã¯ããã¹ãŠãèªåã§è§£æ±ºããŠãããååšã§ã¯ãããŸããã ã§ãããã¿ã¹ã¯ã®ç²åºŠãæŽããé²ãæ¹ãäžå¯§ã«äŒããããšã§ãçå®ã«åããŠããããããŒã ã®äžå¡ãã«ãªãåŸãŸãã å°å
¥ããããšã§ããããŸã§çæãã«ããã£ãã¿ã¹ã¯ã«ãå°ããã€åãåããããã«ãªãã ããã«å€§ããªå€åãšããŠã¯ã人ãã人ã«ããã§ããªãããšãã«éäžããæéãå¢ããŠããããšããããŸãã ããšãã°ããããã¯ãã®æ¹åæ§ãèãããèšèšãè©°ãããããŒã ã§è°è«ãããšãã£ãåµé çãªæéã§ãã ããããæ¬è³ªçãªé åã«ãããå€ãã®ãªãœãŒã¹ãå²ããããã«ãªã£ãããšã¯ããŒã ã«ãšã£ãŠå€§ããªåé²ã§ããã AIã«ä»»ãããšããã¯ä»»ããŠã人ã¯äººãšããŠã®åŒ·ã¿ãçºæ®ããã Devinã¯ããã®ãã©ã³ã¹ãåãæ»ãããã®ãã¡ããã©è¯ããã£ããã«ãªã£ãŠãããŠããŸãã
æ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ã®TUNAGãããã¯ãéçºéšã§ Android ã¢ããªãéçºããŠããã«ãŒãïŒX: @khaki_ngy ïŒã§ãã èªåã¯ã¹ã¿ã¡ã³ã«ã¯2020å¹Žã«æ°åå
¥ç€ŸããŠããã6幎ç®ã®æ¥ãå§ãŸããœã¯ãœã¯ããæ°æã¡ãæ±ããŠããŸãðž çŽè¿ãTUNAGã®æ©èœéçºã§ AlarmManager ã® API ãå©çšããæå®ããæéã«ããŒã«ã«éç¥ãçºè¡ããæ©èœãéçºããŸããã AlarmManager èªäœã¯ããªãå€ããããã API ã§ãããæš©éåšãã§ Android12 ãã倿Žãå ãããããªã©è¿å¹Žã®ã»ãã¥ãªãã£åŒ·åã®åœ±é¿ãåããŠããŸãã ä»åã®ããã°ã§ã¯ãAlarmManager ãå©çšããäžé£ã®æµããšããããã¯ã·ã§ã³ã§éçšããããã®æ³šæäºé
ã玹ä»ããŸãã AlarmManager ãšã¯ AlarmManager ãšã¯ android.app API ã«ååšããã¯ã©ã¹ã§ãããæå®ããæéã«ç¹å®ã®åŠçãå®è¡ããããšãã§ããŸãã ã¢ããªãèµ·åããŠããªãç¶æ
ïŒããã¯ã°ã©ãŠã³ãã«ããç¶æ
ïŒã§ããæå®ã®æå»ã«åŠçãè¡ãããšãã§ããŸãããŠãŒã¹ã±ãŒã¹ãšããŠã¯æèšã¢ããªã®ã¢ã©ãŒã æ©èœãªã©ã§ãŠãŒã¶ãŒãæå®ããæå»ã«ã¢ã©ãŒã ãéç¥ãçºè¡ãããããªæã«å©çšãããŸãã ä»å TUNAG ã§ã¯ãæå®ãããæ¥æã«ããŒã«ã«éç¥ãçºè¡ããããã«æ¡çšããŸããããæ¬åœã« AlarmManager ã䜿ãã¹ããã©ããã®èŠæ¥µããå¿
èŠã§ãã ãªããªãã°ãå
è¿°ããéã AlarmManager ã¯æå®ããæå»ã§ããã¯ã°ã©ãŠã³ãã§åŒ·åãªåŠçãå®è¡ã§ããããã³ã·ã£ã«ãããããã§ããæ£ç¢ºãªæå»ã«ããã¯ã°ã©ãŠã³ãã§åŠçãèµ·åã§ããããšèªäœããããããªãŒããªãœãŒã¹ã«åœ±é¿ãäžããå¯èœæ§ããããããAlarmManager ã䜿ã£ãŠæ£ç¢ºãªæå»ã«ã¢ã©ãŒã ãèšå®ããã«ã¯åŸè¿°ããç¹å¥ãªã¢ããªã¢ã¯ã»ã¹æš©ã®ååŸãå¿
èŠã«ãªããŸãããŠãŒã¹ã±ãŒã¹ã«å¿ããŠãæ¬åœã« AlarmManager ãå©çšããã¹ããã©ãããäžåºŠèããæ¹ãè¯ãã§ãããã ä»£æ¿ææ®µãšã®æ¯èŒã§ã¯ãæ£ç¢ºãªæéæå®ãå¿
èŠãã©ããã軞ã«ãªã£ãŠããŸãã æ£ç¢ºãªæéæå®ãå¿
èŠã§ãªãå Žåãä»£æ¿ææ®µãšããŠå
¬åŒããã¥ã¡ã³ãã§ã¯ Handler ã¯ã©ã¹ã®å©çšãã WorkManager ã§ã®å®æå®è¡ã®ã¹ã±ãžã¥ãŒã«ãªã©ã玹ä»ãããŠããŸããWorkManager ã¯ã©ã€ããµã€ã¯ã«ã®èæ
®ããåŠçãéå§ããäžã§ã®ã·ã¹ãã çãªå¶çŽãæå®ããããšãã§ããã®ã§ãé
å»¶å®è¡ããŠåé¡ã®ãªãããã¯ã°ã©ãŠã³ãåŠçã§ããã° WorkManager ãå©çšããã®ãè¯ãã§ãããã AlarmManager ãšæš©é æš©éã®çš®å¥ AlarmManager ãå©çšããŠæ£ç¢ºãªæéã«åŠçãã¹ã±ãžã¥ãŒã«ããã«ã¯ã以äžã®æš©éã®ãã¡ã©ã¡ããäžã€ãå¿
èŠã«ãªããŸãã USE_EXACT_ALARM SCHEDULE_EXACT_ALARM ã©ã¡ãã®æš©éã AlarmManager ãéããŠãæ£ç¢ºãªæéã«åŠçãã¹ã±ãžã¥ãŒã«ããã®ã«å¿
èŠãªæš©éã«ãªããŸãããã©ã®ãããªæ©èœãæäŸããã¢ããªãã«å¿ããŠã©ã¡ãã®æš©éãå©çšããããå€ãããŸãã åè
ã® USE_EXACT_ALARM ã¯ã ã¢ã©ãŒã ã»ã«ã¬ã³ããŒæ©èœãäž»ãšãªãã¢ããªåã ã®æš©éã«ãªããŸããAndroid ã® APIã¬ãã«33ïŒAndroid 13çžåœïŒããç»å Žããæš©éã§ãã ã¢ã©ãŒã ã»ã«ã¬ã³ããŒã¢ããªãäž»ã®æ©èœãšãªã£ãŠããã°ãæå®ã®æå»ã«åŠçãè¡ãªã£ãããéç¥ãéã£ããããæ©èœã¯ã»ãšãã©å¿
é ã®æ©èœãšãªããŸãããã®ãããAndroidManifest ã§æš©éã®å©çšã宣èšããŠããã°ããŠãŒã¶ãŒã®èš±å¯ãªãã§æ£ç¢ºãªæéã®åŠçãå¯èœã«ãªããŸãã ãã ããåæãšãªã£ãŠãã ã¢ã©ãŒã ã»ã«ã¬ã³ããŒã¢ããªãã¡ã€ã³ã®æ©èœãã©ãã ãšããç¹ãã¢ããªã®å¯©æ»ã§å€æãããããšã«ãªããŸããã¢ã©ãŒã ã»ã«ã¬ã³ããŒæ©èœãäž»ãšãªãã¢ããªã§ãªãå Žåã¯ããã¡ãã®æš©éãå©çšããŠãã¹ãã¢ãžã®å
¬éã¯é£ããã§ãããã åŸè
ã® SCHEDULE_EXACT_ALARM ã¯ãåè
ã®å¯Ÿè±¡ãšãªããã¢ã©ãŒã ã»ã«ã¬ã³ããŒæ©èœãäž»ãšãªããã¢ããª ä»¥å€ ã察象ãšããæš©éã«ãªããŸãããã¡ãã¯Androidã®APIã¬ãã«31ïŒAndroid 12çžåœïŒããç»å Žããæš©éã§ãã ãã¡ãã®æš©éã§ã¯ãã¢ã©ãŒã ãã«ã¬ã³ããŒæ©èœãäž»ãšããã¢ããªä»¥å€ã§ã®å©çšãæ³å®ãããŠããŸãã ãã¡ãã®æš©é㯠Android ã® API 34以éïŒAndroid 14çžåœïŒã§ã¯ãããã©ã«ãã§æåŠãããããã«ãªã£ãŠããããŠãŒã¶ãŒèªèº«ãã¢ããªã«ãã¢ã©ãŒã ãšãªãã€ã³ããŒãã®æš©éãèš±å¯ããå¿
èŠããããŸãã ãã¢ã©ãŒã ãšãªãã€ã³ããŒãã¯ç¹å¥ãªã¢ããªã¢ã¯ã»ã¹æš©ã«åé¡ãããéåžžã®æš©éãªã¯ãšã¹ããšã¯è¥å¹²æ¹æ³ãç°ãªããèšå®ç»é¢ã§ãŠãŒã¶ãŒã«ãèš±å¯ããããŠãããå¿
èŠããããŸãã ã·ã¹ãã ã®ã¢ããªèšå®å
ã«ãããã¢ã©ãŒã ãšãªãã€ã³ããŒã æ£ç¢ºãªæéã®ã¢ã©ãŒã ã§ãã£ãŠã AlarmManager ã® OnAlarmListener ãªããžã§ã¯ããå©çšããå Žåã¯ã SCHEDULE_EXACT_ALARM ã¯äžèŠã«ãªããŸãããã OnAlarmListener ãå©çšããã¢ã©ãŒã ã®å Žåã¯ã¢ããªã®ããã»ã¹ãçããŠããæéã®éã¯æå¹ã«ãªããŸãããã¢ããªãã«ããããå Žåãªã©ããã»ã¹ãçµäºããŠããç¶æ
ã§ã¯ãã¢ã©ãŒã ãèµ·åãããããšãã§ããŸããããã®åŸã®å
容ã«é¢ããŠã OnAlarmListener ãå©çšãããããã¯ã°ã©ãŠã³ãã§ãæ©èœããã¹ã±ãžã¥ãŒãªã³ã°åŠçã«ã€ããŠç޹ä»ãããŠãããŸãã æš©éã®ãã³ããªã³ã° å
è¿°ã®éããAlarmManager ã«ããïŒããã¯ã°ã©ãŠã³ãã§åäœããïŒæ£ç¢ºãªæéã§ã®åŠçã®ã¹ã±ãžã¥ãŒã«ã«ã¯ã SCHEDULE_EXACT_ALARM æš©éãå¿
èŠã«ãªããŸãã æš©éãç²åŸãããããŒã¯å€§äœä»¥äžã®æµãã§ã 1. ãŠãŒã¶ãŒããã§ã«æš©éãæã£ãŠããã確èªãã 2. æã£ãŠããªããã°ãæš©éã®ãªã¯ãšã¹ããèŠæ±ãã 1. æš©éã®ç¢ºèª éåžžãæš©éã®èš±å¯ããããŠãããã確èªããå Žåã«ã¯ ContextCompat.checkSelfPermission ãå©çšããŠã察象ã®ããŒããã·ã§ã³ãèš±å¯ãããŠãããã©ããã確èªããŸãããã SCHEDULE_EXACT_ALARM ã¯ç¹å¥ãªæš©éãšãªããããAlarmManager ã«çšæãããŠããå°çšã®ã¡ãœãã canScheduleExactAlarms() ãå©çšããŠç¢ºèªããå¿
èŠããããŸãã ïŒ ContextCompat.checkSelfPermission ã§ç¢ºèªããŠãåžžã«èš±å¯ãããŠããªããšè¿ã£ãŠããŠããŸããŸãïŒ å
·äœçãªã³ãŒãã®ã€ã¡ãŒãžãšããŠã¯ä»¥äžã®ããã«ãªããŸãã val alarmManager = getSystemService(ALARM_SERVICE) as AlarmManager // Android 12 ããåããããã¯æš©éãèš±å¯ãããŠããå Žå if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S || alarmManager.canScheduleExactAlarms()) { // alarmManagerã«ããã¹ã±ãžã¥ãŒãªã³ã°ã宿œ } else { // æš©éããªã¯ãšã¹ããã } 2. æš©éã®ãªã¯ãšã¹ã æš©éãèš±å¯ãããŠããªãå Žåã¯ããŠãŒã¶ãŒã«æš©éããªã¯ãšã¹ãããå¿
èŠããããŸãã äžè¬çãªæš©éã®ããã«ã¢ããªå
ã®ãã€ã¢ãã°ã§æš©éãªã¯ãšã¹ããããä»çµã¿ãçšæãããŠããªããããèšå®ç»é¢ã«é·ç§»ãããŠããŠãŒã¶ãŒã«èšå®ã倿ŽããŠãããå¿
èŠããããŸãã 以äžã®ããã«ãã¢ã©ãŒã ãšãªãã€ã³ããŒãã«é¢ããèšå®ããŒãžã«çŽæ¥é·ç§»ãããããªIntentãçºè¡ããããšã§ããŠãŒã¶ãŒãèšå®ç»é¢ã«å°ãããšãã§ããŸãã val intent = Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM) startActivity(intent) äžèšã§ã¯åçŽãª Intent é·ç§»ã®äŸã瀺ããŠããŸãããActivity Result API ã«ããé·ç§»ãå©çšããã°ãèšå®ç»é¢ããæ»ã£ãŠããã¿ã€ãã³ã°ããã³ãã«ã§ããã®ã§ãããç¶æ³ã«é©ããåŠçãå®è£
ã§ãããšæããŸãã æš©éãªã¯ãšã¹ãæã®æ³šæç¹ SCHEDULE_EXACT_ALARM ã¯ã·ã¹ãã ã§ã®æš©éä»äžã®ãã€ã¢ãã°ãæäŸãããŠããªããããã¢ããªãããŠãŒã¶ãŒã«å¯ŸããŠæš©éãªã¯ãšã¹ãã®æšãäŒããã®ãè¯ãã§ãããã æš©éã®ä»äžãå¿
èŠãªã¿ã€ãã³ã°ã§çªç¶ã·ã¹ãã ã®èšå®ç»é¢ã«é£ã°ãããŠããŠãŒã¶ãŒã¯å°æããŠããŸãããã§ãã ãã®ãããäžèšã®ãããªãã€ã¢ãã°ãäžã€æãã§ãã¢ã©ãŒã ã®èšå®ãè¡ããã©ããããŠãŒã¶ãŒã«äºåã«ç¢ºèªããããšè¯ãã§ãã ãŠãŒã¶ãŒã«åãããã€ã¢ãã°ã®äŸ AlarmManager ãå©çšãã æå®ããæéã«ã¢ã©ãŒã ãã¹ã±ãžã¥ãŒã«ãã AlarmManagerã«ããã¢ã©ãŒã ãã¹ã±ãžã¥ãŒã«ããæµããšããŠã¯ã以äžã®2ã¹ãããã§ãã PendingIntent ãäœæ AlarmManager ã€ã³ã¹ã¿ã³ã¹ããã¹ã±ãžã¥ãŒãªã³ã°ã®ã¡ãœãããå®è¡ ããããã«ã€ããŠè§£èª¬ããŠãããŸãã 1. PendingIntent ãäœæ æå®ããæéã«ã¢ã©ãŒã ãåãåãéã« BroadcastReceiver ãå©çšããããã¯ã°ã©ãŠã³ãã§ã BroadcastReceiver ãåãåããããã« PendingIntent ãäœæããŸãã ãã®éãã¢ã©ãŒã ã®ã¹ã±ãžã¥ãŒã«ãèšå®ããäžã§èæ
®ããã¹ãç¹ãããã€ããããŸãã val pendingIntent = PendingIntent.getBroadcast( context, requestCode, intent, PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE ) ãŸã getBroadcast ã®ç¬¬äºåŒæ°ã«ãªã£ãŠãã requestCode ã§ãã ããã¯äºçŽããã¢ã©ãŒã ãäžæã«èå¥ãã圹å²ããããŸãããã®ãããäŸãã°ãåã requestCode ã§è€æ°ã¢ã©ãŒã ãã¹ã±ãžã¥ãŒã«ããŠããæåŸã«ã¹ã±ãžã¥ãŒã«ãã PendingIntent ããæå¹ã«ãªããŸããã ãŸãåŸããã¹ã±ãžã¥ãŒã«ããã¢ã©ãŒã ããã£ã³ã»ã«ãããå Žåã«ãåã requestCode ããäœæããã PendingIntent ãå¿
èŠã«ãªããŸãã æ¬¡ã«ç¬¬äžåŒæ°ãšããŠæå®ããŠãã intent ã«ã€ããŠã§ãã ãã® Intent ã¯ãã¢ã©ãŒã ãèµ·åããæã«å®è¡ãããã BroadcastReceiver ã«åãããã Intent ãæå®ããŠãã ããã val intent = Intent(context, MyAlarmReceiver :: class .java).apply { putExtra(MESSAGE_KEY, "ã¢ã©ãŒã ã§ã" ) } ãã® intent ã«å¯ŸããŠã action ã extra ãæå®ããããšãã§ããã®ã§ãããããæå®ããããšã§ã BroadcastReceiver ã®äžã§åŠçã«å¿
èŠãªæ
å ±ãæž¡ãããšãã§ããŸãã 第4åŒæ°ã® PendingIntent ã®ãã©ã°ã«äœãæž¡ãã®ãã§ãã¢ã©ãŒã ã®æåãå°ãå€åããŸãã PendingIntent.FLAG_IMMUTABLE ã¯ãPendingIntentã®äžèº«ãä»ã®ã¢ããªã«ãã£ãŠå€æŽãããããšãé²ããã©ã°ã«ãªããŸããAndroid API 31以éã§ã¯ PendingIntent.FLAG_IMMUTABLE ã PendingIntent.MUTABLE ã®ã©ã¡ãããå¿
é ãšãªã£ãŠããŸããã¢ããªã«ãã£ãŠã©ã¡ããéžæããã¹ããã¯ç°ãªããŸãããä»ã®ã¢ããªã«ãã£ãŠé·ç§»å
ãåæã«æžãæããããŠããŸãå¯èœæ§ãããã®ã§ãåºæ¬çã«ã¯ PendingIntent.FLAG_IMMUTABLE ãèšå®ããŠãããæ¹ãè¯ãã§ãããã ãŸã PendingIntent.FLAG_CANCEL_CURRENT ã¯æ¢ã«åã requestCode ã§çæãããPendingIntentãããå Žåã«åã®å
容ããã£ã³ã»ã«ããŠãæ°ããªPendingIntentãšããŠç»é²ããããã«èšå®ãããŸãã è¿ããã®ãšããŠã¯ PendingIntent.FLAG_UPDATE_CURRENT ãšãããã©ã°ãååšããŸãããã¡ãã¯åã requestCode ã§çæãããPendingIntentãããå Žåã«ãäžã®Intentã ããæ°ãããã®ã«æŽæ°ãããã©ã°ã«ãªããŸãã requestCode ã被ããªãããã«èšå®ããŠããå Žåã§ããã°ãã©ã¡ããéžãã§ãçµæã¯å€ãããŸããããåãå€ãå
¥ãå¯èœæ§ãããã°ãã©ã¡ããéžæããã¹ãããããèããå¿
èŠããããŸãã 2. ã¹ã±ãžã¥ãŒãªã³ã°ã®ã¡ãœããã䜿ã ã¢ã©ãŒã ãã»ããããã¡ãœããã¯è€æ°ååšããã¢ã©ãŒã ããç¹°ãè¿ããªã®ãããæ£ç¢ºãªæå»ãå¿
èŠãªã®ããã«å¿ããŠé©åãªã¡ãœãããéžæããå¿
èŠããããŸãã ä»åã¯ïŒåããã®ã¢ã©ãŒã set ãäžå¿ã«ç޹ä»ãããŸãã äžåããã®ã¢ã©ãŒã ã® set ãããã€ãçš®é¡ããããŸãã set : æãå¹çã®è¯ãïŒåããã®ã¢ã©ãŒã ã¡ãœãããå¹çã¯è¯ããã®ã®ã端æ«ã®ç¶æ
ã«å€§ããå·Šå³ããããããæå®ããæå»éãã«çºç«ããããšã¯ä¿èšŒãããŠããŸããã setExact : set ã¡ãœããããã¯æ£ç¢ºã«çºç«ããããšãç®çãšããã¡ãœããããã 端æ«ãDozeã¢ãŒãã«å
¥ã£ãŠããŸããšçºç«ããªãã®ã§æ³šæãå¿
èŠã setAndAllowWhileIdle : Dozeã¢ãŒããªã©ã端æ«ãã¢ã€ãã«ç¶æ
ã®å Žåã§ãã¹ã±ãžã¥ãŒã«éãã«çºç«ããã¡ãœããã端æ«ã®ç¶æ
ã«é¢ãããå®è¡ããããå Žåã¯ãããå©çšããã ãŸã set ã¡ãœããã®ç¬¬äžåŒæ°ã«ã¯AlarmManagerã®Typeãæå®ããå¿
èŠããããŸãã ãã¡ãã¯ïŒçš®é¡ã®ã¿ã€ãããããŸãã ELAPSED_REALTIME : ããã€ã¹ãèµ·åããŠããã®çµéæéã«åºã¥ããŠPendingIntentãéå§ãããããã€ã¹ã®ã¹ãªãŒãã¯è§£é€ããªãã ELAPSED_REALTIME_WAKEUP : ããã€ã¹ãèµ·åããŠããæå®ãããæéãçµéããåŸã«ããã€ã¹ã®ã¹ãªãŒããè§£é€ããPendingIntentãéå§ãã RTC : æå®ãããæéã«PendingIntentãéå§ããããã ããããã€ã¹ã®ã¹ãªãŒãã¯è§£é€ããŸããã RTC_WAKEUP : æå®ãããæå»ã«ããã€ã¹ã埩垰ãããŠPendingIntentãéå§ããã ããããã¢ã©ãŒã ã®ç¹æ§ã«åãããŠå®è£
ãããã®ãè¯ããšæããŸãã ãŸãšãããš ã¢ã©ãŒã ãçºè¡ããæµãããŸãšãããšä»¥äžã®ããã«ãªããŸãã val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager val alarmIntent = Intent(context, MyAlarmReceiver :: class .java) val pendingIntent = PendingIntent.getBroadcast( context, requestCode, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE ) alarmManager.setExactAndAllowWhileIdle( AlarmManager.RTC_WAKEUP, notifiedDateTime.toInstant().toEpochMilli(), pendingIntent ) ã¢ã©ãŒã ãããã¿ã€ãã³ã°ã§å®è¡ãããåŠç ã¢ã©ãŒã ãããã¿ã€ãã³ã°ã§å®è¡ãããåŠç㯠BroadcastReceiver ã§å®æœãããã®ã§ããã¡ãã®æºåãå¿
èŠã«ãªããŸãã class CalendarEventAlarmReceiver: BroadcastReceiver() { override fun onReceive(context: Context, intent : Intent) { // ã¢ã©ãŒã çºç«æã«è¡ãåŠç } } BroadcastReceiver ã®å©çšã«ã¯ AndroidManifest ã§ã®å©çšã®å®£èšãå¿
èŠã«ãªãã®ã§å¿ããã«è¡ããŸãããã ãŸãšã ä»åã¯ãAlarmManager ã䜿ã£ãå®è£
ã®ç޹ä»ãè¡ããŸããã å€ãããããAPIã§ã¯ãããã®ã®ãAndroid API 23 ããã® Doze ã¢ãŒãã®ç»å ŽããAndroid API 31 以éã®æš©éã®åŒ·åã«ãã£ãŠãããæ°å¹Žã§ãå®è£
ãæ±ãæ¹ãå€ãã£ãŠããŠããAPIã«ãªããŸãã AlarmManagerã®ããã¥ã¡ã³ãã«ã¯ USE_EXACT_ALARM ã SCHEDULE_EXACT_ALARM ãå©çšããå Žåã®æ³šæç¹ãæžãããŠãããã¢ããªã±ãŒã·ã§ã³ãæäŸãããæ©èœã«å¿ããŠãã©ã®ãããªæ¹æ³ã§ã¹ã±ãžã¥ãŒã«ãããã®ãïŒãããã¯ãAlarmManagerã䜿ããªãã®ãïŒã倿ããŠå©çšããå¿
èŠããããŸãã æ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ã§ã¯äžç·ã«åã仲éãåéããŠããŸããå°ãæ°ã«ãªãã話ãèããŠã¿ããïŒãšããå Žåã¯ä»¥äžã®ãã©ãŒã ãããé£çµ¡ãã ãã herp.careers
ããã«ã¡ã¯ãã¹ã¿ã¡ã³ã§ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒãããŠããasashinïŒ@asashin227ïŒã§ãã è¿é ã¯æãããªãããããã£ããæ¥ã®æ°åã§ããã æè¿ãæ¡ã®çæ œãæã«å
¥ããŠãèŠèŠçã«ãæ¥ãæããããããã«ãªããŸããã EMConfã«åå ããŠãã1ã¶æã»ã©çµéããŸããããæ¥ã
ã®æ¥åã®äžã§ãEMConfã§ã®åŠã³ãæ¯ãè¿ãäºããããèªåã®èããšããŠå®çãããã®ãè
¹èœã¡ãããã®ãªã©ãããŸããã®ã§ãæ¹ããŠç»å£ãããæ¹ã®ã¹ã©ã€ããèŠãªããæ¯ãè¿ã£ãŠããããšæããŸãã 2025.emconf.jp EMConf2025ã¯2025/02/27ã«éå¬ãããŸãããïŒå®ã¯åœæ¥ã¯èªçæ¥ã§ããïŒ åå ã¬ããŒããšããŠã¯ã @hisa ãå·çãã éEMãEMConf JP 2025ã«åå ããŠåŠãã ããš ããšã³ãžãã¢èŠç¹ã§èŠãEMã®åœ¹å²ãšæªæ¥ã ãã芧ãã ããã tech.stmn.co.jp EMã®åœ¹å² äžè¬çã«ã¯EMã®åœ¹å²ãšããŠä»¥äžã®é
ç®ãæããããããšãå€ãã§ãã ãããã¯ããããžã¡ã³ã ãããžã§ã¯ããããžã¡ã³ã ãã¯ãããžãŒãããžã¡ã³ã ããŒãã«ãããžã¡ã³ã ããã¯ãEMConfã§ããŒããŒããåããããåºæšå€§å°ãããå·çãã ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒ/ãããã¯ããããŒãžã£ãŒã®ããã®ç¥èäœç³»ãšèªæžã¬ã€ã ã«ãã£ãŠåºãç¥ãããããã«ãªããŸããã qiita.com ä»åãåºæšããèªããããã¢ããããŒããããã¯ãããžãŒãããžã¡ã³ããããã©ãããã©ãŒã ãããžã¡ã³ããšãªããŸããã ãããã¯ããããžã¡ã³ã ãããžã§ã¯ããããžã¡ã³ã ãã©ãããã©ãŒã ãããžã¡ã³ã ããŒãã«ãããžã¡ã³ã hirokidaichi.github.io ãã©ãããã©ãŒã ãããžã¡ã³ããšããèãæ¹ ãããŸã§ã®åœ¹å²ãšããŠæç€ºãããŠãããã¯ãããžãŒãããžã¡ã³ããšããŠã¯ãæè¡è² åµã®ã³ã³ãããŒã«ããæè¡æŠç¥ãã¢ãŒããã¯ãã£éžå®ãã¢ãã¿ãªã³ã°ãªã©ããšã³ãžãã¢ãªã³ã°ã«å¯ŸããŠçŽæ¥çã«é¢äžãããããªããšãå€ãã£ãããã«èããŠããŸããããã©ãããã©ãŒã ãããžã¡ã³ããšãã衚çŸã§ã¯ããšã³ãžãã¢ãªã³ã°ã¯ã¡ã³ããŒã«ä»»ãã€ã€äžæ©åŒãããããžã¡ã³ããè¡ã衚çŸã«ãªã£ãããã«æããŠããŸãã çŽæ¥çã«æè¡çè² åµãè§£æ¶ããããã®åããããå¿
èŠã§ãããæè¡çè² åµãçã¿åºããªãããã®ããªããªãŒãããŒã®æ§ç¯ããããŒã«ã®æŽåãªã©ãäž»æŠå Žãšããããšãšãããããå¿
èŠãªã¿ã€ãã³ã°ã§ããŒã ã«æäŸã§ããããã«ãå®ç¹èŠ³æž¬ããããæ©æã«å€±æã§ããïŒFail fastïŒã§ããããã«æºåããŠããããšãå¿
èŠãšãªããŸãã ãŸããã¹ã¿ã¡ã³ã§ã¯ãã©ãããã©ãŒã éšãååšãããããã¯ãéšå
šäœã«å¯ŸããŠéçºè
äœéšã®åäžãè¡ã£ãŠããŸãããEMã®åœ¹å²ãšããŠã管æçµç¹ã«å¯ŸããŠã®ãéçºè
äœéšãšçç£æ§ã®åäžãæ
ã£ãŠãããšããšãããã©ãããã©ãŒã ãããžã¡ã³ããšæããŸããã éçºè
äœéšã®åäžã®ããã®ããŒã«ã®å°å
¥æ¯æŽãCI/CDã®æ§ç¯ãªã©ãå
·äœçãªæ¹æ³è«ãšããŠã¯ãããŸãããããããæŠç¥çã«å°å
¥ãã€ã€ãã¡ã³ããŒã«ãããã³ã¹ããäžé·æã§äœäžãããããã®æè¡åºç€ãæ§ç¯ãç¶æãç¶ããããšãããã©ãããã©ãŒã ãããžã¡ã³ããšèšããã®ã§ã¯ãªãã§ããããã çŸåšã®ç§ã®ç®¡æããŒã ã§ã¯ãCI/CDã®æŽåãªã©ã®ããªããªãŒãããŒã®å¹çåãè¡ããŠããŸãããæè¡çè² åµã®ãããžã¡ã³ããŸã§èžã¿èŸŒãããšãã§ããŠããªããããä»åŸã®èª²é¡ãšãªã£ãŠãããã§ãã ãšã³ãžãã¢ãªã³ã°ã®äŸ¡å€ãã©ãèããã éçºçç£æ§ãèªãäžã§ãã©ã®ããã«çµå¶ææšãšæ¥ç¶ããŠããã®ããäŸãã°æ©èœãã©ãã»ã©å£²ãäžãã«è²¢ç®ããã®ãããDXã«ãã£ãŠã³ã¹ãåæžããå©ççãäžãããªã©ãããŸããã ãšã³ãžãã¢ãªã³ã°äŸ¡å€ãé»ååãããããªã¥ãŒããŒã¹æŠç¥ãçšããæè¡æŠç¥çå®ã®éã®ã(by Kazuki Maeda) ã®äžã§ãæçèšç®æžïŒP/LïŒã®ããã«æããŠéçºçµç¹å
ã§é»ååããããšããææ³ã«ã€ããŠã以åããé ã®äžã«ã¯ãã£ãã®ã§ãããèŠèŠåãããããšã§æ¹ããŠãæ°ã¥ãããããŸããã speakerdeck.com çµå¶ãšã®æ¥ç¶ãèãããšã©ãããŠãéé¡çãªãã®ã«çœ®ãæããŠèªããããªã£ãŠããŸãã®ã§ãããããã§ã¯ãªãäŸ¡å€æäŸé床ãæããŠããç¹ããè
¹èœã¡ããŸããã 䟡å€ã®ããªã¥ãŒã ãèšãããšãããšã©ãããŠãå©ççã売ãäžãã«çŽä»ããŠããŠããŸãã倿°ãå€ããšã³ãžãã¢ãªã³ã°ã®è²¢ç®åºŠåããææ§ã«ãªã£ãŠããŸãããããã®èгç¹ã¯éåžžã«è¯ããã®ã ãšæããŸããã éçºãéçšã³ã¹ããæãã€ã€ãæ©ãæ©ã䟡å€ãå±ããããšããšã³ãžãã¢ãªã³ã°ã®äŸ¡å€ãšããŠå®çŸ©ããŠã¿ããšãã詊ã¿ããããããšèããŠããŸãã ãµãã€ãã«ãã§ãŒãºã®å¿åŸ speakerdeck.com ããã§ã®æèã§ã®ãµãã€ãã«ãã§ãŒãºãšã¯KPIã®æªéæãäºæ¥èšç»ã®ããã€ã³ããåçæ§é ã®æªåãªã©äºæ¥é¢ã®äºè±¡ãã¡ã³ããŒã®ç²åŒãšé¢è·ãšããç¶æ
ãæããŠãããéå»ã®äŒŒããããªç¶æ³ã«ééããããæãåºããªããã»ãã·ã§ã³ãèŽããŠããŸããã è¶³å
ã®æ°å€æ¹åã¯åœç¶ãšããŠãæ ¹æ¬çãªã³ã¹ãæ§é æ¹åã®ããã®æ¹éãæã¡åºãããŠãããšã話ãèãã ãã§ããªãããŒããªç¶æ³ã ã£ãäºã䌺ããŸããã ãã®äžã§ã倧å€åèã«ãªã£ãã®ããèããæé軞ã䌞ã°ããšããã話ã§ããã ç®ã®åã®èª²é¡ã«åãçµã¿ç¶ããããšã®ã¿ã«æ³šåãããšã¡ã³ããŒããããŒãžã£ãŒèªèº«ã®ç®ç·ãäžããããã¹ãŠã®æœçãåŸæã«åã£ãŠããŸããšããäºãçµéšäžãããŸããã ããã¹ãã¿ã¹ã¯ãæ¶åãããç®å
ã®ããããããåé¡ã«ç®ããã£ãŠããŸããæ¬è³ªçãªèª²é¡è§£æ±ºãã§ããªãç¶æ
ãšãªã£ãŠããŸããŸãã ãã«ãµããŒããã®çºè¡šã§ã¯ïŒå¹Žåå
ã«åããŠçµç¹ãšãããã¯ãã®ç®ç·ãåãããããšã§ãã®äžã§å¿
èŠãªåœ¹å²ã«ãã£ã¬ã³ãžããŠããã£ãããéèŠåºŠã®é«ããç·æ¥æ§ã®äœãåé¡ã«åãçµãäºãã§ããããã«ãªã£ããšç޹ä»ãããŠããŸããã ãŸããå°ãå
ã®ãã£ã¬ã³ãžã³ã°ãªç®æšãå
±æãããããšã§ã¡ã³ããŒã®ç±éã倧ãããªããèªããã£ã¬ã³ãžããŠãããã¡ã³ããŒããããšã®ããšã§ããã çŽè¿ã®ãããžã§ã¯ããå幎以å
ã«çµäºãããµã€ãºæã®ãã®ãå€ããïŒå¹Žä»¥äžå
ã®è©±ãã¡ã³ããŒãšããæ©äŒãå°ãªããªã£ãŠããã®ã§ïŒçŸç¶ãµãã€ãã«ã¢ãŒããšããã»ã©ã§ããªãã§ãããïŒç§èªèº«ãã£ãšã¡ã³ããŒãšæªæ¥ã®è©±ãããã°ãšæããŸããã ããããã®ãšã³ãžãã¢ãªã³ã°ãããžã¡ã³ã ããŒããŒãã®åºæšããã岩ç¬ããããäºäººãšãè§ŠããŠããããšã§ããããŸãããæšä»ã®AIã®æé·ã«ãã£ãŠãšã³ãžãã¢ãªã³ã°ãããžã¡ã³ãã¯EMã ããè¡ããã®ã§ã¯ãªããªã£ãŠãããšæããŸããã ã¹ã¿ã¡ã³ç€Ÿå
ã§ãAIãçšããéçºãåŸã
ã«æµžéãå§ããç§èªèº«ããClaudeãGithub CopilotãæŽ»çšããªããéçºãè¡ãªã£ãŠããŸãã ããŒã ã®äžéšã¡ã³ããŒã¯ Devin.ai ã䜿ãå§ããŠããã人éãæç€ºããŠãAIãå®è£
ãããšããããšãçŸå®ã«ãªã£ãŠããŸãã ã³ãã¥ãã±ãŒã·ã§ã³ããŠããæ§ã¯ãŸãã«å
茩ãšã³ãžãã¢ãšåŸèŒ©ãšã³ãžãã¢ã®ãªã³ããŒãã£ã°ã®ããã«èŠããŸãã ãã®ããã«ãæå³ãããšããAIã«å¯ŸããŠã®æè²ãã¿ã¹ã¯ã®åè§£ãæç€ºã ããé²æç®¡çãªã©ããããžã¡ã³ãã®èŠçŽ ã¯åŸã
ã«ãšã³ãžãã¢ã¡ã³ããŒã®æ¥åã«ãæã¿åºããŠããŠããŸãã åºæšããã®ããŒããŒãã«ãèšãããŠããéã ãã¹ãŠã®ãšã³ãžãã¢ã¯ãAIãã¡ã³ããŒã«æã€ãšã³ãžãã¢ãªã³ã°ãããŒãžã£ãŒã«ãªãã ãšããããšãçŸå®çã«ãã§ã«èµ·ãã£ãŠãããšèããŠããŸã EMã§ãªããšãEMã£ãœãããšãæ±ãããããšããæªæ¥ãããé ããªãäžã§ãæã
ãçŸåšã®EMã¯ã¡ã³ããŒã«å¯ŸããŠãEMã£ãœãããšãã§ããããã«ãªãããšããããšãäŒããŠãããªããã°ãªããŸããã ãããžã§ã¯ããããžã¡ã³ããAIæè²ãšæç€ºåºãã®ããã®èšèªåèœåã¯å¿
ãå¿
é ã¹ãã«ã«ãªã£ãŠãããŸãããç°¡åãªå®è£
ã¯AIã«çœ®ãæãã£ãŠãããããããé«åºŠãªæè¡ã身ã«ã€ããªããã°ãªããŸããã æåŸã« ããã¯ç³»ã®ã«ã³ãã¡ã¬ã³ã¹ã«åå ããããšã¯ãããŸããããããžã¡ã³ãç³»ã®ã«ã³ãã¡ã¬ã³ã¹ã¯ïŒçŸå°åå ãšããŠã¯ïŒåããŠã ã£ããããä»ã®åå è
ã®æ¹ãšã®äº€æµãã§ããããšããæãè¯ãã£ããšæããéšåã§ããã ç¹ã«ãã¹ã¿ã¡ã³ã§ã¯å°ä»»ã®EMãç§äžäººãšããããšããããåãç«å Žã ããããã®æ©ã¿ãå
·äœçãªåãçµã¿ã®äºäŸãªã©ã®ã話ãèãããšãã§ããŠã楜ãã1æ¥ãšãªããŸããã ã¹ã¿ã¡ã³ã§ã¯ããããã¯ãéçºã«é¢ããå
šãŠã®é åã§ãããã¯ãè·çš®ã®æ¡çšãããŠããŸãã ãããèå³ãæã£ãŠããã ããããäžèšãããå¿åãã ããïŒ herp.careers
ãã®åºŠãæ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ã¯æšå¹Žã«åŒãç¶ããRubyKaigi 2025ã«Platinumã¹ãã³ãµãŒãšããŠåè³ããŸãã æšå¹Žã®RubyKaigiã®ã¬ããŒãã¯ãã¡ãããð tech.stmn.co.jp ã¹ã¿ã¡ã³ã¯ãäŒæ¥ãçµç¹ã®æ¥åDXããšã³ã²ãŒãžã¡ã³ãåäžãæ¯æŽããã¯ã©ãŠãåãã©ãããã©ãŒã ãTUNAGïŒããã°ïŒããéçºã»æäŸããŠããŸãããTUNAGãã¯ããã¯ãšã³ãã®éçºèšèªã«Rubyã䜿çšããŠãããŸãã äºæ¥ãšéçºçµç¹ãæé·ã§ããã®ã¯ RubyãšRubyã³ãã¥ããã£ã®æ¯ãããã£ãŠããã§ãããä»åŸã®ãããªãã³ãã¥ããã£ã®çºå±ã«è²¢ç®ãããããRubyKaigi 2025ããžåè³ããããŸãã æ¬ã«ã³ãã¡ã¬ã³ã¹ãžã®åè³ãéããŠãããããã®Rubyã³ãã¥ããã£ã®çºå±ãåŸæŒãããŠãããŸãïŒ ã€ãã³ããäžç·ã«çãäžããŠãããŸãïŒ RubyKaigi 2025 é嬿ŠèŠ åç§° RubyKaigi 2025 é嬿¥æ 2025幎4æ16æ¥(æ°Ž) ã 18æ¥(é) å Žæ æåªçç⺠âœåäŒé€š (æåªçæŸâŒåž) åå æ¹æ³ã詳现ã«ã€ããŠã¯ãäžèšå
¬åŒãµã€ããã芧ãã ãã ð rubykaigi.org ä»å¹Žã®ããŒã¹äŒç»ã«ã€ã㊠æšå¹Žã奜è©ã ã£ãã¹ã¿ã¡ã³ã®ããŒã¹ãä»å¹ŽãåºããŸãïŒ ã TUNAG ãã®æ©èœã®äžéšãå©çšãããåå åããŒã¹ã€ãã³ããšãªã£ãŠãããå®éã®ãããã¯ãæ©èœã䜿ã£ãæœéžã€ãã³ãã§ãæ¥å Žè
ã®çããŸã«ã¯ã¯ã¯ã¯ãšæ¥œããããå±ãããŸãïŒ åå ããã ããæ¹ã«ã¯ãåå è³ãæ¯åãçšæããŠãããŸãã®ã§ããã²éã³ã«ããŠãã ããïŒïŒæ°ã«ã¯éããããããŸããïŒ çããŸã®ãè¶ããå¿ãããåŸ
ã¡ããŠããŸãïŒ ãããã« æåŸãŸã§èªãã§ããã ãããããšãããããŸãã åŒç€Ÿããã¯ãšã³ãžãã¢ãHRå«ã8åãçŸå°åå ããŸãïŒ ããŒã¹ãã€ãã³ãçã§ã話ã§ããããšã楜ãã¿ã«ããŠããŸãïŒ åœæ¥äŒå Žã§ã¯ã©ãããããããé¡ãããããŸãã ã¹ã¿ã¡ã³ã§ã¯ãRubyãRubyã³ãã¥ããã£ã奜ããªãšã³ãžãã¢ãçµ¶è³åéäžã§ãã herp.careers åèïŒãšã³ãžãã¢ã®ã«ãžã¥ã¢ã«é¢è«Q&AããèŠãã¹ã¿ã¡ã³ã®å§¿ note.com
ã¯ããã« ããã«ã¡ã¯ããã©ãããã©ãŒã éšã® è¿è€ ã§ãã 2018幎ã«åæãªãªãŒã¹ãããã£ããæ©èœã¯ãã·ã¹ãã ã®æ¡åŒµæ§ãšå®å®æ§ã®åäžã課é¡ãšãªã£ãŠããŸãããããã§ããããã®èª²é¡ã解決ããããå¿«é©ãªãµãŒãã¹ãæäŸããããã«ã2025幎3æã«ãTUNAGãã£ãããããªãªãŒã¹ããŸãããæ¬èšäºã§ã¯ããã®ãªãã¬ãŒã¹ã«ãããŠããã«ãããã³ãåã® SaaS ã¢ããªã±ãŒã·ã§ã³ãã©ã®ããã«æ§æããã®ããã玹ä»ããŸãã prtimes.jp å³1ã«ã¢ãŒããã¯ãã£å
šäœã®æ§æã瀺ããŸãããGoogle Kubernetes Engine (GKE) ãäžå¿ã«æ§æããŠããŸããå®éã«ã¯ãã£ãšå€ãã®ã³ã³ããŒãã³ããçšããŠããŸããããã®èšäºã§åãäžãããå
容ã«éå®ããŠå³ã«ããŸãããåŒç€Ÿã§ã¯ãããŸã§ãAmazon Elastic Container Service (Amazon ECS) ãæ¡çšããããšãã»ãšãã©ã§ãGKE ã®å°å
¥ã¯ä»åãåããŠã§ãã å³1 å
šäœã®æ§æå³ ãã«ãããã³ããæ§ç¯ããäžã§èæ
®ãã¹ããããã¯ã¯å€å²ã«ããããŸããæ¬èšäºã§ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®å
±æã»å æãšããäž»ã«ããã³ãåé¢ã®èгç¹ã«çŠç¹ãåœãŠãŠèª¬æãããŠããã ããŸãã ãã¡ã€ã³ å³1ã§ç€ºãããšãããã¢ããªã±ãŒã·ã§ã³ã¯ããã³ãããšã«åé¢ãããŠããŸãããã®ãããªãµã€ãã¢ãã«ã«ãããŠã¯ãããã³ãã«ãŒãã£ã³ã°ãå¿
èŠã§ããããã³ãã«ãŒãã£ã³ã°ã®æŠç¥ãšããŠã(1)ãã¡ã€ã³é§ååã«ãŒãã£ã³ã°ã(2)ããŒã¿é§ååã«ãŒãã£ã³ã°ã®2ã€ãèããããŸã *1 ãå³2ã«ãããããã®æ¯èŒãç°¡åã«ãŸãšããŸããã詳ããã¯ãAmazon Web Services ããã°ãªã©ããåç
§ãã ãã *2 ã å³2 ããã³ãã«ãŒãã£ã³ã°æŠç¥ã®æ¯èŒ ä»åã¯èªèšŒãã¢ããªã±ãŒã·ã§ã³åŽã§å®è£
ããå¿
èŠããã£ãããããã¡ã€ã³é§ååã«ãŒãã£ã³ã°ãéžæããŸãããå
·äœçã«ã¯ãåããã³ãã«åºæã®ãµããã¡ã€ã³ãäœæããããã³ããèå¥ããŠããŸãããããŠãµããã¡ã€ã³ã«ã¯ãæå³ã®ãªãæååã§ã¯ãªããããã³ãããšã«ããŒãœãã©ã€ãºããããããã£ãµããã¡ã€ã³ã䜿çšããŠããŸããäŸãã°ãæ ªåŒäŒç€Ÿã¹ã¿ã¡ã³ã®å Žåããstmn.example.comãã®ãããªãµããã¡ã€ã³ãšãªããŸãããããã£ãµããã¡ã€ã³ã¯ã·ã¹ãã åŽã§ã¯ãªãé¡§å®¢ãæ±ºå®ãããããéçšãéçºã«ã³ã¹ããçºçããŸããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãéèŠãããã®æ¹åŒãæ¡çšããŸãã *3 ã ããŒããã©ã³ãµãŒ ããŒããã©ã³ãµãŒã¯ãå
šããã³ãå
±æã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãšãªã£ãŠããŸããã€ã³ãã©ã¹ãã©ã¯ãã£ãå
±æããçç±ã¯ãäž»ã«ã³ã¹ãã®æé©åã®ããã§ããCloud Load Balancing ã¯ãåä¿¡ã»éä¿¡ããŒã¿éã«å ããŠãã転éã«ãŒã«æ° à å©çšæéãã«å¯ŸããåŸé課éã®ãã *4 ãããã³ãéã§å
±æããããšã§ã³ã¹ãã¯æããããŸãã Kubernetesã¯ã©ã¹ã¿ãŒå
ã§å®è¡ãããŠãããµãŒãã¹ãžã®å€éšã¢ã¯ã»ã¹ã«ã¯ãäžè¬çã« Ingress ã䜿çšãããããšãå€ããããããŸãããä»åã¯å³1ã«ç€ºããšãããåããã³ã㯠Namespace ã§åé¢ãããŠããŸããIngress 㯠Namespace ãè·šãã§å©çšããããšãåçŽã«ã¯ã§ããªãããããã®ãããªå Žåã«ã¯ Gateway ã®äœ¿çšãéžæè¢ãšããŠèããããŸã *5 ãGateway 㯠Ingress ã®ã¹ãŒããŒã»ãããšããŠæäŸãããŠããç¹ *6 ããæ¡çšçç±ã®äžã€ã§ãããã ããGKE Gateway ã§ã¯ Cloud CDN ããµããŒãããŠããªãç¹ *7 ã«ã¯çæãå¿
èŠã§ãã ã¢ããªã±ãŒã·ã§ã³ ä»åã®ã¢ããªã±ãŒã·ã§ã³ã®èŠä»¶ãšããŠãããã³ãããšã« Pod ãçšæããŠããµãŒããŒãç«ãŠãå¿
èŠããããŸãããPod ãåé¢ããäž»ç®çã§ã¯ãããŸããããããã³ãããšã«æé©ãªã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ãé©çšã§ãããããã€ãžãŒãã€ããŒã®å¯Ÿçã«ãç¹ãã£ãŠããŸãã ãŸããåããã³ãã® Pod 㯠Namspace ã«ãã£ãŠåé¢ããŠããŸã *8 ãããã³ãå°çš Namespace ã«ãããµã€ãåã«ã¯ãããã€ãã®ã¡ãªããããããŸããã 第äžã«ãåé¢ãããç°å¢ã«ãããã»ãã¥ãªãã£ã匷åã§ããŸããããã³ãéã®ããŒã¿æŒæŽ©ã¯ãSaaS ã«ãããŠéåžžã«å€§ããªããžãã¹ãªã¹ã¯ã®äžã€ã§ãã 第äºãã¢ãã¿ãªã³ã°ã§ã®å©äŸ¿æ§ã§ããGoogle Cloud ã®ã³ã³ãœãŒã«äžã§ãNamespace åäœã§åçš®ã¡ããªã¯ã¹ã確èªã§ããããæè»ãã€çŽ æ©ãåæããããšãå¯èœã§ãã 第äžã«ãKubernetes ãªããžã§ã¯ãã®ååã®è¡çªãæèããå¿
èŠããªããªããªã©ããªããžã§ã¯ãã®ç®¡çã容æã«ãªããŸããä»åã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãæ°èŠã«ããã³ãã远å ããå Žåã¯ãããã³ãå°çšã®èšå®ãã¡ã€ã«ã远å ããŠã¯ãŒã¯ãããŒãå®è¡ããŸããè§£çŽã«äŒŽãããã³ããåé€ããå Žåã¯ãNamespace ãåé€ããããšã§ãå±ãããªããžã§ã¯ããäžæ¬ã§åé€ã§ããŸãããããã管çããNamespace ã«ããåé¢ã广ãçºæ®ããŠããŸãã å³3 ãã¡ã€ã«ç®¡çã®ã€ã¡ãŒãž ããŒã¿ããŒã¹ ãã«ãããã³ãã«ãããããŒã¿ããŒã¹ã®åé¢ãã¿ãŒã³ã¯ããã€ãèããããŸãã(1)åäžã€ã³ã¹ã¿ã³ã¹å
±éããŒã¿ããŒã¹æ¹åŒã(2)åäžã€ã³ã¹ã¿ã³ã¹åå¥ããŒã¿ããŒã¹æ¹åŒã(3)ã€ã³ã¹ã¿ã³ã¹å颿¹åŒãªã©ã§ã *9 ããŸããRDB ã«ãšããããããããŒãžããªãµãŒãã¹ãéžæè¢ã«ãªãåŸããããããŸãã *10 ãä»åã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹æ§ãšããŠãRDB ã®å©çšãåæãšãªã£ãŠããŸããã ããŒã¿ããŒã¹ã®åé¢ãã¿ãŒã³ åäžã€ã³ã¹ã¿ã³ã¹å
±éããŒã¿ããŒã¹æ¹åŒã¯ãã€ã³ãã©è²»çšãéçšã³ã¹ãã«ã¡ãªããããããŸãããã®ãã¿ãŒã³ã®å ŽåãããŒã¿åé¢ã¯ PostgreSQL ã® Row Level Security ãå©çšããããã¢ããªã±ãŒã·ã§ã³ã¬ã€ã€ãŒã§å¯Ÿå¿ããããšã«ãªããŸãããããŸã§åŒç€Ÿã®Railsã¢ããªã±ãŒã·ã§ã³ã§ã¯ãäž»ã«ãã®ãã¿ãŒã³ãæ¡çšããŠããŸããã ä»åã¯ãã¢ããªã±ãŒã·ã§ã³ã¬ã€ã€ãŒã§ããŒã¿åé¢ã察å¿ããããšãå°é£ã ã£ããããåäžã€ã³ã¹ã¿ã³ã¹åå¥ããŒã¿ããŒã¹æ¹åŒãæ¡çšããŸãããããã³ãããšã«ããŒã¿ããŒã¹ãŠãŒã¶ãäœæããåã¢ããªã±ãŒã·ã§ã³ã¯ãã®ãŠãŒã¶ãå©çšããŠãããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããŸããåããã³ãã¯ãå¥ããã³ãã®ããŒã¿ããŒã¹ãåç
§ããããšã¯ãæš©éã®å¶çŽã«ããã§ããŸãããäžæ¹ã§ãã€ã³ã¹ã¿ã³ã¹ãå
±æããŠããããããã€ãžãŒãã€ããŒãªã©ã¯ãªã¹ã¯ãšãªãåŸãŸããã€ã³ã¹ã¿ã³ã¹å颿¹åŒã¯ãã€ã³ãã©è²»çšãéçšã³ã¹ããé«ãããæ¡çšã¯çŸå®çã§ã¯ãããŸããã§ããã å³5 åé¢ãããã¢ã¯ã»ã¹ã®ã€ã¡ãŒãž åäžã€ã³ã¹ã¿ã³ã¹å
±éããŒã¿ããŒã¹æ¹åŒãæ¡çšããŠããåŒç€Ÿã® Rails ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãactiverecord-multi-tenant *11 ãšãã Gem ãçšããŠãã¢ããªã±ãŒã·ã§ã³ã¬ã€ã€ãŒã§ããŒã¿åé¢ãå®çŸããŠããŸãããã ããGem ã«ããå¶çŽã®é©çšã確å®ã«ãããããåŒç€Ÿã§ã¯ç¬èªã®ãã¹ãã³ãŒããå®è£
ãããšãã£ãæ§ã
ãªå·¥å€«ãå¿
èŠã«ãªã£ãŠããããã®å¯Ÿå¿ã¯ç°¡åã§ã¯ãããŸããã åäžã€ã³ã¹ã¿ã³ã¹åå¥ããŒã¿ããŒã¹æ¹åŒã«ã課é¡ã¯ããã1ã€ã®ã€ã³ã¹ã¿ã³ã¹å
ã®ããŒã¿ããŒã¹æ°ãšããŒãã«æ°ãã¹ã±ãŒã«ããããšã§ããã€ã°ã¬ãŒã·ã§ã³ã«ãããæéã®å¢å ãªã©ã®èª²é¡ãçããäºäŸãSmartHR瀟ã玹ä»ããŠããŸã *12 ãä»åã¯ãããŸã§ã®ã¹ã±ãŒã«ã¯äžç¢ºå®ã§ãããæžå¿µã«ã¯èããŠããŸããããŸããã¢ããªã±ãŒã·ã§ã³ã®ç¹æ§ãšããŠãããã³ãã¯æç¢ºã«åé¢ãããŠãããä»åŸã¯è€æ°ã€ã³ã¹ã¿ã³ã¹æ§æãæ¯èŒç容æã«å°å
¥ã§ãããšèããŠããŸãã å³6 è€æ°ã€ã³ã¹ã¿ã³ã¹æ§æ æåŸã« ç§ã«ã¯Google Cloud ãš Kubernetes ã®çµéšãã»ãšãã©ãªãã£ãã®ã§ãããããŸããŸãªéžæè¢ã® Pros & Cons ããã¬ãŒããªããæŽçããŠæ§ç¯ãé²ããŠããããšã¯éåžžã«è¯ãçµéšã«ãªããŸããã 9幎ç®ãè¿ããåŒç€Ÿã® TUNAG ã§ã¯ããããããããšã«å°å
¥äŒæ¥æ°ããŠãŒã¶ãŒæ°ãçå®ã«å¢ããŠããŸãããã®ãããªã¹ã±ãŒã«ã«äŒŽããä»åŸã®äžé·æçãªã¹ã±ãŒã©ãã«ãªã¢ãŒããã¯ãã£ã®ããã®åãçµã¿ãç©æ¥µçã«è¡ã£ãŠããŸãããŸãããã«ããããã¯ãæŠç¥ã«ãæ¬æ Œçã«åãçµãã§ããã0 â 1ã§ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããæ©äŒãä»åŸãŸããŸãå¢ããŠããã¯ãã§ãã ã¯ã©ãŠããäžå¿ãšããã¢ãŒããã¯ãã£æ§ç¯ã«èå³ãæã£ãŠãããšã³ãžãã¢ã«ãšã£ãŠã¯ãéåžžã«ããããã®ããç°å¢ã ãšæããŠããŸããå°ãã§ãèå³ãæã£ãŠããã ãããããã²ãŸãã¯ã«ãžã¥ã¢ã«é¢è«ã§ã話ãã§ããã°ãšæããŸãã herp.careers åè Golding Tod. (2024). Building Multi-Tenant Saas Architectures: Principles, Practices, and Patterns Using AWS . California: O'Reilly Media. (ãŽãŒã«ãã£ã³ã°ã»ããã. æ²³å å²ä¹ã»æ«»è°· åºäºº(èš³)(2025).ãã«ãããã³ãSaaSã¢ãŒããã¯ãã£ã®æ§ç¯âååããã¹ããã©ã¯ãã£ã¹ãAWSã¢ãŒããã¯ãã£ãã¿ãŒã³) *1 : AWS ã«ããã SaaS ã¢ããªã±ãŒã·ã§ã³ã®ããã³ãã«ãŒãã£ã³ã°æŠç¥ *2 : SaaS ã«ãããããã³ããªãœãŒã¹ãžã®ãªã¯ãšã¹ãã«ãŒãã£ã³ã°ã JWT ãçšããŠå®çŸãã *3 : ãããã£ãµããã¡ã€ã³ã¯ãSlackãZoomãªã©åºãæ¡çšãããŠãããä»åã®ã¢ããªã±ãŒã·ã§ã³ã®ä»æ§ã§ã¯ããã°ã€ã³æã«ãµããã¡ã€ã³ãå
¥åãããããèšæ¶ãããããããã£ãµããã¡ã€ã³ãçšããæ¹ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã¯åäžãããSmartHR瀟㮠ã¹ããŒããã©ã³åãã¢ããªã®ãã°ã€ã³ã«ãµããã¡ã€ã³ã®å
¥åãå¿
èŠã«ãªããŸããïŒ03/21æŽæ°ïŒ ã®ãããªäœéšã«è¿ãã *4 : All networking pricing *5 : Cross namespace communication in GKE ingress *6 : About the Gateway API Comparison of Ingress and Gateway *7 : Deploying Gateways Restrictions and limitations *8 : Google Kubernetes Engine äžã§ SaaS ãã©ãããã©ãŒã ãäœæãã *9 : Windows Azureãšã³ã¿ãŒãã©ã€ãºã¢ããªã±ãŒã·ã§ã³éçºææ³ ãã«ãããã³ãã»ã¢ãŒããã¯ã㣠ãåèã«ããã"ããŒã¿ããŒã¹"ãšããåèªã PostgreSQL ã§çšãããã"ããŒã¿ããŒã¹"ãšã®æ··åã«ã€ãªããããã£ãŠèª¬æã®äŸ¿å®äžãåèèšäºã®èªåœãããããŒã¿ããŒã¹ â ã€ã³ã¹ã¿ã³ã¹ãããã¹ããŒã â ããŒã¿ããŒã¹ãã«çœ®ãæããŠæ¬èšäºã§ã¯è¡šçŸããããŠããã ããã *10 : RDBã䜿ããªã究極ã®ãã«ãããã³ã *11 : activerecord-multi-tenant *12 : SmartHR ã宿ã¡ã³ããã³ã¹ãå§ããçç±ãšãããçç±