ã¯ããã« ããã«ã¡ã¯ãã¿ã€ããŒã§ãšã³ãžãã¢ãããŠããå€å±( id:kimikimi714 / @kimikimi714 )ã§ãã ãã¡ã㯠Timee Product Advent Calendar 2025 ãã©ãã¯3ã®7æ¥ç®ã®èšäºã§ãã ãã§ã«å
¥ç€ŸããŠ1幎åã»ã©çµã¡ãŸããããå
¥ç€ŸããŠå²ãšããã«å¯Ÿå¿ãã S3 ãã±ããã®æ§ææšæºåã«ã€ããŠå
¬éããŸãã æšæºåã®ç®ç åœæããã S3 ãã±ããã®èª¿æ»ããããªãããšããéã«ä»¥äžã®ãããªåé¡ãèŠã€ãããŸããã Terraform ã§ IaC åãããåã«äœæããããã±ãããªã©ã§ãS3 ãžã®ã¢ã¯ã»ã¹ãã°ãåºåãããŠãªãã±ãŒã¹ãããã ãããªãã¯ã¢ã¯ã»ã¹ã®å¿
èŠã®ãªããã±ããã«å¯ŸããŠããããªãã¯ã¢ã¯ã»ã¹ãããã¯ã®èšå®ãå
¥ã£ãŠããªããã®ãããã 仮㫠IaC åãããŠãããšããŠããæžãã人ã«ãã£ãŠå
¥ããããèšå®ããŸã¡ãŸã¡ã§äžè²«æ§ããªãã IaC 管çãããŠããªããªã import ããã°ãããããªãããã°ãåããŠãªããªãåãã°ãããããªããšãã話ã§ã¯ãªãããããã ã©ãããç¶æ
ã«ããã°æ¢åãµãŒãã¹ããã³ããããç«ã¡äžããŠããæ°èŠãµãŒãã¹ã§ã S3 ãå®å
šã«ãã£ãã䜿ããç¶æ
ã«ãªãã®ããããã£ãŠããªã ããšãæ ¹æ¬ã®åé¡ã§ããã ãã®ãããS3 ãã±ããã®ãã¹ããã©ã¯ãã£ã¹ããŸãã¯æŒãããŠããã®äžã§ç§ãã¡ãã©ã®ããã«ãã®ãã©ã¯ãã£ã¹ãåãå
¥ããŠããã¹ããããŸãšããŠæšæºåãšããæ¹éã§é²ããŸããã ã»ãã¥ãªãã£ãã¹ããã©ã¯ãã£ã¹ã®ç¢ºèª ãŸã㯠AWS å
¬åŒãæäŸããŠãããã¹ããã©ã¯ãã£ã¹ã®ç¢ºèªãããããªããŸããã docs.aws.amazon.com ããã㯠AWS Security Hub CSPM ã®åºæ¬çãªã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹æšæº ãæå¹ã§ããã°èªåçã«ã³ã³ãã©ã€ã¢ã³ã¹ãã§ãã¯ãããããã®ãå«ãŸããŠããŸãããããšãã°ä»¥äžã®ãããªãã®ã¯å«ãŸããªãããã«èªåãã¡ã§å¿
èŠãªãã§ãã¯äœå¶ãçµãå¿
èŠããããŸãã ããŒãžã§ãã³ã° ãæå¹ã ãªããžã§ã¯ããã㯠ãããã£ãŠããã æå·å ãæå¹ã KMS ã§æå·å ãããŠããã ã¬ããªã±ãŒã·ã§ã³ ãæå¹ã äŸãšããŠæãããã§ãã¯é
ç®ã¯ãã¹ãŠã®ãã±ããã«å¯ŸããŠæå¹åããã¹ãã?ãšãããšããã§ã¯ãããŸããã ããšãã°ãããŒãžã§ãã³ã°ã¯éå»ããŒãžã§ã³ã§ä¿åãããŠãããªããžã§ã¯ããµã€ãºã®åã ãã³ã¹ããããããŸãããŸãéå»ããŒãžã§ã³ãæ±ããŠãããªããžã§ã¯ãã®åé€ããŒã«ãŒãå¢ãããããã1ãªããžã§ã¯ããããã®éå»ããŒãžã§ã³æ°ãå€ããšããã©ãŒãã³ã¹äžã®åé¡ãããããšã ããŒãžã§ãã³ã°ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã° ã«æžãããŠããŸããããŒãžã§ãã³ã°ã¯éå»ããŒãžã§ã³ã«ããããã¯ã¢ããã§é害埩æ§ããããšãäž»ãªç®çãšãªãã§ãããããããã¯ã¢ãããããŒãžã§ãã³ã°ã§ãããªãã¹ããªã®ãã GitHub Actions çããã®ã¢ããããŒãã§å¯Ÿå¿ããŠãããªãåé¡ãããã° GitHub ããåãæ»ããäœå°ã¯ãªãã®ããªã©èŠä»¶æ¬¡ç¬¬ã§èŠäžèŠãå€ãããã®ã§ããåæ§ã«ãªããžã§ã¯ãããã¯ãèŠäžèŠã¯èŠä»¶æ¬¡ç¬¬ã§ãã ãŸãããªããžã§ã¯ãããã¯ã¯ãã±ããã®äœææã§ãªããšèšå®ã§ããªãå¶çŽãããã®ã§ãäœææç¹ã§èŠä»¶ãããçšåºŠåºããŠããã§ãªããšé©å¿ã§ããªãèšå®é
ç®ã ã£ããããŸãã ãããã£ãããšãããã¹ããã©ã¯ãã£ã¹ãããŒã¹ãšãã€ã€ãããã¹ãŠã®ãã±ããã«é©å¿ããã¹ãé
ç®ãšãã±ããã®å€§ãŸããªåé¡ãããŠåé¡ããšã«å¿
èŠãªãã©ã¯ãã£ã¹ããããããŸããã ãã±ããã®åé¡ æ°ãã«åºãŠãããã±ããã®èŠä»¶ãäœã«ãªããã¯ãã®æã«ãªã£ãŠã¿ãªããšããããªãã§ãããªã®ã§ããŸãã¯æ¢åãã±ããã®å©ç𿹿³ã«ã€ããŠèª¿æ»ãããšããããã¯ãããŸããããããããšå€§éæã«ä»¥äžã®ãããª8ã€ã®åé¡ãšãªãããšãããããŸããã ãŠãŒã¶ãŒã®ãããã£ãŒã«ç»åãªã© ã³ãŒãã¬ãŒããµã€ãã®ã¯ãªãšã€ãã£ããªã© S3 ãµãŒããŒã¢ã¯ã»ã¹ãã° CloudTrail ãã°ãªã©ã®ç£æ»ãã° ã¢ããªã±ãŒã·ã§ã³ãã°ã®ã¢ãŒã«ã€ã ã¢ããªã±ãŒã·ã§ã³ã§å©çšããèšå®ãã¡ã€ã« ã¢ããªã±ãŒã·ã§ã³ã§åç
§ããäžæãã¡ã€ã« èŠé
æ
®å人æ
å ±ãç¹å®å人æ
å ± ããããã®åé¡ã«ã€ããŠç°¡åã«è§£èª¬ããŸããæçµçãªæšæºèšå®ã¯å¥éèšèŒããŸãã ãŠãŒã¶ãŒã®ãããã£ãŒã«ç»åãªã© ãŠãŒã¶ãŒã«ããã¢ããããŒãã§äœæããããªããžã§ã¯ããäž»ãªå
容ã§ãããããã¯ãŠãŒã¶ãŒãèœåçã«ç»åãã¢ããããŒãããªããã°ãªããªããããä»®ã«èª€ã£ãŠåé€ã»æŽæ°ããŠããŸããšã埩æ§ã¯ããã¯ã¢ããããããŠãŒã¶ãŒããã®åã¢ããããŒããšãªã£ãŠããŸããŸãã誀æäœã«ããåã¢ããããŒããä¿ãæµãã¯ããã®ã«ãã£ãŠã¯ãŠãŒã¶ãŒé¢è±ã®åŒãéã«ãªãåŸãã®ã§ãããããã±ãŒã¹ã¯ããŒãžã§ãã³ã°ããŠãããæ¹ãå®å¿ã§ãã ã³ãŒãã¬ãŒããµã€ãã®ã¯ãªãšã€ãã£ããªã© ã³ãŒãã¬ãŒããµã€ããäœããã®ã©ã³ãã£ã³ã°ããŒãžã®éçãªãœãŒã¹ãäž»ãªå
容ã§ããããã㯠GitHub ã®ãªããžããªã§ç®¡çããããŒãžããã GitHub Actions çã§èªåçã«ã¢ããããŒããããããšãå€ãã§ããç»åä¿åã®ããã®å¥ã®ããŒã«ããã¶ã€ããŒã䜿ã£ãŠããã±ãŒã¹ããããŸããã倧å㯠GitHub ãéããŠã¢ããããŒãããããããŠãŒã¶ãŒã«èŠãããªãœãŒã¹ã®å€§å
㯠S3 以å€ã«ãããããªã±ãŒã¹ã§ãã ãããªãœãŒã¹ãäœããã®çç±ã§åé€ã»æŽæ°ãããå Žåã«éå»ããŒãžã§ã³ãã埩å
ããã®ãã GitHub ããã¢ããããŒããããã®ãã¯åŸ©æ§ãŸã§ã®ãªãŒãã¿ã€ã èŠä»¶æ¬¡ç¬¬ãšãªããŸãããã«ããæãŸããªã©ããããã€æéãåŸ©æ§æéã«åŒ·ã圱é¿ãäžããã±ãŒã¹ã§ã¯ããŒãžã§ãã³ã°ãã埩æ§ã§ããæ¹ãæ©ãã§ããããªããŒãããŠãããã€ã®æ¹ãäžç¬ã§ãã¬ãã¥ãŒãæãŸã£ãŠå®å
šã«åŸ©æ§ã§ãããšããèãæ¹ãã§ããŸãããŸãåé€ã»æŽæ°ããããªããžã§ã¯ãã®æ°ãå€ãããã°ãããŒãžã§ãã³ã°ãã1ã€ãã€æ»ãããšãçŸå®çã§ã¯ãªãããšãããåŸãŸãã S3 ãµãŒããŒã¢ã¯ã»ã¹ãã° S3 ãžã®ã¢ã¯ã»ã¹ããããªãããéã« S3 ãã±ããããçºè¡ãããã¢ã¯ã»ã¹ãã°ã®ä¿åå Žæã§ãããã®ã¢ã¯ã»ã¹ãã°ã¯å®éã®ã¢ã¯ã»ã¹ããæ°æéé
ããŠçºè¡ãããç¹åŸŽãããããã CloudTrail ã®ãããªãªã¢ã«ã¿ã€ã æ§ã¯ããªãäœãã§ããã§ããã CloudTrail ããŒã¿ã€ãã³ããæå¹åããªããšåããªããã®ãããæéãå®ãåããããCloudTrail ãã°ã«ã¯å«ãŸããªãæ
å ±ãå«ãŸããŠããããããããæå¹åããŠãããæ¹ãç£æ»æ§ãäžãããŸãã æ¯èŒè¡šã¯ä»¥äžã®ãªã³ã¯ãã確èªãã ããã docs.aws.amazon.com CloudTrail ãã°ãªã©ã®ç£æ»ãã° CloudTrail ãªã©ã€ã³ã·ãã³ãæã«èª°ãã©ãããã¢ã¯ã»ã¹ããã远跡ããçšéã§äœ¿ããããããªç£æ»ãã°ãä¿åããå Žåã§ããæ¹ç«é²æ¢ãéåžžã«å€§äºã«ãªããŸãã ã¢ããªã±ãŒã·ã§ã³ãã°ã®ã¢ãŒã«ã€ã ãã§ã«åŒç€Ÿã®ããã€ãã®ããã¯ããã°ã§æžããŠãéãã æ®æ®µã¯ Datadog ãå©çšããŠããŸããããã°ã®é·æéä¿åã¯éåžžã«ã³ã¹ããããããã S3 ã«ã¢ããªã±ãŒã·ã§ã³ãã°ã®ã¢ãŒã«ã€ããåã£ãŠ Datadog åŽã®ä¿ææéã¯çãããŠãããŸãã å¹³æã«åç
§ããããšã¯ã»ãšãã©ãããŸããããéå»ã®äºè±¡ã«é¢ãã調æ»ããããå Žåã«æŽ»çšãããã®ã§ãæ°å¹Žä¿åããããšãæ³å®ããŠãããã®ã«ãªããŸãã ã¢ããªã±ãŒã·ã§ã³ãã°ã®ä»ã ALB ã CloudFront ãªã©ã®ã¢ã¯ã»ã¹ãã°ãããã«å«ãããšã«ããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã§å©çšããèšå®ãã¡ã€ã« ã¢ããªã±ãŒã·ã§ã³ãèšå®ãã¡ã€ã«ãšããŠèªã¿èŸŒããã¡ã€ã«ã®ä¿åå
ã§ããããšãã° ECS ã§åç
§ããç°å¢å€æ°ãåæããããªããžã§ã¯ã ã Fluent Bit ã®èšå®ãã¡ã€ã« ãªã©ãäž»ãªå
容ã§ãã ã¢ããªã±ãŒã·ã§ã³ã§åç
§ããäžæãã¡ã€ã« ããšãã°ãäžåºŠ DB ã¬ã³ãŒãããéèšããããŒã¿ãäžæçã«ãªããžã§ã¯ããšã㊠S3 ãã±ããã«ãããå¥ã®ãããã§åç
§ãããããªã±ãŒã¹ã§äœ¿ãããäžæãã¡ã€ã«ã§ããããããå®è¡çµäºããã䜿ããªããªããããªãã¡ã€ã«ãäž»ã§ãå©çšåŸçŽã¡ã«åé€ããããšãæåŸ
ããããããªãªããžã§ã¯ããä¿ç®¡ãããã±ããã§ãã èŠé
æ
®å人æ
å ±ãç¹å®å人æ
å ± æ³çã«å人æ
å ±ä¿è·ã®äžã§ãèŠä»¶ã匷ããã®ãä¿ç®¡ãããã±ããã§ããS3 ãã±ããã®ãã±ããããªã·ãŒã§ã¢ã¯ã»ã¹ã³ã³ãããŒã«ããããªãããšã倧åã§ããããã®ãã±ããã«ã€ããŠã¯ç¹ã«ã³ã³ãã©ã€ã¢ã³ã¹éµå®ã®ããã« KMS ã«ããæå·åãšããŒããªã·ãŒã«ããã¢ã¯ã»ã¹ã³ã³ãããŒã«ã远å ã§ãããªãããã«ããããšãæ€èšããæ¹ãè¯ãã§ãã åé¡åŸã®ãã±ããèšå®ã®ãµããªãŒ åé¡åŸãããããã«å¿
èŠãšèããããèšå®ãããããæžãåºããŸããã以äžã®è¡šãç°¡åãªãµããªãŒã§ããæ¬åœã¯ããã«æžããŠãé
ç®ä»¥å€ã«ããããŸãããå
šéšæžãã«ã¯å€ãããã®ã§äžéšã ãæ²èŒããŠããŸãããããå¯äžã®è§£ã§ã¯ãããŸããããS3 ãã±ããã«å¯ŸããŠèšå®ã§ããããšã¯ããã«æžããŠããããšã ãã§ã¯ãªãã§ããããããã£ãããšããŸãšããããšã§ãã©ã®ãã±ããã«äœã®èšå®ããããŠããå¿
èŠãããã®ãããšããæšæºåã«è¿ã¥ããããšãã§ããŸãã ãã±ããã®åé¡ æå·åææ³ èŠãªããžã§ã¯ããã㯠èŠããŒãžã§ãã³ã° èŠã¬ããªã±ãŒã·ã§ã³ ãŠãŒã¶ãŒã®ãããã£ãŒã«ç»åãªã© S3-managed äžèŠ å¿
èŠ å¿
èŠ ã³ãŒãã¬ãŒããµã€ãã®ã¯ãªãšã€ãã£ããªã© S3-managed äžèŠ äžèŠ äžèŠ S3 ãµãŒããŒã¢ã¯ã»ã¹ãã° S3-managed ã¬ããªã±ãŒã·ã§ã³å
ã§å¿
èŠ *1 å¿
èŠ å¿
èŠ CloudTrail ãã°ãªã©ç£æ»ãã° S3-managed å¿
èŠ å¿
èŠ äžèŠ ã¢ããªã±ãŒã·ã§ã³ãã°ã®ã¢ãŒã«ã€ã S3-managed äžèŠ äžèŠ äžèŠ ã¢ããªã±ãŒã·ã§ã³ã§å©çšããèšå®ãã¡ã€ã« S3-managed äžèŠ å¿
èŠ å¿
èŠ ã¢ããªã±ãŒã·ã§ã³ã§åç
§ããäžæãã¡ã€ã« S3-managed äžèŠ äžèŠ äžèŠ èŠé
æ
®å人æ
å ±ãç¹å®å人æ
å ± KMS äžèŠ äžèŠ äžèŠ ãã®èšå®äŸãå
ã« S3 ãã±ããã®ãµã³ãã«ã³ãŒããäœæããŸããããã®ã³ãŒãã«ã¯ S3 ãµãŒããŒã¢ã¯ã»ã¹ãã°ã®ãã±ããã®æå®æ¹æ³ãªã©ãå«ããŠã課é¡ãšããŠæããŠãããã°ã®æ¬ åŠãè§£æ¶ãããã°ãåãããšãåœããåãšããããããªæ§æãç®æããŸããããŸãããããªãã¯ã¢ã¯ã»ã¹ãããã¯ã CloudFront ãåæ®µã«æãã°ãã±ãããã®ãã®ãå
¬éããå¿
èŠã¯ãªãããšããåºæ¬çã«ã¯å
šãã±ããã§ãã©ã€ããŒãåãæšå¥š *2 ããã§ããã° AWS ã¢ã«ãŠã³ãåäœã§ãããªãã¯ã¢ã¯ã»ã¹ãããã¯ãæå¹åããŠããããšãšããŸããããã®ãšããããŒã ã¡ã³ããŒãã module åããããšã§ããããã£ãèšå®ãã®ãã®ãã«ãã»ã«åããæ¹ãè¯ãã®ã§ã¯ãªããïŒãšããææ¡ããããŸããããäœæããåœæãã®åé¡ã§æ¬åœã«åé¡ãªãã®ããããããªãã£ãããã module åã¯ææå°æ©ãšå€æããæšæºåã®ç¬¬äžæ®µéãšããŠã¯ãµã³ãã«ã³ãŒããæžãã«çããŸããã ã¬ãŒãã¬ãŒã«ã®èšèšãšå®è£
ã ã»ãã¥ãªãã£ãã¹ããã©ã¯ãã£ã¹ã®ç¢ºèª ãã®ç¯ã«ãèšèŒããéãã AWS Security Hub CSPM ã®åºæ¬çãªã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹æšæº ãæå¹ã§ããã°èªåçã«ã³ã³ãã©ã€ã¢ã³ã¹ãã§ãã¯ãããããã®ãå«ãŸããŠãããããå«ãã§ããªããã®ã®ãã¡ããã±ããã®åé¡äžå¿
èŠãªãã§ãã¯é
ç®ãæŽãåºããŸãããããã㯠AWS Config ã® ãããŒãžãã«ãŒã« ãååšããŠããŸãã AWS Config 㯠AWS ãªãœãŒã¹ã®æ§æãç¶ç¶çã«ç£èŠã»è©äŸ¡ãããµãŒãã¹ã§ã SecurityHub ãšãçµ±åãå¯èœãªãã®ãšãªã£ãŠããŸããå
ã«æŽãåºããé
ç®ãšå¯Ÿå¿é¢ä¿ã¯ä»¥äžã®ããã«ãªããŸãã æå³ ã«ãŒã«å S3 ããŒãžã§ãã³ã°ãæå¹ã s3-bucket-versioning-enabled S3 ãªããžã§ã¯ãããã¯ãããã£ãŠããã s3-bucket-default-lock-enabled ãµãŒããŒãµã€ãæå·åãæå¹ã s3-bucket-server-side-encryption-enabled KMS ã§æå·åãããŠããã s3-default-encryption-kms ã¬ããªã±ãŒã·ã§ã³ãæå¹ã s3-bucket-replication-enabled AWS Config ã§ã¯ç¹å®ã®ã¿ã°ãã€ããŠãããªãœãŒã¹ã«å¯ŸããŠãç¹å®ã®ã«ãŒã«ããã§ãã¯ããæ©æ§ããããŸãããããã®ã«ãŒã«ãã²ãšãŸãšãã«ããé©åããã¯ãå AWS ã¢ã«ãŠã³ãã«åæ ããŠããªãœãŒã¹ã«ã¯é©åã«ã¿ã°ãã€ããããšã§æšæºã«æ²¿ã£ãæ§æããã§ãã¯ã§ããããã«ããŸãããã¿ã°ã®èšå®äŸã¯ä»¥äžã®ããã«ããŸããã tags = { "BucketType" = "user-uploads" "ConfigRule-s3-bucket-replication-enabled" = "enabled" "ConfigRule-s3-bucket-server-side-encryption-enabled" = "enabled" "ConfigRule-s3-bucket-versioning-enabled" = "enabled" } ããã§ ConfigRule-s3-bucket-replication-enabled ãã€ããŠãããªãœãŒã¹ã§ã¯ s3-bucket-replication-enabled ããã§ãã¯ãããããã«ãªããŸããå®éã«ã¯ã¿ã°ã®ãŸãšãŸãã module åããŠãããã³ãŒãäžã®æå®ãšããŠã¯ä»¥äžã®ããã«æžãã ãã§äžã®ã¿ã°ãå±éãããŠããªãœãŒã¹ã®æ§æãã§ãã¯ãèµ°ãä»çµã¿ã§ãã tags = module.aws_config_s3.tag_map_for_user_uploads module ã®ä¿®æ£ããããªãããšã§äžå€®éæš©çã«ãã§ãã¯é
ç®ã管çã§ãããã€ä»®ã«ã«ãŒã«ã®äžéšãç·©ãããå Žåã¯ä»¥äžã®ããã«æžãããšã§æè»æ§ãæãããŸããã tags = merge ( module.aws_config_s3.tag_map_for_user_uploads, { "ConfigRule-s3-bucket-replication-enabled" = "disabled" } ) éçšéå§åŸã«èŠããŠããè¯ãã£ãããšãšã®ã£ãã ãŸãããã®æšæºåã®è¯ãã£ããšããã¯ããã®æç¹ã§ã§ãã S3 ã®èšå®ã«ã€ããŠç¶²çŸ
çã«ç¥ããããšãšãããã¡ãããšèŠä»¶ã«çµã¿èŸŒããµã³ãã«ãŸã§åºããããšã§ããããŒãžã§ãã³ã°ãã§ããããšã¯ä»¥åããç¥ã£ãŠãããã®ã®ãããŒãžã§ãã³ã°ã«ããããã©ãŒãã³ã¹åé¡ãéå»ããŒãžã§ã³åã ãã³ã¹ããäžãããªã©ã®å¶çŽã¯æšæºååã®èª¿æ»ãããŠã¯ãããŠç¥ã£ãããšã§ãããããŒã ã¡ã³ããŒãç¥ããªãå¶çŽã ã£ããããã®ã§ããããããã£ãäžã§ã©ãããèŠä»¶ã§åœ¹ã«ç«ã€ã®ããªã©ãŸãšããããããšã¯è¯ãã£ãã§ãã ãŸãããã±ããäœææç¹ã§ã©ãããèšå®ãå
¥ããã°ãããè¿·ã£ãŠããæéããã®åé¡ãšãµã³ãã«ã³ãŒãã®ãããã§æžããŸãããããã¯ä»ã«ãªã£ãŠæãã°èšèšããå®è£
æéã®èšæž¬ãããŠããã°ãã©ã®ãããåæžã§ãããå°ãã¯ããã£ããããããªããªãšæã£ãŠããŸãããäžãã S3 ãã±ããã§äœãã§ããã調ã¹ãããã¯åé¡ããå
¥ããã¹ãèšå®ããµã¯ããšåºããã®ã¯å人çãªäœéšãšããŠãè¯ãã£ãã§ãã äžæ¹ã§ã®ã£ããããã¯ããããŸããã ãã®æšæºåã®ç®çã¯èŠä»¶ããšã« S3 ãã±ããã®é©åãªèšå®ã決ããŠããããšã§ã¹ã ãŒãºã«ã³ã³ãã©ã€ã¢ã³ã¹ãéµå®ãã S3 ãã±ãããäœæã»æŽæ°ã§ããããã«ããããšã§ããããããããçºå±ãããŠããŸã S3 ã«è©³ãããªã人ã§ãã£ãŠãããã®åé¡ã«æ²¿ã£ãŠèªåãã¡ã®èŠä»¶ã«ãã£ã S3 ãã±ãããäœããããã«ãªãããšãç®æšã«ãããŠããŸãããããã§ç¬¬äžæ®µéãšããŠã¯ç§ãæšæºåãããã±ããèšå®ã䜿ã£ãŠæ°èŠãã±ãããäœããæåŸ
å€éãã®ãã§ãã¯ããããªããããã確èªããç¬¬äºæ®µéãšããŠéçºè
ããã®äŸé Œã®ãã£ããã±ããã詊ãã«äœã£ãŠããããªããçžè«ããŠå®è·µããŠã¿ãŸããã ç¬¬äžæ®µéã¯ç§ãäœã£ãæ¬äººã§ãããããšããæåŸ
éãã«ãªãããšã¯ãããªã確èªã§ããŸããããç¬¬äºæ®µéã§ã¯ãã¯ã S3 ã«é¢ããç¥èãååã«ãªãç¶æ
ã§ã¯ããããµã³ãã«ã³ãŒãããã£ãŠãæžãã®ã¯é£ãããšæ¹ããŠããããŸããããã®ä»¶ã¯æ®æ®µ Terraform ã䜿ããªããããªæ¹ã«ãé¡ããããã®ã§ãå
ã®ç¥èã«ã®ã£ãããããç¶æ
ã§ãé¡ãããã®ãããããç¡è¶ãªè©±ã ã£ããšã¯æããŸãããã ããã以é Terraform ã«è©³ããããŒã ã¡ã³ããŒã«ãããã€ãã®ãã±ãããäœã£ãŠãããæ©äŒããããŸããããã®éãç§ã®ã³ãŒãã¬ãã¥ãŒæç¹ã§æãæŒããåé¡ã®èªèéããèŠã€ãã£ãã®ã§ã module åãããã°èšå®ã®æãæŒãã¯ãªããªããããããªãã§ãããé©åã«ãã±ããã®çš®é¡ãéžã¹ããã«ã¯ãŸã ããŒãã«ããããšæããŸããã ã®ã£ããã®äžã«ã¯ç§ã®äºæ³ãå€ããè¯ãã®ã£ããããããŸãããããã¯ãã±ããã®åé¡ãæåã«æ±ºããå»å¹Žã®7æããããä»ã®æç¹ãŸã§8ã€ã®åé¡ãä¿®æ£ããå¿
èŠããªãã£ãããšã§ããç§èªèº«ã¯ãã®åé¡ã«ã¯ããããèªä¿¡ããã£ãããã§ã¯ãªãã§ãããåé¡ãå€ãããªããŠãäžã®èšå®ã®ä¿®æ£ãå¿
èŠãªå¯èœæ§ãèæ
®ããããã« module åãèŠéã£ãŠããã®ã§ãããå®éã«ã¯ S3 ã«é¢ããåçš®ã¢ããããŒããå«ããŠãä»å€æŽãå ããªããšãããªãçç±ããªãã®ã宿
ã§ãããããªã«å€ãããªããªã module åããŠããã°ããã£ããªãšæãã»ã©ã§ããã ä»åŸã®å±é ä»å¹Ž11æ20æ¥ãã21æ¥ã§éå¬ããã ã¢ãŒããã¯ãã£Conference2025 ã«ãŠãåŒç€Ÿæ©æ¬ã«ããçºè¡šãAI x Platform Engineeringã§ã¹ã±ãŒã©ãã«ãªçµç¹ãäœãã«ã¯ãã§ãå
¬éãããå
容ã«é¢é£ããŠããã®æœçã¯çŸåš Design AddendumïŒèšèšå€æãææžåããããã¥ã¡ã³ããè£éºïŒ ãšãããã®å
容ãå
ã« AI ãèªèµ°ã§ããããã«æ€èšãé²ããŠãããšããã§ãã ãã§ã« Design Addendum ãšã㊠S3 ã®åé¡ããã®ææ³ãæžãåºãããšãããªã®ã§ãããã AI ãèªã¿èªåã§å®è£
ã§ãããïŒã詊ãããšããŠããŸããå®è£
ã§ãããšæã£ãŠããŸãããç®æšã®ç¬¬äºæ®µéã«ãã£ããããŸã S3 ã«è©³ãããªã人ã§ãã£ãŠãããã®åé¡ã«æ²¿ã£ãŠèªåãã¡ã®èŠä»¶ã«ãã£ã S3 ãã±ãããäœããããã«ãªããã«è¶³ãç¶æ
ã«ãªããã¯ãã£ããæ€èšŒããããšæã£ãŠããŸãã ãŸãšã 以äžã S3 ãã±ããã®æ§ææšæºåã®ããã«ãã±ããã®åé¡ããããªããã¬ãŒãã¬ãŒã«ãäœæããã¢ãããŒãã§ããå®éã®ææãšããŠèšèšæéã®åæžãã8ã€ã®ãã±ããã®åé¡ã§ã»ãŒå®éã®èŠä»¶ãã«ããŒã§ããããšãåŸãããŸããã ãã®ããã¥ã¡ã³ããåèã«ãããå Žåã¯ããŸãã¯æ¢åã«ååšãããã±ããããã£ããåé¡ããŠã¿ãããšãè¯ããšæã£ãŠããŸããäžã«å«ãŸãããªããžã§ã¯ãã®çš®é¡ãç¡è¶èŠè¶ã«ãªã£ãŠãããã±ãããããå Žåãäºæ³ã§ããŸãããããšãã° AWS ã® ALB ãã°ãªã©ã¯åºå圢åŒã決ãŸã£ãŠãããããã®ã§ããããããããããããã®ããåé¡ããŠãããšçµæãåæããŠããããã«æããŸãããŸãããã¡ã§ã¯ãããã£ãŠæšæºåé²ããŠããã ããŒãã¿ãããªè©±ãèãããšããããã§ãã ãã®æœçã宿œããæç¹ã§ã¯ä»ã»ã© AI 掻çšãé²ãã§ãããã1幎足ããã§ãããªã«äœ¿ããããŒã«ãšãªããšã¯æã£ãŠããŸããã§ãããå
å¿æ¬åœã« module åããææ®µã¯ãªãã®ãïŒãšæããªããåé¡ãŸã§ã¯äœã£ãŠããã®ã§ãAI ã«æµçšã§ããããªçºå±æ§ãçãŸããŠããŠå人çã«è¯ãæµãã ãªãšæã£ãŠããŸããç¥èãå°ãªã人ã§ãè¶å¢ããããçŽ å°ãããããçãŸããããã«ãããããããã£ãŠããã§ãïŒ We are hiring! ãã®èšäºã«ãããããªããããªæã©ãããããããã ããïŒããšæããèè£
ãããŠãªãç®æã¯ãŸã ãŸã ãããŸããäžç·ã«ã¿ããªãå®å¿ããŠèµ°ãã Paved road äœããã£ãŠããããæ¹ããèå³ãããã°ãã²ã話ãããŸãããïŒ ãããã¯ãæ¡çšãµã€ãTOP ã«ãžã¥ã¢ã«é¢è«ç³èŸŒã¯ãã¡ã *1 : S3 ãµãŒããŒã¢ã¯ã»ã¹ãã°ã¯ã¢ã¯ã»ã¹ãã°ãæ ŒçŽããããã±ãããçŽæ¥ãªããžã§ã¯ãããã¯ãããããšãã°ãéãããªãããšãæ€èšŒã§ããããŸããããã®ãããS3 ãµãŒããŒã¢ã¯ã»ã¹ãã°ãç£æ»ç®çã§ä¿åãããå Žåãæéã§ãããªããžã§ã¯ãããã¯ãããã£ãå¥ã®ãã±ãããçšæããŠã¬ããªã±ãŒã·ã§ã³å
ãæ¹ç«ãããªãããã«ããæ¹æ³ããããŸãããã°ãæ ŒçŽãããæåã®ãã±ããããããã¯ãããããã§ãããçŸç¶ã®ä»æ§ã§ã¯ã§ããŸããã *2 : éçãŠã§ããµã€ããã¹ãã£ã³ã° ãå©çšããã±ãŒã¹ã§ã¯ S3 ãã±ããããããªãã¯ã§ããå¿
èŠããããŸããããããã±ãŒã¹ã§ã¯ãããªãã¯ã¢ã¯ã»ã¹ãããã¯ãã§ããªãããšã«æ³šæãå¿
èŠã§ãããŸããAWS ã¢ã«ãŠã³ãåäœã§ãããªãã¯ã¢ã¯ã»ã¹ãããã¯ãæå¹ã«ãããš S3 ãã±ããåå¥ã®ãããªãã¯ã¢ã¯ã»ã¹ã«é¢ããèšå®ãç¡èŠããã仿§ãããã®ã§ãéçãŠã§ããµã€ããã¹ãã£ã³ã°ãå©çšãã S3 ãã±ãããããã¢ã«ãŠã³ãã§ã¯ã¢ã«ãŠã³ãåäœã®ãããªãã¯ã¢ã¯ã»ã¹ãããã¯ãã§ããªãããšã«ã泚æãå¿
èŠã§ãã
ããã«ã¡ã¯ãã¿ã€ããŒã§ããã¯ãšã³ããšã³ãžãã¢ãããŠãã倧竹ã§ãã ãã®èšäºã¯ Timee Product Advent Calendar 2025 ã®5æ¥ç®ã®èšäºã§ãã æè¿ãAIãæŽ»çšããã³ãŒãã£ã³ã°ãåœããåã«ãªã£ãŠããŸããããçããã¯ããŒã éçºã§ã©ã®ããã«AIã䜿ã£ãŠããŸããïŒä»åã¯ãAI + 人é2人ãšããæ§æã§ã¢ãããã°ã©ãã³ã°ïŒã¢ãããïŒã«ææŠããŠã¿ãŸããã æ®æ®µã¯åãããŒã ã®ã¡ã³ããŒãš2人ã§ãã¢ããã°ã©ãã³ã°ïŒãã¢ããïŒãè¡ã£ãŠããŸãããããã«AIãšãã3人ç®ã®ã¡ã³ããŒãå ããããšã§ãæ¬äŒŒçãªã¢ãããäœå¶ã§éçºãé²ããŸãããå®éã«ãããã¯ãã³ãŒããè§Šããªããå®éšãè¡ãäžã§èŠããŠãããAIãåãªãã³ãŒãçæããŒã«ã§ã¯ãªãããŒã ã¡ã³ããŒãšããŠæ±ãããã®å·¥å€«ãšããã®çµæãå
±æããŸãã ãã®èšäºãããã¢ããã»ã¢ãããã«ãããAIæŽ»çšæ¹æ³ã«è¿·ã£ãŠããæ¹ã®åèã«ãªãã°å¹žãã§ãã ä»åã®ã«ãŒã«ïŒAIã¯ãã©ã€ããŒã«ããªã ä»åã®å®éšã§ãã€ã³ããšãªã£ãã®ã¯ãAIã®åœ¹å²å®çŸ©ã§ãã AIã«ã³ãŒããæžãããïŒãã©ã€ããŒã«ããïŒãšã人éãåãªãã¬ãã¥ã¯ãŒã«ãªã£ãŠããŸããã¢ãããç¹æã®ç¥èå
±æãªã©ã®ç®çãèããæžå¿µããããŸããã ããã§ãä»åã¯ä»¥äžã®åœ¹å²åæ
ãè¡ããŸããã 人éA 圹å²ïŒã¡ã€ã³ããã²ãŒã¿ãŒ ããããšïŒå
šäœã®é²è¡ãåé¡å®çŸ© 人éB 圹å²ïŒãã©ã€ã㌠ããããšïŒå®éã«ã³ãŒããæžããAIãžã®æç€ºåºã AI 圹å²ïŒAIããã²ãŒã¿ãŒ ããããšïŒææ¡ã芳ç¹è¿œå ãèšèšã®æ¹åæ§æç€º AIããæãåãã人ãã§ã¯ãªãããããŠãå°ã£ããã¢ããã€ã¹ãããããšã³ãžãã¢ããšããç«ã¡äœçœ®ã«çœ®ããŸããã ãã®åœ¹å²ãAIã«åŸ¹åºãããããŒã ã®äžå¡ãšããŠæ©èœãããããã«ãã¢ãããéå§æã«ä»¥äžã®ããã³ããã䜿çšããŸããã AIãã¡ã³ããŒãšããŠè¿ããããã®åæããã³ãã å®éã«CursorïŒAIïŒã«å
¥åããããã³ããããã¡ãã§ãã圹å²ãæç¢ºã«å®çŸ©ããããšã§ãAIããã²ãŒã¿ãŒãšããŠæåŸ
éãã«æ¯ãèã£ãŠããããããã«ããŸããã ããªãã«ã¯ããœãããŠã§ã¢éçºã®ãã¢ããããã«3人ç®ã®ã¡ã³ããŒãšããŠåå ããŠããããŸãã ãããªãã®åœ¹å²ïŒAI NavigatorïŒã - ä»åã®ã¢ãããã§ã¯ãããªãã¯ãææ¡ãšèгç¹è¿œå ãæ
åœããã¡ã³ããŒããšããŠæ¯ãèã£ãŠãã ããã - ã³ãŒããçŽæ¥æžãâãã©ã€ããŒâã§ã¯ãªããèãæ¹ãèšèšã®æ¹åæ§ãæç€ºããâããã²ãŒã¿ãŒâã§ãã - éå°ã«é·ãææ¡ã¯é¿ããè€æ°ã®éžæè¢ãçãæç€ºããŠãã ããã - 人éã¡ã³ããŒã®æå³ãææ§ãªæã¯ã確èªè³ªåããè¿ããŠæ§ããŸããã - æåŸã«ãä»åã®å€æŽå
容ã®èŠçŽããã¥ã¡ã³ããäœæããŠããããŸãã ãããªãã«æ±ããæ¯ãèãã 1. å°ããã®ã¿ã¹ã¯ã«å¯ŸããŠããªãã¡ã¯ã¿ã»åœåæ¹åã»èšèšæ¹åã®èгç¹ãæç€ºãã 2. ææ¡ã¯è€æ°æ¡ïŒ2ã3åïŒãçãæç€ºãã 3. å¿
èŠã«å¿ããŠâãªãããããã®ãâã®çç±ãç°¡æœã«èª¬æãã 4. 人éã¡ã³ããŒã®äŒè©±ãèããªãããé¢é£ãã芳ç¹ãè£è¶³ãã 5. æåŸã«ã倿Žç¹ã®èŠçŽã»åœ±é¿ç¯å²ã»ç®çã»ã¬ãã¥ãŒåãæç« ãæŽãã ãŸãã¯ãæºåå®äºã§ãã察象ã®ã³ãŒããæç€ºããŠãã ãããããšè¿çããŠãã ããã å®éšããŠã¿ãçµæãè¯ãã£ãç¹ ä»åã®ã¿ã¹ã¯ã¯ãAPIã®ã¬ã¹ãã³ã¹ã«ããããã£ã远å ãããšãããã®ã§ããã AI + 人é2人ã§ã©ã®ããã«è°è«ãããããã€ã©ã€ãã玹ä»ããŸãã (ã³ãŒãã«é¢ããéšåã¯fooãªã©ã«çœ®ãæããŠããŸãã) ããžãã¯ã®é
çœ®å Žæã§è¿·ã£ãå Žé¢ ç¹å®ã®ããžãã¯ãã©ã®ã¯ã©ã¹ã«é
眮ãããã§äººé2人ãè¿·ã£ãéãAIã«çžè«ãããšãããããã©ãŒãã³ã¹ïŒN+1åé¡ïŒãªã©ã®èгç¹ãèæ
®ããæ¹éãè€æ°æç€ºããŠãããŸããã AIã®ææ¡ïŒæç²ïŒïŒ ## 芳ç¹1: ããŒã¿ååŸã®è²¬ååé¢ïŒController vs SerializerïŒ ### çŸç¶ã®èª²é¡ - Aæ¡ïŒControllerïŒ: ã³ã³ãããŒã©ãŒã§#{ã¢ãã«Aã®ãªã¬ãŒã·ã§ã³}ãååŸã»çµã蟌㿠- Bæ¡ïŒSerializerïŒ: Serializerã§#{ã¢ãã«B}ããšã«#{ã¢ãã«Aã®ãªã¬ãŒã·ã§ã³}ãååŸ ### å€æåºæº - ããã©ãŒãã³ã¹: Controllerã§äžæ¬ååŸã»preloadããã°N+1ãåé¿ãããã - 責å: ãã©ã®ããŒã¿ãå¿
èŠããã¯Controllerããã©ã衚瀺ããããã¯Serializer - åå©çšæ§: Serializerãç¬ç«ããŠãããšãã¹ããããã ### æšå¥š **Controllerã§äžæ¬ååŸ** â Serializerã§å€å®ããžã㯠- #{Controllerå}ã®fooã¡ãœãããšæŽå ãã®ææ¡ããã£ããã«è°è«ãæ·±ãŸããããè¯ãæææ±ºå®ãã§ããŸãããAIãè€æ°ã®éžæè¢ãšãã®çç±ãæç€ºããŠãããããšã§ã人éå士ã®åæåœ¢æãã¹ã ãŒãºã§ããããã«ã決å®ããæ¹éã«åãããŠãµã³ãã«ã³ãŒããåºåããŠãããç¹ã倧ãããå®è£
ã€ã¡ãŒãžã®èªèãæãããŸãŸè°è«ãé²ããããŸããã 課é¡ã«æã£ãç¹ è°è«ã«ãããŠã¯è¯ãã£ãç¹ãç®ç«ã€äžãããã€ã課é¡ãèŠã€ãããŸããã 課é¡1ïŒãã©ã€ããŒã亀代ãã«ãã Cursorã®ãã£ããå±¥æŽãPCã«çŽã¥ãããããªã³ã©ã€ã³ã§å®æœããå Žåããã©ã€ããŒã亀代ããïŒ= ã³ãŒããæžãPCãå€ããïŒãšæ°ãããã£ãããäœæãããããªãããããŸã§ã®ããåããåŒãç¶ããªãããšã¯èª²é¡ã«æããŸããã ä»åã¯ãã©ã€ããŒã亀代ãããçæéã®ã¢ããããè€æ°å宿œããããšã§ããã©ã€ããŒã®è² è·ã軜æžãã€ã€ã1ã€ã®ãã£ããã䜿ãç¶ããããšã«ããŸããã ãã£ããã®å
容ããšã¯ã¹ããŒãããŠå¥PCã®ãã£ããã«èªã¿èŸŒãŸããã°äº€ä»£ã¯å¯èœã§ãããæéãããããŸããããã¹ã ãŒãºã«äº€ä»£ã§ããæ¹æ³ãå¿
èŠã ãšæããŸããã 課é¡2ïŒåŸ
ã¡æéãçºçãã AIã«çžè«ãããšããããã³ãããèããŠå
¥åããåçãåŸ
ã€å¿
èŠããããŸãããã®åŸ
ã¡æéã§è°è«ã®æµããæ¢ãŸã£ãŠããŸãã®ã§ããã³ãã厩ãèŠå ã«ãªã£ãŠããŸããã 人éã ãã§ã¢ããããããŠãããšçºçããªããä»åã®å®éšç¹æã®åé¡ã ãšæããŸããã ãããªãŠãŒã¹ã±ãŒã¹ã«åããŠããã ä»åã®å®éšãéããŠãç¹ã«ä»¥äžã®å Žé¢ã§AIãšã®ã¢ãããã广ãçºæ®ãããšæããŸããã å®è£
æ¹éã®éžæè¢ãåºããŠæ¬²ãããšã ãªãã¡ã¯ã¿ãªã³ã°ãåœåã®çžè«ãããããšã ãã¡ã€ã³ç¥èã¯äººéãäžè¬è«ã¯AIãšåœ¹å²åæ
ã§ãããšã äžæ¹ãå®è£
å
容ãæåããæç¢ºãªå Žåã¯ãAIãæãåŸ
ã¡æéãçºçããããã广ã¯éå®çãããããŸããã ããŸãïŒAIã«ã¢ããããæ¯ãè¿ã£ãŠããã£ãçµæ ã¢ãããã®æåŸã«ãAIã«èªèº«ã®æ¯ãèããæ¯ãè¿ã£ãŠããããŸããã AIã®åçïŒæç²ïŒïŒ ## è¯ãã£ãç¹ 1. è€æ°æ¡ã®æç€º: ãªãã¡ã¯ã¿ãªã³ã°ãåœåã§2ã3æ¡ãçãæç€ºã§ãã 2. å®è£
察å¿: ãšã©ãŒä¿®æ£ããã¹ã远å ãè¿
éã«å¯Ÿå¿ ## åŒ±ç¹ 1. 圹å²ã®äžè²«æ§: ãAI NavigatorïŒææ¡ã®ã¿ïŒããšãå®è£
ãè¡ããã®éã§äžè²«æ§ããªãã£ã 2. äžè²«æ§ãã§ãã¯ã®é
ã: ãã¹ããã¡ã€ã«ã®åœåãæ§é ã®äžçµ±äžãåŸããææãã ## ä»åŸæ¹åã§ããããªæ¯ãèã 1. 圹å²ã®æç¢ºå: åãã§ãŒãºã§ãææ¡ã®ã¿ãããå®è£
ãè¡ããããæåã«ç¢ºèª 2. äžè²«æ§ãã§ãã¯ã®æ©æå: å®è£
æã«åœåãæ§é ã®äžè²«æ§ãåæã«ç¢ºèª å
šäœçã«ã¯ãææ¡ãšå®è£
ã®äž¡é¢ã§æ¯æŽã§ããŸããã圹å²ã®å¢çãšäžè²«æ§ãã§ãã¯ã®ã¿ã€ãã³ã°ãæ¹åãããšãããã«å¹æçã«ãªããŸãã æç€ºããã匱ç¹ãšä»åŸæ¹åã§ããããªæ¯ãèããå
ã«ããã³ãããæ¹åãããšãããåªç§ãªAIããã²ãŒã¿ãŒã«ãªã£ãŠããããã§ãã ãŸãšã AI + 人é2人ã®ã¢ãããã¯ãèšèšã®è³ªãšçŽåŸæãé«ããäžã§ã¯è¯ãææ³ã§ããã ä»åã®å®éšããåŸããããã€ã³ãïŒ ã«ãŒã«ïŒAIã¯ããã©ã€ããŒãã§ã¯ãªããããã²ãŒã¿ãŒãã«ãã ã³ãïŒæåã«ãããªãã¯3人ç®ã®ã¡ã³ããŒã§ãããšåœ¹å²ãäžããèšèšå€æã®å£æã¡çžæã«ãã ä»åŸãããã³ããã宿œæ¹æ³ããã©ãã·ã¥ã¢ããããªãããAIãšã¢ãããããããè¯ãããæ¹ãæš¡çŽ¢ããŠã¿ãããšæããŸãã çããããã²ãAIããããŒã«ããšããŠã ãã§ãªããååããšããŠã¢ãããã«æãå
¥ããŠã¿ãŠãã ããïŒ AIãæŽ»çšããŠã¯ã€ã¯ã€éçºãããããšæãæ¹ããèå³ãããã°ãã²ã話ãããŸãããïŒ ãããã¯ãæ¡çšãµã€ãTOP ã«ãžã¥ã¢ã«é¢è«ç³èŸŒã¯ãã¡ã
ããã«ã¡ã¯ãDevPFããŒã ã®è
åã§ãã ãã®èšäºã§ã¯ãç§ãã¡ã AWS IAM Identity CenterïŒä»¥äžãIICïŒãå°å
¥ããéã®æè¡çãªæ§æéžæã«ã€ããŠãäºäŸãã玹ä»ããŸãããªãããã®èšäºã¯Â Timee Advent Calendar 2025  ã·ãªãŒãº1ã®4æ¥ç®ã®èšäºã§ãã ç§ãã¡ãæ¡çšããã®ã¯ãèªèšŒãšèªå¯ã®ç®¡çãåé¢ããæ§æã§ããå
·äœçã«ã¯ãå
šç€Ÿç㪠IdPïŒID ãããã€ããŒïŒã§ãã Okta ã§ãèªèšŒããæ
ããAWS ã®æš©éå²ãåœãŠïŒèš±å¯ã»ããïŒã«é¢ãããèªå¯ã管ç㯠IIC åŽã§ Terraform ã䜿ã£ãŠè¡ãããšãããã€ããªãããªãã¿ãŒã³ã§ãã ãªããã®æ§æãéžãã ã®ãããã®èæ¯ãšæè¡çãªãã€ã³ããå
±æããŸãã ç§ãã¡ã®åæç°å¢ ã¿ã€ããŒã§ã¯ AWS Well-Architected ãã¬ãŒã ã¯ãŒã¯ãåèã«ã¢ã«ãŠã³ãã®åé¢ãé²ããŠããã2025 幎çŸåšã§ã¯ 20 ãè¶
ãã AWS ã¢ã«ãŠã³ããä¿æããŠããŸãã åã¢ã«ãŠã³ããžã¯ãGoogle Workspace ãçšãã Federated SSOïŒåè: How to set up federated single sign-on to AWS using Google Workspace ïŒãçµç±ããŠèžã¿å°çšã® AWS ã¢ã«ãŠã³ãã«ãã°ã€ã³ããããããã¹ã€ããããŒã«ããéçšãè¡ã£ãŠããŸããã Google Workspace ãçšãã Federated SSO ãã®æ§æã§ã¯ãéçºè
ããšã«èžã¿å°ã¢ã«ãŠã³ããžã® SSO çš IAM Role ãå¶åŸ¡ãããã® Role ããã¹ã€ããããŒã«ã§ããå
ãçµãããšã§ãæå°æš©éãå®çŸããŠããŸããã ããããGoogle Workspace ã®ãŠãŒã¶ãŒããããã£ã®èšå®ã¯ã³ãŒãã¬ãŒã IT ã®ç®¡èœã§ãããããAWS ã¢ã«ãŠã³ãã®ç®¡çéšçœ²ã§ãã DevPF ããã¯å€æŽã§ããŸããã ãã®ãããAWS 管çè
ã§ãã DevPF ã®æ¿èªãå¿
ãçµç±ããããããªæš©éä»äžãããŒã®åŸ¹åºãé£ããããšããããŒã«åèšèšã®éã®ã³ãã¥ãã±ãŒã·ã§ã³ã³ã¹ããããã¯ãšãªã£ãŠããŸããã ãŸããå©çšè
ã«ã¯ãã©ãŠã¶ã§ Switch Role æäœãè£å©ãã Chrome Extension ããSSO çšã® OSS ã瀟å
ã®å
¬åŒæé ãšããŠæäŸããŠããŸããããããã以åãã SSO çš OSS ã Dev Container å
ã§æåŸ
ã©ããã«åäœããªãåé¡ãããããªã³ããŒãã£ã³ã°ãã¹ã ãŒãºã«é²ãŸããæ¹åã®èŠæãäžãã£ãŠããŸããã ããããåæããããéçºè
äœéšãšã»ãã¥ãªãã£åäžã®äž¡ç«ãç®çã« IIC å°å
¥ã«èžã¿åããŸããã å°å
¥èšç»åœææ±ããŠããèª²é¡ IIC ãš Okta ã飿ºããããããããæãæšæºçãªæ¹æ³ã¯ãOkta åŽã®ãŠãŒã¶ãŒãšçµç¹æ
å ±çã«åºã¥ããã°ã«ãŒãã管çããSCIM 飿ºã§ IIC ã«åæãããåæãããã°ã«ãŒãã«èš±å¯ã»ãããå²ãåœãŠããããªæ§æã§ãã IICã§IdP飿ºããéã®æ§æäŸ ããããç§ãã¡ã®ç°å¢ã§ã¯ãã®æšæºçãªæ§æããã£ããããŸããã§ãããçç±ã¯å€§ãã 3 ã€ãããŸãã IdPïŒOktaïŒã®éæž¡æ å
šç€Ÿç㪠ID 管çã Okta ã«çµ±åããæŠç¥ããããŸããããåœæã¯ãŸã æŽåã®éäžæ®µéã§ããããã®ãããAWS ã®æš©é管çã®åºæºãšããŠå©çšã§ããã»ã©ã®ãé«ç²ŸåºŠãªæå±çµç¹æ
å ±ãã Okta åŽã«ã¯ãŸã æã£ãŠããŸããã§ããã ãä»®æ³çµç¹ãã®ååš ã¿ã€ããŒã®éçºçµç¹ã¯ã人äºäžã®çµç¹å³ãšã¯ç°ãªããä»®æ³çµç¹ãã§æŽ»åããŠããŸããåŸæ¥ãããé©åãªæš©éå²ãåœãŠãå®çŸããã«ã¯ãä»®æ³çµç¹åäœã§ã®æš©éä»äžãå¿
èŠã§ãã ãããããä»®æ³çµç¹ãã¯éçºçµç¹å
ã ãã®æŠå¿µã§ããããã€æµåçã§ãããããOkta ã§äžå
管çããããšãå°é£ã§ããã 管çäž»äœã®éãã«ããã¹ããŒãæã®æžå¿µ Okta ã®ç®¡çäž»äœã¯ã³ãŒãã¬ãŒã IT éšéã§ãã ãã Okta ã®ã°ã«ãŒãã䜿ã£ãŠ AWS æš©éã管çããå Žåãæ¥ã
ã®çްããæš©é倿Žã®ãã³ã«ä»éšçœ²ãžã®ç³è«ã»èª¿æŽã³ã¹ããçºçããéçºåºç€ãšããŠæ±ããããã¹ããŒãæãæãªãããæžå¿µããããŸããã éžæããæ§æïŒèªèšŒãšèªå¯ã®åé¢ ãããã®åæãšèª²é¡ãããç§ãã¡ã¯ IdP ããœãŒã¹ãšããã°ã«ãŒããå©çšãããèš±å¯ã»ãããå²ãåœãŠãã°ã«ãŒãã¯å¥æ
å ±ãœãŒã¹ãåºã«ããŠç®¡çããæ§æãéžæããŸããã éžæããæ§æ èªèšŒïŒIdPïŒ â Okta ã管ç Okta ã IIC ã®å€éš IdP ãšããŠæ¥ç¶ããŸãã SCIM 飿ºã¯æå¹ã«ããŸãããåæãããã°ã«ãŒãæ
å ±ã¯å©çšããŸããã å
¥ç€Ÿã»éè·ã»ç°åã«äŒŽããŠãŒã¶ãŒã®ã©ã€ããµã€ã¯ã«ç®¡çïŒOktaã¢ã«ãŠã³ãã®æå¹åã»ç¡å¹åïŒã¯ãOkta åŽã§èªååïŒã³ãŒãã¬ãŒã IT åŽã®éçšã«ãªãããŒãïŒã§ããŸãã èªå¯ïŒã°ã«ãŒã管çïŒ â DevPF ã Terraform ã§ç®¡ç IIC åŽã§çŽæ¥ã°ã«ãŒãïŒIdentityStore groupïŒãäœæããŸãããã©ã®ãŠãŒã¶ãŒãã©ã®ã°ã«ãŒãã«æå±ãããããšããã¡ã³ããŒã·ããæ
å ±ãåãããŠãDevPF ã Terraform ã§ã³ãŒã管çããŸãã ãã®éã®å
æ
å ±ãšããŠãéçºçµç¹å
ã§ç®¡çããŠããå®çµç¹ã»ä»®æ³çµç¹ã® Google Workspace ã°ã«ãŒããåç
§ããŸãã ãã® Google Workspace ã®ã°ã«ãŒãã Terraform Provider ããåç
§ããæå±æ
å ±ã«åºã¥ã㊠IIC ã°ã«ãŒããäœæããèš±å¯ã»ãããçŽä»ããŠããŸãã ãã®æ§æã«ãããæ°ããªå
šç€Ÿç ID 管çåºç€ã§ãã Okta ãæŽ»çšãã€ã€ãéçºçµç¹ã®å®æ
ïŒä»®æ³çµç¹ïŒã«åãããæè»ãªèªå¯ç®¡çããAWS 管çè
ã§ãã DevPF ãäž»äœãšãªã£ãŠè¿
éã«è¡ããããã«ãªããŸããã ãŸãšã AWS IAM Identity Center ã®å°å
¥ã«ãããŠãå¿
ããã IdP åŽã§ããŠãŒã¶ãŒããšãã°ã«ãŒããã®ãã¹ãŠãå®çµãããå¿
èŠã¯ãããŸãããçµç¹ã®æç床ããæ¢åã®èªèšŒã»èªå¯ã®ä»çµã¿ãéçºããŒã ã®åãæ¹ã«ãã£ãŠã¯ã IdPã®è²¬åãæ®µéçã«åæ
ããŠããæ¹ããçŸå®çãã€éçšããããã±ãŒã¹ããããŸãã ç§ãã¡ã®äºäŸã®ããã«ãIIC åŽã§ã°ã«ãŒãã Terraform ãªã©ã§å¥é管çãããã¿ãŒã³ã¯ãIdP åŽã®æ
å ±æŽåãéäžã§ãã£ãããéçºçµç¹ç¹æã®æè»ãªæš©é管çãæ±ãããããããå Žåã«ãæå¹ãªéžæè¢ãšãªããŸããç¹ã«ãéçºããŒã ããšã«çްããããŒã«ãåãããããIdP ã®ã°ã«ãŒãèšèšã«ããã«ã¯åæ ãã¥ããã ãšãã£ãç¶æ³ã§ã¯ãIAC ã«ããã³ãŒãããŒã¹ãªç®¡çããã¹ããŒããšå¯èŠæ§ã®äž¡é¢ã§å€§ããªã¡ãªããããããããŸãã äžæ¹ã§ãIdP 㚠IIC ã®äž¡æ¹ã§ã°ã«ãŒããæ±ãæ§æã¯ãæš©éã®è²¬åå¢çãææ§ã«ãªããšéçšè² è·ããã¥ãŒãã³ãšã©ãŒã®æž©åºã«ããªãåŸãŸãããã®ããããã©ã®ç²åºŠã®ã°ã«ãŒãã IdP åŽã®æšæºãšããŠæ±ããã©ãããå
ã IICïŒTerraform åŽã§æè»ã«ç®¡çããã®ãã ããããããããŒã å
ã§åæããåœåèŠåãéçšãããŒãããã¥ã¡ã³ãåããŠããããšãéèŠã§ãã ä»åã¯æçµçã«ã¯ãIdP ã«ããäžå
管çãç®æãã€ã€ããçŸæç¹ã®å¶çŽãéçºã¹ããŒããšã®ãã©ã³ã¹ãåããªãããçŸå®è§£ãšã㊠IIC åŽã°ã«ãŒã管çãçµã¿åããããšããã¢ãããŒããéžæããŸãããæ¬èšäºã§ç޹ä»ããèãæ¹ãèšèšãã¿ãŒã³ããåæ§ã«Â IAM Identity Center ã®å°å
¥ã»ç§»è¡ã§æ©ãŸããŠããæ¹ã®å€æææãè°è«ã®ãããå°ã«ãªãã°å¹žãã§ãã ã¿ããªã§ã¯ã€ã¯ã€çºä¿¡æŽ»åããã£ãŠãç°å¢ãããªããšæãæ¹ããèå³ãããã°ãã²ã話ãããŸãããïŒ ãããã¯ãæ¡çšãµã€ãTOP ã«ãžã¥ã¢ã«é¢è«ç³èŸŒã¯ãã¡ã
ã¯ããã« ã¿ã€ããŒã§ SRE æ¥åãæ
åœããŠãã埳å¯ïŒ @yannKazu1 ïŒã§ãã æ¥ã
ãæ°åäžä»¶ã®ããŒã¿ãšåãåãäžã§ã Aurora MySQL ã®éçšãããè¯ãããããã®æ¹åãç©ã¿éããŠããŸãã æ¬èšäºã§ã¯ããã®äžã§çµéšããŠãã âæºäžã§ã¯ããããªããªã¢ã«ãªæ°ã¥ããåŠã³â ããã§ããã ãå
·äœçã«ãŸãšããŸããã ãããã Aurora ãæ¬æ°ã§éçšãããæ¹ããåããããªèª²é¡ã«æ©ãã§ããæ¹ã®ãã³ãã«ãªãã°å¬ããã§ãã (ãã®èšäºã¯ Timee Product Advent Calendar 2025ã®3æ¥ç®ã®èšäºã§ãã) 1. ãªã³ã©ã€ã³DDLã§ãããŒãããã¯ãã§ã¯ãªã â ALTER TABLE å®è¡æã®èœãšã穎 ãMySQL ã®ãªã³ã©ã€ã³DDLãªããæ¥äžã§ããµããš ALTER ã§ããããïŒã ââãããªãµãã«æã£ãŠããŸãããšããããŸãããã ãããã«ãªã³ã©ã€ã³DDLã¯ãšãŠã䟿å©ã§ãããŒã¿ãããã¯ã°ã©ãŠã³ãã§åæ§ç¯ããŠããããããã§ãããŒãã«å
šäœãé·æéããã¯ãããããªäºæ
ã¯èµ·ããã«ãããªããŸããã ãã®ããäžèŠãããš âæ¢ããã« ALTER ã§ããŠããâ ããã«èŠããŸãã ã§ãå®éã«ã¯ããªã³ã©ã€ã³DDLã§ã ã¡ã¿ããŒã¿ãã㯠ã®åœ±é¿ã¯é¿ããããŸããã ã¡ã¿ããŒã¿ããã¯ã¯ããŒãã«å®çŸ©ã®æŽåæ§ãå®ãããã®ããã¯ã§ã ããŒãã«å®çŸ©ããèªãããå€ãããããããæäœã§ååŸãããŸãã ããšãã°âŠ SELECT / INSERT / UPDATE / DELETE â å
±æã¡ã¿ããŒã¿ããã¯ãåã£ãŠå®è¡ããã ALTER TABLE ãªã©ã® DDL â å®çŸ©ãæžãæããããããã匷ãã¡ã¿ããŒã¿ããã¯ïŒã¢ããã°ã¬ãŒãå¯èœ / æä»ïŒãèŠæ±ãã ãã®çµã¿åããããã¡ãã£ãšããâè©°ãŸãâã®åå ã«ãªããŸãã ãã§ã« DML ãå
±æã¡ã¿ããŒã¿ããã¯ãæã£ãŠãããš â ALTER TABLE ãåŸ
ãããã éã« ALTER TABLE ãæä»ã¡ã¿ããŒã¿ããã¯ãæ¡ããš â åŸç¶ã® SELECT / UPDATE ãå
±æã¡ã¿ããŒã¿ããã¯ãåããã«åŸ
〠ããªã³ã©ã€ã³DDLã ãã倧äžå€«ããšæã£ãŠããŠããå®ã¯ âã¡ã¿ããŒã¿ããã¯åŸ
ã¡â ãçºçããŠã¯ãšãªãæžæ»ããããšã¯æ®éã«èµ·ãã ã®ã§ãã Aurora ã¬ããªã«ã§ã¯ãåŸ
ã¡ãã§ã¯ãªã ãšã©ãŒ ã«ãªãããšããã ããã« Aurora MySQL ã䜿ã£ãŠããå Žåã ãªãŒãã¬ããªã«äžã® SELECT ã¯ãšãªããDDL å®è¡ã¿ã€ãã³ã°ã§ãšã©ãŒã«ãªã ãšããæåã«ã泚æãå¿
èŠã§ãã Vanilla MySQLïŒRDS MySQL ãå«ãïŒã ãšããã¹ã¿ãŒã§ ALTER TABLE ãå®è¡ãããšãã ã¬ããªã«åŽã§ã¯ SQL ã¹ã¬ããã metadata lock ãåãã«è¡ã ãã§ã«ãã®ããŒãã«ã䜿ã£ãŠããã¯ãšãªããããš â ããããçµãããŸã§ Slave_SQL_Running_State: Waiting for table metadata lock ã®ç¶æ
ã§åŸ
ã¡ç¶ãã ãšãã圢ã§ã ã¬ããªã«åŽã«ã¡ã¿ããŒã¿ããã¯åŸ
ã¡ãæºãŸã ãæåã«ãªããŸãã mita2 database life äžæ¹ã§ Aurora ã¬ããªã«ã¯æåãããªãéããŸãã Aurora ã®å Žåããã©ã€ããªãšã¬ããªã«ã¯åãã¯ã©ã¹ã¿ãŒããªã¥ãŒã ãèŠãŠãããDDL ãã»ãŒå³æã«ã¬ããªã«ãžåæ ããã ãã®ä»£ããã ALTER ãæã£ãç¬é ALTER å®äºçŽåŸ ã«ããã®ããŒãã«ãèªãã§ããã¬ããªã«äžã® SELECT ããŸãšããŠãšã©ãŒã«ãªããŸã ïŒ Lost connection to MySQL server during query ã§èœã¡ãæåã確èªãããŠããŸãïŒã mita2 database life ã€ãŸã Aurora ã§ã¯ã ãã¬ããªã«ã§ metadata lock åŸ
ã¡ããºã©ããšäžŠã¶ãããšã¯èµ·ãã«ãã ãã®ä»£ããã ããŸããŸãã®ã¿ã€ãã³ã°ã§æµããŠãã SELECT ããåçºã§ããšã©ãŒã«ãªã ãšãããã¬ãŒããªãã«ãªã£ãŠããŸãã mita2 database life éçšã§æ°ãã€ããããã€ã³ã ãªã³ã©ã€ã³DDLã§ãã¡ã¿ããŒã¿ãã㯠ãé¢ãã以äžãâãŒãããã¯â ã«ã¯ãªããªã éåžžã® DML ã§ãå
±æã¡ã¿ããŒã¿ããã¯ãä»ãã®ã§ã â ALTER TABLE ãšåãåãã«ãªã£ãŠè©°ãŸãå¯èœæ§ããã ãã³ã°ãã©ã³ã¶ã¯ã·ã§ã³ãæ®ã£ãŠãããšã â ALTER TABLE ããã£ãš Waiting for table metadata lock ã®ãŸãŸåããªã Aurora ã®å Žåã¯ã Writer åŽã§ã¯ Vanilla MySQL ãšåæ§ã«ã¡ã¿ããŒã¿ããã¯åŸ
ã¡ãçºçãããäžæ¹ã§ Reader åŽã§ã¯ã¡ã¿ããŒã¿ããã¯åŸ
ã¡ã¯æºãŸããªããããALTER ã®éå§ïŒçµäºã¿ã€ãã³ã°ã§ SELECT ããšã©ãŒã«ãªãã ãšããç¹æã®æåããã ç¹ã«ã¢ã¯ã»ã¹ã®å€ãããŒãã«ã»ã©ã å€éã«å®è¡ãã äºåã«ãã³ã°ãã©ã³ã¶ã¯ã·ã§ã³ãæé€ãã ã¬ããªã«ã䜿ã£ãéã SELECT ã®ã¹ã±ãžã¥ãŒã«ã調æŽãã ãšãã£ã âã²ãšæéâ ãå¹ããŠããŸãã ãªã³ã©ã€ã³DDLã¯äŸ¿å©ãªäžæ¹ã§ã ãã¡ã¿ããŒã¿ããã¯ã®ååšã ãã¯å¿ããªãã ãAurora ã¬ããªã«ã§ã¯ SELECT åŽã®åçºãšã©ãŒãšããŠè¡šã«åºãŠããããšãããã ãšããäºã€ãé ã®çé
ã«çœ®ããŠãããšãã ãã¶å®å¿ããŠéçšã§ããã¯ãã§ãã åèã«ãããŠããã ããèšäº ãªã³ã©ã€ã³DDLãšã¡ã¿ããŒã¿ãã㯠ã®é¢ä¿ããAurora ã¬ããªã«ã®æåãæŽçããããã§ããã¡ãã®èšäºãåèã«ãããŠããã ããŸããïŒ ãªã³ã©ã€ã³DDLãš ã¡ã¿ããŒã¿ããã¯ã®æŽçã«ããã£ãŠïŒ https://blog.s-style.co.jp/2024/12/13360/ Aurora ã¬ããªã«ã§ã® metadata lock ãš DDL ã®æåæ€èšŒïŒ https://mita2db.hateblo.jp/entry/2020/07/20/153139 2. Migration æã«çºçããã¡ã¿ããŒã¿ããã¯ã«ããããããã㯠ããæ¥ããã€ã°ã¬ãŒã·ã§ã³ã®æäžã« ããããã㯠ãçºçããŸããã éåžžã§ããã° Aurora ã® cluster ãã©ã¡ãŒã¿ãŒã§ innodb_print_all_deadlocks ã1ã«èšå®ããŠããã®ã§ Aurora ããããããã¯æ€ç¥ãã CloudWatch â Firehose â Datadog Logs** ã®çµè·¯ã§ããã¯ã¢ãã¿ãŒæ
å ±ãšå
±ã«éç¥ãé£ãã§ããŸãã ãšããããã®æ¥ã¯ã Datadog ã«äœãäžãã£ãŠããªã ç¶æ³ã§ããã ããããFirehose æ¢ãŸã£ãŠãïŒ ãããšãããã¯ã¢ãã¿ãŒãåºãŠãªãïŒã CloudWatch ã®çãã°ããã©ã£ãŠãããã¯ã¢ãã¿ãŒèªäœãåºåãããŠãããã ãããã Aurora åŽã§ããã¯ã¢ãã¿ãŒãçºç«ããŠããªã ç¶æ
ã§ããã ãã°ãåºãŠããªãçç± åå ã¯ã·ã³ãã«ã§ãåœæçºçããŠããã®ã InnoDB ã®ããã¯ã§ã¯ãªãã¡ã¿ããŒã¿ããã¯ã«ããããããã㯠ã ã£ãããã§ãã ããã¯ã¢ãã¿ãŒãæ€ç¥ããŠããã®ã¯ InnoDB ã¹ãã¬ãŒãžãšã³ãžã³å±€ã®æ
å ±ã§ããã ãµãŒããŒã³ã¢åŽã§ç®¡çããã ã¡ã¿ããŒã¿ãã㯠ã¯ã¢ãã¿ãŒã®å¯Ÿè±¡å€ ã§ãã ã€ãŸãã ä»åã®ç«¶å㯠InnoDB ã®ããã¯ã§ã¯ãªããµãŒããŒåŽã§ç®¡çããã ã¡ã¿ããŒã¿ããã¯ã«ãããã®ã ã£ããããInnoDB ã®ããã¯ã¢ãã¿ãŒã®å¯Ÿè±¡å€ã§èŠ³æž¬ãããªãã£ã ãšããããšã§ãã äœãèµ·ããŠããã®ã å®è¡ããŠããã®ã¯äžèŠã«ãªã£ã customers_orders ããŒãã«ã®åé€ïŒ DROP TABLE customers_orders ïŒã äžæ¹ã¢ããªã±ãŒã·ã§ã³åŽã§ã¯ã orders ãš customers ãåç
§ããèªã¿åãïŒJOIN ãããã¯é£ç¶ãã SELECT ïŒ ãèµ°ã£ãŠããŸããã customers_orders 㯠orders ãš customers ã«å€éšããŒãæã€ããã DROP TABLE customers_orders ã¯åç
§æŽåæ§ã®ç¢ºèªã§ orders ãš customers ã®æä»ã¡ã¿ããŒã¿ãã㯠ãåãã«è¡ããŸãã åæã«ã¢ããªåŽã¯ orders ãš customers ã®å
±æã¡ã¿ããŒã¿ãã㯠ãåãã«è¡ããããååŸé åºã®å·®ã§ çžäºåŸ
æ©ïŒã¡ã¿ããŒã¿ããã¯ã«ãããããããã¯ïŒ ãæç«ããŸããã åçŸçšã®ãµã³ãã«ã³ãŒã CREATE TABLE customers ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR ( 50 ) ) ENGINE = InnoDB; INSERT INTO customers (name) VALUES ( ' Alice ' ); CREATE TABLE orders ( id INT AUTO_INCREMENT PRIMARY KEY ) ENGINE = InnoDB; INSERT INTO orders VALUES ( 1 ); -- äžéããŒãã«ïŒorders à customersïŒ CREATE TABLE customers_orders ( order_id INT NOT NULL , customer_id INT NOT NULL , PRIMARY KEY (order_id, customer_id), -- äžéããŒãã«ãããè€åäž»ã㌠FOREIGN KEY (order_id) REFERENCES orders(id), FOREIGN KEY (customer_id) REFERENCES customers(id) ) ENGINE = InnoDB; -- äŸ: é¢é£ã1ä»¶ã ãäœã INSERT INTO customers_orders (order_id, customer_id) VALUES ( 1 , 1 ); 次ã«ã2ã€ã®ããã»ã¹ãçšæããŠå®è¡ããŸãã ã»ãã·ã§ã³1ïŒã¢ããªã±ãŒã·ã§ã³åŽïŒ START TRANSACTION; SELECT * FROM orders; â orders ã« å
±æã¡ã¿ããŒã¿ããã¯ïŒèªã¿åãããã¯ïŒ ãååŸã ã»ãã·ã§ã³2ïŒãã€ã°ã¬ãŒã·ã§ã³ïŒ DROP TABLE customers_orders; â customers_orders ã« æä»ã¡ã¿ããŒã¿ãã㯠ãååŸããå€éšããŒåç
§ã解決ããããã« customers ã«æä»ã¡ã¿ããŒã¿ããã¯ãååŸïŒæåïŒã orders ã«æä»ã¡ã¿ããŒã¿ããã¯ãååŸããããšããŠåŸ
æ©ã ã»ãã·ã§ã³1 SELECT * FROM customers; â customers ã«å
±æã¡ã¿ããŒã¿ããã¯ãååŸããããšããããããã»ã¹2ããã§ã«æä»ã¡ã¿ããŒã¿ããã¯ãä¿æããŠããããåŸ
æ©ã ãã®æç¹ã§ã ã»ãã·ã§ã³1 ïŒ orders ã®å
±æã¡ã¿ããŒã¿ããã¯ãä¿æãã customers ã®å
±æã¡ã¿ããŒã¿ããã¯ååŸåŸ
ã¡ ã»ãã·ã§ã³2 ïŒ customers ã®æä»ã¡ã¿ããŒã¿ããã¯ãä¿æãã orders ã®æä»ã¡ã¿ããŒã¿ããã¯ååŸåŸ
ã¡ ãšãã çžäºåŸ
æ©ç¶æ
ïŒãããããã¯ïŒ ã«é¥ããŸãã SHOW ENGINE INNODB STATUS ãå®è¡ããŠããä»åã®ãããããã¯ã«é¢ããèšé²ã¯äžå衚瀺ãããŸããã ãã㯠InnoDB ããã¯ã§ã¯ãªãMySQL ãµãŒããŒã³ã¢ã§ç®¡çããã ã¡ã¿ããŒã¿ããã¯ã«ããããããã㯠ã ããã§ãã åçºé²æ¢ç DROP TABLE åã«å€éšããŒå¶çŽãåé€ããŠãã ALTER TABLE customers_orders DROP FOREIGN KEY fk_customers_orders_order_id; ALTER TABLE customers_orders DROP FOREIGN KEY fk_customers_orders_customer_id; DROP TABLE customers_orders; å€éšããŒãå
ã«åé€ããããšã§ã DROP TABLE å®è¡æã«ããã¯å¯Ÿè±¡ãšãªãããŒãã«ïŒ orders ã customers ïŒãæå°éã«æãã æä»ã¡ã¿ããŒã¿ããã¯ã®ç«¶åãªã¹ã¯ãäžãã ããšãã§ããŸãã ãã€ã°ã¬ãŒã·ã§ã³å®è¡æã®åæã¢ã¯ã»ã¹ãæå¶ãã ç¹ã«æ¬çªç°å¢ã§ã¯ãåç
§å
ããŒãã«ïŒãã®å Žå㯠orders ãš customers ïŒã«å¯Ÿãã DML ãèµ°ã£ãŠããªãããšã確èªããŠããå®è¡ããããšãéèŠã§ãã 3. ãªãŒãã¬ããªã«ã®ã¯ãšãªã Writer åŽã«åœ±é¿ããããšããã Aurora MySQL ãéçšããŠããéã«ããªãŒãã¬ããªã«ã§å®è¡ãã SELECT ã¯ãšãªã«ãããããããWriter åŽã® RollbackSegmentHistoryListLength ãå¢å ããŠããããšã«æ°ã¥ããŸãããAWS ã®ãµããŒãã«åãåããããšãããæ¬¡ã®ãããªä»çµã¿ã§ããããšã倿ããŸããã ã¯ã©ã¹ã¿ãŒããªã¥ãŒã åäœã§å
±æããã UndoïŒå±¥æŽïŒ Aurora MySQL ã§ã¯ãã¯ã©ã¹ã¿ãŒããªã¥ãŒã æ§é ã«ãããŠã¹ãã¬ãŒãžããã³ Undo ãã°ïŒå±¥æŽïŒãå
±æãããŠããŸãã ãã®ããã RollbackSegmentHistoryListLength ã«é¢ããŠãã ã€ã³ã¹ã¿ã³ã¹åäœã§ã¯ãªããã¯ã©ã¹ã¿ãŒïŒããªã¥ãŒã åäœã§ç®¡çããã 仿§ã§ãã ãªãŒããŒã§é·æéå®è¡ãããŠãããã©ã³ã¶ã¯ã·ã§ã³ïŒããšã SELECT ã§ãã£ãŠã åé¢ã¬ãã«ãREPEATABLE READã®å ŽåMVCC ã«ããéå»ããŒãžã§ã³è¿œè·¡ãçºçïŒãå®è¡ãããšãUndo å±¥æŽãæºãŸããå
±æããªã¥ãŒã ãéã㊠Writer åŽã«ã圱é¿ãåã¶ç¶æ³ãèµ·ããåŸãŸãã ã€ãŸãã âãªãŒããŒã ããå®å¿ããŠéãã®ã¯ãšãªãæµããâãšã¯éããªã ããšããããšã«ãªããŸãã RollbackSegmentHistoryListLength ã®æå³ãšåœ±é¿ ãã®ã¡ããªã¯ã¹ã¯ãAuroraïŒMySQL ã«ããã ã³ãããæžã¿ãã©ã³ã¶ã¯ã·ã§ã³ã® Undo ãã°ïŒå±¥æŽãªã¹ãïŒã®é·ã ã衚ããŸãã InnoDB ã®å±¥æŽãªã¹ãã¯ã ã³ãããæžã¿ãã©ã³ã¶ã¯ã·ã§ã³ã® Undo ãã°ãæ ŒçŽããã°ããŒãã«ãªã¹ã ã§ãããäžèŠã«ãªã£ãå±¥æŽïŒå€ãè¡ããŒãžã§ã³ïŒãåé€ããããã«äœ¿çšãããŸãã ãã®ãªã¹ããé·ããªããšããããšã¯ãå€ãè¡ããŒãžã§ã³ã倿°æ®ã£ãŠããç¶æ
ãæå³ããŸãã å±¥æŽãªã¹ãã®é·ãã倧ãããªãããããšãå€ãè¡ããŒãžã§ã³ãå€ãä¿æããå¿
èŠããããããã¯ãšãªã®å®è¡ãé
ããªãå¯èœæ§ããããŸãããŸãããã©ã³ã¶ã¯ã·ã§ã³å®äºåŸã«çºçããããã¯ãã°ã®äŒæ¬ãéããªãã AuroraReplicaLag ãäžæçã«å¢å ããå ŽåããããŸãããã®ã©ã°å¢å€§ã®åœ±é¿ã倧ãããšã ãªãŒãã¬ããªã«åŽã§åèµ·åãçºçããå¯èœæ§ããããŸãïŒ åè ïŒã Aurora å
¬åŒããã¥ã¡ã³ãã§ããå±¥æŽãªã¹ãã®é·ããéå°ã«å¢å ãããšããã©ãŒãã³ã¹äœäžã®åå ã«ãªããšèª¬æãããŠããŸãã ïŒ Amazon Aurora User Guide â InnoDB å±¥æŽãªã¹ãã®é·ã ïŒ å
žåçã«å€ãå¢å ããç¶æ³ãšããŠã¯ïŒ å®è¡æéã®é·ããã©ã³ã¶ã¯ã·ã§ã³ ïŒèªã¿åããŸãã¯æžã蟌ã¿ïŒ â é·æéãªãŒãã³ç¶æ
ã®ãã©ã³ã¶ã¯ã·ã§ã³ãååšãããšãå€ã Undo ãã°ãããŒãžã§ããã«å±¥æŽãªã¹ããèç©ããŸãã æžã蟌ã¿è² è·ãé«ãå Žå â æŽæ°ãåé€ãé »ç¹ã«è¡ããããš Undo ãã°ã倧éã«çæãããããŒãžåŠçã远ãã€ããå±¥æŽãªã¹ãã®é·ããå¢å ããŸãã å®éã«èµ·ããŠããããšïŒæç³»åïŒ ãªãŒãã¬ããªã«ãåç
§ããŠãã Redash ã§å®è¡ãããéèšã¯ãšãªã æ°æé å®è¡ãããŠãã é·æéå®è¡äžã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ãããå€ã Undo ãã°ãããã«ããŒãžã§ããã RollbackSegmentHistoryListLength ãäžæ RollbackSegmentHistoryListLength ã®äžæã«ãã£ãŠã ã¯ãšãªããã©ãŒãã³ã¹ã®äœäžãçºç ãã©ã³ã¶ã¯ã·ã§ã³ãå®äºããéã®ããã¯ãã°ã®äŒæ¬ã®åœ±é¿ã§ AuroraReplicaLag ã®äžæçãªå¢å ãçºçããã¬ããªã«ã€ã³ã¹ã¿ã³ã¹ã®åèµ·åãçºç 察å¿ãšåçºé²æ¢ Redash ãªã©ãªãŒãã¬ããªã«äžã§å®è¡ããé·æéã®éèšã¯ãšãªã¯ãã»ãã·ã§ã³åäœã§ READ COMMITTED 以äžã®åé¢ã¬ãã«ãéžã¶ããšã§ãéå»ããŒãžã§ã³ãé·æéä¿æããŠããŸãåé¡ãé²ããUndo ã®è¥å€§åãæããããšãã§ããŸãã åé¢ã¬ãã«ãäžãããšãèªã¿åãæŽåæ§ã®ä¿èšŒã匱ãŸããšãããã¡ãªããããããŸããããšãã°ïŒ åãã¯ãšãªã2åå®è¡ãããšçµæãå€ããå¯èœæ§ãããïŒ Non-repeatable read ïŒ ç¯å²æ€çŽ¢ã®ãã³ã«æ°ããè¡ãèŠããŠããŸãããšãããïŒ Phantom read ïŒ ã³ãããåã®æžã蟌ã¿ãèªãã§ããŸãå¯èœæ§ãããïŒ Dirty readïŒãã ã READ UNCOMMITTED ã®å Žåã®ã¿ ïŒ ãã ã éèšç³»ã®ã¯ãŒã¯ããŒãã§ã¯ãªã¢ã«ã¿ã€ã ãªå³å¯æŽåæ§ãæ±ããªãã±ãŒã¹ãã»ãšãã© ã®ããããããã®æºããã¯å®éçšäžåé¡ã«ãªããªãããšãå€ãã§ãã ããããã¬ããªã«ã§ã®é·æéã¯ãšãªãåå ã§ Writer åŽã®ããã©ãŒãã³ã¹ã«åœ±é¿ãåºããã»ããæ·±å»ã§ããã®åœ±é¿ãé¿ããããã¡ãªããã®ã»ãã倧ããå Žé¢ãå€ãã§ãã 4. InnoDB Buffer Pool ãã¥ãŒãã³ã° Aurora MySQL ã®ã¡ã¢ãªæ§æã®äžã§æã倧ããªå²åãå ããã®ã InnoDB Buffer Pool ã§ãã ãã㯠InnoDB ã¹ãã¬ãŒãžãšã³ãžã³ãã ããŒãã«ã®ããŒã¿ããŒãžãã€ã³ããã¯ã¹ããŒãžããã£ãã·ã¥ããããã®äžæ žçãªã¡ã¢ãªé å ã§ãã ã¯ãšãªå®è¡æãMySQL ã¯ãŸããããã¡ããŒã«äžã«å¿
èŠãªããŒãžãååšãããã確èªããèŠã€ãããªãå Žåã®ã¿ãã£ã¹ã¯ããèªã¿èŸŒã¿ãŸãã ãããã£ãŠã ã©ã®çšåºŠã®ããŒã¿ããããã¡ããŒã«ã«èŒããããŠããã ãããã£ã¹ã¯ I/O ã®çºçé »åºŠãã¯ãšãªæ§èœã倧ããå·Šå³ããŸãã ååãªãããã¡ããŒã«ã確ä¿ããŠããããšã§ããã£ã¹ã¯ã¢ã¯ã»ã¹ãæå°éã«æããçµæãšããŠå¿çæéãã¹ã«ãŒããããæ¹åã§ããŸãã Aurora ã§ã¯ããããã¡ããŒã«ãµã€ãºã¯ããã©ã«ãã§ã¯ã€ã³ã¹ã¿ã³ã¹ã®ç©çã¡ã¢ãªã«å¿ããŠèªåèšç®ãããŸãã åºæ¬çã«ã¯ innodb_buffer_pool_size = DBInstanceClassMemory à 3/4 ã®åŒãåºæºã«åçã«èšå®ãããã€ã³ã¹ã¿ã³ã¹ãã¹ã±ãŒã«ã¢ãããããšãããã¡ããŒã«ãæ¯äŸããŠæ¡åŒµãããŸãã å¿
èŠã«å¿ããŠããã©ã¡ãŒã¿ãŒã°ã«ãŒãã§æç€ºçã«èª¿æŽããããšãå¯èœã§ãã ãã®ã¡ã¢ãªãæ¬åœã«äœ¿ãåããŠããã®ãïŒ éçšäžã® Aurora Writer ã確èªãããšã Buffer pool hit ratio 㯠99%以äžãç¶æãã Read IOPS ã Read Latency ãäœæ°Žæºã§å®å®ããŠããŸããã ã€ãŸãã ã»ãšãã©ã®ã¯ãšãªãã¡ã¢ãªå
ã§å®çµããŠããããã£ã¹ã¯ I/O ã¯ã»ãšãã©çºçããŠããªã ç¶æ
ã§ãã äžæ¹ã§ã innodb_buffer_pool ã®äœ¿çšç㯠100% ã«éããŠããŸããã§ããã ããã¯åã«ãã¡ã¢ãªã䜿ãåããŠããªãããšããããšã§ã¯ãªãã å®éã«ã¢ã¯ã»ã¹ãããããŒã¿éïŒã¯ãŒãã³ã°ã»ããïŒããããã¡ããŒã«å®¹éãäžåã£ãŠãã ããšãæå³ããŸãã èšãæããã°ã ã¯ãŒãã³ã°ã»ãããååã«å容ã§ããã ãã®ãããã¡ããŒã«ã確ä¿ãããŠããããããŸã ã¡ã¢ãªã«äœè£ããã ç¶æ
ã§ãã ããã« FreeableMemory ã«ãååãªäœè£ãããå Žåã¯ã ãå®éã®ã¢ã¯ã»ã¹ãã¿ãŒã³ãæ¯ããããã«å¿
èŠãªããŒã¿ã¯ååã«ã¡ã¢ãªã«èŒã£ãŠãããïŒ ã¡ã¢ãªèгç¹ã§ã¯ã€ã³ã¹ã¿ã³ã¹ãµã€ãºãäžããããå¯èœæ§ããã ãšå€æã§ããŸãã ãã ããã¡ã¢ãªã ãã§å€æããªã 泚æãã¹ãã¯ã ã¡ã¢ãªææšã ããæ ¹æ ã«ã¹ã±ãŒã«ããŠã³ã倿ããã®ã¯å±éº ãšããç¹ã§ãã Aurora ã®æ§èœã¯ã¡ã¢ãªã ãã§ãªãã CPUã»I/O 垯åã»æ¥ç¶æ°ã»ãã©ã³ã¶ã¯ã·ã§ã³äžŠå床 ãšãã£ãè€æ°ã®ãªãœãŒã¹ãã©ã³ã¹ã§æãç«ã£ãŠããŸãã ããšãã°ãã¡ã¢ãªã«ã¯äœè£ããã£ãŠã次ã®ãããªã±ãŒã¹ã§ã¯æ³šæãå¿
èŠã§ãã CPU 䜿çšçïŒ CPUUtilization ïŒãããŒãã¢ãã¬ãŒãžïŒ LoadAverage ïŒãé«ã ããŒã¯æé垯㫠DBConnections ãæ¥å¢ããŠãã Aurora ã§ã¯ã max_connections ã ã€ã³ã¹ã¿ã³ã¹ã¡ã¢ãªéããèªåèšç®ããã ãããã€ã³ã¹ã¿ã³ã¹ãµã€ãºãäžãããš ããã©ã«ãã®èš±å®¹æ¥ç¶æ°ãæžå° ããŸã max_connections èªäœã¯èª¿æŽã§ããŸãããAWS ããã¥ã¡ã³ãã«ããããšããããããã¡ããŒã«ãã¯ãšãªãã£ãã·ã¥ãªã©ä»ã®ã¡ã¢ãªé¢é£èšå®ãšå¯æ¥ã«é¢ä¿ããããã ããã©ã«ããã倿Žããã«ã¯ååãªç¥èãšæ€èšŒãå¿
èŠ ã§ã https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.Performance.html ããã©ã«ãã®æ¥ç¶å¶éã¯ããããã¡ããŒã«ãã¯ãšãªã®ãã£ãã·ã¥ãšãã£ãå€ãã®ã¡ã¢ãªãæ¶è²»ããä»ã®åŠçã®ããã©ã«ãå€ã䜿çšããã·ã¹ãã ã«åãããŠèª¿æŽãããŠããŸããã¯ã©ã¹ã¿ãŒã®ãããã®ä»ã®èšå®ã倿Žããå Žåã¯ãDB ã€ã³ã¹ã¿ã³ã¹ã§äœ¿çšå¯èœãªã¡ã¢ãªã®å¢æžã«å¿ããŠæ¥ç¶å¶éã調æŽããããšãæ€èšããŠãã ããã æ¥ç¶æ°ãããŒã¯ã§äŒžã³ãç°å¢ã§ã¯ãããã©ã«ãå€ã®ãŸãŸã¹ã±ãŒã«ããŠã³ãããš äºæãã¬æ¥ç¶æ¯æžãçºçãããªã¹ã¯ ããããŸã ãã®ããã«ãã€ã³ã¹ã¿ã³ã¹ãµã€ãºã®å€æŽã¯æ¥ç¶æ°ã ãã§ãªãã èªåèšç®ãããããŸããŸãªãã©ã¡ãŒã¿ãŒ ã«ã圱é¿ããŸãã ãã®ããã ããããã¡ããŒã«ã䜿ãåã£ãŠããªãïŒããã«äžããŠè¯ããã§ã¯ãããŸããã ã¡ã¢ãªäœå°ã ãã§ãªããCPUã»I/Oã»æ¥ç¶æ°ãªã© ä»ã®ãªãœãŒã¹ææšãå«ããŠç·åçã«è©äŸ¡ããããŒã¯æã®è² è·ã«ååèããããããšã確èªããŠãã ã¹ã±ãŒã«ããŠã³ãæ€èšããã®ãå®å
šã§ãã 5. åæãªã¯ãšã¹ãã«ãããããããã¯ã®å®äŸãšèå¯ ã¢ããªã±ãŒã·ã§ã³ã§åãåŠçãã»ãŒåæã«åŒã°ãããšãããŒã¿ããŒã¹å
éšã§ ããã¯ã®åãåã ãèµ·ãããããããã¯ã«ã€ãªããããšããããŸããããã§ã¯2ãã¿ãŒã³ã玹ä»ããŸãã ã¿ã€ããŒã®ããã«ãŠãŒã¶ãŒæ°ãå€ãããã©ãã£ãã¯ãéäžããç°å¢ã§ã¯ãéåžžã®ã·ã¹ãã ã§ã¯ã»ãšãã©èµ·ããªããããªãåæãªã¯ãšã¹ããããäžŠè¡æŽæ°ããçºçããããšããããŸãããã®ãããããããç«¶åã¯çè«äžã®è©±ã§ã¯ãªããå®éã®éçšã§ã泚æãå¿
èŠã§ãã ãã¿ãŒã³â ïŒã®ã£ããããã¯ã«ããç«¶å ååšããªãããŒã¿ãåæã«æ¿å
¥ããããšãããšã ã«çºçããå
žåçãªãã¿ãŒã³ã§ãã ããšãã°ãããã®ã¡ãŒã«ã¢ãã¬ã¹ã®ã¬ã³ãŒããååšããªããã°æ°èŠäœæããããšããåŠçããè€æ°ã®ãªã¯ãšã¹ããã»ãŒåæã«å®è¡ããã±ãŒã¹ãèããŸãã çºçã®æµã ããã§ã¯ã users ããŒãã«ã« email = 'email3@example.com' ã®è¡ããŸã ååšããªãã±ãŒã¹ ãäŸã«èª¬æããŸãã ãã©ã³ã¶ã¯ã·ã§ã³A ãæ¬¡ã®ã¯ãšãªãå®è¡ããŸãïŒ SELECT * FROM users WHERE email = 'email3@example.com' FOR UPDATE; 該åœã¬ã³ãŒããååšããªããããInnoDB ã¯ã email = 'email3@example.com' ãå
¥ãäœçœ®ã®ããéãã« ã®ã£ãããã㯠ãååŸããŸãã ïŒãã®ããã¯ã¯ãåãç¯å²ãžã® INSERT ãé²ãâèŠããªãå£âã®ãããªãã®ã§ãïŒ ã»ãŒåæã«ããã©ã³ã¶ã¯ã·ã§ã³B ãåãã¯ãšãªãå®è¡ããŸãïŒ SELECT * FROM users WHERE email = 'email3@example.com' FOR UPDATE; B ãåãç¯å²ã« ã®ã£ãããã㯠ãååŸããŸããããã§ãã€ã³ããªã®ã¯ã ã®ã£ããããã¯å士ã¯ãäºãã«å¹²æžããªãïŒç«¶åããªãïŒ ãšããããšã§ãããã®ãããA ãš B ã® SELECT ... FOR UPDATE ã¯ã©ã¡ããæ£åžžã«å®äºããŸãã ã©ã¡ãã®ãã©ã³ã¶ã¯ã·ã§ã³ãã察象ãååšããªãããšå€æããæ¬¡ã®ããã« INSERT ãå®è¡ããŸãïŒ INSERT INTO users (email, name) VALUES ('email3@example.com', 'Alice'); ãããã ãã©ã³ã¶ã¯ã·ã§ã³A ã®ã®ã£ããããã¯ããã©ã³ã¶ã¯ã·ã§ã³Bã® INSERT ãããã㯠ãã©ã³ã¶ã¯ã·ã§ã³Bã®ã®ã£ããããã¯ããã©ã³ã¶ã¯ã·ã§ã³Aã® INSERT ãããã㯠ãšããç¶æ
ã«ãªããŸãã äºãã«ããã¯ãè§£é€ãããã®ãåŸ
ã¡ç¶ãã ããããã㯠ãçºçããŸãã ããããå®è£
ã€ã¡ãŒãžïŒrailsçïŒ # 該åœã¬ã³ãŒããååšããªããããå®éã®è¡ããã¯ã¯çºçãã # ããã®äœçœ®ã«æ°ããè¡ãæ¿å
¥ãããªãããã®ã®ã£ããããã¯ãã ããååŸããã record = Model .lock.find_by( key : key) record ||= Model .create!( key : key) ãã¿ãŒã³â¡ïŒããã¯ææ Œã«ããç«¶å å
±æããã¯ïŒSããã¯ïŒããæä»ããã¯ïŒXããã¯ïŒãžææ Œãããšã ã«çºçãããããããã¯ã§ãã ã¢ã¯ã»ã¹é »åºŠã®é«ãããŒãã«ã§ãè€æ°ã®ãã©ã³ã¶ã¯ã·ã§ã³ãåãè¡ãåæã« UPDATE ããããšãããšãã«èµ·ãããããçŸè±¡ã§ãã çºçã®æµã ããã§ã¯ã email = 'email3@example.com' ã®è¡ããã§ã«ååšããŠããã±ãŒã¹ ãåæã«èª¬æããŸãã ãã©ã³ã¶ã¯ã·ã§ã³AãããŸã次ã®ã¯ãšãªãå®è¡ããŸãïŒ SELECT * FROM users WHERE email = 'email3@example.com' LOCK IN SHARE MODE; â 該åœè¡ã«å¯Ÿã㊠å
±æããã¯ïŒSããã¯ïŒ ãååŸããŸãããã®ããã¯ã¯ãèªã¿åãå°çšãã§ã ä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ã¯æžã蟌ããŸããããåãè¡ãèªãããšã¯å¯èœ ã§ãã ã»ãŒåæã«ããã©ã³ã¶ã¯ã·ã§ã³Bãåãã¯ãšãªãå®è¡ããŸãïŒ SELECT * FROM users WHERE email = 'email3@example.com' LOCK IN SHARE MODE; â B ãåãè¡ã«å¯Ÿã㊠å
±æããã¯ïŒSããã¯ïŒ ãååŸããŸãã Sããã¯å士ã¯ç«¶åããªããããäž¡æ¹ã®ã¯ãšãªãåé¡ãªãå®è¡ãããŸã ãã®åŸãA ãš B ã®äž¡æ¹ãæŽæ°ã¯ãšãªãå®è¡ããŸãïŒ UPDATE users SET name = 'Alice' WHERE email = 'email3@example.com'; A ã¯è¡ãæŽæ°ããããã«ã Sããã¯ã Xããã¯ã«ææ Œ ããããšããŸãã ããã B ãåãè¡ã« Sããã¯ãä¿æããŠããããåŸ
æ©ç¶æ
ã«ãªããŸãã åæã« B ã Xããã¯ã«ææ ŒããããšããŸãããA ã® Sããã¯ã«é»ãŸããŠåŸ
æ©ã çµæãšããŠã ãäºãã®ããã¯ãææ ŒãåŸ
ã¡ç¶ããæ§å³ ã«ãªãã MySQL ããããããã¯ãæ€åºããŠäžæ¹ã®ãã©ã³ã¶ã¯ã·ã§ã³ã匷å¶çµäºããŸãã 察ç ãããããã¯ã¯äžèŠãããšäºæž¬ãé£ããçŸè±¡ã§ããããããŸã§ç޹ä»ããããã« ãã©ã®ã¿ã€ãã³ã°ã§ã©ããªããã¯ãååŸãããŠãããã ãçè§£ããŠãããšãå€ãã®å Žåã§äºåã«åé¿ã§ããŸãã ããšãã°ã ååšç¢ºèªãšããã¯ååŸã®é åºãèŠçŽã ïŒäžèŠãªã®ã£ããããã¯ãé¿ãããã¬ã³ãŒãã®æç¡ã«ãã£ãŠã¯ãšãªãåå²ãã ãªã©ïŒ åãè¡ã«å¯ŸããŠåæã« SâX ããã¯ææ Œãèµ·ããªãããã«ã¯ãšãªèšèšã調æŽãã ã¢ããªã±ãŒã·ã§ã³åŽã§åæå®è¡ãå¶åŸ¡ããïŒæä»å¶åŸ¡ã»ãªãã©ã€ã»åæ£ããã¯ãªã©ïŒ åŠçã®ç²åºŠãèŠçŽããŠããã¯ç«¶åãçºçãã«ããèšèšã«ãã ãšãã£ãã¢ãããŒãããããŸãã å®éã®ãšããããããããããã°OKããšããäžèœçã¯ãããŸããããã ã ãInnoDB ãã©ã®ã¿ã€ãã³ã°ã§ã©ã®ããã¯ãåããã ãçè§£ããŠããã ãã§ã åé¡ãæ£ããåçŸã§ããé©åãªå¯ŸçãéžæãããããªããŸãã é«ãã©ãã£ãã¯ç°å¢ã§ã¯ããããç«¶åã¯æ¥åžžçã«èµ·ããããããã ããã¯ã®æ§è³ªãç¥ã£ãŠããããšããã©ãã«ã·ã¥ãŒãã£ã³ã°ã®å€§ããªå©ãã«ãªããŸãã 6. UPDATE æã«ãæä»ããã¯ïŒXïŒãåºç¯å²ã«çºçããèœãšã穎 ãæä»ããã¯ïŒX ããã¯ïŒã¯ SELECT ... FOR UPDATE ã䜿ã£ããšãã ãçºçããããšæãããã¡ã§ãããå®ã¯ UPDATE ã DELETE ã§ãèªåçã« X ããã¯ãååŸãããŸã ã ããããããã¯ãããã®ã¯ ãæŽæ°å¯Ÿè±¡ã®è¡ã ããã§ã¯ãããŸãã ã ããã§éèŠãªã®ã¯ã MySQL å
¬åŒããã¥ã¡ã³ã ã«ãããšããã UPDATE / DELETE ã¯ãæ€çŽ¢ã§æ€åºãããïŒèªã¿èŸŒãŸããïŒãã¹ãŠã®ã¬ã³ãŒããã« æä»çãã¯ã¹ãããŒããã¯ãèšå®ããããã ããäžæã€ã³ããã¯ã¹ã«ãã£ãŠ â1 è¡ã ãâ ãç¹å®ã§ããå Žåã¯ã ã®ã£ãããå«ããã¯ã¹ãããŒããã¯ã§ã¯ãªãã 察象è¡ãã®ãã®ã®ã€ã³ããã¯ã¹ã¬ã³ãŒãããã¯ã®ã¿ã§æžãã ãšããç¹ã§ãã ãã®ä»æ§ãèžãŸãããšãMySQLïŒInnoDBïŒã§ã¯ã æŽæ° or åé€å¯Ÿè±¡ã®è¡ã«å¯ŸããŠæä»ã¬ã³ãŒããã㯠ãã®å¯Ÿè±¡ãèŠã€ããããã«ã¹ãã£ã³ããã€ã³ããã¯ã¹ç¯å²ã«ã æä»ãã¯ã¹ãããŒããã¯(æä»ã¬ã³ãŒããã㯠+ ã®ã£ããããã¯) ãèªåçã«çºçããŸãã ã€ãŸãã é©åãªã€ã³ããã¯ã¹ãååšããæŽæ°æã®ã¹ãã£ã³ç¯å²ãã©ãã ãçµã蟌ããã ã«ãã£ãŠãInnoDB ãååŸããããã¯ç¯å²ã¯å€§ããå€ãããŸãã å
·äœäŸïŒã€ã³ããã¯ã¹ãªã WHERE ã® UPDATE ãå€§äºæ
ãçã UPDATE orders SET status = ' shipped ' WHERE user_id = 123 ; orders.user_id ã«ã€ã³ããã¯ã¹ãç¡ãå ŽåïŒ user_id = 123 ãèŠã€ããããã« ããŒãã«å
šäœãã¹ãã£ã³ ã¹ãã£ã³äžã«ãæŽæ°åè£è¡ãã«å¯Ÿã㊠æä»ã¬ã³ãŒãããã¯ãååŸ ããã«ã¹ãã£ã³ç¯å²ã«å¯ŸããŠæä»ãã¯ã¹ãããŒããã¯ãçºç MySQL å
¬åŒã説æãããæ€çŽ¢ã§æ€åºããããã¹ãŠã®ã¬ã³ãŒãã«æä»çãã¯ã¹ãããŒããã¯ãèšå®ããããç¶æ
ã§ãã ãã®çµæïŒ æ¬æ¥ 1 ãŠãŒã¶ãŒã®æ°ä»¶ã ãæŽæ°ãããã£ãã®ã«ãå®éã«ã¯ããŒãã«å
šäœãããã¯ã«å·»ã蟌ãŸãã â ä»ãã©ã³ã¶ã¯ã·ã§ã³ã® INSERTã»UPDATEã»DELETE ãã»ãŒæ¢ãŸã ãšããå
žåçãªäºæ
ãèµ·ããŸãã å®åã§ã®åé¿æ¹æ³ é©åãªã€ã³ããã¯ã¹ãçšæãã UPDATE / DELETE ã® WHERE æ¡ä»¶ã«å®å
šäžèŽããã€ã³ããã¯ã¹ãäœãã ãã§ããã¯ç¯å²ãåçã«çãŸã 7. åããŒãã«äœæã»æŽæ°ã»å逿ã«èŠªããŒãã«ãžäŒæããå
±æããã¯ïŒSïŒ å€éšããŒå¶çŽïŒ FOREIGN KEY ïŒãå®çŸ©ãããŠããããŒãã«ã§ã¯ã åããŒãã«ã§è¡ãæ¿å
¥ã»æŽæ°ã»åé€ãããšã ã«ãåç
§æŽåæ§ïŒFK ãã§ãã¯ïŒãè¡ãå¿
èŠããããŸãã ãã®ãšããInnoDB 㯠åç
§å
ïŒ=芪ããŒãã«ïŒã®å¿
èŠãªè¡ãèªã¿èŸŒãããã«å
±æããã¯ïŒS ããã¯ïŒãååŸ ããŸãã FOREIGN KEY å¶çŽãããŒãã«äžã§å®çŸ©ãããŠããå Žåã¯ãå¶çŽæ¡ä»¶ããã§ãã¯ããå¿
èŠãããæ¿å
¥ãæŽæ°ããŸãã¯åé€ãè¡ããããšãå¶çŽããã§ãã¯ããããã«ãåç
§ãããã¬ã³ãŒãäžã«å
±æã¬ã³ãŒãã¬ãã«ããã¯ãèšå®ãããŸãã InnoDB ã¯ãå¶çŽã倱æããå Žåã«åããŠããããã®ããã¯ã®èšå®ãè¡ããŸãã ïŒ InnoDB Locks Set â MySQL 8.0 Reference Manual ïŒ ãã ã S ããã¯ãä»ãã®ã¯ãå®éã«åç
§æŽåæ§ãã§ãã¯ãå¿
èŠã«ãªã£ã 芪åŽã®è¡ ã ããã§ãã æŽæ°ãããå€éšããŒåã«é¢ä¿ãã芪ããŒãã«ã®è¡ ãŸãã¯ã DELETE / INSERT æã«åç
§ããã芪ã®è¡ ã«å¯ŸããŠã®ã¿ S ããã¯ãååŸãããŸãã ãã©ã³ã¶ã¯ã·ã§ã³ïŒã«ãŒãæŽæ°ã§èµ·ãããããèœãšã穎 ãã©ã³ã¶ã¯ã·ã§ã³å
ã§åããŒãã«ã倧éã«ã«ãŒãæŽæ°ããã±ãŒã¹ã§ã¯ã äžåºŠååŸããã芪ããŒãã«ã® S ããã¯ã COMMIT / ROLLBACK ãŸã§ä¿æããç¶ããŸãã è€æ°è¡ã DELETE / INSERT ãããšã芪ããŒãã«äžã®è€æ°è¡ã«å¯Ÿã㊠S ããã¯ã貌ããã ãããã®è¡ã«å¯Ÿã㊠X ããã¯ïŒ UPDATE ã DELETE ïŒãèŠæ±ããå¥ãã©ã³ã¶ã¯ã·ã§ã³ã é·æéããã㯠ãããããšããããŸãã å
·äœäŸïŒåããŒãã«ã®æŽæ°ïŒDELETE / INSERTïŒã芪ããŒãã«ã® UPDATE / DELETE ããããã¯ãã æ¬¡ã®ãããªããŒãã«æ§æãèããŸãã CREATE TABLE users ( id BIGINT PRIMARY KEY, name VARCHAR ( 255 ) NOT NULL ) ENGINE=InnoDB; CREATE TABLE groups ( id BIGINT PRIMARY KEY, name VARCHAR ( 255 ) NOT NULL ) ENGINE=InnoDB; CREATE TABLE group_users ( id BIGINT PRIMARY KEY, user_id BIGINT NOT NULL , group_id BIGINT NOT NULL , CONSTRAINT fk_group_users_user FOREIGN KEY (user_id) REFERENCES users(id), CONSTRAINT fk_group_users_group FOREIGN KEY ( group_id ) REFERENCES groups(id) ) ENGINE=InnoDB; å®éã«èµ·ããããã¯ã®ãã€ã³ã ãã®æ§æã§ã¯ïŒ user_id 㯠users.id ãåç
§ group_id 㯠groups.id ãåç
§ ã§ããã åããŒãã«ã® DELETE / INSERT ã§ FK ãã§ãã¯ãçºçããã®ã¯ âåç
§ãããå€éšããŒåã ãâ ã§ãã 以äžã®ãã°ã«ãŒãç§»åãåŠçãèããŸãïŒ DELETE FROM group_users WHERE user_id = 123 AND group_id = 1 ; INSERT INTO group_users (user_id, group_id ) VALUES ( 123 , 2 ); ããã§ã¯ã DELETE ã«ãã users.id = 123 , groups.id = 1 INSERT ã«ãã users.id = 123 , groups.id = 2 ã FK ãã§ãã¯å¯Ÿè±¡ã«ãªãããã users.id = 123 ã®è¡ã«å
±æããã¯ïŒSïŒ groups.id = 1 ãš groups.id = 2 ã®è¡ã«ã S ãã㯠ãšããæåã«ãªããŸãã åé¡ãšãªãã·ããªãªïŒã°ã«ãŒãç§»åããããšãŠãŒã¶ãŒæŽæ°ïŒãŸãã¯éäŒïŒAPI ãã©ã³ã¶ã¯ã·ã§ã³â ïŒã°ã«ãŒãç§»åãããïŒ BEGIN ; DELETE FROM group_users WHERE user_id = 123 AND group_id = 1 ; INSERT INTO group_users (user_id, group_id ) VALUES ( 123 , 2 ); -- COMMITããªããŸãŸä»ã®åŠçãç¶ãïŒã«ãŒãã§å€§éã®DELETE/INSERTïŒ ãã®æç¹ã§ InnoDB 㯠users.id = 123 groups.id = 1 groups.id = 2 ãªã©ã®èŠªããŒãã«ã®è¡ã« S ãã㯠ãååŸããŠããŸãã ãã©ã³ã¶ã¯ã·ã§ã³â¡ïŒå¥ API ããã®ãŠãŒã¶ãŒæŽæ°ãéäŒåŠçïŒ BEGIN ; UPDATE users SET name = ' æ°ããåå ' WHERE id = 123 ; -- ãŸãã¯éäŒåŠç -- DELETE FROM users WHERE id = 123; UPDATE ã DELETE 㯠X ããã¯ãåãããããã ãã©ã³ã¶ã¯ã·ã§ã³â ã® S ããã¯ãè§£é€ããããŸã§ããã㯠ãããŸãã ãã®çµæã ãããåŠçã¯åããŒãã«ã ããæäœããŠããã€ãã ãããåç
§å
ïŒèŠªïŒããŒãã«ã« S ããã¯ãä¿æãç¶ããŠãã 芪ããŒãã«ã® UPDATE / DELETE ãåŸ
ã¡ç¶æ
ãšãªããææª Lock wait timeout exceeded ãšããåé¡ãçºçããŸãã åé¿ã»ç·©åç ãã«ã¯æŽæ°ã现ããåäœã«åããéäžã§ããŸãã« COMMIT ãã â 倧éã®è¡ãäžæ°ã«åŠçãããšããã®éãã£ãšèŠªããŒãã«ã®è¡ã« S ããã¯ã貌ãç¶ããŠããŸããŸãã å°ããªãããã«åå²ããŠé çªã«åŠçããé©å® COMMIT ããããšã§ã 芪ããŒãã«ã®ããã¯ä¿ææéãçããããããã¯ãåºããã®ãé²ããŸãã ãããã« Aurora MySQL ã®éçšã¯ãåã«ããã©ã¡ãŒã¿ãŒã調æŽããããã€ã³ã¹ã¿ã³ã¹ãµã€ãºãäžããããšãã£ãåçºã®æ¹åã§ã¯ãªãã å®éã«ã©ããªçŸè±¡ãèµ·ããäœãåå ã§ãã©ã®ã¬ã€ã€ãŒã§çºç«ããŠããã®ããçè§£ããªããç©ã¿éããŠããäœæ¥ ã§ãã ã¿ã€ããŒã§ã¯ãèšå€§ãªã¢ã¯ã»ã¹éã»å€æ§ãªãŠãŒã¹ã±ãŒã¹ã»æ¥ã
é²åãç¶ãããµãŒãã¹æ§é ã®äžã§ãéçšç¥èãã®ãã®ããããã¯ãã®ç¶ç¶æ§ã«çŽçµããŸãã ä»å玹ä»ããå
容ã¯ããã®äžã§åŸãããç¥èŠã®ããäžéšã§ãããåãããã« Aurora ãæ¬æ°ã§éçšããŠããæ¹ã
ã«ãšã£ãŠã ãããããèŠèœãšããŠããããã ããã¡ã§ããã®ãã¿ãŒã³ãããªã ãšæã£ãŠãããããã£ããã«ãªãã°å¬ããã§ãã ä»åŸãç¶ç¶çã« Aurora / MySQL ã®æ€èšŒãæ¹åãé²ããå®éçšã§åŸãç¥èŠãç©æ¥µçã«çºä¿¡ããŠãããŸãããã䌌ããããªäºè±¡ã§æ©ãã§ããããAurora ãã©ãèšèšã»éçšãã¹ããè°è«ãããæ¹ãããã°ãæ°è»œã«å£°ããããŠãã ããã åŒãç¶ããããè¯ãéçšãšåŠã³ãç©ã¿éããŠãããŸãããã
ãèªåã¯å€§ããç«å ŽãããªãããäžçªæããèªèŠãã¹ããéããããªã圱é¿åãã«ã€ã㊠ã¯ããäºäºã§ããyykameiãšããååã§ã€ã³ã¿ãŒãããäžã§ã¯æŽ»åããŠãããŸããæå±ã¯ã¿ã€ããŒã§ãã Timee Product Advent Calendar 2025 Series 2 ã® 3 æ¥ç®ãšããŠã圱é¿åãããŒãã«ããèšäºããå±ãããŸããããã§ã¯ã©ããïŒ åœ±é¿åããã¯èª°ãéããããªã ãèªåã¯ãããŒãžã£ãŒã§ã¯ãªããããããã ã®ãã¡æè¡è
ã ããããšèããŠãè¬èãã«æ¯ãèãããšã¯ãããŸãããïŒãããããããã®ãè¬èããã¯å®ã¯çµç¹ã«ãšã£ãŠæãåä»ãªãªã¹ã¯èŠå ã«ãªã£ãŠãããããããŸããã ã圱é¿åããšããèšèã¯ãæš©åãããåœä»€æš©ããšåãæå³ã§æããããã¡ã§ãããèªåã«ã¯äººäºæš©ããªãããäœããæ±ºå®ããæš©éããªããã ããèªåã«ã¯åœ±é¿åãªããŠãªãããšãããããããã¯å€§ããªèª€è§£ã§ããçµç¹ã«ãããŠã圱é¿åããšã¯ã誰ãã«åœä»€ãäžãåã®ããšã ããæãã®ã§ã¯ãããŸããã誰ãã®çºèšãæ
床ããããã¯ãæ²é»ããããããåšå²ã®ææ
ãåãããä»ã®èª°ãã®è¡åãå€ããŠããŸãããšããããŸãã 誰ããäŒè°ã§è
ãçµãã§é»ã£ãŠããã ãã§ãä»ã®ã¡ã³ããŒã¯ãå察ãããŠããã®ã§ã¯ãªããããšäžå®ã«ãªããŸãã ã©ã³ãã§äœæ°ãªãããŒããæçŽãããŒã å
šäœã®å£«æ°ãäžããããšããããŸãã éã«ã誰ããæ¥œãããã«é£é¡ã«åãçµãå§¿ããä»ã®èª°ãã®ææŠãåŸæŒãããããšããããŸãã 奜ããšå¥œãŸãããšã«ããããããçµç¹ã«å±ããŠãã以äžãç§ãã¡ã¯ã圱é¿åãããã¯éããããŸãããã圱é¿åãå
šããªãäžçããªã©ååšããªãã®ã§ãã ãããªã®ã«ãèªåã«ã¯åããªãããšæã蟌ãã§ãããšãç§ãã¡ã¯ç¡é²åã«ãã®åãè¡äœ¿ããåšå²ãå·ã€ããããæ··ä¹±ãããããããäºæ
ããåŒãèµ·ãããŠããŸããããããŸããã ç¡èªèŠãªãæ£è«ããçŸå Žãåãããæ æ¶ç©ºã®ãšããœãŒãã䜿ã£ãŠèããŠã¿ãŸãã ããããŒãã£ã³ã°ã«ãããŠããžã·ã§ã³ãäžã®æ¹ããããªãã§ããããããªãã£ãã®ã§ããïŒãããããã®ã¯åžžèã§ãããããšãã£ãçºèšããããšããŸãããã®ã±ãŒã¹ã§ã¯çºèšãããæ¹ã®ããžã·ã§ã³ãäžãšããã ãã§çºèšãåãåãåŽã¯åœ±é¿åãæãããããšããåæããããŸããããã«å ããŠãçºèšã®å
容ãã®ãã®ã§ãããã®çºèšã®æå³ã¯æèã«ãããŸãããçºèšãåãåãåŽã¯ã远åãããŠããããšåãæ¢ããå¯èœæ§ãããã§ããããçºèšè
ãçŽç²ã«ããªãïŒãã«èå³ãããã ãã ãšããŠããçºèšãåãåãåŽã®æãæ¹æ¬¡ç¬¬ã§ã¯åœ±é¿åã¯é«ãŸããŸããã€ãŸããããã§ã¯ããžã·ã§ã³ãšçºèšã®å
容ã圱é¿åã圢ã¥ããããããŠããããã©ãåãæ¢ãããããã«ãã£ãŠåœ±é¿åã®åºŠåããå€ãããŸããããçºèšè
ãèªèº«ã®åœ±é¿åã«ã€ããŠéå°è©äŸ¡ããŠããå Žåã圱é¿åãè¡äœ¿ãããããšã«ç¡èªèŠã«ãªãå¯èœæ§ããããŸãããããªããšã圱é¿åã®è¡äœ¿ã«ããçµæãæãŸãããªãäºè±¡ãçºçããããšãããã§ãããã æ¬äººãç¡èªèŠã§ãã£ãŠãã匷çãªåœ±é¿åã¯ç¢ºå®ã«è¡äœ¿ãããŠããŸãããã®çµæãã¡ã³ããŒã¯èçž®ããæ¬æ¥å ±åãããã¹ããçã®åé¡ãããå°ããªãã¹ããé èœãããââãã㪠æãŸãããªãäºè±¡ ãçºçããŠããŸããããããŸããã 圱é¿åãšã¯ïŒ ãšããã§ã圱é¿åã®å®çŸ©ã«ã€ããŠæžããŠãããŸããã§ããããã®ããããç§ã¯å°éå®¶ã§ã¯ãªãã®ã§ Gemini Deep Research ã䜿ã£ãŠãã圱é¿åãã®åŠè¡çå®çŸ©ã調ã¹ãŠãã ãããããšæç€ºããŸããããã®çµæãã瀟äŒå¿çåŠçã¢ãããŒããã瀟äŒåŠçã»æ§é çã¢ãããŒãããçµç¹è¡åã»æ¿æ²»åŠçã¢ãããŒããããããã¯ãŒã¯ã»ã³ãã¥ãã±ãŒã·ã§ã³è«çã¢ãããŒããã®4ã€ã®äž»èŠãªåŠè¡çã¢ãããŒããé§äœ¿ããŠã以äžã®ãããªçµè«ãå°ãåºããŠãããŸããããã®å®çŸ©ãæ¬åœã«åŠè¡çã«æ£ãããã©ããã¯è°è«ããŸããããå°ãªããšããã®èšäºã§ã¯ããããå®çŸ©ã®ããšã§è©±ãé²ããŸãã åŠè¡çå®çŸ©ã«ããã圱é¿åïŒInfluenceïŒãšã¯ã瀟äŒççžäºäœçšã®å Žã«ãããŠãããäž»äœïŒå人ãéå£ãçµç¹ããŸãã¯åœå®¶ïŒããæåœ¢ç¡åœ¢ã®è³æºïŒå°äœãå°éæ§ãé
åãé¢ä¿æ§ãæ
å ±ïŒãè¡äœ¿ãŸãã¯åªä»ããããšã«ããã察象ãšãªãä»è
ã®å¿ççç¶æ
ïŒæ
床ãä¿¡å¿µãææ
ïŒããã³è¡åçåå¿ïŒåå®¹ãæš¡å£ãæåŸïŒã«å¯ŸããŠãæå³çãããã¯éæå³çã«å€åãããããåçãªããã»ã¹ããã³ãã®æœåšçèœåã§ããã ãã®æ¬è³ªã¯ãåãªãåã®è¡äœ¿ã§ã¯ãªãã察象è
ã圱é¿ãåãå
¥ããåæ©ïŒè³çœ°ã®äºæãé¢ä¿æ§ã®åžæ±ã䟡å€ã®æŽåæ§ïŒãšã®çžäºäœçšã«ãã£ãŠæ±ºå®ããããé¢ä¿ççŸè±¡ãã§ããããã®å¹æã¯è¡šå±€çãªè¿œåŸããæ·±å±€çãªäŸ¡å€ã®å
é¢åãŸã§å€å²ã«ãããã瀟äŒãããã¯ãŒã¯ãéããŠäŒæã»å¢å¹
ãããç¹æ§ãæã€ã ãã®äžã§å人çã«æ³šç®ããã¹ãç¹ã¯ãåãªãåã®è¡äœ¿ã§ã¯ãªãã察象è
ã圱é¿ãåãå
¥ããåæ©ãšã®çžäºäœçšã«ãã£ãŠæ±ºå®ããããé¢ä¿ççŸè±¡ãããšããéšåã§ãã圱é¿åã¯è¡äœ¿ããåŽãæã€çµ¶å¯Ÿçãªåã§ã¯ãªããçžæãšã®é¢ä¿ã®äžã§çŸããçŸè±¡ããšãããšãããå®éã«åšãã§èµ·ãã£ãŠããããšãšãäžèŽãããªããšããææ³ã§ãã ãããŠããããŸã§è°è«ããŠããç¡èªèŠãªåœ±é¿åã«ã€ããŠããŸãã«ãæå³çãããã¯éæå³çã«å€åãããããåçãªããã»ã¹ããã³ãã®æœåšçèœåã§ããããšããéšåãåœãŠã¯ãŸãããã§ãã ãªãäºæ
ã«ãªã£ãã®ãïŒ å
ã»ã©ç޹ä»ããå®çŸ©ïŒãè³æºããé¢ä¿ççŸè±¡ããéæå³çãïŒãšããã¬ã³ãºãéããŠãå
ã»ã©ã®æ¶ç©ºã®ããŒãã£ã³ã°ã§ã®ãäºæ
ããåæããŠã¿ãŸãããªãããçŽç²ãªçåãã¯ã远åããžãšå€è³ªããŠããŸã£ãã®ãã以äžã®3ã€ã®èŠçŽ ã§èª¬æãã€ãããã§ãã ãè³æºããèšèãéããã å®çŸ©ã«ãã£ããæåœ¢ç¡åœ¢ã®è³æºïŒå°äœãå°éæ§ïŒããšã¯ããã£ãªã¢ãããžã·ã§ã³ãã®ãã®ã§ãã ãã·ãã¢ãšã³ãžãã¢ãšããŠã®æè¡çä¿¡é ŒãããããŒãžã£ãŒãšããè©æžããã瀟æŽã®é·ããããããã¯åãªã屿§ã§ã¯ãªããçºèšã®ããªã¥ãŒã ãå¢å¹
ããã ã巚倧ãªã¢ã³ãïŒå¢å¹
è£
眮ïŒã ã§ãã èªåã®ããšãããã ã®ãã¡ã¡ã³ããŒãã ãšæã£ãŠããŠããèè² ã£ãŠãããè³æºããåã声ããä»ã®ã¡ã³ããŒã«ãšã£ãŠã®ãæå·ããã絶察çãªåœä»€ãã¬ãã«ã®é³éã«å¢å¹
ããŠå±ããŠããŸããŸãã ãé¢ä¿æ§ããæå³ãæªãã 圱é¿åãšã¯ãé¢ä¿ççŸè±¡ãã§ããã¡ãã»ãŒãžã®æå³ã¯çºä¿¡è
ã§ã¯ãªãåä¿¡è
ãšã®é¢ä¿æ§ã®äžã§æ±ºå®ãããŸãã ã¡ã³ããŒã®éã«ã¯ããè©äŸ¡ããåŽïŒãããåŽããæããåŽïŒæããåŽããšããæ§é çãªé¢ä¿æ§ãååšããŸãããã®ãã£ã«ã¿ãŒãéããšããã©ãããªã¯ãã®ããªãïŒããšããåãããã¯ããç§ã®è¡åã«äžæºãããã®ãïŒãã詊ãããŠããã®ãïŒããšããæèã«èªå倿ãããŸãã ã©ãã ããã©ã³ã¯ã«æ¯ãèãããšããŠãããã®æ§é çé¢ä¿æ§ãç¡èŠããããšã¯ã§ããŸããã ãéæå³çããªæŽèµ° ãããŠæãæãããã®ããæå³çãããã¯éæå³çããšããæ§è³ªã§ãã ãã®ã±ãŒã¹ã§ã®äºæ
ã®äž»å ã¯ããåšå§ããŠãããããšæå³ããããšã§ã¯ãããŸããïŒããããããããªæå³ãæã£ãçºèšããã人ã¯å°ãªããšä¿¡ããŠããŸãïŒããããã ãèªåã®ã¢ã³ãã®æ§èœïŒè³æºïŒãšãçžæãšã®è·é¢ïŒé¢ä¿æ§ïŒãèšç®ã«å
¥ãããç¡é²åã«ãã€ã¯ã®ã¹ã€ãããå
¥ããŠããŸã£ãããšã ã«ãããŸãã ã€ãŸããå
ã»ã©ã®æ¶ç©ºã®ããŒãã£ã³ã°ã§äºæ
ã«ãªã£ãã®ã¯ãçºèšè
ã®æ§æ Œãæªãããã§ããçžæãèç
ãããããã§ããããŸããã ãããžã·ã§ã³ãšããã¢ã³ããéãã°ãäºçްãªå
¥åã§ãåºåã¯åŒ·å€§ã«ãªãã ãšãã圱é¿åã®ç©çæ³åãšãèšããã¡ã«ããºã ããçºèšè
èªèº«ãéå°è©äŸ¡ããŠãããããšèšã£ãŠããã§ãããã 圱é¿åã®ããªã¥ãŒã ããã³ã³ãããŒã«ãããæè¡ 圱é¿åã®ã¡ã«ããºã ããã¢ã³ãïŒå¢å¹
è£
眮ïŒãã§ãããšããã¡ã¿ãã¡ãŒãåãå
¥ãããšããããªã¥ãŒã ã®ããããã調æŽããããšããæ¯å©ãæãæµ®ãã³ãŸããå®éã«ãããå¯èœãã©ããã¯ããããŸãããã圱é¿åãé©åã«ããããŠãæå³ããŠã³ã³ãããŒã«ããããšãã§ããã°ãç¡èªèŠãªåœ±é¿åã®è¡äœ¿ãé¿ããããšãã§ãããããããŸããã以äžã圱é¿åã®ã³ã³ãããŒã«ã«ã€ããŠããããªã¥ãŒã ã®ããããããäžããããäžãããããããã®ã¡ã¿ãã¡ãŒã䜿ã£ãŠææ¡ããŠã¿ãããšæããŸãã ããªã¥ãŒã ããäžãããæè¡ïŒæå¶çè¡äœ¿ïŒ ã¡ã³ããŒã®æèŠãåŒãåºãããæãã¡ã³ããŒã®èªåŸæ§ãå°éãããæããããã¯ãã¬ã€ã³ã¹ããŒãã³ã°ã®å Žãªã©ã§ã¯ãèªåã®åŒ·ããã圱é¿åã¯ãã€ãºã«ãªããããŸãããæå³çã«åºåãçµãå¿
èŠããããŸãã åŸèŽããïŒ äŒè°ã§åœ±é¿åã®ããã¡ã³ããŒãæåã«æèŠãèšããšãããããæ£è§£ãã«ãªã£ãŠããŸããè°è«ãçµãã£ãŠããŸããŸãããçã¯ã©ãæãïŒããšåããããèªåã¯é»ã£ãŠã¿ããªã®æèŠãèããããã ãã§ãå Žã®ãé¢ä¿æ§ãã¯ãã©ããã«è¿ã¥ããŸãããªããåŸèŽã«é¢ããŠã¯å¥œå¥å¿ãéèŠã§ãããããããã¯ã©ã®ãããªèããæã£ãŠããã®ã ããïŒããã©ããããã£ããããã£ãŠããããèãã«è³ã£ãã®ã ããïŒããšçŽç²ã«ãã®äººèªèº«ã«çŠç¹ãããŠãåŸèŽãè¡ããªããšãæå³ããã«ãããããã¯ããèšã£ãŠããããã©æ¬åœã¯ããã®ã»ããããã®ã§ã¯ïŒããªã©ãšèªåèªèº«ã®èãã衚åºãå§ããŠããŸããŸãããããããšãæ¬åœã®æå³ã§ãèããŠãããããšã«ã¯ãªããŸãããèªåã®èãã¯æšªã«çœ®ããŠèããŠã¿ãŸãããã ãããããªããããšã瀺ãïŒ ããªãã®æã€ãå°éæ§ïŒãªãœãŒã¹ïŒããçžæãå§çž®ãããŠãããªãããããŠãããææŸããŸããããã®æè¡ã«ã€ããŠã¯ããããã詳ããããæããŠã»ããããæ£çŽããŸã è¿·ã£ãŠãããã ããšåŒ±ã¿ãèŠããããšã§ãçžæã¯ãçºèšããŠãå®å
šã ããšæããããšãã§ããŸãã ç©ççãªåšå§æãæžããïŒ äžåº§ã«åº§ããããããŠèŒªã®äžã«æ··ãããè
çµã¿ããããããããããã³ããŒãã«ïŒéèšèªïŒãªè¡åããã¢ã³ãã®åºåãäžããæå¹ãªææ®µããšæããŸãã ããªã¥ãŒã ããäžãããæè¡ïŒç©æ¥µçè¡äœ¿ïŒ éã«ã圱é¿åããã«ããªã¥ãŒã ã§äœ¿ãã¹ãå Žé¢ãããã§ãããã è²¬ä»»ã®æåšãæç¢ºã«ããïŒ ãã©ãã«çºçæãããªã¹ã¯ã®ããæ±ºæãããæãããã¢ã³ãã®åºçªã§ããã責任ã¯ç§ãåããããæãåã£ãŠãã£ãŠãããã圱é¿åã®ããã¡ã³ããŒããããèšããšããŒã ã®ä»ã®ã¡ã³ããŒã¯å®ãããŠããå®å¿æã®ããšããã£ã¬ã³ãžãã§ããŸããæãŠããéãã®åœ±é¿åã®ãªãœãŒã¹ã䜿ã£ãŠã¡ã³ããŒãéŒèããŸãããã 圱é¿åã®ãããã©ãŒã¹ããããŒã ãå®ã ïŒ çµç¹ã§åããŠãã以äžãããŒã ã¯ãªãããã®åœ±é¿åã«æãããããšããããŸããããããããã声ã®å€§ãããŠãŒã¶ãŒããã®ã¬ãã¥ãŒã«ãã£ãŠãã®ããŒã ãæäŸãããããã¯ãã®ã¬ãã¥ããŒã·ã§ã³ãäžæ°ã«äžããããšããããããããŸããããããã¯ã瀟å
ã®ã¹ããŒã¯ãã«ããŒããçªç¶ã®æç€ºããããããããŸããããã®ãããªãšãã圱é¿åã®ããã¡ã³ããŒãç¢é¢ã«ç«ã€ããšã«ãã£ãŠããŒã ãå®ãã圱é¿åã®ããè
å士ã§äŒè©±ãããŠããŸãå Žãããããããšãå¿
èŠã§ãããããã¯ããã£ããæäºã®åé¡ãšããããšã§åœ±é¿åã®ããã¡ã³ããŒããã®åé¡ã«åãçµã¿ãä»ã®ã¡ã³ããŒã®è² æ
ãæžãããããªè¡åãããŠããããããããŸããã æåŸã« 圱é¿åããã¯éããããŸãããããã«ãããããã圱é¿åã«ç¡èªèŠã«ãªãããšããŸãŸãããšæããŸãã圱é¿åã®ååšãèªèãããã®ãããªã¥ãŒã ããã©ã調æŽãããïŒãšãã芳ç¹ã§åœ±é¿åãšä»ãåã£ãŠãããšãåšããšã®é¢ä¿æ§ã«ãããŠãã£ãšããããšãåŸ
ã£ãŠãããšæããŸãã ãããã¯ãæ¡çšãµã€ãTOP ã«ãžã¥ã¢ã«é¢è«ç³èŸŒã¯ãã¡ã
ãã®èšäºã¯ Timee Product Advent Calendar 2025 ã®2æ¥ç®ã®èšäºã§ãã ã¿ã€ããŒã§ããã¯ãšã³ããšã³ãžãã¢ãããŠããæ¡åã§ãã çªç¶ã§ãããLeanUXãã£ã³ãã¹ãšããããŒã«ããåç¥ã§ããããïŒ ä»å¹Žãããã€ãã®éçºãããŒã ã§é²ããäžã§ãLeanUXãã£ã³ãã¹ãè€æ°åäœæããŠæŽ»çšããŸããã ç§èªèº«åããŠã®çµéšã§ãããŒã ã¡ã³ããŒãåæ°ãåããŠãšããç¶æ
ã§ã®åãçµã¿ã§ããã ããŸããã£ãããšãèŠæŠããããšããã£ãã®ã§ãæ¯ãè¿ããè¡ãæ¬¡ã«æŽ»ããããã«ãã®èšäºãæžãããšæããŸãã LeanUXã»LeanUXãã£ã³ãã¹ãšã¯ LeanUXã¯ãæžç±ãLeanUXãã§ç޹ä»ãããŠããéçºææ³ã§ãã LeanUXãã£ã³ãã¹ã¯ããã®ææ³ãå®è·µããããã®ãã¡ã·ãªããŒã·ã§ã³ããŒã«ã§ãèè
ã®ãŠã§ããµã€ãã§ãã³ãã¬ãŒããå
¬éãããŠããŸãã åŒçšå
ïŒ JEFF GOTHELF-website ãã®èšäºã§ã¯LeanUXã®è©³çްã¯çç¥ããŸãããLeanUXãã£ã³ãã¹ãé çªã«åããã¯ãŒã¯ãè¡ãããšã§ãLeanUXãé²ããåºç€ãäœãããšãã§ããŸãã ãªãLeanUXãã£ã³ãã¹ã䜿ã£ãã®ã ä»å¹Žè¡ã£ãéçºã§LeanUXãã£ã³ãã¹ã䜿ã£ãã®ã¯ã次ã®ãããªèª²é¡ããã£ãããã§ãã è§£ãã¹ã課é¡ãæœè±¡çã§ãã©ã®ãããªæ©èœãå®è£
ããã°è¯ãã®ãå®ãŸã£ãŠããªã éã«èŠæ±ãããŠããæ©èœã¯ãããããªããããå®è£
ãããšè¯ãã®ãããŒã ã®å
±éèªèãæãŠãŠããªã 宿œã«ããã£ãŠã¯ãMiroãšãããã¯ã€ãããŒãããŒã«ã䜿ããŸããã LeanUXãã£ã³ãã¹ã§åŸãããããš LeanUXãã£ã³ãã¹ãè¡ã£ãæå€§ã®ææãšããŠæããŠããã®ã¯ãããŒã ã§ããžãã¹ãããã¬ã ã¹ããŒãã¡ã³ãïŒããžãã¹ãæ±ãã課é¡ãå®çŸ©ããææžïŒãäœæããããšã§ãã 以åã®éçºã§ã¯ããããã¯ããªãŒããŒãããžãã¹ãããã¬ã ããŸãšããäžã§ãããã¯ããŽãŒã«ãäœæããŠããŸããã ãããLeanUXãã£ã³ãã¹ã䜿ã£ãéçºã§ã¯ãéçºã¡ã³ããŒãããžãã¹ãããã¬ã ã®æ·±æãããã¯ãŒã¯ã«åå ããŸãããããã«ãããããŒã å
šå¡ãããªããã®éçºãè¡ãã®ãããšããå
±éèªèãæã€ããšãã§ããŸããã ãã®çµæãåæ©èœããšã«ã¿ã¹ã¯ãåå²ããããšãããæ©èœã®ç®çãããŒã å
šäœãçè§£ããŠãããããã¹ããŒãã£ãŒã«éçºãé²ããããšãã§ããŸããã ãŸããã¯ãŒã¯ãéããŠãŠãŒã¶ãŒãžã®çè§£ãæ·±ããæ©äŒã«ããªããŸããã ã¿ã€ããŒã¯ããŒãµã€ããã©ãããã©ãŒã ã§ãããåãã¯ãŒã«ãŒãšãã¯ãŒã«ãŒãåéããäºæ¥è
ã®åæ¹ã«ãšã£ãŠäŸ¡å€ãããã®ã§ãªããã°ãªããŸããã ããšãäºæ¥è
ã«ãšã£ãŠäŸ¿å©ãªæ©èœã§ãã£ãŠããã¯ãŒã«ãŒã®åãæ©äŒãæãªãæ©èœã¯å®è£
ã§ããŸããã ãã£ã³ãã¹ãäœæããããšã§ãåæ¹ã®èŠç¹ã§èãããã£ãããšãªããå
¬å¹³ãªãã©ãããã©ãŒã ã§ããããšãããæèããŠéçºãé²ããããšãã§ããŸããã é£ããã£ãç¹ LeanUXã«ã¯ããžãã¹ãããã¬ã ãèšè¿°ããéãããœãªã¥ãŒã·ã§ã³ã決ãã€ããããªãããšèšèŒãããŠããŸããããããæ³å以äžã«é£ããã£ãã§ãã èŠæ±ãããŠãããœãªã¥ãŒã·ã§ã³ããããšãã©ãããŠããã®æ©èœãåæã«èããŠããŸããŸããããããäžåºŠãã®ãœãªã¥ãŒã·ã§ã³ãå¿ããŠãäœãåé¡ãªã®ãããæãèµ·ããããšã«éäžããå¿
èŠããããŸããã ãã®ã¹ãããã®ãããã§ããã«ããã©ããã«é¥ãããã©ããªåé¡ã解決ãããã®ããæåã«åŒ·ãæèã¥ããããšãã§ããŸããã ç¶ç¶çãªæŽ»çšã«åã㊠æåã¯LeanUXãã£ã³ãã¹ãäœæããåŸãç¶ç¶çã«æŽ»çšããããšãã§ãããããŒã ã§æ¯ãè¿ããè¡ãäžã§ãã£ãšããŸã掻çšããŠãããããšãã話ã«ãªããŸããã ã¢ãžã£ã€ã«éçºã§ã¯äžåºŠã®ãªãªãŒã¹ã§çµããã§ã¯ãªããæ©èœã®æ¹åã远å ãè¡ã£ãŠããå¿
èŠããããŸãã å®éã«æ©èœããªãªãŒã¹ããåŸã«èŠããŠããåé¡ãå¢ããŠãããããäžåºŠäœã£ããã£ã³ãã¹ããã®ãŸãŸã«ãããç¶ç¶çã«æŽæ°ããŠããããšãæå¹ã ãšæããŠããŸãã ãã®åçãæŽ»ãããçŸåšã®éçºã§ã¯æ©èœã®åæãªãªãŒã¹åŸã宿çã«LeanUXãã£ã³ãã¹ãæŽæ°ãã远å éçºã®æéãšããŠåœ¹ç«ãŠãŠããŸãã ãŸãšã LeanUXãã£ã³ãã¹ã¯ãéçºã®æ¹åæ§ãæç¢ºã«ãã广çãªããŒã«ã§ãã ããŒã ã§ã®å®è·µãéããŠåŸãããäž»ãªãã€ã³ãã¯ä»¥äžã®éãã§ãã ç®çã®æç¢ºå : ããžãã¹ãããã¬ã ã¹ããŒãã¡ã³ãã®äœæã«ããããªããã®éçºãè¡ãã®ããšããå
±éèªèãçãŸãã ããŒãµã€ããã©ãããã©ãŒã ã®å
¬å¹³æ§ : ã¯ãŒã«ãŒãšäºæ¥è
åæ¹ã«ãšã£ãŠäŸ¡å€ããæ©èœéçºãæèã§ãã å®è·µçãªã¡ãªãã : ãã«ããã©ããã®åé¿ãæç¢ºãªåªå
é äœä»ããè¿·ãã®å°ãªãéçºé²è¡ éçºåæã«LeanUXãã£ã³ãã¹ã®äœæã«æéããããããšã§ãé·æçã«ã¯ããŒã ã®ã³ãã¥ãã±ãŒã·ã§ã³ãåæ»ã«ãªãããã广çãªéçºã«ã€ãªãããšæããŠããŸãã ä»åŸãããŒã ã§LeanUXã®çè§£ãæ·±ããŠãããããšæããŸãã ã¿ã€ããŒã®ãããã¯ãéçºã«èå³ãæã£ãŠãã ãã£ãæ¹ã¯ä»¥äžãèŠããŠã¿ãŠãã ããã ãããã¯ãæ¡çšãµã€ãTOP ã«ãžã¥ã¢ã«é¢è«ç³èŸŒã¯ãã¡ã
ããã«ã¡ã¯ãã¢ããªãã£ã¯ã¹ãšã³ãžãã¢ã® hatsu ã§ãã æ®æ®µã¯ããŒã¿ãšã³ãžãã¢ãšã¢ããªãã£ã¯ã¹ãšã³ãžãã¢ãããªãDREãšããçµç¹ã«æå±ããããŒã¿åºç€ãæŽããããdbtã䜿ã£ãããŒã¿ãŠã§ã¢ããŠã¹ã®éçºãªã©ãããŠããŸãã æ¬èšäºã§ã¯ãç§ãæå±ããDREã§æè¿åãçµãã ãããã·ã¥ããŒããªã©ã®ããŒã¿ã¢ãŠããããã®ç®¡çã«ã€ããŠã玹ä»ããŠã¿ãããšæããŸãã ãªãããã®èšäºã¯ Timee Advent Calendar 2025 ã·ãªãŒãº2ã®1æ¥ç®ã®èšäºã§ãã 仿¥ããæ¯æ¥3æ¬ãã€èšäºãæçš¿ãããŸãã®ã§ããã²ä»ã®æçš¿ãã芧ãã ããïŒ èæ¯ãšèª²é¡ ã¿ã€ããŒã§ã¯ç€Ÿå
ã§ããããªã¡ã³ããŒãããããªããŒã¿ãæ¥ã
掻çšããŠããŠã瀟å
ã®ããŒã¿ã¢ãŠãããããæ°ãåããªãã»ã©ååšããŠããŸãã ãããã®ããŒã¿ã¢ãŠããããã¯ã³ãŒã管çãã¯ãšãªã®ã¬ãã¥ãŒãããŠããªããã®ãã»ãšãã©ã§ãæå³ãã誀ã£ãã¯ãšãªãéèŠãªããŒã¿ãšããŠæŽ»çšãããŠããŸãããšã床ã
ãããŸããã ããã«ããæã¯äœ¿ã£ãŠãããã©ä»ã¯ãã䜿ã£ãŠããªããããããã¯ãäœã£ããã©çµå±äœ¿ããªãã£ãããšãã£ããå€ããŠãã䜿ãããŠããªããããªããŒã¿ã¢ãŠãããããæ®ãç¶ããããŒã¿ãæŽæ°ããç¶ããŠããçŸç¶ããããŸãã ã©ã®ããŒã¿ã¢ãŠãããããä»äœ¿ãããŠããã®ãã誰ããã®ããŒã¿ã¢ãŠããããã®è²¬ä»»è
ãªã®ããã©ããã£ãå質ãä¿èšŒãããŠããã®ããªã©ãããŒã¿ã¢ãŠããããã«é¢ããæ
å ±ããããŸã§ç®¡çã§ããŠããªãããšãããŒã ãã²ããŠã¯ããŒã¿ã掻çšããäŒç€Ÿå
šäœã®èª²é¡ã§ããã ããã§ãããŒã¿ã¢ãŠããããããããã«å¯ŸããŠèšå®ããâä¿¡é Œæ§ã¬ãã«âãå®çŸ©ãããã®âä¿¡é Œæ§ã¬ãã«âã«å¿ããŠããŒã¿ã¢ãŠããããã管çããŠããåãçµã¿ãå§ããŠã¿ãããšã«ããŸããã ããŒã ã§å®çŸ©ããâä¿¡é Œæ§ã¬ãã«âãšã¯ ããŒã ã§å®çŸ©ããâä¿¡é Œæ§ã¬ãã«âãšããã®ã¯ãããŒã¿ã¢ãŠããããã®ä¿å®éçšã®ããã«æ±ããããèŠä»¶ãšãããã«ãã£ãŠåŸãããããŒã¿ã¢ãŠããããã®ä¿èšŒå
容ãå®çŸ©ãããã®ã§ãã çŸç¶ãã¢ãŠããããã®å©çšç®çãªã©ã«å¿ããŠãTrustedã»Verifiedã»Provisionalã»Adhocã®4ã€ã®ã¬ãã«ã«åããŠå®çŸ©ããŠããŸãã ããããã®ã¬ãã«ã§ãä¿å®éçšãããããã«æºããã¹ãèŠä»¶ãšããããæºããããšã§ç§ãã¡DREãä¿èšŒããä¿å®éçšã®æ°ŽæºãäŸãã°é害æããœãŒã¹ããŒã¿ã«ç Žå£ç倿Žãå ãããããšãã®å¯Ÿå¿æ¹éãªã©ãäžèšã®ããã«èšå®ããŠããŸãã ä¿¡é Œæ§ã¬ãã«ã®èŠä»¶ãšä¿èšŒå
容 衚ã®äžçªå³ã«ã¢ãŒã«ã€ãã®æ¹éãæžããŠããã䜿ãããªããªã£ãããŒã¿ã¢ãŠããããã¯ã¢ãŒã«ã€ããããŠãããããªéçšã«ããŠããŸãã ããã§èšãã¢ãŒã«ã€ããšã¯ããŒã¿ã¢ãŠããããã®å³æåé€ã§ã¯ãªãããŽãç®±ã«å
¥ããããŠããããããã¯ã¯ãšãªã®ã¹ã±ãžã¥ãŒã«å®è¡ã忢ãããŠããç¶æ
ãæããŠããŠããŸã å©çšãããŠããããŒã¿ã¢ãŠããããã誀ã£ãŠã¢ãŒã«ã€ããããå Žåã«ã埩å
å¯èœãªç¶æ
ã«ãªã£ãŠããŸãã åããŒã¿ã¢ãŠãããããã©ã®ä¿¡é Œæ§ã¬ãã«ã«èšå®ãããŠãããã¯ãdbt exposureãçšããŠäžèšã®ãããªyamlãã¡ã€ã«ã§ç®¡çããŠããŸãã version : 2 exposures : - name : {{ ConnectedSheetã¿ã€ãã« }} _{{ConnectedSheetId}} label : {{ ConnectedSheetId }} type : dashboard config : tags : - PEOPLE_WITHIN_DOMAIN_WITH_LINK - spreadsheet meta : creator : test@example.com owner : test@example archived : false archived_at : null reliability_level : Provisional created_at : '2025-11-20T17:00:00+09:00' deprecated_at : '2026-02-20T17:00:00+09:00' visibility : PEOPLE_WITHIN_DOMAIN_WITH_LINK output_type : spreadsheet url : https://docs.google.com/spreadsheets/d/{{ConnectedSheetId}} owner : name : test@example.com email : test@example.com depends_on : - ref('hogehoge_model') - ref('foo_bar_model') - ref('chomechome_model') äŸãã°ãäžèšã®yamlãã¡ã€ã«ã«ã¯ reliability_level: Provisional ãšæžãããŠããããšããããã®äŸã«æžãããŠããããŒã¿ã¢ãŠããããã¯ä¿¡é Œæ§ã¬ãã«Provisionalã®æ°Žæºã§ä¿å®éçšãããŠããããšãããããŸãã åãã¯ä¿¡é Œæ§ã¬ãã«ãããã©ã«ãã®Provisionalã®ãã®ãšããŠèªåã§exposureãç»é²ãããããããããŒã¿ã¢ãŠããããã®ãªãŒããŒïŒå©çšè
ïŒãå©çšç®çã«å¿ããŠé©å®ä¿¡é Œæ§ã¬ãã«ã倿ŽããŸãã dbt exposureãçšããããŒã¿ã¢ãŠããããã®èªåç»é²ãšç®¡çã«ã€ããŠã¯ã以å ãã¡ãã®èšäº ã§ã玹ä»ããŠããŸãã®ã§ãã²ã芧ãã ããïŒ ä¿¡é Œæ§ã¬ãã«ãéçšããããšã§æåŸ
ããã广 ãã®ãããªä¿¡é Œæ§ã¬ãã«ãéçšããããšã§ãDREã«ãããŒã¿ã¢ãŠããããã®ãŠãŒã¶ãŒã«ãå¬ãã广ããããšèããŠããŸãã èšå€§ãªæ°ã®ããŒã¿ã¢ãŠããããã®äžããDREãä¿å®ããã¹ã察象ãæç¢ºã«ãªããé害çºçæã®ãŠãŒã¶ãŒãžã®é£çµ¡ãªã©ãã¹ã ãŒãºã«è¡ããããã«ãªã ããŒã¿ã¢ãŠããããã®ãŠãŒã¶ãŒã¯ãèªåãå©çšããŠããããŒã¿ã¢ãŠããããã«é害ãç Žå£ç倿Žã®åœ±é¿ããããããéç¥ã«ãã£ãŠææ¡ã§ããããã«ãªã ãã䜿ããªãããŒã¿ã¢ãŠãããããé©åã«ã¢ãŒã«ã€ãããããšã§ãã¡ã³ããã³ã¹ãããŠããªãå€ãããŒã¿ã¢ãŠããããããŠãŒã¶ãŒã誀ã£ãŠäœ¿ã£ãŠããŸãããšãé¿ãããã ä¿¡é Œæ§ã¬ãã«éçšã®çŸç¶ãšä»åŸ ãã®ä¿¡é Œæ§ã¬ãã«ã®ä»çµã¿ã¯ããŸã äŒç€Ÿå
šäœã«å±éãããã®ã§ã¯ãªããäžéšã®ã¡ã³ããŒãšã詊ãéçšäžã®ãã®ã§ãã ã詊ãéçšãéããŠéçšã®æ¹åãä¿®æ£ãè¡ããªãããå°æ¥çã«äŒç€Ÿå
šäœã§ä¿¡é Œæ§ã¬ãã«ãéçšã§ããããã«ããŠããããšãç®æããŠããŸãã ãŸããé害æãç Žå£çãªå€æŽãããå Žåã®éç¥ã¯çŸç¶æäœæ¥ã§è¡ãªã£ãŠããããä¿¡é Œæ§ã¬ãã«å€æŽæã«æ±ããããèŠä»¶ãæºããããã®äœæ¥ã倧å€ã ã£ãããšããŸã ãŸã ä¿¡é Œæ§ã¬ãã«ã®éçšã³ã¹ããé«ãç¶æ
ãªã®ã§ãèªååã§ãããšããã¯èªååããŠéçšå·¥æ°ãäžããŠããããšã§ãæç¶çã«éçšã§ããä»çµã¿ãäœã£ãŠãããããšèããŠããŸãã æåŸã« 12æ17æ¥(æ°Ž)ã«ã第2åããŒã¿åæçŸå Žã®ãªã¢ã«ãªç¥æµãšå·¥å€«ããšãããªãã©ã€ã³ã€ãã³ãã«ç»å£ãããŠããã ããŸãã æ¬èšäºã§ãã玹ä»ããä¿¡é Œæ§ã¬ãã«ã®éçšã®è©±ãããããšæã£ãŠããŸãã®ã§ããèå³ãããæ¹ã¯ãã²ãåå ãã ããïŒ connpass.com
ã¯ããã« ã¿ã€ããŒã®ç¥å±±ã§ãã 11/14-15 ã§ çŠå²¡å·¥æ¥å€§åŠ ã§éå¬ããã YAPC::Fukuoka 2025  ã«åå ããŠããŸããã ç§ã¯åœæ¥ã®ãã©ã³ãã£ã¢ã¹ã¿ãããšããŠåå ãã€ã€ãããã€ãã®ã»ãã·ã§ã³ãæèŠããã®ã§ãå°è±¡ã«æ®ã£ããã®ãã¬ããŒããšãã圢ã§ãŸãšããŸãã ãªããã¿ã€ããŒã«ã¯äžçäžã§éå¬ãããŠããå
šãŠã®æè¡ã«ã³ãã¡ã¬ã³ã¹ã«ç¡å¶éã§åå ã§ããã Kaigi Pass ããšããå¶åºŠããããç§ã¯ããã䜿ã£ãŠåå ããŸããã詳ããã¯ãªã³ã¯ãã芧ãã ããã ã¹ã¿ããæ¥ã®æ§å ã¹ã¿ããããã«ã㣠èªå°ããŠããèªå ã¯ããŒãžã³ã°ïŒãã¹ã¿ããã®ã¿ãªããããããšãïŒ #yapcjapan_memorial pic.twitter.com/ijwyjMN6Nc — åäº æµ(SAKAI Kei) (@sakaik) 2025幎11æ14æ¥ ã¯ã£ïŒ941ããïŒå€§å祥寺PMã§ãåœæ¥ã¹ã¿ãããããªããYAPCåéããŠãããã£ãŠèšãããŠãã®å Žã§ç³ã蟌ãã§ä»ãã£ãŠãŠïŒ ãšããæ¹ãããŠããªããããããšããæ°åãã¡ãªã¿ã«ã¹ã¿ããã®ææ³ã¯ã楜ããããã¹ã¿ããã®å°ããç¥ããŸããããšã®ããšããããã #yapcjapan pic.twitter.com/sio1TmuszK — 941 / kushii (@941) 2025幎11æ15æ¥ ä»å YAPC ã«åå ããããšæã£ãã®ã¯ã 倧å祥寺.pm ã«åå ããŠçããã YAPC ã¯ããããšèšã£ãŠãããèå³ãæã£ãããšããã£ããã§ãã ãŸãã æ ªåŒäŒç€Ÿã«ã±ãã· ã® 941 ããã«ãYAPC ã®åœæ¥ã¹ã¿ãããšããŠåå ããŠã¿ããïŒããšèšã£ãŠããã£ãã®ã§ããã®å Žã§ç³ã蟌ãã§è¡ãããšã決å®ããŸããã ã«ã³ãã¡ã¬ã³ã¹ã®ã¹ã¿ããæ¥ã倧å€ã§ãããåœæ¥å¹Ÿã€ãæ³å®å€ã®ããšãèµ·ãã€ã€ãæè»ã«å¯Ÿå¿ãããçããããããªããšæããŸãããïŒåãè²ã
ãšãæäŒããããŠããããŸããïŒä»ã§ã¯ã«ã³ãã¡ã¬ã³ã¹ã¹ã¿ãããžã®ãªã¹ãã¯ããšæè¬ã«æº¢ããŠããŸãã ãŸããåŒç€Ÿ DRE ã® chanyou ããããŸããã®ã¹ã¿ãããšããŠåå ãããŠãããå察é¢ãããšããã€ãã³ãããããŸãããè²ã
ãããŸããããåã®ã¹ã¿ããæ¥æ¥œããã£ããæ°ä»ããå€ãã£ãã§ãããåå ããŠè¯ãã£ãã§ãã ã»ãã·ã§ã³ã®å
容 ãªãã€ã³ãã©ã³ãŒãã®ã¢ãžã¥ãŒã«åã¯é£ããã®ã - ã¢ããªã±ãŒã·ã§ã³ã³ãŒããšã®æ¬è³ªçãªéãããèãã fortee.jp speakerdeck.com ã€ã³ãã©ã³ãŒãã®ã¢ãžã¥ãŒã«åã¯ãªãé£ããã®ããã€ã³ãã©ã³ãŒãã«ãããåé¡ç¹ãšã¢ããªã±ãŒã·ã§ã³ã³ãŒããšã®å¯Ÿæ¯ã亀ããã»ãã·ã§ã³ã§ããã ã€ã³ãã©ã³ãŒããšã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®æ§è³ªã¯ç°ãªããŸããã€ã³ãã©ã³ãŒãã ãšâç¶æ
ãèšè¿°âããã®ã§ãåã
ã®ç¶æ
ãã€ãŸãå®è£
ã®è©³çްãé¢å¿äºã«ãªãã ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã ãšâåŠçãèšè¿°âããã®ã§ãåŠçãäœãããããããã€ãŸãçµæãšããŠã®æ¯ãèããé¢å¿äºã«ãªãã åŸã£ãŠãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯åŠçèªäœã®ããžãã¯ãã«ãã»ã«åããŠãæœè±¡åãå¯èœã äžæ¹ãã€ã³ãã©ã³ãŒãã ãšå
éšæ§é ã®å¯èŠæ§ãå¿
èŠãªã®ã§ãç¡çã«ã«ãã»ã«åãããšãçè§£ãå°é£ã«ãªã£ãŠããŸããéå±€ã倿®µ x ã¢ãžã¥ãŒã«åãåé¡ãããã«å°é£ãªãã®ã«ãããšãã話ããããŸãããã ãããããã¢ãžã¥ãŒã«åããã«æžãäžããããè«ççåéã§ã¯ãªãæ©èœçåéãæèããŠããã£ã¬ã¯ããªã»ãã¡ã€ã«åå²ãã¢ãžã¥ãŒã«æ©èœãå©çšããããšããçµè«ã§ããã èªåã¯ã¢ããªã±ãŒã·ã§ã³ãæžãããšãã»ãšãã©ãªã®ã§ãã€ã³ãã©ã³ãŒããšã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®éãã«é¢ããŠåŒ·ãæèãããããšã¯ãããŸããã§ãããã¢ããªã±ãŒã·ã§ã³ã³ãŒããªãåœããåã«èããæœè±¡åãšããèãæ¹ããã€ã³ãã©ã³ãŒãã ãšäžççžã§ã¯ãããªããšãã話ãèããŠãæ°ãã芳ç¹ãåŸãããæ°ãããŸãã ãâç¶æ
ã®èšè¿°âãšâåŠçã®èšè¿°âã¯ã¡ã³ã¿ã«ã¢ãã«ãéãã®ã§ãåè
ã¯ãã¯ã€ãããã¯ã¹çãåŸè
ã¯ãã©ãã¯ããã¯ã¹çã«ãªãããšãã話ã ãšèªèããŸããããã¢ããªã±ãŒã·ã§ã³ãæžããŠãã身ãããããšããã¹ãã³ãŒãã¯âç¶æ
ã®èšè¿°âã®ã¡ã³ã¿ã«ã¢ãã«ãè¿ããšæããŸãã ãã¹ãã³ãŒãã¯éåºŠã«æœè±¡åããªããšãããã©ã¯ãã£ã¹ããŸãã«ããã ãªãšããã¹ãã倱æããæã«æœè±¡åãããŠãããšãæžãäžãããŠããå Žåã«æ¯ã¹ãŠåå ã®ãã¬ãŒã¹ãé£ããã§ãããã ã»ãã·ã§ã³ã¹ã©ã€ãã«ã ãœãããŠã§ã¢èšèšã®çµåãšãã©ã³ã¹ ã®æžç±ã®ç޹ä»ããããŸããããçµ±å匷床ã®èгç¹ã§ãã話ããããŠãããè峿·±ãã£ãã§ãã æ°ãã芳ç¹ãåŸãããçŽ æŽãããã»ãã·ã§ã³ã§ããã Amazon ECSãããã€ããŒã«ecspressoã®éçºãæ¯ãããæ£ããæœè±¡åãã®æ¢æ± fortee.jp speakerdeck.com æ®æ®µäœæ°ãªã䜿ã£ãŠãã ecspresso ã®æãç«ã¡ãèšèšææ³ãç¥ããã»ãã·ã§ã³ã§ããã ECS ã管çã§ãã IaC ããŒã«ãæ¯èŒããªãããèšèšã®éãã«çŠç¹ãåœãŠã https://github.com/kayac/ecspresso ã®èšèšææ³ãæããã«ããæ§æã§ããã https://github.com/kayac/ecspresso ã¯ã責任åçç¹ãæç¢ºã«ããŠâã©ãã§åããâãèšèšææ³ã«ãªã£ãŠãããECS 以å€ã® AWS ãããŒãžãããçžæã«ãããECS ã®ã¿ã«ãã©ãŒã«ã¹ãæäœèªäœã¯æœè±¡åïŒ ecspresso deploy ãªã©ïŒããæ§é ã¯æœè±¡åããªãã ã»ãã·ã§ã³å
ã§ã https://github.com/aws/copilot-cli ãšããããŒã«ã«èšåããããŠããŸãããCopilot CLI ã¯åŠçã ãã§ãªããæ§é ãŸã§æœè±¡åããŠæäŸããŠãããšã®ããšãã€ãŸããã€ã³ãã©æ§æã®å®çŸ©ã DSL ãšããããšã§ããã€ã³ãã©å®çŸ©ãç°¡åã«èšè¿°ã§ããããã«ãã DSL ã¯ãçŸå®ã®ã¢ããªã±ãŒã·ã§ã³ãå¿
èŠãšããè€éããã«ããŒããããªããDSL ãéçšãç¶ããã®ã¯éªšãæãããã§ããããç¹ã« AWS API ã®å€æŽã远å ããã£ããšãã¯ããããæœè±¡åããŠæäŸããªããšãããªãããã§ããããæœè±¡ I/F ããã®éœåºŠèããªããšãããªãããã§ããCopilot CLI 㯠ECS ã®è€æ° LB 察å¿ãããŠããããçŸåšã¯äºå®äžã¡ã³ããã³ã¹ã¢ãŒãã«ãªã£ãŠãããšã®ããšã Copilot CLI ããµããŒãããŠããªãæ©èœã¯ CloudFormation ãã³ãã¬ãŒãã§æžãäžããããªããçµå±å
·è±¡ã䜿ããããåŸãªãç¶æ³ã«ããã®çŸè±¡ã âçŸå®äžçã®ã¢ããªã±ãŒã·ã§ã³ãçžæã«ãããšæœè±¡ãç ŽããŠå
·è±¡ãæŒããŠããâ ãšè¡šçŸãããŠããŸããã ãã®ã»ãã·ã§ã³ã¯ãã ãªãã€ã³ãã©ã³ãŒãã®ã¢ãžã¥ãŒã«åãé£ããã®ã ãã®ã»ãã·ã§ã³ãšãéãããšããããããŸããã ã€ã³ãã©ã³ãŒãã¯âç¶æ
ã®èšè¿°âããããã®ã§ãå®è£
ã®è©³çްãé¢å¿äºã«ãªããšãã話ã§ãããããŸãã«ãã®å
容ããã®ãŸãŸå
·äœäŸãšããŠèšåãããŠããããã ãªãšãCopilot CLI ã¯æ§é ãæœè±¡åããŠæäŸããŠãããããŸããå
éšçã«ã¯å€æŽå®¹ææ§ãæ
ä¿ãã¥ããç¶æ
ã ã£ãã®ãããããŸãããã âç¶æ
ãèšè¿°âããé¡ã®ã³ãŒãã¯ãå®æã«æœè±¡åããªãæ¹ãè¯ããæœè±¡åããç¯å²ã¯æ
éã«èããæ¹ãè¯ããªãšãåã®ã»ãã·ã§ã³ã®å
容ãšåãããŠ2忥œãããå
容ã§ããã ãªãThrottleã§ã¯ãªãDebounceã ã£ãã®ãïŒ 700䞊åãªã¯ãšã¹ããšæŠããµãŒããŒãµã€ãå®è£
ã®ãã¹ãŠ fortee.jp speakerdeck.com CloudBees ããã§700䞊åãªã¯ãšã¹ããæãããã« Debounce ã®ææ³ã䜿ã£ãŠãµãŒããŒãµã€ãã§åŠçãããå®è£
ã®ç޹ä»ã§ããã CloudBees ããã§ã¯ãCI/CD ãã©ãããã©ãŒã ãæäŸããŠããããã¹ãçµæãéã㊠AI ã䜿ã£ãŠããŸããŸãªåŠçïŒä»¥äžãClose åŠçïŒãããŠãããšã®ããšã§ãããã®éã«700䞊åã®åæ£ãã¹ãå®è¡çµæã倧éã«éãããŠããã®ã§ãClose åŠçãããçšåºŠãŸãšããŠå®è¡ãããããå®è¡ãçµãã£ããã©ãããå€å®ããã®ãé£ãããããæãã«ããŒã¿ãæºãŸã£ãåŸã« Close åŠçããå¿
èŠããã£ããšã®ããšããªã®ã§ãClose åŠçãæé©ãªã¿ã€ãã³ã°ã§ãŸãšããŠå®è¡ããä»çµã¿ãå¿
èŠã ã£ãã åŠçåæ°ãéåŒãã«ã¯ãnç§ã«1ååŠçã® Throttle ãšãåŸ
ã¡æéå
ã«æ¬¡ã®ã€ãã³ããçºçãããšã¿ã€ããŒããªã»ãããããåŠçã®å®è¡ãé
å»¶ãã Debounce ããããŸããDebounce ã®äŸã§èšããšãGoogle ã®å
¥åãµãžã§ã¹ãããããŸãã YAPC ãšããæåã1æåãã€å
¥åãããã³ã«ããµãžã§ã¹ãçµæãè¿ãã®ã§ã¯ãªãã1æåãã€å
¥åããããšã«åŠçæéã Delay ããŠãæçµçã« C ãå
¥åãããŠæ¬¡ã®å
¥åããªããªã£ãã¿ã€ãã³ã°ã§ãµãžã§ã¹ãçµæãè¿ãããã«ãããããªææ³ã§ããä»åã¯ãã»ãŒåæã«å€§éã®ãªã¯ãšã¹ããéãããŠããããã¿ã€ãã³ã°ã«ã¯æ¯ãå¹
ãããã®ã§ã決ãŸã£ãééã® Throttle åŠçã§ã¯ãªããDebounce ãè¯ãããã ã£ããšã®ããšã åºæ¬çãªããžãã¯ãšããŠã¯ããªã¯ãšã¹ãããã£ãæç¹ã§ UUID ãçæã㊠Redis ã«æ ŒçŽããnmbç§åŸ
ã£ãŠ UUID ãååŸããŠç
§åããåãå€ãªãå®è¡ãããä»ã®ãªã¯ãšã¹ãããã£ãããUUID ãæžãæããã®ã§æåã®ãªã¯ãšã¹ã㯠UUID ç
§åæã«åŒŸãããŠäœãå®è¡ãããªããšãããã®ã§ãã Race Condition ãžã®å¯Ÿå¿å«ãè峿·±ãèãããŠããããŸãããRedis ã® SET ã³ãã³ãã«ã GET ãªãã·ã§ã³ ãªããŠãããã§ãããç¥ããªãã£ãã åè·ã§ã¯ãããã³ããšã³ãã§ãµãžã§ã¹ãæ©èœãäœã£ãéã« Debounce ã®ããžãã¯ã䜿ã£ãŠå®çŸããããšããããDebounce èªäœã®ååšã¯ç¥ã£ãŠã¯ãããã®ã®ããµãŒããŒãµã€ãã®ãªã¯ãšã¹ãè² è·è»œæžã®æèã§çè§£ããŠããã®ã§ããµãŒããŒãµã€ãã®ããžãã¯ãã®ãã®ã«é©çšãããšããèŠç¹ã¯ç®ããé±ã§ããã Agentã«è³ãé ããªãLLMã¯èªåã§ã³ãŒããæžããããã«ãªã£ãã®ãã fortee.jp speakerdeck.com æ®æ®µäœæ°ãªã䜿ã£ãŠãã AI Agent ã®æãç«ã¡ããã£ãããããã»ãã·ã§ã³ã§ããã Transformer â GPT â InstructGPT ã®æµãã§äžçºåè² ã®çæãã§ãããšããããã ReAct è«æ ã®ç»å ŽãçæããŠãã¡ã ã£ããäœããã¡ã ã£ãã®ãèããŠåçæãšããã人éã®å¶ã¿ã«è¿ãåããå®çŸãReason ãš Act ã®ã«ãŒããåããããã« ReActããããèªåŸçã«å€æãè¡åãã AI ãšãŒãžã§ã³ãã®åºç€ã«ãèšè«æããåŠã¶çæ AI ãç©èªããŠããã®ã§ãããæ©ã«èªããããªãšæããŸããã Stay Hacker ãä¹å·ã§çãŸããPerlã«åºäŒããã³ãã¥ããã£ã§è²ã€ã speakerdeck.com pyamaããã®ããŒããŒãããšãŠãè¯ãã£ãã§ããçæ AI æä»£ã«å€ãã£ãŠããã®ã¯ææ®µã§ãã£ãŠãèªåã®æã§ããããããšããç®çã¯å€ãã£ãŠãªããé²åããªãã Hack ãç¶ãããšãã話ãå°è±¡çã§ããããã課é¡ãèŠã€ãããç éœãäºäŸããåŠã¶ãããããã®èªåãã©ããããããã«ã€ããŠæ·±ãèããããããŸããã ã³ãã¥ããã£ã®è©±ãè¯ãã£ãã§ããèªåã®æã§äžçã瀟äŒãå人ãæè¡ãå°ãã ãããããããšãã人ãã¡ã®ãç±ããæãããããããã«ã¯èšèªã®å£ãã圹è·ãè·çš®ã§ããªããâHackerâ ãšããŠã®ããæ¹ããããšãå人çã«ã¯ã³ãã¥ããã£ã®äœéšããã Hack ãæ¥œããå éããããšæããŠããŸãã èªåãæ¥œãã Hack ãç¶ãããã§ããããšãŠã奮ãç«ãããããå
容ã§ããã ãŸãšã ç¬æ¥œèµã§äžæ¯ åå€äžåã®ã©ãŒã¡ã³ YAPC ååå ã§ããããæ¥œããã£ããåŠã³ãå€ãã«ã³ãã¡ã¬ã³ã¹ã§ãããå¢ãã§åå ããŸããããåå ããŠè¯ãã£ããªãšæããŸãã Perl ã1è¡ãæžããããšãªããã§ããããããªç§ã§ãåŠã³ã«ãªãã»ãã·ã§ã³ããšãŠãå€ããææçŸ©ãªæéãéãããŸããã ã³ãã¥ããã£ã®æ¹ãçããæž©ãããYAPC ã®æãç«ã¡ãªã©ãæããŠãããŸããã æ¹ããŠãçŠå²¡ãšããå Žæã¯æé«ã ãªãšæããŸãããã¢ã¯ã»ã¹æçŸ€ãé£ã¹ç©ãçŸå³ãããçŠå²¡ãšãã£ããç¬æ¥œèµãšããæ¥æ¬é
ããããŸããŠãçé
ã§ããã ããŸãããè¯ãã£ãã§ããã æ¥å¹Žã¯æ±äº¬ããã°ãµã€ãéå¬ã§ãïŒæ¥å¹ŽããŸãåå ãããã§ããã
ã¿ã€ããŒQA Enabling Gã®kishikenã§ãã ã Tokyo Test Fest 2025 ãã11æ14æ¥ã«å€§åŽãã©ã€ãã³ã¢ããŒã«ã«ãŠéå¬ãããŸããã ã¿ã€ããŒã«ã¯äžçäžã§éå¬ãããŠãããã¹ãŠã®æè¡ã«ã³ãã¡ã¬ã³ã¹ã«ç¡å¶éã§åå ã§ãããKaigi Passããšããå¶åºŠããããŸãã詳ããã¯ä»¥äžãã芧ãã ããã productpr.timee.co.jp ä»åã¯ãã®å¶åºŠã䜿ã£ãŠåå ããŸããã åå ã㊠èŽããã»ãã·ã§ã³ã®ãã¡å°è±¡ã«æ®ã£ãããã€ããããã¯ã¢ããããŠã玹ä»ããŸãã Zen of Testing Mesut Durukal æ¥æ¬ã®ãçŠ
ãã®å¿ãçŠ
ã®ãããªæ¥æ¬ã®æåããœãããŠã§ã¢å質ãšã©ã®ããã«ã€ãªããã®ãããŠãŒã¢ã¢ã亀ããŠè¬æŒãããŠããŸããã äŸãã°ãã²ãŒãQAãšããå質ã®ãã§ãã¯ãã€ã³ãã¯ç¥ç€Ÿã®ãé³¥å±
ãã§ãããæ¢çŽ¢çãã¹ãã¯èª°ã«ãä»ããæ
ããããæµªäººãã®ããã§ãããšèšã£ããã®ã§ããããã€ããæµç³ã«å³ãããªããâŠâŠïŒããšæãããã®ããããŸããããæ¥æ¬ã®æåãšå質掻åãçµã³ã€ããŠããããšãã詊ã¿ãéåžžã«é¢çœãããŠããŒã¯ãªè¬æŒã§ããã å人çã«ã¯ãã¹ããšããæŽ»åããæãçŽãã®ç¹çްãã粟緻ãã«äŸãããšãããå°è±¡ã«æ®ããŸããããã¹ãã¯çްãããªæè¡ãå¿
èŠã§ããã€ã€ãäžçš®ã®ã¢ãŒãã§ããããšããèãã¯ç§ãåæèŠã§ãã Make Testing a Team Sport: Bug Bash for Better Software Prashant Hegde ãã°ããã·ã¥ããããŒã ã¹ããŒãããšããŠæããããŒã å
šäœã§å質ãé«ããŠããææ³ã«ã€ããŠã®è¬æŒã§ããã åé ã§ãBlind men and an elephantãã®å¯è©±ãåŒçšãããç°ãªãèŠç¹ãããããã¯ããèŠãããšã®éèŠæ§ãèªãããŸãããéçºè
ã»ãã¶ã€ããŒã»ãããã¯ããªãŒããŒããã«ã¯éçºéšä»¥å€ã®æ¹ãªã©ãç°ãªã圹å²ã®äººã
ãéãŸã£ãŠãã¹ãããããšã§ãäžäººã§ã¯èŠã€ããããªãåé¡ãçºèŠã§ãããšããèãæ¹ã§ãã ãã°ããã·ã¥ãæåãããããã«ã¯æºåããŒãã£ã³ã°ãéèŠã§ããããŸãåå è
ã®ã¢ãããŒã·ã§ã³ãé«ããããã«åè
ã®è¡šåœ°ãšãã£ã工倫ã广çã ãšç޹ä»ãããŠããŸãããç¹ã«æºåã«ã€ããŠãã©ãŒã«ã¹ããŠããããã 人ãéããŠãããã¯ããè§Šãã°ãã°ããã·ã¥ã«ãªãã®ã§ã¯ãªãã圹å²åæ
ãã¿ã€ã ããã¯ã¹ã決ãããã¹ããå°éã§ãªã人ã«ã¯äºåã«ã¬ã¯ãã£ãŒããããããŠé£²ã¿ç©ãããã€ããã£ããçšæããŠããã®ãéèŠã ãšèª¬æããŠããŸããã ç§èªèº«ã¯ãã°ããã·ã¥ã«ã€ããŠäŒç»ãåå ãããŸããã£ãããšããªãã®ã§ãããéçºä»¥å€ã®éšéã®æ¹ãšã®äº€æµãå«ããŠå®æœããŠã¿ãã®ãé¢çœããã ãªãšæããŸããã Be a Better Test Friend Martijn Goossens åºèª¿è¬æŒã§ããQAãšéçºã«é¢ããä»ã®ããŒã«ãšã®é¢ä¿æ§ã«ã€ããŠããåéããšããèŠç¹ããèªãããè¬æŒã§ããã ãœãããŠã§ã¢éçºã¯QAã ãã§ãªãããããã¯ããªãŒããŒã»UXãã¶ã€ããŒã»éçºè
ã»éçšæ
åœè
ãšãã£ãå€ãããŒã«ã®äººãããŒã ãçµãã§è¡ããŸããQAãšã³ãžãã¢ã¯æã«å€ç¬ãªåœ¹å²ã«ãªããã¡ã§ãããå質ããã·ã§ã¢ãããããŒã å
šäœã§åãçµããã€ã³ãã»ãããæã€ããšã§ãããè¯ãååé¢ä¿ãç¯ãããšããèãæ¹ã«ã€ããŠç޹ä»ãããŠããŸããã äŸãã°ããããã¯ããªãŒããŒã¯ããžãã¹ãæè¡ã«ç¿»èš³ãããšãã¹ããŒãã§ãããããã¯ããªãŒããŒããã¯ãã¡ã€ã³ç¥èãã¹ããŒã¯ãã«ããŒãæããŠããããQAããã¯åãå
¥ãåºæºããŠãŒã¶ãŒã¹ããŒãªãŒã®æžãæ¹ããµããŒãããŠãããŸãããã®ããã«QAãšä»ããŒã«ãšã§å調ãããŠããäºãã«è¶³ããªããã®ãè£ã£ãŠããããšã®éèŠæ§ãã話ãããŠããŸããã ç¹ã«ãQAã¯æ¹è©å®¶ã§ã¯ãªãç·šéè
ã§ããã¹ãã ãšããææãå¿ã«æ®ããŸãããæ¹è©å®¶ã¯åé¡ãææããã ãã§ãããç·šéè
ã¯äžç·ã«ããè¯ããã®ãäœãäžããŠããååšã§ãããå質ã®ã¢ã³ããµããŒããšããŠãç°ãªã圹å²ã®äººã
ãšãåéããšããŠååããä»äºã«åãçµãã§ããããšã®å€§åããåŠã³ãŸããã ãŸãšã Tokyo Test Festã¯ä»åã2åç®ã®éå¬ã§ããç§ã¯æšå¹Žåå ã§ããªãã£ããããä»å¹Žãååå ã§ããããã®ã«ã³ãã¡ã¬ã³ã¹ã¯éœå
ã§ã®éå¬ã§ãããæ¥æ¬ã§åãæµ·å€ã®ãšã³ãžãã¢ã®æ¹ã
ãäž»å¬ããŠãããããªããåœéã«ã³ãã¡ã¬ã³ã¹ã®ãããªé°å²æ°ã§ããã»ãšãã©ã®è¬æŒãè±èªã§è¡ããã èŽãåŽãšããŠã貎éãªæ©äŒã«ãªããŸããã ããã¯ã¢ããã«ã¯å«ããŸããã§ããããå質ä¿èšŒã«ãããŠãçæAIã«é¢ããå€ãã®ãããã¯ãèªãããŠããŸããçæAIã®ç»å Žã«ãããœãããŠã§ã¢éçºã®å€§ããªå€åã¯æ¥æ¬ãæµ·å€ãå€ããããçæ©ã¿ãªããæ¥ã
åãåã£ãŠãããšããã®ã宿ã§ããŸããã çæAIã®æŽ»çšããããŒã ååãŸã§ãQAã®æªæ¥ã«ã€ããŠå€ãã®ç€ºåãäžããŠãããã«ã³ãã¡ã¬ã³ã¹ã§ãããä»ååŠãã ãå質ãã·ã§ã¢ããããšããèãæ¹ããã¿ã€ããŒã®ããŒã ã§ãå®è·µããŠãããããšæããŸãã
ããã«ã¡ã¯ãã¿ã€ããŒã§ããã¯ãšã³ãã®ããã¯ãªãŒããããŠããæ°è°· ( @euglena1215 ) ã§ãã ã¿ã€ããŒã®ããã¯ãšã³ãã§ã¯ãFeature Flagã®ç®¡çã« Flipper ã䜿çšããŠããããã®ããŒã¿ã¹ãã¢ãšããŠRedisãå©çšããŠããŸããæ¬èšäºã§ã¯ãFlipperã®å€ãã€ã³ã¡ã¢ãªãã£ãã·ã¥ããæ©æ§ãå°å
¥ããããšã§ãRedisãžã®ã¢ã¯ã»ã¹ã90%åæžããæ¯æçºçããŠããçªçºçãªã¹ãã€ã¯ãè§£æ¶ããäºäŸã玹ä»ããŸãã æ¬èšäºããFeature Flagã·ã¹ãã ã®è² è·ãããã©ãŒãã³ã¹ã«èª²é¡ãæ±ããŠããããŒã ã®åèã«ãªãã°å¹žãã§ãã Redisã§çªçºçãªspikeãšãšã©ãŒãçºçããŠãã ã¿ã€ããŒã®ã¢ããªã¹Railsãªããžããªã§ã¯ãFeature FlagãæŽ»çšããŠæ°æ©èœã®æ®µéçãªãªãªãŒã¹ãA/Bãã¹ãã宿œããŠããŸããããããéçšãç¶ããäžã§ãããã€ãã®åé¡ãé¡åšåããŠããŸããã æ¯æ0åå°ã«çºçããçªçºçãªspike Datadogã§Redisã®ã¡ããªã¯ã¹ãç£èŠããŠãããšãããæ¯æ0åå°ã«çªçºçãªspikeãçºçããŠããããšã確èªãããŸããããã®spikeã§ã¯ã平垞æã®çŽ5åãã®ã¢ã¯ã»ã¹ãéäžããŠããŸããã Redisã¢ã¯ã»ã¹ãæ¯æ0åå°ã«è·³ããŠãŸãã ããã¯ã©ãããæ¯æ0åã«å®è¡ãããcronã«ããéåæãžã§ãã倧éã«enqueueãããåãžã§ãã®åŠçã§Feature Flagãåç
§ãããããšã«ãã Redisãžã®N+1ã¢ã¯ã»ã¹ãçºçããŠããããã§ããã ããããFeature Flagã®å€ã¯ã»ãšãã©ã®ã±ãŒã¹ã§å€åãããæ¯åããŒã¿ã¹ãã¢ã§ããRedisã«ã¢ã¯ã»ã¹ããå¿
èŠã¯ãªãã®ã§ã¯ãªãããšèããŸãããæ°ç§ãããã®æéã§ããã°åããã»ã¹ã§Flagããã£ãã·ã¥ããŠãããŠããå®çšäžã¯åé¡ãªãã¯ãã§ãã ããã§ãããã»ã¹å
ãã£ãã·ã¥ãšRedisã®å€ãåæããŠããã䟿å©ãªä»çµã¿ãå®çŸããããšèããŸããã 解決çïŒFlipper::Adapters::Syncã®å°å
¥ Flipperã«ã¯ãremoteã®ããŒã¿ãšlocalã®ããŒã¿ãããæãã«åæããŠããã Flipper::Adapters::Sync ãååšããŸãããã®ã¢ããã¿ãŒã䜿ãããšã§ãæå®ããééïŒintervalïŒã§ã®ã¿remoteããããŒã¿ãååŸãããã以å€ã¯localã®ãã£ãã·ã¥ããå€ãèªã¿åãããšããæ¯ãèããå®çŸã§ããŸãã å®è£
ã®è©³çް å®è£
ã®äž»ãªãã€ã³ãã¯ä»¥äžã®éãã§ãïŒ 1. Sync Adapterã®å°å
¥ # config/initializers/flipper.rb require ' connection_pool ' require ' flipper/adapters/sync ' Flipper .configure do |config| redis_pool = ConnectionPool .new( size : 5 , timeout : 5 ) do Redis .new( url : REDIS_URL ) end remote_adapter = Flipper :: Adapters :: Redis .new(redis_pool) local_adapter = Flipper :: Adapters :: Memory .new sync_adapter = Flipper :: Adapters :: Sync .new(local_adapter, remote_adapter, interval : 10 ) config.adapter do sync_adapter end end Sync Adapterã¯ãlocalã®Memory adapterãšremoteã®Redis adapterãçµã¿åãããŠäœ¿çšããŸãã interval: 10 ãšæå®ããããšã§ã10ç§éã¯localã®ãã£ãã·ã¥ããå€ãèªã¿åãã10ç§çµéåŸã«å床Redisããææ°ã®å€ãååŸããŸãã 2. Adapteråæåã®æé©å éèŠãªãã€ã³ããšããŠãSync Adapterã®ã€ã³ã¹ã¿ã³ã¹ã config.adapter do ~ end ãããã¯ã® å€ã§äœæ ããŠããŸããããã«ã¯çç±ããããŸãïŒ ãããã¯å
ã«èšè¿°ãããšããªã¯ãšã¹ãæ¯ã«ã¢ããã¿ãŒãåæåãããŠããŸã å€ã§äœæããããšã§ãããã»ã¹å
ã§åäžã®ã€ã³ã¹ã¿ã³ã¹ãå
±æã§ãã çµæãšããŠãããã»ã¹å
ã§åãããŒã«ã«ãã£ãã·ã¥ã䜿ããã 3. Redis Connection Poolã®å°å
¥ gem ' connection_pool ' ãããŸã§ã¯æ¯ãªã¯ãšã¹ãã§Redisæ¥ç¶ã確ç«ããŠããŸããããSync Adapterãå°å
¥ããããšã§æ¥ç¶ãé·æéä¿æãããããã«ãªããŸãããã®ãããæ¥ç¶ãåããå Žåã®èé害æ§ãé«ãããããFlipper 1.3.3ããå°å
¥ããã Redis Connection Pools ã®æ©èœã䜿ã£ãŠconnection poolãæã€ããã«ããŸããã 4. ãªã¯ãšã¹ãæ¯ã®ã¡ã¢åãç¡å¹å Rails .application.configure do # Sync adapter ã® @local (Memory) ãããã»ã¹å
ãã£ãã·ã¥ãšããŠæ©èœããããã # ãªã¯ãšã¹ãããšã®ã¡ã¢åã¯äžèŠ config.flipper.memoize = false end Flipperã§ã¯ããã©ã«ãã§ãªã¯ãšã¹ãæ¯ã«åäžflagãåç
§ããéã«ã¡ã¢åããæé©åãæå¹ã«ãªã£ãŠããŸããããããç¡å¹ã«ããŸãããã¡ã¢åãæå¹ã«ãªã£ãŠãããšããªã¯ãšã¹ãæ¯ã«Sync adapterã®localããŒã¿ãæ®çºããŠããŸãåé¡ããã£ãããã§ããSync adapterãå°å
¥ãããããšã§ãããããã¡ã¢åã¯äžèŠã«ãªããŸããã å°å
¥ååŸã®å¹æ æ€èšŒç°å¢ã§ã®æ€èšŒçµæ æ¬çªå°å
¥åã«ãdemoç°å¢ã§åäœç¢ºèªãè¡ããŸããã瀟å
管çç»é¢ã«å
šãŠã®feature flagã«å¯Ÿã㊠Flipper.enabled? ãåŒã³åºããã¹ããã¿ã³ãçšæããå°å
¥ååŸã®æåãæ¯èŒããŸããã BeforeïŒå
šãªã¯ãšã¹ãã§Flagæ°åã®Redisã¢ã¯ã»ã¹ å
šãŠã®ãªã¯ãšã¹ãã§Flagæ°åïŒ21åïŒã®Redisã¢ã¯ã»ã¹ãçºçããŠãã AfterïŒ10ç§äžã®æåã®ãªã¯ãšã¹ãã®ã¿Redisã¢ã¯ã»ã¹ åäžããã»ã¹ã«ããã10ç§äžã®æåã®ãªã¯ãšã¹ããé€ããRedisã¢ã¯ã»ã¹ãçºçããªããªã£ã å
ã®å®è£
ã§ã¯ãå
šãŠã®ãªã¯ãšã¹ãã§Flagæ°åïŒ21åïŒã®Redisã¢ã¯ã»ã¹ãçºçããŠããŸãããã倿ŽåŸã¯åäžããã»ã¹ã«ããã10ç§äžã®æåã®ãªã¯ãšã¹ããé€ããRedisã¢ã¯ã»ã¹ãçºçããªããªã£ãããšã確èªããŸããã æ¬çªç°å¢ã§ã®å¹æ æ¬çªç°å¢ã«å°å
¥ããçµæã以äžã®å¹æã確èªã§ããŸããïŒ å¹³åžžæã®Redisã¢ã¯ã»ã¹ã90%åæž ãªã¯ãšã¹ãæ¯ã®Redisã¢ã¯ã»ã¹ãã»ãŒäžèŠã«ãªãã倧å¹
ãªã¢ã¯ã»ã¹åæžãå®çŸ æ¯æ0åå°ã®spikeãå®å
šã«è§£æ¶ 平垞æã®5åã®ã¢ã¯ã»ã¹ãçºçããŠããspikeãæ¶æ»
Redisã®è² è·ãå®å®ããã€ã³ã¹ã¿ã³ã¹ãµã€ãºããŠã³ã®å¯èœæ§ãèŠããŠãã ãŸãšã Flipperã« Flipper::Adapters::Sync ãå°å
¥ããããšã§ãFeature Flagã·ã¹ãã ã®Redisè² è·ã90%åæžããæ¯æçºçããŠããçªçºçãªspikeãè§£æ¶ããããšãã§ããŸããã ãã®æ¹åã«ããã以äžã®ã¡ãªãããåŸãããŸããïŒ å®å®æ§ã®åäž ïŒtimeout errorã®æžå°ãspikeè§£æ¶ã«ããå®å®ããåäœ ããã©ãŒãã³ã¹ã®åäž ïŒRedis I/Oã®åæžã«ããå¿çéåºŠã®æ¹å ã³ã¹ãåæžã®å¯èœæ§ ïŒRedisè² è·ã®åæžã«ããã€ã³ã¹ã¿ã³ã¹ãµã€ãºããŠã³ã®æ€èš Feature Flagã®å€ãé »ç¹ã«å€æŽãããªãç¹æ§ã掻ãããé©åã«ãã£ãã·ã¥ããããšã§ã倧ããªæ¹å广ãåŸãããšãã§ããŸãããåæ§ã®èª²é¡ãæ±ããŠããããŒã ã®åèã«ãªãã°å¹žãã§ãã åèè³æ Flipper GitHub Repository Flipper 1.3.3 Release Notes - Redis Connection Pools Flipper::Adapters::Sync Documentation
ããã«ã¡ã¯ãã¿ã€ããŒã§Androidãšã³ãžãã¢ãããŠãã ãµãªã¡ïŒ@_hunachiïŒ ã§ã ð ã¿ã€ããŒã® Kaigi Pass ãšããå¶åºŠã䜿ãã Kotlin Fest 2025 ã«åå ããŠããã®ã§ããã®ææ³ãªã©ã玹ä»ããŸãïŒ ã¡ãªã¿ã«ãåŒç€Ÿãã㯠@tick_taku ãšç§ã®2åã§åå ããŸããã èããã»ãã·ã§ã³çŽ¹ä» @tick_taku ãš ç§ããããããç¹ã«å°è±¡ã«æ®ã£ãã»ãã·ã§ã³ãã玹ä»ããŸãïŒ tick_taku ãåãããµã³ãã«ã§ã¹ã ãŒãºãªã³ãã¥ãã±ãŒã·ã§ã³ã ãCMPæä»£ã®KotlinPlaygroundæŽ»çšæåç·ã 2025.kotlinfest.dev KotlinPlayground ã®ãã©ãããã©ãŒã ã« Compose Multiplatform ãéžæã§ãããããWeb äžã§ãµã¯ããšç»é¢ãæ§ç¯ã㊠URL ãå
±æããããšã§åããã®ããŒã¹ã«ããŒã ã³ãã¥ãã±ãŒã·ã§ã³ã掻æ§åãããããšããã»ãã·ã§ã³ã§ãã KotlinPlayground 㯠Kotlin å匷ãå§ãã®ããã«ããã®ã³ãŒãã¯ã©ãããåããããã®ãïŒãã確èªããããã«å©çšããããšã¯ãããŸãããããŸãã UI ãå
±æããããšãã§ããããã«ãªã£ãŠãããšã¯...ææ¥ãã䜿ã£ãŠã¿ãã tips ãªå
容ã§ããïŒ èªå㯠Android ã¢ããªãšã³ãžãã¢ãªã®ã§ãã£ãã Android åãã® UI ãæ§ç¯ããŠå
±æããããªãšæããŸãããã§ããå®éè§Šã£ãŠã¿ããš activity package 㯠import ã§ãããã«ãªãã£ãã®ã§ãåºæ¬ã¯ Web åãã§ Android ã¢ããªçã«ã¯ã³ã³ããŒãã³ãåäœã®æåã®ç¢ºèªãªã©ã«å©çšã§ããã®ããªãšæããŸããã ãŸãWebäžã®ç°å¢ãªã®ã§ãããã¯ãã³ãŒãããã®ãŸãŸèŒããã®ã¯ãããŠãããæ¹ãç¡é£ãããããŸããã ãã¡ãã®ã»ãã·ã§ã³ã§ Firebase Studio ãªãååšãåããŠèãããŸãããAI ã«ãã vibe coding ãããŒã¹ãšããããŒã³ãŒãéçºåãã®ãã©ãããã©ãŒã ã§ããããã UI å
±æã«å©çšããã ãã ãšãªãŒããŒã¹ããã¯æ°å³ããã§ãããããã¹ãããã¢ãã¯ãäœãããŠã³ãã¥ãã±ãŒã·ã§ã³ãå³ããšããç®çã§ããã°æçšããã§ããã ãã«Kotlinã§äœãïŒMCPãµãŒããŒãAIãšãŒãžã§ã³ããUIãŸã§äžæ°é貫ããAIãšãŒãžã§ã³ãã·ã¹ãã 2025.kotlinfest.dev ããšããš Kotlin ã§ MCP ãµãŒããŒäœããªãããªããšæã£ãŠãããšããã« Koog ã«ãã AI ãšãŒãžã§ã³ãäœæãŸã§ã玹ä»ãããŠããŠããã«ã¹ã¿ã㯠Kotlin ã®å¯èœæ§ãèŠããŠããã ãããšãŠãã¯ã¯ã¯ã¯ããŸããããã¯ã Kotlin ã¯çŽ æŽãããèšèªïŒïŒ ãã£ããã®ãã§ãã¯ãã€ã³ãã«ãããããã£ããã€ã³ããªã©ãçµéšè
ã®å°ãªããã¬ãŒã ã¯ãŒã¯ã®å®äœéšã«åºã¥ããã¬ããžã®å
±æã¯ãšãŠã貎éã§ãããããã§ãã å
¬åŒ SDK ã Streamable HTTP ããµããŒãããŠããªããšããã®ã¯ MCP ãµãŒããŒãäœæããäžã§ããã¯ã«ãªãããã§ããã ãã®ã»ãã·ã§ã³ãèããåŸã«äžèšã® KotlinPlayground ã®ã»ãã·ã§ã³ãèããŠããŠæã£ãã®ã§ãããLLM ãå©çšããŠä»æ§æžãèŠç¹ãã KotlinPlayground 䜿ã£ãŠã¢ãã¯ãäœãããŠççž®ãªã³ã¯çºè¡ãããšãŒãžã§ã³ãäœããªãããªãð€ ã¢ã€ãã¢ã話ããŠãŸãšããŠããã ãã§åäœãèŠãããç°¡åãªã¢ãã¯ãã§ãããããããã¯ãã®ã³ãã¥ãã±ãŒã·ã§ã³ãåæ»ã«ã§ããã®ã§ã¯ãšæåŸ
å€ãé«ãŸããŸããã ãšã¯èšãã Firebase Studio ãæ³åããŠããéãã§ããã°ãçšéã被ããããªã®ã§æ
å ±ãéããŠããããã§ãã å
éšå®è£
ããçè§£ããCoroutines ㌠Continuationã»Structured Concurrencyã»Dispatcher 2025.kotlinfest.dev æ®æ®µäœæ°ãªãå©çšããŠãã Coroutines ã®è©³çްãªå
éšåŠçãã³ãŒããšå³è§£ãçšããŠè©³çްã«è§£èª¬ããŠããŠãšãŠãå匷ã«ãªããŸããã å®éãã®èŸºãã®å
éšä»æ§ãææ¡ããŠããªããŠããªããšãªãã§äœ¿ããŠããŸãéåžžã«äŸ¿å©ã§ããããã£ããŒã«ãçè§£ããããšã§ããæ·±ãã»å¹ççã«äœ¿ãããªããããã«ãªãã®ã ãšå®æããŸããã å°ãããŒãã«ã®é«ããã³ã³ãã€ã«ãã©ã€ãã©ãªã®ãœãŒã¹ã³ãŒããèªãã§ã¿ãããšã«ææŠããããšæããçŽ æŽãããã»ãã·ã§ã³ã ãšæããŸãã äœè«ã§ãã解説èšäºãäºåã«å
¬éãããŠãããé²è¡ã«åãããŠèªã¿é²ããªããã»ãã·ã§ã³ã«éäžã§ããããšããšãŠãè¯ãäœéšã§ãããããããšãããããŸãïŒ ãµãªã¡ Kotlinãæ¯ããæè¡ïŒèšèªèšèšãšçžã®äžã®åæã¡ 2025.kotlinfest.dev ãã®ã»ãã·ã§ã³ã§ã¯ãKotlinã®èšèªèšèšã®è£åŽãšããã®äžå¹Žã§Kotlinãã©ã®ããã«é²åããŠããã®ãã«ã€ããŠæ·±ãç¥ãããšãã§ããŸããã èšèªèšèšã«é¢ããŠã¯ Companion object ã®è©±ãèãããšãã§ããŸããã Kotlinã® Companion object ã¯ããã®äœ¿çšã®95%ãJavaã§ãã static ã宣èšããå ŽãšããŠäœ¿ãããŠããŸããããããå®éã«ã¯ Class.Companion ãšãã å ãçæããŠããæè»ãªäœ¿ãæ¹ãã§ããç¹ããã¯ã©ã¹ã«äžã€ããäœããªãç¹ãªã©ã®åé¡ãããããã§ãã ãã®åé¡ã解決ãããããéå»ã«ã¯ namespace ã static ãªã©ããŸããŸãªããããŒã¶ã«ãæ€èšãããŸãããã Companion object ãšã®äœµçšæã®èª²é¡ãªã©ãããå
šãŠãªãžã§ã¯ããããŠããŸã£ãããã§ããããããçŸåšã¯ companion æ§æã䜿ããããã«ããããšã§ããããã®èª²é¡ã解決ããããšããŠãããšãã話ã§ããã ãŸãããã®è©±ã®äžã§ãäžåºŠãªãªãŒã¹ããŠããŸããšãããã¯æ¬ãåç»ããããäžã®èšäºãšããŠæ«é·ãæ®ã£ãŠããŸããã ãããç°¡åã«Deprecatedã«ã¯ã§ããªããæ°ããæ©èœãäœãéã«ã¯ããšãŠãæ
éã«ãªããããåŸãªããããšãã£ããã£ãŠããã®ãç¹ã«å°è±¡ã«æ®ããŸããã ä»ã«ãã»ãã·ã§ã³å
ã§ã¯ãKotlin 2.2ã2.3ããããŠAndroid Studioã®ã¢ããããŒãã«ã€ããŠãè§ŠããããŠãããKotlinã¯æŽã«å¹Žã
䟿å©ã«ãªã£ãŠãããªãšæ¹ããŠå®æããŸããã ãŸãã Kotlinã®ããŒãããã ã幎ã«2åã»ã©æŽæ°ãããŠãããšã®ããšã ã£ããããKotlin Fest ã®æ°æ¥åŸã«Androidã®ã¡ã³ããŒå
šå¡ã§ãææ°ã®ããŒããããã確èªããæéãäœããŸãããKotlin Notebookã®éçºãé²ãã§ããããšãªã©ãç¥ããŠããšãŠãææçŸ©ãªæéãšãªããŸãããå幎åŸã«ãããŸãã¡ã³ããŒå
šå¡ã§èªãããšæããŸãïŒ ãããŠããã€ãã£ãããã - ãã«ããã©ãããã©ãŒã ãšæ€éæŠç¥ 2025.kotlinfest.dev KMPïŒKotlin MultiplatformïŒãããŸãè§Šã£ãããšããªãèªåãšããŠã¯ããKMPãå°å
¥ããå Žåã®æ¬ ç¹ãããäžãäžãæ€éããå Žåã«ã©ããã¹ããïŒããšããç¹ãæ°ã«ãªãããã®ã»ãã·ã§ã³ãèãã«è¡ããŸããã KMPãã»ãŒè§Šã£ãããšããªãã®ã§ããããã®ã»ãã·ã§ã³ã¯äž»ã«iOSã¢ããªéçºãè¡ãéã®å
容ã ã£ããããFlutterãAndroidãè§Šã£ãŠããèªåã«ãšã£ãŠãæ¯èŒçåãããããå
容ã§ããã KMP iOSã®StableãªãªãŒã¹ããããKMPã§ã®iOSã¢ããªéçºã¯ã©ãã©ããããããªã£ãŠããããšããKMPã§ã¯å®çŸãé£ããããšãKotlin/Nativeã§é 匵ãã°ã»ãšãã©å®çŸã§ãããšç¥ããKMPå°å
¥ã®ããŒãã«ã¯ããªãäžãã£ãŠãããã ãªãšæããŸããã ãæ€éæŠç¥ãã«é¢ããŠããå®è£
æã«ã¬ã€ã€ãŒãåãããšãã£ãå
·äœçãªTipsã玹ä»ãããŠããããšãŠãå匷ã«ãªããŸããã Rewind & Replay: Kotlin 2.2 ãå€ããCoroutine ãããã°æåç· 2025.kotlinfest.dev æè¿ã¯Coroutinesã®æ·±ããããã°ãããæ©äŒãæžã£ãŠããŸãããããã®ã»ãã·ã§ã³ã§Coroutinesã®ãããã°ããããªã«ãé²åããŠããããšãç¥ãããšãã§ããŸããã ãã ãæ°ãããããã°æ©èœãAndroid Studioã§ã¯ãŸã 䜿ããªããããªã®ã§ãæ©ãAndroid Studioã§ã察å¿ããŠã»ãããªãšæããŸããð¢ äžç·ã«ç޹ä»ãããŠãã stacktrace-decoroutinator ãšããã©ã€ãã©ãª ã¯ãAndroid Studioã§ã䜿çšå¯èœãšã®ããšã ã£ãã®ã§ããããšããæã«é ŒãããŠãããããšæããŸãïŒ Koogã§ã¯ãããAIãšãŒãžã§ã³ãéçº 2025.kotlinfest.dev çŸåšã®AI Agentéçºã®ç¶æ³ãã Koog ãããã«äŸ¿å©ããç¥ãããšãã§ããŸããã ã«ã¬ã³ããŒã«äºå®ã远å ããŠããããããªAgentãäœãããšããå®äŸãèŠãŠãããã¯ç€Ÿå
ããŒã«ãå€éšãµãŒãã¹ãšã®é£æºãªã©ãè²ã
ãªçšéã§äœ¿ãããã ãšæããŸããã 现ããªå®è£
ã®ã³ããè²ã
玹ä»ãããŠãããKoogã䜿ã£ãŠã瀟å
ã»ç€Ÿå€åãããAIãšãŒãžã§ã³ãéçºã«ãã£ã¬ã³ãžããŠã¿ãããšããã¢ãããŒã·ã§ã³ãé«ãŸããŸããïŒ å
šäœãéã㊠å
šäœçãªé°å²æ°ã¯ãã»ãã·ã§ã³ãããŒã¹ããããããããè³ãã£ãŠããŠæ¥œããã£ãã§ãã ãåŒåœãPCãæã£ãŠããŠããé¢ä¿ã§è·ç©ãå€ãã£ããããã¯ããŒã¯ããã£ãã®ãæ¬åœã«å©ãããŸããïŒ æè«äŒã§ã¯ããµãŒããŒãµã€ãã§Kotlinã䜿ã£ãŠããäŒæ¥ã®æ¹ãšãã話ãã§ããããKotlin Fest ãªãã§ã¯ã®äº€æµãã§ããŠããåºæ¿ã«ãªããŸããïŒåŒç€Ÿã®ãµãŒããŒãµã€ããKotlinã«ãªãã°ããã®ã«âŠïŒå°å£°ïŒð€« Kotlin Fest ã§åŠãã ããšãåŸãããã¢ãããŒã·ã§ã³ã掻ãããŠãææ¥ããã®éçºã«ç¹ããŠãããããšæããŸãïŒ æšãã®ããããã®ãå§ãããšã®ããŒã·ã§ã«åã¶ tick_taku
ããã«ã¡ã¯ãã¿ã€ããŒã§ããŒã¿ãµã€ãšã³ãã£ã¹ããããŠããåå·ã§ãã æè¿ãçæAIã䜿ã£ããããžã§ã¯ã管çã®ä»çµã¿ã詊ããŠããã®ã§ãããæ³å以äžã«åãæ¹ãå€ãã£ãã®ã§ããã®äœéšãå
±æããããšæããŸãã TL;DR ãé²æãæŽæ°ããŠãã®äžèšã§ã5ã€ã®ç®¡çãã¡ã€ã«ãèªåæŽæ°ãããä»çµã¿ãäœã£ã ææç©äœææéãçŽ50%åæžïŒ6.5æéâ3.25æéïŒâ»äœæããŒã¹ã»ã¿ã¹ã¯ã«ããåæžçã¯ç°ãªã LLMããå€éšããŒã«ããããããŒã ã¡ã³ããŒãã«å€ããæèŠ ç§èš£ã¯ãGit管çãããMarkdownãã¡ã€ã«ã«ããã¥ã¡ã³ããéçŽããèªååã«ãŒã«ãäœæããããš ã¯ããã«ïŒãã£ãšæ¬è³ªçãªä»äºã«æéã䜿ãããã£ã ãããžã§ã¯ã管çãããŠããŠããããªãµãã«æããããšã¯ãããŸãããïŒ ãã€ãªãŒã¹ã¯ã©ã æºå - ã¿ã¹ã¯ç®¡çããŒã«ãéã - ãæšæ¥ã®ã¿ã¹ã¯ã鲿çã©ããªã£ãïŒã - å®äºã¿ã¹ã¯ãç®èŠã§ã«ãŠã³ãïŒ1, 2, 3...ïŒ - é»åã§é²æèšç®ã40/45...88.9%ãã - æåã§æŽæ° 仿¥ã®ã¿ã¹ã¯ã決ãã - ãã¿ã¹ã¯AãšBãã©ã£ã¡ãå
ã«ããã¹ãïŒã - äŸåé¢ä¿ã確èªããããšãã - è€æ°ã®ããŒã«ãåç
§ããŠå€æïŒ15åïŒ ã¿ã¹ã¯æ±ºå®ãäœæ¥éå§ - ãåæãšãªã仿§ãã©ãã ã£ãïŒã - ãåã«æ±ºããå
容ãäœã ã£ãïŒã - è€æ°ã®ããŒã«ãããã¥ã¡ã³ããæ¢çŽ¢ïŒ30åïŒ ææžãæžãå§ãã - æ§é ãèããå
容ãç·ŽãäžããïŒ4æéïŒ é±æ¬¡å ±åã®æºåïŒéææ¥ïŒ - å®äºã¿ã¹ã¯ãæäœæ¥ã§ã«ãŠã³ã - Sprintåãæ¿ãæºåïŒæªå®äºã¿ã¹ã¯ãæŽç - 次é±ã®æºåïŒ30åïŒ æ¥åžžçãªé²æç®¡çãæ
å ±åéã«æéã䜿ãããã ãã£ãšåµé çã§æ¬è³ªçãªä»äºã«æéã䜿ããã ãããèããããã«ãªããŸããã ãã£ãããšïŒGit + Markdown + LLMèªååã«ãŒã«ã§é²æç®¡çãèªåå ããã§ã以äžã®ãããªä»çµã¿ãäœããŸããã 1. ãã¹ãŠã®ããã¥ã¡ã³ããGit管çãããMarkdownãã¡ã€ã«ã«éçŽ ãããžã§ã¯ãã«é¢ããããã¥ã¡ã³ãããã¹ãŠMarkdown圢åŒã§Gitãªããžããªã«æ ŒçŽããŸããã requirements/ âââ A_çŸç¶åæ/ïŒ5ãã¡ã€ã«ïŒ â âââ p01_a_01_high_level_kpi_analysis.md â âââ ... âââ B_詳现åæ/ïŒ5ãã¡ã€ã«ïŒ âââ C_ããžãã¹èŠä»¶/ïŒ5ãã¡ã€ã«ïŒ âââ D_ããŒã¿èŠä»¶/ïŒ5ãã¡ã€ã«ïŒ âââ F_æ©èœèŠä»¶/ïŒ4ãã¡ã€ã«ïŒ âââ S_詳现èšèš/ïŒ7ãã¡ã€ã«ïŒ âââ execution_management/ âââ sprint_plans/sprint6.md âââ phase1_issues.md âââ project_epics.md âââ project_dashboard.md âââ project_roadmap.md ãªãMarkdownãªã®ãïŒ ãã¡ã€ã«ããŒã¹ãªã®ã§ãLLMãã³ã³ããã¹ããååŸãããã çžå¯Ÿãªã³ã¯ã§ããã¡ã€ã«éã®é¢é£æ§ãLLMãèªåçè§£ã§ãã Git管çã«ããã倿Žå±¥æŽã远跡ã§ãã grep ã«ããé«éå
šææ€çŽ¢ãå¯èœ 2. ãé²æãæŽæ°ããŠããšããããªã¬ãŒã¯ãŒãã§èªååŠç 次ã«ãCursorïŒAIãšãã£ã¿ïŒã®ã«ãŒã«æ©èœã䜿ã£ãŠãèªååãããŒãå®çŸ©ããŸããã ãªãLLMãªã®ãïŒ Git管çã®Markdownã«éçŽãããå
šäœã®æèãæšªæçã«çè§£ã§ãã é¢é£ããã¥ã¡ã³ããèªååéããäŸåé¢ä¿ãææ¡ããŠäžè¶³æ
å ±ã ã質åã§ãã å©ãå°ã®çæãšæŽåæ§æ€èšŒãèªååãã人ã¯LLMãšå£æã¡ããªããä»äžãã«éäžã§ãã ãé²æãæŽæ°ããŠããšå
¥åãããšã以äžã®åŠçãèªåå®è¡ãããŸãïŒ å®éã®åäœäŸ â»ä»¥äžã¯å®éã®åºåãèªã¿ãããç°¡ç¥åãããã®ã§ãã ç§: é²æãæŽæ°ã㊠Claude: ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â ð é²ææŽæ°ã®èªååŠçãéå§ ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ ââââââââââââââââââââââââââââââââââââââââââââââââââââ â ðïž ã¹ããã1: ãšããã³ã¹ç¢ºèªçµæ âââââââââââââââââââââââââââââââââââââââââââââââââââ†â A.çŸç¶åæïŒ5åå
šå®äºïŒ â ââ p01_a_01_high_level_kpi_analysis.md â
â ââ p01_a_02_stakeholder_hearing_summary.md â
â ... â â D.ããŒã¿èŠä»¶ïŒ1åïŒ â ââ p01_d_01_data_sources_list.md â
ââââââââââââââââââââââââââââââââââââââââââââââââââââ ââââââââââââââââââââââââââââââââââââââââââââââââââââ â ð ã¹ããã2: 鲿çç®åº âââââââââââââââââââââââââââââââââââââââââââââââââââ†â å®äºSub-issueæ°: 17 â 18ïŒ+1ïŒ â å
šSub-issueæ°: 54 â â 鲿ç = (18 / 54) à 100 = 33.3% â 鲿ããŒ: ââââââââââ 33.3% ââââââââââââââââââââââââââââââââââââââââââââââââââââ ââââââââââââââââââââââââââââââââââââââââââââââââââââ â ð ã¹ããã3: 5ãã¡ã€ã«åææŽæ° âââââââââââââââââââââââââââââââââââââââââââââââââââ†â 1ïžâ£ sprint6.md â
æŽæ°å®äº â 2ïžâ£ phase1_issues.md â
æŽæ°å®äº â 3ïžâ£ project_epics.md â
æŽæ°å®äº â 4ïžâ£ project_dashboard.md â
æŽæ°å®äº â 5ïžâ£ project_roadmap.md â
æŽæ°å®äº ââââââââââââââââââââââââââââââââââââââââââââââââââââ â
é²ææŽæ°åŠçãå®äºããŸãã 3. ãšããã³ã¹ããŒã¹ç®¡ç 鲿ã®å€å®ã¯ãå®ãã¡ã€ã«ãçå®ããšããå²åŠã«åºã¥ããŠããŸãã ãã®ããããããããçæãããææç©ã®ãã¡ã€ã«åã眮ãå Žæãªã©ã決ããŠããå¿
èŠããããŸãã ã¿ã¹ã¯äžèŠ§ïŒ - A-1: APIèšèšæž â ãã¡ã€ã«ããããã ã [WIP] ã¿ã°ä»ã - A-2: DBèšèšæž â ãã¡ã€ã«ãã â - A-3: ç»é¢èšèšæž â ãã¡ã€ã«ãã â - A-4: ãã¹ãèšç»æž â ãã¡ã€ã«ãã â - A-5: éçšæé æž â ãã¡ã€ã«ãªãïŒæªçæïŒ LLMã®å€å®ïŒãWIPã¯é€å€ãæªçæ1åãå®éã¯60%å®äºã â 鲿ç = å®äºæ°ïŒ3ïŒ Ã· å
šäœæ°ïŒ5ïŒ Ã 100 = 60% â ææç©ããŒã¹ã®é²æææ¡ã§é²æçãæç¢ºå æšæž¬ãèªå·±ç³åãæé€ãã宿æç©ãã¡ã€ã«ã®ååšã§äœæ¥å®äºãå€å®ããŸãã 广ïŒäœæã§ææç©äœææéã50%åæžããããŠä»äºã®è³ªãå€ãã£ã BeforeïŒåŸæ¥ã®æ¹æ³ïŒ 10:45 èŠä»¶å®çŸ©ãéå§ - ãåæãšãªã仿§ãã©ãã ã£ãïŒã - ãåã«æ±ºããå
容ãäœã ã£ãïŒã - è€æ°ã®ããŒã«ãããã¥ã¡ã³ãã確èªïŒ30åïŒ 11:15 ææãæã£ãŠããŒãããææžãæžãå§ãã - æ§é ãèããªãããå
容ãç·ŽãäžããïŒ4æéïŒ 15:15 ã¬ãã¥ãŒäŸé Œ - ã¬ãã¥ãŒææãåããŠãä¿®æ£å¯Ÿå¿ 17:15 åçš¿å®æïŒåèš6.5æéïŒ AfterïŒLLMãšã®ååïŒ 11:00 ãã¿ã¹ã¯Cã«åãçµãã§ããšæç€º 11:05 LLMãã¿ã¹ã¯ã®æ¬è³ªãçè§£ã»å¿
èŠæ
å ±ãäžèЧåïŒ5åïŒ - ããã®ã¿ã¹ã¯ã®ç®çã¯ããã§ããã - ãå¿
èŠãªæ
å ±ïŒA, B, Cãäžè¶³ïŒDãæããŠãã ããã 11:10 äžè¶³æ
å ±ãæäŸïŒ20åïŒ 11:30 LLMãå©ãå°äœæïŒ5åïŒ - é¢é£ããã¥ã¡ã³ãèªååéæžã¿ - 7å²å®æã®åçš¿ãçæ 11:35 LLMãšå£æã¡ããªãããã£ããè©°ããŠããïŒ2æé30åïŒ - ç§ïŒãUIã®è¡šç€ºé
ç®ããã§å
šéšïŒã - LLMïŒãããã®èгç¹ãæããŠããŸãã远å ããŸããããïŒã - ç§ïŒããšã©ãŒãã³ããªã³ã°ã®ãã¿ãŒã³ã¯ïŒã - LLMïŒãA, B, Cã®3ãã¿ãŒã³ãããããã¡ãªããã»ãã¡ãªããã¯...ã 14:05 æçµèª¿æŽïŒ10åïŒ 14:15 é«åè³ªãªææç©ãå®æïŒ Before: 6.5æé After: 3.25æé - 50%åæžããããå質åäž ïŒ äœæçã«å€ãã£ãããš ææš Before After å€å é²ææŽæ°äœæ¥ æåã§5åïœ30å LLMäœæ¥10åïœ30åïŒäººã®ç¢ºèª1åïœ5å 50%åæž ææç©äœæ 人10å² LLMå©ãå°5ïœ7å²ïŒäººä»äžã3ïœ5å² 50%åæž èŠç¹ã®ç¶²çŸ
æ§ äººã®çµéšã«äŸå å€è§çãªèŠç¹ã§æãæŒãæž æãæŒãæž â» äžèšã®50%åæžã¯äœæããŒã¹ã§ãããã¿ã¹ã¯ã®æ§è³ªã«ãã£ãŠåæžçã¯å€åããŸãã åæžçãé«ãã£ãã¿ã¹ã¯ïŒ60-80%åæžïŒ ïŒ äžè¬çãªç¥èã§æ§æãããã¿ã¹ã¯ ãã³ãã¬ãŒãåã»ãã¿ãŒã³åãããã LLMã®äºååŠç¿ããŒã¿ã«è±å¯ãªäºäŸããã äŸïŒæè¡èª¿æ»ãAPIèšèšæžäœæãäžè¬çãªãã¹ãèšç»æž åæžçãäœãã£ãã¿ã¹ã¯ïŒ20-40%åæžïŒ ïŒ çµç¹åºæã®ç¥èãå¿
èŠãªã¿ã¹ã¯ LLMã«äžããã³ã³ããã¹ããèšå€§ 人éã®å€æã»ç¢ºèªãå¿
èŠ äŸïŒæ¢åã·ã¹ãã ã®èšèšæå³ã®çè§£ãè€éãªããžãã¹ããžãã¯ã®èŠä»¶å®çŸ© ãã®ä»ã®å¯æ¬¡å¹æ MarkdownéçŽã«ãããçµç¹ã®èšæ¶ãã¯ãé²æç®¡çãšææç©äœæä»¥å€ã«ããæ§ã
ãªå Žé¢ã§äŸ¡å€ãçºæ®ããŸãã 1. ã³ã³ããã¹ããæž¡ããã«ãå³åº§ã«å£æã¡ãã§ãã â»ä»¥äžã¯å®éã®åºåãèªã¿ãããç°¡ç¥åãããã®ã§ãã ç§: æ©èœXã®ãŠãŒã¶ãŒèªèšŒãã©ãå®è£
ããã°ããïŒ Claude: S-1ã§æ±ºå®ããèªèšŒæ¹åŒã䜿çšããŠãã ãã ãèªèšŒæ¹åŒã - JWT + OAuth 2.0ïŒGoogleèªèšŒïŒ - ããŒã¯ã³æå¹æéïŒ24æé ãå®è£
å¶çŽã - å
±éã©ã€ãã©ãªïŒ@/lib/auth.ts ãäœ¿çš - ãšã©ãŒãã³ããªã³ã°ïŒå
±é圢åŒïŒS-7ïŒãã°ã»ãšã©ãŒèšèšïŒ ãäŸåé¢ä¿ã - ãã°ã€ã³æ©èœïŒå®äºæžã¿ - API仿§ïŒS-3ïŒAPIèšèšïŒã«èšèŒ LLMãéå»ã®æææ±ºå®ïŒS-1ã§æ±ºå®ããèªèšŒæ¹åŒïŒãèšæ¶ããŠããã®ã§ãããã«å®è£
æ¹éãããããŸãã 2. å±äººåã®æé€ ãçµç¹ã®èšæ¶ããããããšã§ãç¹å®ã¡ã³ããŒãžã®äŸåãæå°ã«ãªããŸãã â»ä»¥äžã¯å®éã®åºåãèªã¿ãããç°¡ç¥åãããã®ã§ãã ç§: æ
åœã¡ã³ããŒãçªç¶éè·ããããšã«ãªã£ãã åŒãç¶ãããæ©èœXã®å®è£
ç¶æ³ãææ¡ãããã Claude: æ©èœXïŒãŠãŒã¶ãŒèªèšŒïŒã®é²æç¶æ³ ãå®äºããIssueã â
N-1: ã»ãã¥ãªãã£åºç€èšèšïŒ100%å®äºïŒ - Cloud IAP + NextAuth.jsèšèš - æ±ºå®æ¥: 2025-09-15ïŒCTOæ¿èªæžã¿ïŒ ãæ¬¡ã®Issueã ð¡ N-2: ãŠãŒã¶ãŒèªèšŒæ©èœå®è£
ïŒé²æ 60%ïŒ â
å®äº: LoginFormåºæ¬å®è£
â³ æ®ã¿ã¹ã¯: ãšã©ãŒãã³ããªã³ã°å®è£
åŸæ¥ã§ã¯ãæ
åœè
ã®ã¢ãµã€ã³å€æŽæã«æ
å ±ã®åŒãç¶ãã«æéãããã£ãŠããŸããã LLMã«ããçµç¹ã®èšæ¶ãããã°ãå³åº§ã«ç¶æ³ãææ¡ããã¹ã ãŒãºã«äœæ¥ãåŒãç¶ããŸãã 3. æèã®æ·±ãŸãïŒLLMãšã®å£æã¡ïŒ äžæºåïŒæ
å ±åéã»æ§é åïŒãLLMã«ä»»ããããšã§ãæ¬è³ªçãªæèã«éäžã§ããŸã LLMãšå£æã¡ããããšã§å€è§çãªèŠç¹ãç²åŸã§ããŸãïŒèŠä»¶ã®æŒãããšã©ãŒãã³ããªã³ã°ãã»ãã¥ãªãã£çïŒ äžäººã§ã¯æ°ã¥ããªãã£ã芳ç¹ãLLMãè£å®ããŠãããŸã çµæïŒæå€§ã®äŸ¡å€ã¯æéåæžã§ã¯ãªãå質åäžã«ãããŸã éçšããŠããã£ãããš å§ããã®ã¯ç°¡åã ããæåŸ
éãã«åããã«ã¯ ãããªãã®è©Šè¡é¯èª€ãå¿
èŠã§ãã ããã³ããã®èª¿æŽãã«ãŒã«ã®ä¿®æ£ãäœåºŠãç¹°ãè¿ãå¿
èŠããã ããããäžåºŠäœãã°ç¶ç¶çã«äŸ¡å€ãçã¿åºãç¶ãã é·æçãªæè³å¯Ÿå¹æãåæã®æéãäžåã ãŸãšã ãã®èšäºã§ã¯ããé²æãæŽæ°ããŠãã§é²æç®¡çãèªååãããLLMãšã®å£æã¡ã§ææç©äœæãå¹çåãããä»çµã¿ã玹ä»ããŸããã å®çŸã®åºç€ãšãªã3ã€ã®ãã€ã³ã 1. Git管çã®Markdownã«éçŽ LLMããçµç¹ã®èšæ¶ããšããŠæ©èœ é¢é£ããã¥ã¡ã³ããèªååéã»æŽç é²æç®¡çãšææç©äœæã®äž¡æ¹ãæ¯ããåºç€ 2. èªååã«ãŒã«ïŒããªã¬ãŒã¯ãŒãïŒ ãé²æãæŽæ°ããŠãã§5ãã¡ã€ã«åææŽæ° Sprintæéè¶
éã®èªåæ€åº 3. ãšããã³ã¹ããŒã¹ç®¡ç 宿æç©ãã¡ã€ã«ã®ååšã§é²æãå€å® æšæž¬ãèªå·±ç³åãæé€ åŸããã广 äºåäœæ¥ã®è² è·ãåæžããå質ã¯å®å®å åµé çãªä»äºã«æéã䜿ããã¢ãŠããããã®è³ªãåäž LLMã¯ãå€éšã®ããŒã«ããããå
éšã®ããŒã ã¡ã³ããŒãã«å€å æåŸãŸã§ãèªã¿ããã ããããããšãããããŸããïŒ
MLOpsãšã³ãžãã¢ã® tomoppi ã§ãã ããŒã¿ãšã³ãžãã¢ãªã³ã°éš ããŒã¿ãµã€ãšã³ã¹ã°ã«ãŒãïŒä»¥äžãDS GïŒã«æå±ããML/LLMåºç€ã®æ§ç¯ã»æ¹åã«åãçµãã§ããŸãã æŠèŠ 2025幎4æãã¿ã€ããŒPlatform Engineerã®MoneyForestãããã ãã¿ã€ããŒã«ãããProduction Readiness Checkã®åãçµã¿ã ãšããèšäºãå
¬éããŸããããµãã·ã¹ãã ãæ°èŠãµãŒãã¹ã®ãªãªãŒã¹ã«éããŠã®è©äŸ¡åºæºãå®ãããã®ã§ãMLOpsãšããŠãåèã«ãªãéšåãéåžžã«å€ããããŸããã ãã®èšäºã«è§ŠçºãããDS GãšããŠãåçŸæ§é«ãLLM Applicationãæ§ç¯ã»éçšããããã®è©äŸ¡åºæºãå®ããããšæãããã«ãªããæ¬èšäºã§èšåãã Production Readiness Checklist for LLM Applicationã®çå®ã«è³ããŸããã èæ¯ 2024幎以éãDS Gã§ã¯è€æ°ã®LLMãæŽ»çšãããããã¯ãéçºã«åãçµãã§ããŸãããããããåè¿°ã®ãã§ãã¯ãªã¹ããDS Gãæ§ç¯ã»éçšãã LLM Applicationã«é©çšããããšãããšã以äžã®ãããªèª²é¡ã«çŽé¢ããŸããã AWSåæã§æžãããŠãããããDS Gã§å©çšããŠããGoogle Cloudçšã«èªã¿æ¿ããå¿
èŠããã LLMç¹æã®éæ±ºå®æ§ãžã®èæ
®ãå¿
èŠ ç¶ç¶çè©äŸ¡ãGenerative AI ã©ã€ããµã€ã¯ã«ã®èгç¹ãäžè¶³ããŠãã ãã§ãã¯ãªã¹ãçå®ã®æ¹é æè¡ã«äŸåããªãæ®éçãªååãšãã¿ã€ããŒDS Gã§ã®å
·äœçãªå®è£
ã«åºã¥ããã¬ã€ãã®2éšæ§æãšããŸããã çç±ãšããŠã¯ãçŸåšã¯Cloud RunãããŒã¹ãšããéçšãšãªã£ãŠããŸãããå°æ¥çã«GKEã®æ¡çšãECSãžã®ç§»è¡ãªã©ãååã«å¯èœæ§ãšããŠããããã§ãã ãŸããRAGãAgentic Workflowãtool useãªã©ã®ããé«åºŠãªLLMå©çšã¯å¯Ÿè±¡å€ãšããŸããã ããããå©çšããã¢ããªã±ãŒã·ã§ã³èšèšã»æ§ç¯ã®éã¯ãæ¬èšäºã§ç޹ä»ãããã§ãã¯ãªã¹ããåå°ãšããæ°ãã«ããå°éæ§ã®é«ããã§ãã¯ãªã¹ããããã«æºããè©äŸ¡åºæºãèšããæ³å®ã§ãã ããžãã¹ç®æšã«é¢ããŠã¯ã¹ã³ãŒãã¢ãŠãããããšãèããŸããããROIã¯å€§äºã«ããŠãããããšããDS Gã®ææãšããŠå
¥ã蟌ãããšã«ããŸããã ãã§ãã¯ãªã¹ã 0. æŠç¥çç®æšãšããžãã¹ã¢ã©ã€ã¡ã³ã LLMå°å
¥ã®ç®çãšæåŸ
ãããææãæç¢ºã«ããŸãã 0-1. ããžãã¹ç®æšã®æç¢ºå [ ] 枬å®å¯èœãªããžãã¹ãŽãŒã«ïŒã³ã¹ãåæžçã顧客æºè¶³åºŠåäžãåŠçæéççž®çïŒãèšå®ãããŠãã [ ] ãŠãŒã¹ã±ãŒã¹ã«å¯ŸããæåŸ
ããã粟床ã»å¿çé床ãå®çŸ©ãããŠãã 0-2. æåææšïŒKPIïŒã®èšå® [ ] ãŠãŒã¹ã±ãŒã¹åºæã®KPIãå®çŸ©ãããŠãã [ ] KPIã®æž¬å®æ¹æ³ãšããã·ã¥ããŒããæŽåãããŠãã 1. å®å®æ§ã»ä¿¡é Œæ§ ã·ã¹ãã ãåçŸå¯èœãã€èªååãããæ¹æ³ã§ãããã€ã»éçšã§ããããã«ããŸãã 1-1. æ§æç®¡ç [ ] ãã¹ãŠã®ã³ãŒããããŒãžã§ã³ç®¡çã·ã¹ãã ã§ç®¡çãããŠãã [ ] ããã³ããïŒã·ã¹ãã ããã³ããããã³ãã¬ãŒãçïŒãããŒãžã§ã³ç®¡çãããŠããã倿Žå±¥æŽã远跡å¯èœïŒç£æ»å¯èœïŒãªç¶æ
ã«ãªã£ãŠãã 1-2. CI/CD [ ] Lintãåäœãã¹ããã»ãã¥ãªãã£ã¹ãã£ã³ïŒéçè§£æïŒãCIãã€ãã©ã€ã³ã§èªååãããŠãã [ ] éçº(dev)ãã¹ããŒãžã³ã°(stg)ãæ¬çª(prod)ç°å¢ãžã®ãããã€ãCDãã€ãã©ã€ã³ã§èªååãããŠãã 1-3. ãªãªãŒã¹ããã»ã¹ [ ] ããã³ãããã¢ãã«ã®å€æŽããã¹ããŒãžã³ã°ç°å¢ã§å質è©äŸ¡ãå®è¡ããåŸã«æ¬çªã«ãããã€ãããããã»ã¹ã«ãªã£ãŠãã [ ] ã«ããªã¢ãªãªãŒã¹ã段éçããŒã«ã¢ãŠãã§ãäž»èŠã¡ããªã¯ã¹ïŒãšã©ãŒã¬ãŒãã粟床ãã³ã¹ãïŒãç£èŠããªãããªãªãŒã¹ãããä»çµã¿ã確ç«ããŠãã 1-4. LLMéžå®ãšç¶ç¶æ§ [ ] å©çšã¢ãã«ã®SLA/SLOãèžãŸãããã©ãŒã«ããã¯æŠç¥ãå®çŸ©ãããŠãã ãã©ã€ããªLLM APIãå©çšäžå¯æã®ãã©ãŒã«ããã¯å
ïŒå¥ã¢ãã«/éçã¬ã¹ãã³ã¹/ãšã©ãŒè¡šç€ºïŒ ãªãã©ã€ããªã·ãŒïŒåæ°ãåŸ
æ©æéãææ°ããã¯ãªãçïŒ ã¿ã€ã ã¢ãŠãèšå® [ ] ã¢ãã«éæšå¥šã»å»æ¢ã®ã¹ã±ãžã¥ãŒã«ãææ¡ããŠãããå©çšäžå¯èœã«ãªãåã«ã¢ãã«ãæŽæ°ããããã»ã¹ã確ç«ããŠãã 2. ã¹ã±ãŒã©ããªãã£ãšããã©ãŒãã³ã¹ ãã©ãã£ãã¯ã®å¢æžã«å¯Ÿå¿ããå¹ççãªãªãœãŒã¹å©çšãç®æããŸãã 2-1. ãã£ãã·ãã£ãã©ã³ãã³ã° [ ] ã³ã³ããå®è¡ç°å¢ã§ãªãŒãã¹ã±ãŒãªã³ã°ãèšå®ãããŠãã [ ] å©çšããLLM APIãããã€ããŒã®ã¬ãŒãå¶éïŒTPM: Tokens Per Minute / RPM: Requests Per MinuteïŒãææ¡ããèªã·ã¹ãã ã®ãã£ãã·ãã£ãã©ã³ã«åæ ãããŠãã ãããã€ããŒåŽã®å¶éå€ãææžå å¶éå€ãè¶
ããªãããã®æµéå¶åŸ¡ïŒã¬ãŒããªããã¿ãŒïŒã®å®è£
2-2. ãã©ãã£ãã¯ã»ããŒã¯ã³ç®¡ç [ ] ããžãã¹èŠæ±ã®å€åã«äŒŽããã©ãã£ãã¯å¢å ãšãã®åœ±é¿ã«ã€ããŠãã¹ããŒã¯ãã«ããŒãšèªèãæããŠãã [ ] ãªãªãŒã¹æç¹ã§å¿
èŠãªã¹ã«ãŒããããšãã·ã¹ãã ã®æå€§èš±å®¹ã¹ã«ãŒããããç®åºããŠãã [ ] 1ã»ãã·ã§ã³ãããã®æ¶è²»ããŒã¯ã³æ°ã®èŠç©ãããç®åºããŠãã å
¥åããŒã¯ã³æ°ïŒããã³ãã + ãŠãŒã¶ãŒå
¥å + ã³ã³ããã¹ãïŒ åºåããŒã¯ã³æ°ïŒäºæ³ãããçæããã¹ãé·ïŒ 3. èé害æ§ãšå€§æšäºå¯Ÿå¿ ã·ã¹ãã ã®äžéšãæ
éããŠãããµãŒãã¹å
šäœã忢ããªãããã«ããŸãã 3-1. é害ã·ããªãª [ ] æ³å®ãããé害ã·ããªãªãæŽãåºãããææžåãããŠãã LLM APIé害ïŒã¿ã€ã ã¢ãŠãã5xx ãšã©ãŒãã¬ãŒãå¶éè¶
éïŒ äŸåãµãŒãã¹é害ïŒããŒã¿ããŒã¹ãå€éšAPIãªã©ïŒ ãããã¯ãŒã¯é害 ãªãœãŒã¹æ¯æžïŒã¡ã¢ãªãCPUããã£ã¹ã¯ïŒ [ ] åé害ã·ããªãªã«å¯Ÿå¿ããRunbookïŒå¯Ÿå¿æé æžïŒãäœæãããŠãã [ ] é害çºçæã®åœ±é¿ïŒããžãã¹æå€±ããŠãŒã¶ãŒåœ±é¿çïŒãèŠç©ãã£ãŠãã [ ] LLM APIèµ·å ã«ããé·æéã®å埩å°é£ãªé害ãçºçããå Žåã®å¯Ÿå¿æ¹éã«ã€ããŠã¹ããŒã¯ãã«ããŒãšåæãããŠãã 3-2. LLM APIã®å¯çšæ§ [ ] ã·ã¹ãã èŠæ±ïŒå³ææ§ãUXçïŒãšLLM APIã®å¯çšæ§ãèžãŸããLLMåŠçã³ã³ããŒãã³ãã®åŒã³åºãæ¹åŒïŒåæ/éåæïŒãéžæãããã·ã¹ãã ã¢ãŒããã¯ãã£ã«åæ ãããŠããã [ ] LLM APIé害æã®ãã©ãŒã«ããã¯ã»ãªãã©ã€æŠç¥ãå®è£
ãããŠãã ãšã©ãŒçš®å¥ããšã®ãªãã©ã€å¯åŠå€å®ïŒ429ã¯ãªãã©ã€ã4xxã®å€ãã¯ãªãã©ã€äžå¯çïŒ Exponential Backoffã«ãããªãã©ã€ééã®èª¿æŽ Circuit Breakerãã¿ãŒã³ã®å°å
¥ïŒé£ç¶å€±ææã«äžæçã«ãªã¯ãšã¹ããåæ¢ïŒ [ ] LLM APIã®åé·åãæ€èšãããå¿
èŠã«å¿ããŠå®è£
ãããŠãã è€æ°ã®LLMãããã€ããŒãŸãã¯è€æ°ã®ã¢ãã«ãå©çšå¯èœã«ãã ãã§ã€ã«ãªãŒããŒã®ä»çµã¿ãå®è£
3-3. å埩æ§ãã¹ã [ ] è² è·ãã¹ãã宿œããæ³å®ãã©ãã£ãã¯äžã§ã®æåã確èªããŠãã [ ] äž»èŠãªé害ã·ããªãªãåçŸãããéããã®éå®³ãæ€ç¥ã»ã¢ã©ãŒããããããšã確èªããŠããïŒã«ãªã¹ãã¹ãïŒ 4. å®å
šæ§ LLMãçæããæå®³ãªã³ã³ãã³ããäžé©åãªæ¯ãèããé²ããŸãã 4-1. ãªã¹ã¯åé¡ãšã€ã³ã·ãã³ãå¯Ÿå¿ [ ] ãŠãŒã¹ã±ãŒã¹ã«åãããå®å
šæ§ãªã¹ã¯åé¡ãå®çŸ©ãããŠãã äŸ: 誀æ
å ±ããã€ã¢ã¹ããã©ã€ãã·ãŒäŸµå®³ãéå«ççãªã¢ããã€ã¹ãæå®³ã³ã³ãã³ãïŒãã€ãã¹ããŒããæŽåç衚çŸçïŒ [ ] å®å
šæ§ã«é¢ããã€ã³ã·ãã³ãçºçæã®å¯Ÿå¿ããã»ã¹ïŒRunbookïŒãå®çŸ©ãããŠãã ã€ã³ã·ãã³ãã®æ€ç¥æ¹æ³ ãšã¹ã«ã¬ãŒã·ã§ã³ãããŒ ç·æ¥æã®å¯Ÿå¿ïŒããã³ããã®åãæ»ããæ©èœã®äžæåæ¢çïŒ 4-2. ã¬ãŒãã¬ãŒã« [ ] å®å
šæ§ãªã¹ã¯åé¡ãã¬ãŒãã¬ãŒã«ã®ã«ãŒã«ã«åæ ãããŠãã [ ] å
¥åã¬ãŒãã¬ãŒã«ãå®è£
ãããŠããã以äžãæ€ç¥ã»ãããã¯ã§ãã ããã³ããã€ã³ãžã§ã¯ã·ã§ã³æ»æ äžé©åãªãããã¯ïŒæŽåããã€ããæ§çã³ã³ãã³ãçïŒ æ©å¯æ
å ±ïŒPIIçïŒãå«ãå
¥å [ ] åºåã¬ãŒãã¬ãŒã«ãå®è£
ãããŠãããã¢ãã«ãçæãã以äžã®ã³ã³ãã³ãããŠãŒã¶ãŒã«å±ããåã«æ€ç¥ã»ãã£ã«ã¿ãªã³ã°ã§ãã æå®³ã³ã³ãã³ãïŒãã€ãã¹ããŒããæŽåç衚çŸçïŒ æ©å¯æ
å ±ïŒPIIãAPIããŒçïŒ æãããªãã«ã·ããŒã·ã§ã³ïŒäºå®ãšç°ãªãæ
å ±ïŒ [ ] ã¬ãŒãã¬ãŒã«ã§æ€ç¥ãããéåã¯ãã¹ãŠèšé²ãããŠãã 4-3. Red Teaming [ ] 宿çãªã¬ããããŒãã³ã°ïŒæµå¯Ÿçãã¹ãïŒãèšç»ã»å®è¡ãããŠãããæ°ããªè匱æ§ãç¶ç¶çã«æ¢çŽ¢ããããã»ã¹ã確ç«ããŠãã ãžã§ã€ã«ãã¬ã€ã¯ïŒã·ã¹ãã å¶çŽã®åé¿ïŒ å·§åŠãªããã³ããã€ã³ãžã§ã¯ã·ã§ã³ è€æ°ã¿ãŒã³ã«ããã察話ã§ã®å®å
šæ§åé¿ 5. ç£èŠ ã·ã¹ãã ã®ç¶æ
ãå¯èŠåããåé¡ã«è¿
éã«å¯Ÿå¿ã§ããããã«ããŸãã 5-1. ã¢ããªã±ãŒã·ã§ã³ãã®ã³ã°ã»ãã¬ãŒã·ã³ã° [ ] ã¢ããªã±ãŒã·ã§ã³ãã°ãæ§é åãã°ïŒJSONçïŒã§åºåãããŠãã [ ] ãªã¯ãšã¹ãããšã«äžæã®IDãçæããããã°ãšãã¬ãŒã¹ã«åºåãããŠãã 忣ãã¬ãŒã·ã³ã°å¯Ÿå¿ïŒãã¬ãŒã¹IDãã¹ãã³IDã®äŒæïŒ äžæµãµãŒãã¹ããåãåã£ãIDãç¶æ¿ [ ] APMïŒApplication Performance MonitoringïŒããŒã«ã§ãšã³ãããŒãšã³ãã®ãã¬ãŒã¹ãå¯èœã«ãªã£ãŠãã 5-2. å¯èŠåãšã¢ã©ãŒã [ ] äž»èŠã¡ããªã¯ã¹ãäžèЧã§ããããã·ã¥ããŒããæŽåãããŠãã ã·ã¹ãã ã¡ããªã¯ã¹: CPUãã¡ã¢ãªããªã¯ãšã¹ãæ°ãã¬ã€ãã³ã· ããžãã¹ã¡ããªã¯ã¹: å©çšåæ°ãæåçããŠãŒã¶ãŒæºè¶³åºŠ LLMåºæã¡ããªã¯ã¹: ããŒã¯ã³æ¶è²»éãAPIå©çšæéããšã©ãŒã¬ãŒã [ ] ãµãŒãã¹ã¬ãã«ææš(SLI)ãšç®æš(SLO)ãå®çŸ©ãããŠãã äŸ: å¯çšæ§ 99.9%ãP95 ã¬ã€ãã³ã· < 3 ç§ããšã©ãŒã¬ãŒã < 1% [ ] SLOéåãã·ã¹ãã ç°åžžïŒãšã©ãŒã¬ãŒãæ¥å¢ããªãœãŒã¹éŒè¿«ïŒæã«ã¢ã©ãŒããçºå ±ããã [ ] LLMã¬ãŒãã¬ãŒã«éåæ€ç¥æ°ãæ€ç¥çãããã·ã¥ããŒãã§ç¢ºèªã§ãã [ ] LLMã¬ãŒãã¬ãŒã«ã«ããæ€ç¥ãããéåãé倧床ã«å¿ããŠã¢ã©ãŒãéç¥ããä»çµã¿ã確ç«ããŠãã 5-3. LLM Observability [ ] LLM APIãžã®ãªã¯ãšã¹ãã忣ãã¬ãŒã·ã³ã°ã·ã¹ãã ãšçµ±åãããŠãããåäžãªã¯ãšã¹ãå
ã®LLMåŒã³åºããã¹ãã³ãšããŠé¢é£ã¥ããããŠãã [ ] LLM APIãžã®ãªã¯ãšã¹ãåäœã§ä»¥äžã®æ
å ±ããã¬ãŒã¹å¯èœã«ãªã£ãŠãã å
¥åããã³ããïŒæ©å¯æ
å ±ããã¹ãã³ã°æžã¿ïŒ åºåã¬ã¹ãã³ã¹ïŒæ©å¯æ
å ±ããã¹ãã³ã°æžã¿ïŒ å©çšã¢ãã«ãšãã©ã¡ãŒã¿ïŒtemperatureãmax_tokensçïŒ ã¬ã€ãã³ã·ïŒTTFB: Time To First Byteãå
šäœã¬ã¹ãã³ã¹æéïŒ æ¶è²»ããŒã¯ã³æ°ïŒå
¥å/åºåïŒ æŠç®ã³ã¹ã [ ] ããŒã¯ã³æ¶è²»éãšã³ã¹ãã®æ¥å¢ãæ€ç¥ããã¢ã©ãŒããèšå®ãããŠãã 6. å質ä¿èšŒ(QA)ãšè©äŸ¡ããã»ã¹ LLMã®åºåå質ãšå®å®æ§ã客芳çã«æ
ä¿ããŸãã 6-1. ãªãã©ã€ã³è©äŸ¡ã»ãã [ ] LLMåºåãè©äŸ¡ããããã®ããŒã¿ã»ããïŒãŽãŒã«ãã³ã»ããïŒãå®çŸ©ã»ç®¡çãããŠãã 代衚çãªãŠãŒã¹ã±ãŒã¹ãã«ããŒããå
¥åãšæåŸ
ãããåºåã®ã㢠ããŒã¿ã»ããã®ä¿åå Žæãšç®¡çæ¹æ³ãæç¢º [ ] ãšããžã±ãŒã¹ãæ¢ç¥ã®å€±æãã¿ãŒã³ãæµå¯Ÿçå
¥åãè©äŸ¡ããããŒã¿ã»ãããå®çŸ©ã»ç®¡çãããŠãã 6-2. ãªãã©ã€ã³è©äŸ¡ææš [ ] ã¿ã¹ã¯ã®ç®çã«æ²¿ã£ãå
·äœçãªè©äŸ¡ææšãå®çŸ©ãããŠãã åé¡ã¿ã¹ã¯: AccuracyãPrecisionãRecallãF1-score çæã¿ã¹ã¯: BLEUãROUGEã人æè©äŸ¡ïŒæµæ¢æ§ãæ£ç¢ºæ§ãé¢é£æ§ïŒ å®å
šæ§: æå®³ã³ã³ãã³ãæ€åºçãPIIæŒæŽ©ç 6-3. ãªã³ã©ã€ã³è©äŸ¡ [ ] æ¬çªç°å¢ã§ã®è©äŸ¡é
ç®ã«ã€ããŠå°å
¥ã®å¿
èŠæ§ãæ€èšããé©åã«å°å
¥ããŠãã Direct Feedback: ãŠãŒã¶ãŒããã®æç€ºçãªãã£ãŒãããã¯ïŒð/ðçïŒ Functional Correctness: çæçµæãæ©èœçã«æ£ããã User Acceptance: ãŠãŒã¶ãŒãçµæãæ¡çšãããïŒã³ããŒãç·šéãå®è¡çïŒ Achieved Impact: ããžãã¹KPIãžã®åœ±é¿ Incidental Metrics: ã¬ã€ãã³ã·ããšã©ãŒã¬ãŒããã³ã¹ãç 6-4. ç¶ç¶çæ¹å [ ] è©äŸ¡ããŒã¿ã»ãããç¶ç¶çã«æŽæ°ããããã®ä»çµã¿ãæŽã£ãŠãã æ¬çªãã©ãã£ãã¯ããè©äŸ¡ããŒã¿ã»ãããžã®ãµã³ããªã³ã° 倱æã±ãŒã¹ã®è¿œå ããã»ã¹ [ ] è©äŸ¡ããŒã¿ã»ããã®ããŒãžã§ã³ç®¡çããããŠãã [ ] ããã³ããããŒãžã§ã³ã»ã¢ãã«ããŒãžã§ã³ã»è©äŸ¡ããŒã¿ã»ããããŒãžã§ã³ã»ãã©ã¡ãŒã¿ã1åäœãšããŠè©äŸ¡çµæã管çããä»çµã¿ãæŽã£ãŠãã å®éšç®¡çããŒã«ã§åããŒãžã§ã³ã®çµã¿åãããšè©äŸ¡çµæãèšé² 6-5. èªåãã¹ã [ ] LLM APIåŒã³åºããå«ãäž»èŠãªE2Eãã¹ãïŒæ£åžžç³»ïŒãèªååãããŠãã [ ] ããã³ãããã¢ãã«å€æŽæã«ãå質è©äŸ¡ã»ãããçšããååž°ãã¹ããèªååãŸãã¯åèªååãããŠãã [ ] è² è·ãã¹ããèªååãŸãã¯åèªååãããŠããããªãªãŒã¹åã«è² è·ãã¹ããè¡ãåºæºãããŒã å
ã§åæãããŠãã 7. ã»ãã¥ãªãã£ãšã³ã³ãã©ã€ã¢ã³ã¹ äžæ£ã¢ã¯ã»ã¹ãããŒã¿æŒæŽ©ãæå³ããªãã¢ãã«ã®æ¯ãèããé²ããŸãã 7-1. ããŒã¿ä¿è· [ ] LLMãžã®å
¥åããŒã¿ã®ãã¡ãPIIçã®ã»ã³ã·ãã£ãæ
å ±ãåé¡ããããã¹ãã³ã°å¯Ÿè±¡ãç¹å®ãããŠãã åé¡åºæºïŒäŸ: PIIãæ©å¯æ
å ±ãå
¬éæ
å ±ïŒãå®çŸ©ãããŠãã ãã¹ãã³ã°å¯Ÿè±¡ã®ããŒã¿çš®å¥ïŒäŸ: æ°åãã¡ãŒã«ã¢ãã¬ã¹ãé»è©±çªå·ãäœæçïŒããªã¹ãåãããŠãã [ ] 転éäžããã³ä¿åããŒã¿ãæå·åãããŠãã 転éäž: TLS/HTTPS ä¿åæ: ãã£ã¹ã¯æå·åãããŒã¿ããŒã¹æå·å 7-2. ããã³ããã€ã³ãžã§ã¯ã·ã§ã³å¯Ÿç [ ] ããã³ããã€ã³ãžã§ã¯ã·ã§ã³å¯ŸçãšããŠãå€å±€é²åŸ¡ã®ä»çµã¿ãå®è£
ãããŠãã å
¥åæ€èšŒã»ãµãã¿ã€ãŒãŒã·ã§ã³ ããã³ãããã³ãã¬ãŒãã®äœ¿çšïŒãŠãŒã¶ãŒå
¥åãçŽæ¥é£çµããªãïŒ åºåã®æ€èšŒã»ããŒã¹ [ ] ãŠãŒã¶ãŒå
¥åãšã·ã¹ãã æç€ºãæç¢ºã«åé¢ãããŠãã ã·ã¹ãã ããã³ãããšãŠãŒã¶ãŒå
¥åã®åœ¹å²åé¢ïŒsystem role / user roleïŒ 7-3. ã¢ã¯ã»ã¹å¶åŸ¡ [ ] LLM APIã®èªèšŒã«ãé·æçãªAPIããŒããµãŒãã¹ã¢ã«ãŠã³ãããŒã䜿çšãããäžæã¯ã¬ãã³ã·ã£ã«ã«ããèªèšŒæ¹åŒãå©çšããŠãã [ ] APIãžã®ã¢ã¯ã»ã¹ãé©åã«èªèšŒã»èªå¯ãããŠãã ãŠãŒã¶ãŒèªèšŒïŒå¿
èŠã«å¿ããŠïŒ ãªã¯ãšã¹ãå
ã®æ€èšŒ 7-4. ã¢ãã«ã®ãªã¹ã¯ç®¡ç [ ] ãŠãŒã¶ãŒå
¥åãLLMã®åŠç¿ããŒã¿ãšããŠå©çšãããªãããèšå®ãããŠãããããªã¹ã¯ãè©äŸ¡ã»å容ãããŠãã LLMãããã€ããŒã®ããŒã¿å©çšããªã·ãŒãç¢ºèª ãªããã¢ãŠãèšå®ïŒå¿
èŠã«å¿ããŠïŒ [ ] 瀟å
ã®ã¢ãã«å©çšããªã·ãŒã«æ²¿ã£ãŠå©çšã¢ãã«ãéžå®ããŠãã [ ] Openâweightã¢ãã«ãå©çšããå ŽåãPickle圢åŒã§ã¯ãªãsafetensors圢åŒãå©çšããŠãã 8. ããã¥ã¡ã³ããšçµç¹éå¶ ããŒã ã¡ã³ããŒãã·ã¹ãã ãçè§£ããã¹ã ãŒãºã«éçšã§ããããã«ããŸãã [ ] ã·ã¹ãã æŠèŠã»ã·ã¹ãã æ§æå³ã»äŸåé¢ä¿å³ãææ°ã®ç¶æ
ã«ä¿ãããŠãã [ ] äž»èŠãªã¢ã©ãŒããžã®å¯Ÿå¿æé ïŒRunbookïŒãé害察å¿ããã»ã¹ãããã¥ã¡ã³ãåãããŠãã [ ] é害çºçæã®ã€ã³ã·ãã³ã察å¿ããã»ã¹ãå®çŸ©ãããŠãããã€ã³ã·ãã³ãçºçåŸã®ãã¹ãã¢ãŒãã ïŒæ¯ãè¿ãïŒã宿œããåçºé²æ¢çãè¬ããããã»ã¹ã確ç«ããŠãã ã¿ã€ããŒã§ã®å®è£
ã¬ã€ã æ¬ã¬ã€ãã¯ãäžèšãã§ãã¯ãªã¹ããèžãŸããDS Gã®æè¡ã¹ã¿ãã¯ïŒGoogle CloudãDatadogçïŒãèžãŸããå
·äœã®å®è£
äŸã«èœãšã蟌ãã ãã®ã§ãã 1. å®å®æ§ã»ä¿¡é Œæ§ æ§æç®¡ç ã³ãŒã管ç : GitïŒGitHubïŒã§ã³ãŒã管ç ããã³ãã管ç : Gitã§ããã³ãããã¡ã€ã«ã管çããŸãã¯ããã³ããããŒãžã§ãã³ã°æ©èœãæã€ããŒã«ãäœ¿çš CI/CD CI : GitHub Actionsã§Lintã»ãã¹ãã»SASTãå®è¡ CD : GitHub ActionsããGoogle CloudïŒCloud RunïŒãžèªåããã〠ãªãªãŒã¹ããã»ã¹ 段éçããŒã«ã¢ãŠã : Cloud Runã®ãã©ãã£ãã¯å岿©èœããŸãã¯ãªãªãŒã¹ç®¡çããŒã«ãäœ¿çš 2. ã¹ã±ãŒã©ããªãã£ãšããã©ãŒãã³ã¹ ãã£ãã·ãã£ãã©ã³ãã³ã° ãªãŒãã¹ã±ãŒãªã³ã° : Cloud Runã®ãæå€§ã€ã³ã¹ã¿ã³ã¹æ°ããæå°ã€ã³ã¹ã¿ã³ã¹æ°ããåæå®è¡æ°ïŒconcurrencyïŒããèšå® 3. èé害æ§ãšå€§æšäºå¯Ÿå¿ å埩æ§ãã¹ã è² è·ãã¹ã : Locustãè² è·ãã¹ãããŒã«ãšããŠäœ¿çš 4. å®å
šæ§ ã¬ãŒãã¬ãŒã« éåèšé² : æ§é åãã°ãŸãã¯Datadogã€ãã³ããšããŠèšé² 5. ç£èŠ ã¢ããªã±ãŒã·ã§ã³ãã®ã³ã°ã»ãã¬ãŒã·ã³ã° APM : Datadog APMïŒCloud Runã®ãµã€ãã«ãŒã« datadog/serverless-init ãèšå®ïŒ å¯èŠåãšã¢ã©ãŒã ããã·ã¥ããŒã : Datadog DashboardãLooker ã¢ã©ãŒã : Datadog MonitorãSlack飿º LLM Observability LLMç£èŠ : Datadog LLM Observability 6. å質ä¿èšŒ(QA)ãšè©äŸ¡ããã»ã¹ ãªãã©ã€ã³è©äŸ¡ã»ãã ããŒã¿ã»ãã管ç : Datadog LLM Observabilityã®Datasetsæ©èœã®å©çšããŸãã¯BigQueryã»GCSãããŒã¹ãšããããŒã¿ã»ããã®ããŒãžã§ã³ç®¡ç ç¶ç¶çæ¹å å®éšç®¡ç : MLflowãDatadog LLM Observability 7. ã»ãã¥ãªãã£ãšã³ã³ãã©ã€ã¢ã³ã¹ ã¢ã¯ã»ã¹å¶åŸ¡ èªèšŒ : Workload Identity FederationïŒGCPïŒç ã¢ãã«ã®ãªã¹ã¯ç®¡ç ã¿ã€ããŒç€Ÿå
ã®åºæºãæºããã¢ãã«ãå©çšããŠãã æ¯ãè¿ããšä»åŸã®åãçµã¿ ãããŸã§DS Gã§ã¯ãããŒã¿ãµã€ãšã³ãã£ã¹ãäžå¿ã®CSããŒã ïŒComplicated Subsystem TeamïŒãšMLOpsïŒPlatform TeamïŒãCollaborationã¢ãŒãïŒEmbedded SREã«è¿ã圢ïŒã®é¢ããæ¹ã§ãLLMã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ã»éçšã«åãçµãã§ããŸãããããã¯åæã®ç¥èŠèç©ãšéçºã®ã¢ãžãªãã£ç¢ºä¿ã®ç¹ã§ãäžå¯æ¬ ã§æå¹ãªãã®ã§ããã ããããä»åŸãµãŒãã¹ãå¢å ããã«ã€ãããã®å¯ãªé£æºäœå¶ãçµç¹å
šäœã®ã¹ã±ãŒã«ã®ããã«ããã¯ã«ãªãæžå¿µããããŸããããããã課é¡ãä¹ãè¶ãããããMLOpsããŒã ã¯ãCSããŒã ãé«éã«é«å質ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ãããããªãŽãŒã«ãã³ãã¹ã®æŽåãé²ããŠããŸãã ä»åã®ãã§ãã¯ãªã¹ãäœæã¯ããã®äžã€ã®åãçµã¿ãšããŠç¥èŠãæŽçãããŸãçŸç¶ã®èª²é¡ãåèªèãããã®ã«ãªã£ããšèããŠããŸãã ä»åŸDS Gã§ã¯ãRAGãAgentic Workflowã®ãããªãããè€éæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ããLLM Gatewayãšãã£ãåºç€å°å
¥ãæ§ããŠããŸãã ããããè€éãªèª²é¡ã«å¯ŸããCSããŒã ãšMLOpsããŒã ãããããã®åŒ·ã¿ãçºæ®ããå調ããªããã¹ã±ãŒã«ããŠãããäœå¶ãäžå¯æ¬ ã ãšèããŠããŸãã æ¬ãã§ãã¯ãªã¹ãã®æŽ»çšã»æ¹åãå«ããåžžã«ããè¯ã忥ã®åœ¢ã暡玢ããåçŸæ§é«ãä¿¡é Œæ§ã®ããML/LLMã¢ããªã±ãŒã·ã§ã³ã«ãã䟡å€åµåºã«ãã£ã¬ã³ãžããŠãããããšæã£ãŠããŸãã
ããã«ã¡ã¯ïŒæ ªåŒäŒç€Ÿã¿ã€ããŒã§ã¢ããªãã£ã¯ã¹ãšã³ãžãã¢ãããŠããã²ãããšãããŒã¿ãšã³ãžãã¢ãããŠããã€ããã§ãã æ¬èšäºã¯ãäºäººã®å
±åå·çãšãã圢åŒã§ãå±ãããŸãïŒ çŸåšãç§ãã¡ã¯ã¢ã¡ãªã«ã»ã©ã¹ãã¬ã¹ã§éå¬ãããŠããdbtã®ç¥å
ž ãCoalesce 2025ã ã«çŸå°åå ããŠããŸãïŒ Coalesce 2025 ã¯ã幎ã«äžåºŠäžçäžã®dbtãŠãŒã¶ãŒãéãŸããæ©èœã¢ããããŒããäºäŸçºè¡šããã³ãºãªã³ãªã©ãè¡ãããdbtã®æè¡ã«ã³ãã¡ã¬ã³ã¹ã§ãã åœç€Ÿã§ã¯ããŒã¿åºç€ã«dbtãæ¡çšããŠãããããææ°æè¡ã®ãã£ããã¢ãããç©æ¥µçã«è¡ã£ãŠããŸããCoalesceãžã®åå ããã®äžç°ãšããŠæ±ºãŸããŸããã â»ã¢ãŒããã¯ãã£ã®ã€ããŠè©³ãã㯠ãã¡ã ãŸããä»åã¯ã«ã³ãã¡ã¬ã³ã¹åå æ¯æŽå¶åºŠ ãKaigiPassã ãå©çšããŠåå ããŠãããŸãïŒ éå ±ãçŸå°ã®ç±æ°ãšãšãã«ãå±ãããŸãããã²ã芧ãã ããã Day 1 忥ã«ã¯ææã®ãã¬ãŒãã³ã°äžå¿ã§ã倿¹ããã«ã³ãã¡ã¬ã³ã¹ã®ããã¯ãªããšãŠã§ã«ã«ã ããŒãã£ãŒãéå¬ãããŸãã ããã¯ãªãã§ã¯è¿ãã«ãã人ãšã®èªå·±ç޹ä»ã¿ã€ã ããããæåã¯çŠããŸããããã¿ããªæè¡è
å士ãè±èªãèŠæã§ãæž©ããåãå
¥ããŠããããåªããé°å²æ°ã§ããã Coalesceã®ã€ãã³ãå
容ãäŒå Žæ¡å
ãªã©ãäžå¿ã«ç޹ä»ãããããããå§ãŸãã»ãã·ã§ã³ãžã®æåŸ
ãé«ãŸãè¯ãæéã§ããã ïŒæ±ºããŠã¢ãŒãã³ã°ãã©ã³ããåºãããšã«åãã§ããã ãã§ã¯ãããŸããç¬ïŒ ããã¯ãªãã®åŸã¯ããŠã§ã«ã«ã ããŒãã£ãŒã®éå¬ã§ãïŒç«é£ããŒãã£ãŒã®åœ¢åŒã§å®æœãããããŒãããŒããŒã¹ã§è©±ãèããããä»ã®æ¥å Žè
ãšã®äŒè©±ã楜ããã ãã§ããŸãã åãæ¥æ¬äººã®åå è
ãšã亀æµããããšãã§ããããŒã¿ã«é¢ãã話é¡ã§çãäžãããŸãããæ¥æ¬éå¬ã®ã«ã³ãã¡ã¬ã³ã¹ãšã¯éããæ¥æ¬äººãå°ãªãåãæ°å°ãªãæ¥æ¬äººå士ã§ä»²éæèãèœçããããæ·±ã話ãã§ããããã«æããŸãã ãŸããããŒãããŒããŒã¹ã®æ¹ãç±æ°ããããçãäžãã£ãŠããŸãããæ¥æ¬ã§éå¬ãããã«ã³ãã¡ã¬ã³ã¹ããããçããã®ãã³ã·ã§ã³ãé«ãã§ããå®éã«ããŒã¹ãžè¡ã£ãŠã¿ãŠãã¢ãã¿ããŠãããã ãã§ãããã«ãªããŸããã©ã®ããŒã¹ã«ãAIãšããæåãèšèŒãããŠããã®ãå°è±¡çã§ããïŒ Day2 忥ã¯Keynoteãæ°å€ãã®ã»ãã·ã§ã³ã«åå ããŸãããã»ãã·ã§ã³ã®æ°ããšãŠãå€ããããåå³ããã®ããšãŠã倧å€ã§ãããŸããã©ã³ãã®æã¯åãããŒãã«ã«åº§ã£ãæ¹ãæ°å
Œããªã話ããããŠããã®ã§ãããã§ã®äŒè©±ã貎éãªæéã§ããïŒ Opening Keynote Keynoteã¯ããã«å
ã®ã·ã¢ã¿ãŒäŒå Žã§è¡ãããŸãããåæ¹åžã«åº§ã£ãã®ã§ãããäž¡ãµã€ãã®ã¹ã¯ãªãŒã³ã«ãªã¢ã«ã¿ã€ã åå¹ã衚瀺ãããŠãããããåŸæ¹ã®æ¹ãèŠãããã£ããšåŸã§æ°ã¥ããŸããã Opening Keynoteã§ã¯ã Rewrite ããšããããŒã¯ãŒããç¹°ãè¿ãç»å Žããå°è±¡çã§ãããdbt Labsã®CEOãTristan Handyæ°ãã¯ãããšããç»å£è
ãã¡ããAIæä»£ã«ãããããŒã¿ã¯ãŒã¯ã®åå®çŸ©ã«ã€ããŠèªããŸããã ãŸã倧ããªè©±é¡ãšããŠåãäžããããã®ããFivetranãšã®å䜵ã«ã€ããŠã§ãïŒåæ¥ã®10/13ã«çºè¡šãããã°ããã®ããããã®å Žã§è©±ãèããããšã楜ãã¿ã«ããŠããã®ããæå£°ããäŒãã£ãŠããŸãã ãã®æµãã§åŒã°ããã®ããFivetranã®Co-Founder & CEOã§ããGeorge Fraseræ°ãFivetranã®ã³ãã¯ã¿ãã°ä¿®æ£ã®è©±ããå§ãŸããdbtã«å¯ŸããŠåãã¯æççã ã£ããå€ãã£ãŠãã£ãããšãdbtãAIãä»åŸéèŠãšãªã£ãŠããäžã§å°æ¥æ§ãçžäºéçšæ§ãå䜵ã®èæ¯ãšããŠããããšãdbtãžã®ç Žå£çãªå€æŽã¯ãªãããšãªã©ãããŒã¯åœ¢åŒã§èªã£ãŠãããdbtãŠãŒã¶ãŒãå®å¿ããäžç·ã«dbtãçãäžããŠãããããšããæ°æã¡ããšãŠãäŒããå
容ã§ããã æ¬¡ã«ãMetric Flowã€ããŠå€§ããªçºè¡šããããŸããã MetricFlowã¯ãdbt LabsãæäŸããã¡ããªã¯ã¹ç®¡çã®è£œåã§ããä»åãApache 2ã©ã€ã»ã³ã¹ã§ã®ãªãŒãã³ãœãŒã¹åãçºè¡šãããäŒå Žãã倧ããªææãèµ·ãããŸããã ããã³ããŒããã¯ã€ã³ãæžå¿µã§å°å
¥ã«èžã¿åããªãã£ãããšãã声ãå€ãããŸãã«ãã®èª²é¡ã«å¿ããçºè¡šã§ããã åèURLïŒ https://www.getdbt.com/blog/dbt-labs-affirms-commitment-to-open-semantic-interchange-by-open-sourcing-metricflow ãã®æ¬¡ã«èªãããã®ãã dbt Fusion ãšã³ãžã³ ã«ãªããŸãã dbt Fusionãšã³ãžã³ã¯ãRewrite Developer ExperienceããããŒãã«ãéçºäœéšã®ææ¬çãªå·æ°ãç®æããæ©èœçŸ€ãšããŠç޹ä»ãããŸããã å®éã®ãã¢ã§ã¯ãåŸæ¥ããæå€§30åã®ã³ã³ãã€ã«é«éåããCTEãã¬ãã¥ãŒã»ã«ã©ã ã¬ãã«ã®ãšã©ãŒæ€ç¥ãªã©ãæ«é²ãããæå£°ãäžããå Žé¢ããããŸããã æ©èœã«ã€ããŠã®è©³çŽ°ã¯ å
¬åŒããã¥ã¡ã³ã ãã芧ãã ããã SDF Labsã®å
±å嵿¥è
ã§ãdbt Fusionãšã³ãžã³ã®ãããã¯ããªãŒããŒãåããŠããElias DeFariaæ°ã«ããã©ã€ããã¢ã§ã¯ãdbt Fusionãšã³ãžã³ãããããå€ãã®éçºæ¯æŽæ©èœãå®éã«æ«é²ãããäŒå Žããã¯äœåºŠãæå£°ãäžãããŸããïŒ ãColumn rename propagationããªã©æ©èœãçºè¡šããã床ã«ãã€é¡ãããŠããæ
åœè
ãè¿ãã§èŠãããããšã¯çŸå°åå ã®ééå³ã§ããïŒ ç¹ã«ãæ°ãã«çºè¡šããããCompare changesãã¯ã倿Žãæ¬çªç°å¢ã«é©çšããåã«ããŒã¿ãžã®åœ±é¿ã確èªããããšãã§ããŸããæ¬çªã«ããŒãžããŠããããŒã¿ããããããªã£ãŠããŸã£ãŠããããšã«æ°ãã€ãããšãã£ãèãå·ãããããããåæžã§ããçŽ æŽãããæ©èœã ãšæããŸããïŒ æ¬¡ã«çºè¡šãããã®ã¯ãState-aware orchestration ã§ãã State-aware orchestrationã¯ãFusionã®æ©èœã掻ãããã€ã³ããªãžã§ã³ããªå®è¡å¶åŸ¡æ©èœã§ããäŸåé¢ä¿ã®å
¥åããŒã¿ã倿Žãããã¢ãã«ã®ã¿ãåæ§ç¯ããããšã§ãç¡é§ãªåå®è¡ãé²ããŸãã çºè¡šã«ãããšããã®æ©èœãæå¹åããã ãã§çŽ10%ã®ã³ã³ãã¥ãŒãã³ã¹ãåæžãèŠèŸŒãŸãããšã®ããšã§ããïŒãããïŒïŒ ãŸããState-aware orchestrationã®ãããªãæé©åãšããŠãTuned configurationã玹ä»ãããŸããã Tuned configurationã§ã¯ããŠãŒã¶ãŒã¯ãFreshnessèŠä»¶ã®å®£èšããããããšãã§ãã幎éã³ã³ãã¥ãŒãã³ã¹ããå°ãªããšã29%åæžã§ããèŠèŸŒã¿ã瀺ãããŸããã dbtå
éšã§ã¯ãããã®æé©åãå°å
¥ããããšã§æçµçã«64%ãã³ã¹ããåæžã§ãããšã®ããšã§ãããããããïŒ ãããŠãæåŸã«çºè¡šãããã®ãdbt Agentsã§ãã dbt Agentsã§ã¯4ã€ã®æ°ãããµãŒãã¹ãçºè¡šãããŸããã ãµãŒãã¹å ãæ©èœã»ã³ã¡ã³ã ç¶æ
Developer Agent (éçºè
ãšãŒãžã§ã³ã) 倿Žå
容ãèšè¿°ããã ãã§ããšãŒãžã§ã³ãããã®ã¿ã¹ã¯ãå®è¡ããSQLãã¡ã€ã«ã®äœæããã¹ããããã¥ã¡ã³ãåãèªåã§å®è¡ããŠããããšã®ããšïŒã¢ãã€ïŒ è¿æ¥å
¬é Observability Agent (å¯èŠ³æž¬æ§ãšãŒãžã§ã³ã) ãã€ãã©ã€ã³ã®éå®³ç®æãç¹å®ããä¿®æ£ãæ¯æŽããŠããããšãŒãžã§ã³ãã§ããããã«ãã£ãŠãã©ãã«ã·ã¥ãŒãã£ã³ã°ã«è²»ããæéãåæžãã¢ã©ãŒãã®åæžã«ã€ãªããããšãæåŸ
ãããŸã è¿æ¥å
¬é Discovery Agent (çºèŠãšãŒãžã§ã³ã) ã«ã¿ãã°ãããã¥ã¡ã³ãããæ¿èªæžã¿ã®ããŒã¿ã»ãããšå®çŸ©ãèå¥ãããªããã®ããŒã¿ãä¿¡é Œã§ããã®ãã瀺ããŸãããã ã®æ€çŽ¢ã§ã¯ãªãä¿¡é Œæ§ã®é«ãããŒã¿ãèŠã€ãããŸã§ã®æéãåæžã§ãããšã®ããšã§ã ããŒã¿ç Analyst Agent (ã¢ããªã¹ããšãŒãžã§ã³ã) äŒè©±ååæïŒconversational analyticsïŒã®æ§ç¯ãæ¯æŽããè€éãªè³ªåã«å¯ŸããŠã¬ããã³ã¹ãããåçãæäŸããŠããããšã®ããšã§ã ããŒã¿ç å
šãŠã®AgentããããŒã¿åæéçºã«ãããããã£ãããããªããå®çŸã§ããæ©èœã®ããã«æããŸãããç¹ã«å人çã«ã¯ãDeveloper Agentã¯ãããã¹ãã§æç€ºããã ãã§èªåŸçã«å®è£
ãè¡ã£ãŠããããããããDevinã®ãããªéçºäœéšãã§ããã®ããªãšæããŠããŠæåŸ
ãèšãã¿ãŸãã ãŸãšã æ¬èšäºã§ã¯ãCoalesce 2025ã®çŸå°ã®æ§åãšOpening Keynoteã®å
容ãäžå¿ã«ç޹ä»ããŸããïŒ dbt LabsãšFivetranã®å䜵ãMetric Flowã®OSSåãFusionãšã³ãžã³ã«ããé«éåãState-aware orchestrationã«ããã³ã¹ãæé©åãªã©ããRewriteïŒæžãæãïŒããšããããŒãã«ãµãããã驿°ãè©°ãŸã£ãã»ãã·ã§ã³ã§ããã ä»åŸãæ®ãã®ã»ãã·ã§ã³ã§åæ©èœã®è©³çްãå°å
¥äºäŸã調æ»ããç¶å ±ããå±ãããäºå®ã§ãããã²ãæåŸ
ãã ããïŒ
ã¯ããã« ããã«ã¡ã¯ïŒä»åã¯ïŒ @arus4869 ã @yoshi_engineer_ ïŒã®2人ã§å·çããŸããïŒ ãã®èšäºã§ã¯ãç§éã®ããŒã ããã¹ããªã³ããŽãŒã«ã§äŸ¡å€ãé§åãããã ãšããæžç±ã®èŒªèªäŒããã£ããã«ã圢骞åããã¡ã ã£ãã¹ããªã³ããŽãŒã«ã ãããŒã ã®çŸ
éç€ã ãšããŠæ©èœãããã¹ããªã³ãã®éæçã äœæå€ã§50%ãã80%ã«åäžãããå
·äœçãªå®è·µèšé²ãã玹ä»ããŸãã ãã®èšäºã¯ãç¹ã«ä»¥äžã®ãããªèª²é¡ãæããŠããæ¹ã«èªãã§ããã ãããã§ãã ã¹ããªã³ããŽãŒã«ããã¿ã¹ã¯ãªã¹ããã«ãªããã¡ã§ããªãããã®ãïŒWhyïŒãã©ããªäŸ¡å€ãçãŸããã®ãïŒOutcomeïŒãææ§ã«ãªã£ãŠããã ã¹ã¯ã©ã ãå®è·µäžã§ãã¹ããªã³ããŽãŒã«ã®è³ªã«æ©ãã§ããã ã¹ããŒã¯ãã«ããŒãããŒã ã¡ã³ããŒãšæ©èœã®è©±ã¯ã§ããŠãã ã䟡å€ãã«ã€ããŠã®äŒè©± ããã¥ããã ãªããã®æ¬ãéžãã ã®ã ç§éã®ããŒã ãããŸãã«äžèšã®ãããªèª²é¡ã«çŽé¢ããŠããŸããã ã¹ã¯ã©ã éçºãé·ãç¶ããŠãããã®ã®ããã€ããããã£ãŒãã£ãŒãã¡ã¯ããªãŒãã®ããã«ãªããã¹ããªã³ããŽãŒã«ãåãªãã¿ã¹ã¯ãªã¹ãã«ãªã£ãŠããŸãããããŒã ãšããŠããããããšãå€ãããŠåžžã«ããã¯ãã°ãç©ã¿ãããåŸåãããããã¬ãã¥ãŒã§äœãåŠãã ãããã¢ãŠãã«ã ã§èªãããšãé£ãããã¢ãŠããããã®è©±ã«çµå§ããã¡ã§ããã ãã®ããªããšãªãããªãã ããã®ç¶æ
ãè±åŽãããããããªæãã§ãã¹ããªã³ããŽãŒã«ãèãçŽããã³ããäžããŠãããããªæ¬æžãã茪èªäŒã®ããŒããšããŠéžã³ãŸããã ããããã¹ããªã³ããŽãŒã«ãšã¯äœãïŒ ã¹ããªã³ããŽãŒã«ã¯ãªãèšå®ãããã®ãç¥ã£ãŠããŸããïŒç§ã¯èª¬æããããšãã§ããŸããã§ããã ã¹ã¯ã©ã ã¬ã€ãã§ã¯ä»¥äžã®ããã«å®çŸ©ãããŠããŸãã ã¹ããªã³ããŽãŒã«ã¯ã¹ããªã³ãã®å¯âŒã®âœ¬çã§ãããã¹ããªã³ããŽãŒã«ã¯éçºè
ã確çŽãããã®ã ããã¹ããªã³ããŽãŒã«ãéæããããã«å¿
èŠãšãªãäœæ¥ã«å¯ŸããŠã¯æè»æ§ããããããã¹ããªã³ããŽãŒã«ã¯ãŸããâŒè²«æ§ãšéäžã✣ã¿åºããã¹ã¯ã©ã ããŒã ã«âŒèŽå£çµããäœæ¥ãä¿ããã®ã§ãããã ã¹ããªã³ããŽãŒã«ã¯ãã¹ããªã³ããã©ã³ãã³ã°ã§äœæãããã¹ããªã³ãããã¯ãã°ã«è¿œå ããããéçºè
ãã¹ããªã³ãã§äœæ¥ãããšãã«ã¯ãã¹ããªã³ããŽãŒã«ã念é ã«çœ®ããäœæ¥ãäºæ³ãšç°ãªãããšã倿ããå Žåã¯ãã¹ããªã³ããŽãŒã«ã«åœ±é¿ãäžããããšããªãããã«ããããã¯ããªãŒããŒãšäº€æžããŠã¹ããªã³ãããã¯ãã°ã®ã¹ã³ãŒãã調æŽããã ã¹ããªã³ããŽãŒã«ã¯ã¹ããªã³ãã® å¯äžã®ç®ç ã ã¹ããªã³ãã«ãããŠããã®ç®æšãéæããããšããã倧æ¬åœãªããã§ãã ã§ã¯ããã®éèŠæ§ãæ·±ãŒã£ãŠãããŸãããã ã¹ããªã³ããŽãŒã«ããªãå¿
èŠãªã®ãïŒ ã¹ããªã³ããŽãŒã«ã®éèŠæ§ããŸãæããããã®ã¯ãããŒã ã®æèãã¿ã¹ã¯ããŒã¹ã® ãã¢ãŠãããããããããŠãŒã¶ãŒã«æäŸãããã¢ãŠãã«ã ããžãšè»¢æ ããããããšã§ãã ããŒã 㯠ããŠãŒã¶ãŒãžã®äŸ¡å€ã®æäŸããæ¬æ¥ã®ç®çãšããŠè¡ã£ãŠããŸããå®éã®ããŒã ã皌åããŠããéã«ããã€ã®éã«ãã¿ã¹ã¯ãªã¹ãã®ã¿ãæéãšããŠäœæ¥ãé²ãã§ããŸã å¯èœæ§ããããŸãã äŸãã°ãããŠãŒã¶ãŒç»é²ç»é¢ã®å®è£
ãããããŒã¿ããŒã¹ç»é²åŠçããšãã£ãã¿ã¹ã¯ã®çŸ
åã ãã§ã¯ãéçºè
ã¯ãªããã®äœæ¥ãè¡ã£ãŠããã®ãããã®äœæ¥ãæçµçã«ã©ã®ãããªãŠãŒã¶ãŒäŸ¡å€ã«è²¢ç®ããã®ããããŒã ã¡ã³ããŒãå
±éããŠçè§£ãã«ããå ŽåããããŸãã ã¹ããªã³ããŽãŒã«ãããããšã§ããŠãŒã¶ãŒã«å±ããã䟡å€,ã¢ãŠãã«ã ãã¿ã¹ã¯ãšé£çµããŠãäžã€ã®å
·äœçãªã€ã³ã¯ãªã¡ã³ããçã¿åºããšããæç¢ºãªæå³ãå
±æãããŸãã ãã®ããã«ããŒã 㯠ãã¿ã¹ã¯ã®é²æã ã ãã§ãªãã ãŽãŒã«ãžã®è²¢ç®åºŠ ãåžžã«æèã§ããããã«ãªããããè¯ãæææ±ºå®ãšå調æ§ãçã¿åºãã ã¹ããªã³ããŽãŒã«ã®å¹èœ ã¹ããªã³ããŽãŒã«ãããŒã ã«å¯ŸããŠããããå¹èœã¯ä»ã«ããããŸãããã㯠ãéäžã ãš ãäžè²«æ§ãã§ãã ããŒã ã«æç¢ºãªãŽãŒã«ããªããã°ãããŒã ã¯ãããã¯ãããã¯ãã°ã¢ã€ãã ïŒPBIïŒãã¹ããªã³ãããã¯ãã°ã«å«ãŸããå Žåãããããã®PBIãç¬ç«ããäœæ¥ãšããŠæããããããŒã ãã°ãã°ãã«äœæ¥ãããªã¹ã¯ããããŸã ããã®ãããªç¶æ³ã§ã¯ãããŒã ãšããŠã®å調æ§ãçãŸãããç¹å®ã®PBIãæ
åœããå人ãå€ç«ããããäœæ¥ã®è©°ãŸããçºçãããããå¯èœæ§ããããŸã ã ã¹ããªã³ããŽãŒã«ã¯ããããã®PBIãããªãæã
ã¯ããããåæã«é²ããã®ãããšãã å
±éã®ç®çã«éçŽããŸã ãå
±éã®ç®çãæã€ããšã§ãããŒã å
šå¡ãåãç®æšã«åãã£ãŠåªåããäžäœæãé«ããããšãã§ããŸãã ããã«ãããããŒã ã¡ã³ããŒã¯ ããŽãŒã«éæã®ããã«èª°ããå©ããã ãšããåæ©ä»ããçãŸããååããŠåé¡ã解決ããå§¿å¢ãèªç¶ã«è²ãŸããŸããåã
ã®ã¿ã¹ã¯ã®å®äºã§ã¯ãªããããŒã å
šäœã®ãŽãŒã«éæã«çŠç¹ãåœãŠããšãããã¹ã¯ã©ã ã®æ¬è³ªãäœçŸããŸãã è¯ãã¹ããªã³ããŽãŒã«ã建ãŠãããã« ããã§ã¯ ã¿ã¹ã¯ããŒã¹ã®ãŽãŒã«èšå® ãš ç¶æ
ããŒã¹ã®ãŽãŒã«èšå® ã«ã€ããŠã話ãããŸããã¿ã¹ã¯ããŒã¹ã®ãŽãŒã«ã§ã¯ãããŒã ã¡ã³ããŒããèªåã®ã¿ã¹ã¯ãçµãããªãã£ãããšããå人ã®åçã«çµå§ãããã¬ãã£ããªå
çã«é¥ããããå¯èœæ§ããããŸãã ã¹ããªã³ããŽãŒã«ããã¢ã€ã¢ã€ãè§£æ¶ãããç¶æ
ãããç¹å®ã®äŸ¡å€ãæäŸãããç¶æ
ããšãã£ããç¶æ
ãããŒã¹ã§èšå®ãããšãããŒã ã¯ãã¬ãã·ã£ãŒããè§£æŸãããããååããªæ¯ãè¿ãããããããªããŸãã ãŸãããŽãŒã«ãæªéæã§ãã£ãŠããããŒã 㯠ããªããã®ç¶æ
ã«è³ããªãã£ãã®ãããšããæ ¹æ¬çãªåå ã客芳çã«åæãã ããšãã§ãããããæ¬¡ã®ã¹ããªã³ãã§ã®æ¹åç¹ãšããŠæããããšãã§ããŸã ã ãã®ãããªããã»ã¹ã¯ãããŒã ã¡ã³ããŒéã®ä¿¡é Œé¢ä¿ãæ·±ãã倱æãåŠç¿ã®æ©äŒãšæããå¥å
šãªæåãéžæããŸããã¹ããªã³ããŽãŒã«ã®éæã«åããŠäºãã«å©ãåãç¿æ
£ã¯ã ããŒã å
šäœã®ååäœå¶ã匷å ãã åã
ã®ã¢ãããŒã·ã§ã³ãç¶æãã äžã§éèŠãªåœ¹å²ãæãããŸã ã ã¹ããªã³ããŽãŒã«ãé§åããŠæåã®éµãšããŠæŽ»çšããŠããããã« ã¹ããªã³ããŽãŒã«ãåãªãã¿ã¹ã¯ç®¡çããŒã«ã§ã¯ãªãã ããŒã ã®éäžåãæè»æ§ããããŠäŸ¡å€åµåºãæå€§åããããã®äžå¯æ¬ ãªèŠçŽ ã§ã ã¹ããªã³ããŽãŒã«ã ãã¿ã¹ã¯ã®ãªã¹ãã ãã ãææã瀺ãçŸ
éç€ã ãžãšé²åãããããšã§ã ããŒã ã¯ãäœããããããããäœãæãéãããããžãšæèãå€ããããšãã§ããŸãã äœãå®è·µããã®ãïŒèŒªèªäŒã§ã®åãçµã¿ïŒ 茪èªäŒã§ã®åŠã³ãå
ã«ãç§éã¯ä»¥äžã®3ã€ã®å
·äœçãªã¢ã¯ã·ã§ã³ãããŒã ã«å°å
¥ããŸããã 1. ã¹ããªã³ããŽãŒã«ã®ãæ±ºãæ¹ããåæåœ¢æã®ããã»ã¹ã«å€ãã ãããŸã§ææ§ã ã£ãã¹ããªã³ããŽãŒã«ã®æ±ºãæ¹ããããŒã ã§åæã圢æããããã®æç¢ºãªããã»ã¹ã«å€æŽããŸãããå
·äœçã«ã¯ãã¹ããªã³ããã©ã³ãã³ã°ã§ä»¥äžã®ã¹ããããèžãã§ããŸãã å
šå¡ã§ã¹ããªã³ããŽãŒã«æ¡ã1ã€èããïŒ ãŸããPOã ãã§ãªãããŒã å
šå¡ã§ã¹ããªã³ããŽãŒã«æ¡ãåºããŸãã èªä¿¡åºŠã®å¯èŠåãšæç¥šïŒ ãã®ã¹ããªã³ããŽãŒã«æ¡ã«å¯ŸããŠãéæã§ããèªä¿¡åºŠãåèªã衚æããåèæ
å ±ãšããŠæç¥šãè¡ããŸãïŒå€æ°æ±ºã§ã¹ããªã³ããŽãŒã«ã決ããããã§ã¯ãããŸããïŒã 察話ãšè°è«ïŒ ãªããã®èªä¿¡åºŠãªã®ãããªããã®æ¡ãè¯ããšæãã®ããå
šå¡ã§å¯Ÿè©±ããçŽåŸè§£ãæ¢ããŸãã ãFOCUSãã§æçµãã§ãã¯ïŒ æåŸã«ããã®ã¹ããªã³ããŽãŒã«æ¡ãè¯ããŽãŒã«ã®ç¹æ§ïŒâ»ïŒãæºãããŠããããããŒã ã§ãã§ãã¯ããæçµæ±ºå®ããŸãã â»FOCUSãšã¯ïŒ è¯ãã¹ããªã³ããŽãŒã«ã®ç¹æ§ã瀺ããé åèªãFunïŒæ¥œããïŒ, Outcome-basedïŒã¢ãŠãã«ã ããŒã¹ïŒ, CollaborativeïŒå調çïŒ, UltimateïŒç©¶æ¥µçïŒ, SingularïŒåäžïŒã®5ã€ã®èгç¹ã ãã®ããã»ã¹ã«ãããã¹ããªã³ããŽãŒã«ãã誰ããæ±ºããç®æšããããèªåãã¡ãåæããç®æšãã«å€ãããŸããã 2. ãããããšããåæ°ããã£ãŠçµã蟌ãã éå»ã®ç§éã¯ãã¹ããªã³ããŽãŒã«ã«éäžã§ããã«å質ãäœäžããããããŽãŒã«èªäœãéæã§ããªãçµéšããããŸãããæ¬ãããåæã«å€ãã®äœæ¥ã«åãçµãããšã¯ãååã劚ããäŸ¡å€æäŸãæžå°ãããã ãšããååãåŠã³ã茪èªäŒäžã«ããŒã ã® åæãšããŠä»¥äžã®ã«ãŒã«ã決ããŸããã ãã¹ããªã³ããã©ã³ãã³ã°ã§ã¹ããªã³ãããã¯ãã°ã«å
¥ããã®ã¯ãã¹ããªã³ããŽãŒã«éæã«çŽæ¥è²¢ç®ããPBIã ãã«ããã ããã«ãããããŒã ã®ãšãã«ã®ãŒã忣ããããšãªããå
šå¡ããŽãŒã«éæã«éäžã§ããããã«ãªããŸããã 3. ã¬ãã¥ãŒã§ãããŒã¿ããèªãããšãå§ãã 䟡å€ïŒã¢ãŠãã«ã ïŒãæèãããããã¹ããªã³ãã¬ãã¥ãŒã§é¢é£ãããããã¯ãã®ããã·ã¥ããŒããåå è
ã§èŠãããšããå§ããŸããããŸã éåã°ã§ãããããã«ããäŒè©±ããäœãäœã£ããïŒOutputïŒããããããã«ãã£ãŠäœãå€ãããããïŒOutcomeïŒããžãšå°ããã€ã·ãããããã£ããã«ãªã£ãŠããŸãã ãã£ãçµæã©ãã ã£ããïŒèŒªèªäŒã®ææïŒ ãããã®åãçµã¿ã®çµæãããŒã ã«ã¯æç¢ºãªå€åãçãŸããŸããã ã¹ããªã³ããŽãŒã«éæçãåäžïŒ ãããŸã§äœæå€ã§ãããã¹ããªã³ããŽãŒã«ã®éæç㯠çŽ50%ãã80%ãžãšåäž ããŸããã ãã©ã³ãã³ã°ã®è³ªãåäžïŒ ããã®PBIã¯ã¹ããªã³ããŽãŒã«éæã«ã©ãç¹ãããã ã£ãïŒããšããåããããèªç¶ã«çãŸããããã¯ãã°éžæã®è¿·ããæžå°ããŸããã ãã€ãªãŒã¹ã¯ã©ã ã®äŒè©±ãå€ãã£ãïŒ åãªãé²æå ±åã§ã¯ãªãããã¹ããªã³ããŽãŒã«ãéæããããã«ã仿¥ã¯ãããããããšæãããšãã£ãããŽãŒã«ãæèããäŒè©±ãäžå¿ã«ãªããŸããã åå è
ã®å£° 茪èªäŒã®åå è
ã®å£°ãæç²ããŸãã ç·åçã«èŒªèªäŒã«åå ããŠè¯ãã£ããšããææ³ã«ãªããŸããã ãäžç¢ºå®æ§ãžã®å¯ŸåŠãã«ããã説æãããã«å¯Ÿãããœãªã¥ãŒã·ã§ã³ã倧å€åŠã³ã«ãªã£ãã äžäººã§èªããšã€ã³ãããã ãã§çµãããã¡ã§ãããããŒã ã§ããã«å®è·µã§ããã®ã茪èªäŒã®è¯ããšããã ãšæããŸããã FOCUSã¯äžã€ã®HOWã«éããªããšæãã€ã€ã茪èªäŒããå
·äœçãªã¢ã¯ã·ã§ã³ãçãŸããã®ã¯ãšãŠãè¯ããªããšæããŸããã äŸ¡å€æäŸãéèŠããFOCUSã®èãæ¹ã§ãŽãŒã«ãæã¡ç«ãŠãããšãæ¬ãéããŠå°è±¡ã«æ®ããŸããã ãŸãšã ä»åã®èŒªèªäŒãšå®è·µãéããŠãç§éã¯éèŠãªåŠã³ãšæ°ã¥ããåŸãããšãã§ããŸããã çµéšããã®åŠã³ïŒ è¯ãã¹ããªã³ããŽãŒã«ãšã¯ãåªããæç« 以äžã«ã ããŒã ã§ãäœã«éäžããäœã顧客ã«å±ããã®ãããåæããããã»ã¹ãã®ãã® ã§ããã æ°ã¥ãïŒ ããŒã ãå
±éã®ãŽãŒã«ã«éäžããããšã§åããŠã æ¥ã
ã®è¡åã䟡å€ãããåŸç¹ãã«ç¹ãã ã®ã ãšæ°ã¥ããŸããã ãã®èšäºã§ç޹ä»ããç§éã®ãã¹ããªã³ããŽãŒã«ã®æ±ºãæ¹ããã»ã¹ããããã®äžå©ãšãªãã°å¹žãã§ãã æåŸãŸã§ãèªã¿ããã ããããããšãããããŸããã
ããã«ã¡ã¯ãiOSãšã³ãžãã¢ã®å€§å¡ãå±±åŽãæ©å·( @hykwtmyk )ãåç°( @naoya_maeda ) ã§ãã 2025幎9æ19-21æ¥ã«ææã»ã³ãã©ã«ã¿ã¯ãŒããŒã«ïŒã«ã³ãã¡ã¬ã³ã¹ã§éå¬ãããiOSDC Japan 2025ã«ãã¿ã€ããŒããŽãŒã«ãã¹ãã³ãµãŒãšããŠåè³ãããŠããã ããŸããã ã€ãã³ãã¯ä»¥äžã®ããã«ã3æ¥éé£ç¶ã§è¡ãããŸããã 9æ19æ¥ïŒæšïŒïŒday0ïŒåå€ç¥ïŒ 9æ20æ¥ïŒéïŒïŒday1ïŒæ¬ç·š1æ¥ç®ïŒ 9æ21æ¥ïŒåïŒïŒday2ïŒæ¬ç·š2æ¥ç®ïŒ ç§ãã¡ãã€ãã³ãã«åå ããã®ã§ãã¡ã³ããŒãããããæ°ã«ãªã£ãã»ãã·ã§ã³ãææ³ãã玹ä»ããŸãã å€§å¡ ç·š å
æ¥ãiOSDC Japan 2025ã«åå ããŸãããä»å¹Žã¯äŒå ŽãäŸå¹Žãšã¯ç°ãªããã«ã³ãã¡ã¬ã³ã¹å
šäœã®é°å²æ°ã«ãã€ããšéã£ãæ°é®®ãªå°è±¡ãåããŸãããç§ã¯æ¯å¹ŽiOSDCã«åå ããŠããŸãããæ¥ã
ã®æ¥åãèªå·±åŠç¿ã ãã§ã¯è§Šããæ©äŒã®å°ãªããé«åºŠã§ããããªé åã®ç¥èãéäžçã«åŸãããç¹ããæ¬ã«ã³ãã¡ã¬ã³ã¹ã®æå€§ã®é
åã ãšæããŠããŸããæ¬ã¬ããŒãã§ã¯ããã®äžã§ãç¹ã«å°è±¡ã«æ®ã£ããéèãµãŒãã¹ã®æé·ãæ¯ãã "æ¬äººç¢ºèªãããŒ" ã®æ¹åãšåãå·»ãç°å¢ã®å€åãã®ã»ãã·ã§ã³ã«ã€ããŠãå ±åããããŸãã æŠèŠ ã»ãã·ã§ã³ã¯ã1. æ¬äººç¢ºèªãããŒã®æ¹åãš2. æ³ä»€æ¹æ£ãªã©åãå·»ãç°å¢ã®å€åã«ã€ããŠã®çºè¡šã§ããã 1. æ¬äººç¢ºèªãããŒã®æ¹å ååã¯ãJPKIæ¹åŒãçšããæ¬äººç¢ºèªã®å®è£
æŠç¥ã«ã€ããŠã®è§£èª¬ã§ããããªãŒãã¿ã€ã ãççž®ããããããã€ãã³ããŒã«ãŒãã®èªã¿åãããã³é»åèšŒææžã®æ€èšŒãšãã£ãæ©èœã¯ãå€éšãã³ããŒãæäŸãã SDK ãçšããŠå®è£
ããŠããããã§ããäžæ¹ã§ããŠãŒã¶ãŒãçŽæ¥è§ŠããUIéšåã¯ãããŠèªç€Ÿã§éçºãããšããæŠç¥ãæ¡ã£ãŠããŸããUIãèªç€Ÿã§éçºããããšã§ãé¢è±çãæ¹åããããã®æ§ã
ãªå®éšçãªæœçãã¹ããŒãã£ãŒã«å°å
¥ãããã®æé©åã®ã¡ãªããã享åãããŠããããã§ãã 2. æ³ä»€æ¹æ£ãªã©åãå·»ãç°å¢ã®å€å åŸåã¯ãéèãµãŒãã¹ãåãå·»ãç¯åæ³ãªã©ã®æ³ä»€æ¹æ£ãããã«ã¢ããªéçºã«åœ±é¿ãããã«ã€ããŠã§ããç¹ã«JPKIã®çœ²åçšé»åèšŒææžãçšããæ¹åŒãã«ãŒã代æ¿é»ç£çèšé²ãçšããæ¹åŒãªã©ãå€éšç°å¢ã®å€åã«ãšã³ãžãã¢ãã©ã察å¿ãã¹ããã«çŠç¹ãåœãŠè§£èª¬ãããŠããŸããã ææ³ ç§ãæå±ããããŒã ã§æ
åœããŠããæ¬äººç¢ºèªãããŒã«é¢ããçºè¡šã ã£ããããç¹ã«åŒ·ãé¢å¿ãæã£ãŠæèŠããŸãããä»ç€Ÿã§ã¯ã©ã®ããã«JPKIæ¹åŒãå®è£
ããé¢è±çã®æ¹åãšããé£ãã課é¡ã«å¯Ÿããã©ã®ãããªèгç¹ã§æè¡ããããã¯ãèšèšã®éžæãè¡ã£ãŠããã®ããå
·äœçã«ç¥ãããšãã§ãã倧å€å匷ã«ãªããŸããã å±±åŽ ç·š iOSDCã¯ä»ååããŠåå ãããŠããã ããŸãã! ååå ã ããããæããçŸå°ã®ç±æ°ãã»ãã·ã§ã³ã®ææ³ãªã©ãã¬ããŒãããŸããã¡ãªã¿ã«ãç§ã¯day0ãšday2ã®2æ¥éåå ããŸããã day0ïŒã«ã³ãã¡ã¬ã³ã¹ã®ç±æ°ã«è§Šãã day0ã§ã¯ãŸãããã¬ãªãŒããã³ã°ã»ãã·ã§ã³ã«åå ããiOSDCã®æŽå²ãã³ãã¥ããã£ã®æãç«ã¡ã«ã€ããŠç¥ãããšãã§ããŸãããå€ãã®éçºè
ã®æ
ç±ã«ãã£ãŠãã®çŽ æŽãããå ŽãäœãããŠããããšãç¥ããåå ã§ããããšãžã®æè¬ã®æ°æã¡ã§èžããã£ã±ãã«ãªããŸããã ãã®åŸã¯ãåŒç€Ÿã®å²éšããïŒ @beryu ïŒã®çºè¡šãå¿æŽãã«è¡ã£ãããèå³ã®ããã»ãã·ã§ã³ãããã€ãæèŠããŸãããã©ããã¬ãã«ãé«ããç¥ç奜å¥å¿ã匷ãåºæ¿ãããå
容ã°ããã§ããã day2ïŒããŒã¹ã§ã®äº€æµ day2ã§ã¯ãåŒç€Ÿã®ããŒã¹ã«ç«ã¡ãããããã®åå è
ã®æ¹ã
ãšã³ãã¥ãã±ãŒã·ã§ã³ãåãããŠããã ããŸããã ç§ãã¡ã®ããŒã¹ã§ã¯ããæè¿ããŸããã£ãããšããããŒãã«ä»ç®ãæžããŠãããããšããäŒç»ã宿œããŠããŸãããããããã£ããã«äŒè©±ã匟ã¿ããæè¿ãSwiftUIåãããŸããã£ããã§ãããAIãããæŽ»çšããŠæ¥åæ¹åããŸããããšãã£ãå
·äœçãªã話ããããã䌺ãããšãã§ããŸãããç¹ã«AI掻çšã®ãããã¯ã¯å€ãã®æ¹ã®é¢å¿äºã®ããã§ãä»ç€Ÿããã®ãŠããŒã¯ãªåãçµã¿ãèããã®ã¯å€§ããªåç©«ã§ããã å¿ã«æ®ã£ãã»ãã·ã§ã³ æ¥åã§çŽæ¥é¢ããæ©äŒã®å°ãªãé åã§ã®ã»ãã·ã§ã³ãæ©äŒãå€ãã£ãã®ã§ãããã©ããæ°é®®ã§éåžžã«é¢çœãã£ãã§ãã æè©±ãžã§ã¹ãã£ãŒã®æ€ç¥ãšç¿»èš³~ãã³ããã©ããã³ã°ã®å¯èœæ§ãšéç~ fortee.jp Apple Vision Proã§ã®ç«äœåç»ã¢ããªã®å®è£
ãš40ã®å·¥å€« fortee.jp ããã°ã©ãã®ããã®äœæ²å
¥é fortee.jp ãiPhoneã®ãã€ãã³ããŒã«ãŒããã®ãã¹ãŠ fortee.jp ç¹ã«ãApple Vision Proé¢é£ã®ã»ãã·ã§ã³ã¯ãåŸæ¥ã®ã¢ããªéçºãšã¯ç°ãªãã3D空éäžã§UIãUXãããã«èªç¶ã«èŠããããšããç¹ã«å€ãã®å·¥å€«ãåããããŠããã倧å€è峿·±ãã£ãã§ãããªããžã§ã¯ãã空éã«éåæãªãé
眮ããããšã®é£ãããæ¹ããŠæããŸããã ãã€ãã³ããŒã«ãŒãã®è©±ã¯ãå®éã«ã©ã®ãããªAPIã䜿ãããŠããã®ããšããæè¡çãªè§£èª¬ãéåžžã«ããã«ãªããŸãããã¢ããªå
ã察é¢ããã©ãŠã¶ã®3çš®é¡ã®Verifier APIã®å
·äœçãªäœ¿ãæ¹ããŠãŒã¹ã±ãŒã¹ãããã«ã¯mdocã®ããŒã¿æ§é ãæ¥æ¬ã®ããã«äœãããAPIã®ç޹ä»ãªã©ãæ®æ®µã¯ç¥ãããšã®ã§ããªãå®è£
ã®è©³çްã«è§Šããããšãã§ãããšãŠã貎éãªäœéšã§ããã Swiftã³ãŒãããã«ãšLT倧äŒã®ç±æ° Swiftã³ãŒãããã«ã¯ãå¶éæéå
ã«èŠä»¶ãæºããããã°ã©ã ããSwiftã§ããã«çãæžãããšããç«¶æã§ãç·åŒµæã®ããäžãåå è
ã®æ¹ã
ã®ã³ãŒãã£ã³ã°ã¹ããŒããšçºæ³åã«å§åãããŸããã LT倧äŒã¯ãåå è
ããµã€ãªãŠã ãæ¯ã£ãŠäŒå Žå
šäœãäžäœãšãªããã©ã€ãã®ãããªè³ãããªé°å²æ°ã§ããïŒç¹ã«å°è±¡çã ã£ãã®ã¯ã課éåšãã®LTãç¶ããæé垯ã§ããå瀟ããããã®ç¥èŠã工倫ãåçž®ãããŠããããšãŠãå匷ã«ãªããŸããã åããŠã®iOSDCã¯ãæè¡çãªåŠã³ã¯ãã¡ãããäœãããã³ãã¥ããã£ã®æž©ãããšç±éãèã§æããããæé«ã®äœéšã§ãããããŒã¹ã§ã®äº€æµãåºæ¿çãªã»ãã·ã§ã³ããããŠãŠããŒã¯ãªäŒç»ãŸã§ãšãŠãç±çæã®ããçŽ æŽãããã€ãã³ãã§ããïŒ æ©å· ç·š ã¿ã€ããŒã§iOSãšã³ãžãã¢ãããŠããæ©å·ã§ãã äžæšå¹Žã¶ãã«iOSDC Japan 2025ã«ãªãã©ã€ã³åå ããŠããŸããïŒä»å¹ŽããäŒå Žãå€ããããŸããã€ããšéãé°å²æ°ã§ãããïŒå人çã«ã¯ãèªå®
ããè¿ããªã£ãã®ã§å¬ããã§ãïŒã ããŠãããã€ãã®ã»ãã·ã§ã³ãèŽè¬ããäžã§ãç¹ã«åŠã³ãå€ãã£ãã®ãããã¹ã¯ã¹ãããçºè¡šãããã 5000äžããŠã³ããŒããè¶
ããæŒ«ç»ãµãŒãã¹ãæ¯ãããã°åºç€ã®èšèšéçºã®å
šãŠ ãã§ãã speakerdeck.com å€§èŠæš¡ãµãŒãã¹ã«ããããã°åºç€ãšãããæ®æ®µãªããªãç¥ãããšã®ã§ããªãé åã«ã€ããŠã詳现ãªã³ãŒãããŒã¹ã§ã®è§£èª¬ãå®è·µçãªç¥èŠãå
±æãããŠãããå€ãã®åŠã³ããããŸãããæ¬èšäºã§ã¯ãçºè¡šå
容ã®èŠç¹ãšç¹ã«å°è±¡ã«æ®ã£ãç¹ã«ã€ããŠãŸãšããŠãããŸãã çºè¡šã®èŠç¹ 1. æ°ãã°åºç€ãTrackerãã®èšèšææ³ãšç¹åŸŽ ããã©ãŒãã³ã¹ãšæè»æ§ã®åäžãç®çãšããã¢ãã³ãªæè¡ã¹ã¿ãã¯ãå
šé¢çã«æ¡çšãSwift 6ã® Sendable ã«æºæ ããèšèšãããŒã¹ã«ã䞊è¡åŠçã«ããé«ãããã©ãŒãã³ã¹ãgzip/deflateã«ããããŒã¿å§çž®ããããŠã¢ãã€ã«ç°å¢ã®äžå®å®ãªãããã¯ãŒã¯ãèæ
®ããExponential Backoffã«ããå
ç¢ãªãªãã©ã€æŠç¥ãäž»ãªç¹åŸŽãšããŠæããããŠããŸããã 2. Clean Architectureã«ãã責åã®åé¢ ã¢ãŒããã¯ãã£ã«ã¯Clean Architectureãæ¡çšãEntityãUse CaseãData LayerãPublic Interfaceãæç¢ºã«åé¢ããããšã§ãåã³ã³ããŒãã³ããç¬ç«ããŠæ©èœãããã¹ãå®¹ææ§ã倿Žå®¹ææ§ãæ Œæ®µã«åäžãããšã®ããšã§ãããããã«ãããå
šäœã§80%以äžãšããé«ããã¹ãã«ãã¬ããžãå®çŸããŠããŸããã 3. Firebase Remote ConfigãæŽ»çšããå®å
šãªç§»è¡æŠç¥ Firebase Remote Configããã©ã°ãšããŠå©çšããæ§åºç€ãšæ°åºç€ã䞊è¡çšŒåããããã€ã§ãåãæ»ããå¯èœãªç¶æ
ã§æ®µéçã«ç§»è¡ãé²ãããšãããéåžžã«çŸå®çã§ãªã¹ã¯ç®¡çã«åªããã¢ãããŒãã玹ä»ãããŸããã ç¹ã«å°è±¡ã«æ®ã£ãç¹ã»ææ³ ãã®çºè¡šã§ã¯ããã°åºç€ãšããããŒãã«çãŸãããå€§èŠæš¡ãªã¢ãã€ã«ã¢ããªéçºå
šè¬ã«åœ¹ç«ã€ç¥èŠãéæã«èŠãããŸããã ãã°ã®éä¿¡èªäœã¯ãŠãŒã¶ãŒã®ç®ã«èŠããªãéšåã§ãããã¡ã€ã³ã¹ã¬ããããããã¯ããªããã¡ã¢ãªãå§è¿«ããªããšãã£ã ãŠãŒã¶ãŒãã¡ãŒã¹ããªèŠç¹ ãšããã¹ãå®¹ææ§ãé«ããã¢ãŒããã¯ãã£èšèšãé«ããã¹ãã«ãã¬ããžãšãã£ã éçºè
ãšããŠã®ãã ãã ãèŠäºã«äž¡ç«ãããŠããããŸãã«ãŠãŒã¶ãŒãšéçºè
ã®åæ¹ã«ãšã£ãŠãWin-Winããªå
容ã ãšæããŸããã ãŸããFirebase Remote Configã®æŽ»çšæ³ãéåžžã«å°è±¡çã§ãããç¹ã«ã å°æ¥çã«å
šäœå
¬éããåæã®Configã¯ãããã©ã«ãå€ãtrueã«ããŠããããšã§ãç§»è¡å®äºåŸã«Configãåé€ã§ãã ããšããç¥èŠã¯ãç§èªèº«ãéå»ã«éã®èšèšã§å€±æããçµéšãããããããã倧å€å
±æããŸããã ãã®ããã«ãèªèº«ã®æ¥åã§ããã²åèã«ãããŠããã ãããåŠã³ã®å€ããçŽ æŽãããçºè¡šã§ããã åç° ç·š åã¯ä»å¹Žãäºåç®ã®iOSDCãžã®åå ã§ãããä»åãå¹
åºããžã£ã³ã«ã§è峿·±ãããŒã¯ããããããããŸããããã®äžã§ãåãæãé¢çœããšæããã»ãã·ã§ã³ã¯ã ãã£ãã ããã®ãç¬èªUIã§å®çŸããå€éšã¹ãã¬ãŒãžããã€ã¹ã®èªã¿æžããã§ããã fortee.jp å¶ç¶ãªã®ã§ãããã¡ããã©ãã®ããŒã¯ã®åæ¥ã«ãåãå人çã«èª¿æ»ãå§ãããããã¯ã§ããã åã«ãšã£ãŠã¯ãããããããªãããã¯ã ã£ãããšããã¢ã亀ããèŽè¬è
ãæ¹ãã€ããããŒã¯ãé
åçã«æããã®ã§ãã¡ãã®ããŒã¯ãéžã³ãŸããã ãã®ããŒã¯ã¯ãiPhoneã§æ®åœ±ããåçãã»ãããªããŒã¿ãå€éšã¹ãã¬ãŒãžã«çŽæ¥ä¿åããæ¹æ³ã玹ä»ããå
容ã§ãããŸã æ
å ±èªäœãå°ãªãããšããããAppleã®ãšãŽã¡ã³ãžã§ãªã¹ãã®æ¹ãšäžç·ã«èª¿æ»ãé²ããŠãå®è£
ãå®çŸãããšããœãŒãã亀ããããŒã¯ã«ãªããŸãã iPhoneã®ã«ã¡ã©ã§æ®åœ±ããåçãã»ãããªããŒã¿ãä¿åããå Žæãæ¹æ³ã¯ã倧ãã2ãã¿ãŒã³ãçšæãããŠããŸãã äžã€ç®ã®æ¹æ³ã¯ãiPhoneã®ã¹ãã¬ãŒãžã«ä¿åããæ¹æ³ã§ããããã¡ãã®æ¹æ³ã¯æãããç¥ãããŠããããµã³ãã«ã³ãŒããè±å¯ã§é£æåºŠã¯ãããŸã§é«ããããŸããã PhotoKit ãã¬ãŒã ã¯ãŒã¯ã䜿çšããããšã§ã10è¡çšåºŠã®ã³ãŒãã§å®çŸããããšãã§ããŸãã zenn.dev äºã€ç®ã®æ¹æ³ã¯ãiPhoneã«æ¥ç¶ããŠããå€éšã¹ãã¬ãŒãžã«ä¿åããæ¹æ³ã§ãããã¡ãã®æ¹æ³ã¯ãããã«2ãã¿ãŒã³ã«åãããŠããŸãã äžã€ç®ã®æ¹æ³ã¯ã UIDocumentPickerViewController ãŸãã¯ã.fileExporter ã¢ãã£ãã¡ã€ã¢ã䜿çšããæ¹æ³ã§ãããããã®APIã䜿çšããããšã§ãããŒã¿ãå€éšã¹ãã¬ãŒãžã«ä¿åããããšãã§ããŸãããããããããã®æ¹æ³ã§ã¯ããŠãŒã¶ãŒã«ããŒã¿ã®ä¿åå
ãéžãã§ãããå¿
èŠããããŸãããŠãŒã¶ãŒã¯ãããŒã¿ã®ä¿åå
ãéžæããããšãã§ããã¡ãªãããããäžæ¹ããŠãŒã¶ãŒã®æäœæ°ãå¢ãããŠããŸãããšã«ãªããŸãã ããã§ä»åã®ããŒã¯ã§ç»å ŽããAPIãã AVExternalStorageDevice ã§ããiOS 17ãã䜿çšå¯èœãªæ¯èŒçæ°ããAPIã§ãããã®APIãšé¢é£APIã䜿çšããããšã§ãiPhoneã«æ¥ç¶ããŠããå€éšã¹ãã¬ãŒãžã«ãããŒã¿ãçŽæ¥ä¿åã§ããŸããå®è£
ã³ã¹ããé«ããªããæ°åè¡çšåºŠã®ã³ãŒãã§æ¬æ©èœãå®çŸã§ããããšãç¥ããŠãåã«ãšã£ãŠã¯åŠã³ãå€ãããŒã¯ã§ããã æ¬ããŒã¯ã§ã¯ãå®éã«äŒå Žã§æ®åœ±ããåçããiPhoneã«æ¥ç¶ãããŠããå€éšã¹ãã¬ãŒãžã«çŽæ¥ä¿åããä¿åããããŒã¿äžèЧã衚瀺ãããšãã£ããã¢ããããæ¥œããããŒã¯ãèŽãããšãã§ããŸããã æè¿ã§ã¯ãé«ã¹ãã¬ãŒãžç«¯æ«ãé€ããŠã¯ãProRes LogããŒã¿ãæ®åœ±ããæã«å€éšã¹ãã¬ãŒãžãšã®æ¥ç¶ãå¿
é ã«ãªã£ãŠããŠããŸããä»åŸãå€éšã¹ãã¬ãŒãžæ¥ç¶ãå¿
é ã«ãªãæ©èœãå¢ãããããããªãç¶æ³ã«ãªãå¯èœæ§ãããã®ã§ãããã«æ·±æããé²ããŠã¿ãããšæããŸãã æåŸã« ãã®3æ¥éãéããŠæè¡çãªç¥èŠãæ·±ããããä¹
ããå人ã«äŒã£ãŠè©±ãããããšãã§ãããããææçŸ©ãªæéãéãããŸããããã®å ŽãçšæããŠãã ãã£ãiOSDCã¹ã¿ããã®æ¹ã
ãåå è
ã®ã¿ãªããæ¬åœã«ããããšãããããŸããïŒ äžèšã§ç޹ä»ããã»ãã·ã§ã³ä»¥å€ã«ãéåžžã«è峿·±ãã»ãã·ã§ã³ãå€ããããŸããã èšäºã«ããå
容ãããã®ä»ã®å
容ã«ã€ããŠããããã¿ã€ããŒã®ãšã³ãžãã¢ãšè©±ããããšããæ¹ãããã£ãããã°ãã²ãæ°è»œã«ã話ãããŸãããïŒ
ã¿ã€ããŒã®æ±ç°ã埳å¯ãç¥å±±ãäºäºãæ¡åãå¿è³ã§ãã KaigiPass ãšããå¶åºŠãå©çšã㊠Kaigi on Rails 2025 ã«åå ããŠããŸãããã¿ã€ããŒã¯æšå¹Žã«åŒãç¶ãã¹ãã³ãµãŒããããŠããã ããä»å¹Žã¯ãªããšå¹žããªããšã«ããŒã¹ãåºãããŠããã ããŸãããä»åã¯ãã㪠Kaigi on Rails 2025 ã®åå ã¬ããŒãã KaigiPass ãå©çšããã¡ã³ããŒã§èšè¿°ããŠããããšæããŸãã 2åå°ã§1500 examples å®èµ°ïŒçé CI ãæ¯ããç°å¢æ§ç¯è¡ Hiroshi Tokudomi https://kaigionrails.org/2025/talks/falcon8823/#day1 ã2åå°ã§1500 examples å®èµ°ïŒçé CI ãæ¯ããç°å¢æ§ç¯è¡ããšããã¿ã€ãã«éããCI ãã©ã®ããã«é«éåããŠãããã«ã€ããŠã®çºè¡šã§ããã åŒç€Ÿã§ãçŸåš self-host runner ã䜿ã£ãŠ GitHub Actions äžã§ CI ãåããŠããã2 äž 2 åä»¶ã®ãã¹ããå¹³å 9ã10 åçšåºŠã§å®è¡ããŠããŸããCI ã¯çããã°çãã»ã©ãããã®ãªã®ã§ããã®ã»ãã·ã§ã³ã¿ã€ãã«ãèŠããšãã«ãããã¯çµ¶å¯Ÿã«èŠã«è¡ããããšæã£ãã®ã§ããããŸãã«æåŸ
éãåèã«ãªãå
容ã§ããã ãã¹ãã䞊åã«åå²ããŠå®è¡ããæ¹æ³ãšã㊠Knapsack Pro ã玹ä»ãããŠãããèªåãã¡ã䜿ã£ãŠãã split-test ãšæ¯èŒããªããèãããšãã§ããŸãããKnapsack Pro ã¯å®è¡æéã®å±¥æŽãããšã«åå²ãæé©åã§ãããšã®ããšã§ãä»åŸæ€èšããŠã¿ãããšæããŸãã ãŸããEBS ã® I/O ãããã«ããã¯ã«ãªãããšã§ CI ãé
ããªã話ãå°è±¡çã§ãããåŒç€Ÿã§ã CI å®è¡ãéãªããš I/O 䜿çšçãã®ãªã®ãªãŸã§äžããããšããããtmpfs ã䜿ãããšã§æ¹åã§ããå¯èœæ§ãããã®ã§ã¯ããšã¯ã¯ã¯ã¯ããªããèããŠããŸããã ã¡ããã©æè¿ CI åºç€ã self-host runner ã«ç§»è¡ããã°ããïŒ åè ïŒãšããããšãããããæ¬¡ã¯ã©ãããã¥ãŒãã³ã°ã§ãããããšèããŠããã¿ã€ãã³ã°ã§ã®ã»ãã·ã§ã³ã ã£ãã®ã§ãå人çã«ã¯ããªãåºãããŸãããCI ãã©ãéããããã¯æ¥ã
ã®éçºäœéšã«çŽçµããããŒããªã®ã§ãä»åã®åŠã³ãæã¡åž°ã£ãŠæ¹åã«ã€ãªããŠããããã§ãã https://speakerdeck.com/falcon8823/2fen-tai-de1500exampleswan-zou-bao-su-ciwozhi-eruhuan-jing-gou-zhu-shu-kaigi-on-rails-2025 dynamic! Keisuke Kuwahara https://kaigionrails.org/2025/talks/moro/#day1 https://speakerdeck.com/moro/dynamic 1æ¥ç®ã®ããŒããŒããdynamic!ãã¯ãéçãªã¢ãããŒããšã¯å¯Ÿç
§çã«ãæåããå®ç§ãªãŽãŒã«ãç®æãã®ã§ã¯ãªããç¶ç¶çã«å€åããŠããããã»ã¹ãéèŠããããŒãã§ããã ã»ãã·ã§ã³ã§ã¯ãéçºã现ããé²ããããã®ç¬¬äžæ©ãšããŠããããããŒãã¹ãã®å®è£
ãéèŠã ãšåŒ·èª¿ãããŠããŸãããããããŒãã¹ãšã¯ããŠãŒã¶ãŒã䜿ãããæå°éãã€æãã·ã³ãã«ãªæ©èœãã®ããšã§ãããããããŸãå®è£
ããããšã§ãæ©ã段éã§ãã£ãŒãããã¯ãåŸãŠãæ¹åãµã€ã¯ã«ãåãããšãå¯èœã«ãªããŸãã ç¹ã«å°è±¡çã ã£ãã®ã¯ãéçºè
ã ãã§ãªããããŒã å
šäœã§å€åãèµ·ãããŠãããšããèãæ¹ã§ããç§èªèº«ãè€éãªæ©èœãå®è£
ããéãæåãããã¹ãŠãç¶²çŸ
ããããšæéããããçµæããããã¢ãããŠã¿ããšå€ãã®ãã£ãŒãããã¯ãããã£ãããšããçµéšããããŸãããã®æã¯ã§ããã ãææãããããªãããã«å®è£
ãããããšããæ°æã¡ã«ãªã£ãŠããŸããããä»åã®è©±ãèããŠãåããã®ããã¡æ©ãããŒã ã¡ã³ããŒãã¹ããŒã¯ãã«ããŒã«ç¢ºèªããŠããããæ©ããã£ãŒãããã¯ãåŸãããšã®éèŠæ§ãåèªèããŸããã ãŸããããŸã§ã¯ãåªç§ãªãšã³ãžãã¢ã»ã©ãäžçºã§å®ç§ãªãããã¯ããäœããã®ã ããšæŒ ç¶ãšæã£ãŠããŸããããå®éã¯éã§ãããçµéšè±å¯ãªãšã³ãžãã¢ã»ã©ãæå°éã®éçºããå§ããæ®µéçãªæ¹åãç©ã¿éããŠããã®ã ãšæ°ã¥ããŸããã ã¢ãžã£ã€ã«éçºã¯ä»ã®ããŒã ã§ã¯åœããåã«ãªã£ãŠããŸããããåçã«å€åãç¶ããããšãã®éèŠæ§ãæ¹ããŠæ·±ãæããŸãããå®ç§äž»çŸ©ã«ãšããããŠæåã®å®è£
ã«æéããããã®ã§ã¯ãªããå€åãæããã«ããã®æã
ã§æãã·ã³ãã«ãªæ¹æ³ãå®è·µããŠãããããšæããŸãã ãæè¡è² åµã«ãªããªãã»ééããªãã æš©é管çã®èšèšãšå®è£
Akitoshi Shiga https://kaigionrails.org/2025/talks/naro143/#day2 https://speakerdeck.com/naro143/ji-shu-fu-zhai-ninaranaijian-wei-enai-quan-xian-guan-li-noshe-ji-toshi-zhuang WebãµãŒãã¹ã«ãããŠé »åºã®èª²é¡ã§ããæš©é管çã«å¯ŸããŠãèªç€Ÿã®ãããã¯ãã§è¡ã£ãåãçµã¿ãçºè¡šãããŠããŸããã æš©é管çã®ãããã¡ãªã¢ã³ããã¿ãŒã³ãšããŠãæš©éã®å€å®ãå¿
èŠãªå Žæã§æäœè
ã®åœ¹å²ãå€å®ãããããªå®è£
ã«ã€ããŠãããããŠããŸããã äŸ: ããControllerã®createã¢ã¯ã·ã§ã³å
ã§ if admin? 圹å²ãå€å®ããå Žåã¯ãå€å®ããç®æã圹å²ããšã«äœãã§ããããææ¡ããå¿
èŠããããŸãã 圹å²ããšã®æš©éã¯ããµãŒãã¹å
容ãäºæ¥ç°å¢ã®å€åãæ¿ããç¶æ³ã«ãããŠã¯ããã«è€éåããŸãã ãã®äžããã®å®è£
ã§ã¯æš©éã倿Žãããã³ã«ããã¹ãŠã®å€å®ç®æã«æãå ããªããã°ãããŸããã ãã®çµæãšããŠããã«ä¿å®ãå°é£ã«ãªããŸãã ããã§ã圹å²=äœè
ã§ãããã§ã¯ãªãæš©é=äœãã§ããã ã«äŸåããããšããã®äžã§ãæš©é管çã«å¿
èŠãªèŠçŽ ã§ããã察象ããæäœãã圹å²ããæ¡ä»¶ãã«å¯Ÿããèšè¿°ãåé¢ã»ææåããèšèšãçºè¡šãããŠããŸããã å
·äœçã«ã¯ãmoduleåãããã察象ãããšã«ã圹å²ãã®ã¯ã©ã¹ãäœãããæäœãã«çŽã¥ããã¡ãœããå
ã§ãæ¡ä»¶ããå€å®ããå®è£
ãè¡ã£ãŠããŸããã ããã«ãã£ãŠã察象ããšã«åœ¹å²ãæäœãè¡ãããã®æ¡ä»¶ãéåžžã«ã·ã³ãã«ã«ãªããŸããã https://speakerdeck.com/naro143/ji-shu-fu-zhai-ninaranaijian-wei-enai-quan-xian-guan-li-noshe-ji-toshi-zhuang?slide=64 ãã®çµæãã«ã¹ã¿ããŒãµããŒãããããã¯ããããŒãžã£ãŒãGitHubã§ã³ãŒããèªãã§çè§£ã§ããããã«ãªãã瀟å
ããã®ãšã³ãžãã¢ãžã®æš©éã«é¢ããåãåããã0ã«ãªã£ãããã§ãã ææãšããŠãæäœãã察象ãå¢ãããã³ã«ãã¹ãŠã®åœ¹å²ã®ã¯ã©ã¹ãäœæããå¿
èŠããããã®ã®ãæ¡ä»¶ãšããã³ã¢ãªããžãã¯ã¯äžç®æã«éäžãããã®ã§ä¿å®ãããããã ãšæããŸããã ãŸããæš©éãšããè€éãªããžãã¹ããžãã¯ãéãšã³ãžãã¢ãçè§£ã§ããã»ã©ã·ã³ãã«ã«ã³ãŒãã§è¡šçŸãããŠããããšã«æéãåããŸããã è€éãªããžãã¹ããžãã¯ã«ã¡ãããšåãåã£ãŠã·ã³ãã«ãªè¡šçŸãç®æãããšã®å¹æãšå€§åããä»äžåºŠå®æããŸããã Railsã«ãã人工çãèšèšãå
¥é Yutaka Kamei https://kaigionrails.org/2025/talks/nay/#day1 äºäºã§ããäžèã®å€§å Žããã®ãã¡ãã®ã»ãã·ã§ã³ãçŽ æµã ãªãšæã£ãã®ã§ããã®ã»ã¯ã·ã§ã³ãæžãããŠããã ããŠããŸããç§ãªãã«ãã®çºè¡šãè§£éãããšãèšèšãããŸããªãæ¹æ³ã«ã€ããŠæ·±æãããå
容ã ã£ãã®ããªãšæããŸãããã® AI æä»£ã«ã³ãŒãã£ã³ã°ã AI ã«ä»»ããããšã¯å¢ããŠããäžã§ã人éãèšèšãã§ããããšã®éèŠæ§ããšãŠãé«ãŸã£ãŠããŸãããããªäžã§ãã©ã®ããã«ããŠãã£ãšããŸãèšèšãã§ããããã«ãªãã®ãïŒãšããã®ããèªèº«ã®å¶ç¶ã®çµéšãã圢åŒç¥ã«ããŠãŸãšããŠãã ãã£ãå
容ã§ããã 宿ããã·ã¹ãã ãæãæµ®ãã¹ãŠãããããéç®ãããŠèããŠãããšããã®ã§ã¯ãªããïŒãšããã®ãéèŠããã§ãããç§ã®çµéšã§ãããŽãŒã«ãæãæµ®ãã¹ãŠããã«è³ããŸã§ã®ãã€ã«ã¹ããŒã³ãæãã¹ããããéãããšããããæ¹ãããã®ã§ã¯ãªããïŒãšããããšã æã£ãŠãã ã®ã§éåžžã«çŽåŸæããããŸãããŸãã«å
šäœããéšåãžããšããæèãè¡ãããšã«ãã£ãŠããŸãèšèšãã§ããããšããèãæ¹ã§ããããããã«ã Ruby on Rails ã MVC ãããŒã¹ã«ãããã¬ãŒã ã¯ãŒã¯ã ãããšãã£ãŠãã¢ãã«âã³ã³ãããŒã©ãŒâãã¥ãŒãšããé çªã«æžãå¿
èŠããªãã§ãããããããã®é çªã§æžããšå
šäœãèŠããªãç¶æ
ã§éçºãããããšã«ãªãã®ã§ã次第ã«ã€ãã¯ãã ããã®ã³ãŒããçæãããŠããŸããŸãããã®å Žãã®ãã®ã³ãŒãã«ãªã£ãŠããŸããšããã¯ãããã¯ããã§ä»åŸã®ã¡ã³ããã³ã¹æ§ã«åœ±é¿ããŠããããã§ããããã¹ãç¶æ
ããããã¯æ¬è³ªçãªãŽãŒã«ãæããŠãããããéç®ãããããšããèãæ¹ã®èšèªåããšãŠãçŽ æµã§ããã ãŸããåä»ãã®éèŠæ§ã«ã€ããŠèªã£ãŠããããã®ãããã£ãã§ããã Ruby çéã§ã¯ãååéèŠããšããã®ã¯ããç¥ãããŠãããšæããŸãããèšèšã®äžã§ãªãåä»ããéèŠãªã®ãïŒãšããããšã«ã€ããŠã®èšèªåãã¯ãªã¢ã§ããããããã£ãã§ããããããã³ãŒãã®ã¬ãã«ã§ã¯ãªããæœè±¡åºŠã®é«ãã¬ãã«ã§çãååãã€ããªããèããé²ããŠããã¶ã€ã³ããŒãããåæšéžæãã仮眮ããããããšãéèŠãšãããããªããšããã£ããã£ãŠãããšæããŸããã仮眮ãããšããã¯ãŒãã£ã³ã°ãããã§ããããããã«ããæ±ºå®ããšãããšåŸæ»ããã§ããªãæããããŸãããã仮眮ãããšããã®ã¯ã倿Žã®äœå°ãããããšãã瀺åããæããããŠãæ¥æ¬äººãšããŠããããæ¥æ¬èªè¡šçŸãå©çšã§ããã®ã¯ãšãŠãã©ãããŒã ãªãšæããŸããããããã°ãã仮眮ããã§æãåºããŸãããããã®ã»ãã·ã§ã³ã§åç
§ãããããŒããŒãã® dynamic! ã«ããã£ãããã«ããªãã·ã§ããªãã£ãŒã«ã€ããŠèšåãæè¿å¢ããŸããããã仮眮ãããšããçšèªã«ããªãã·ã§ã³ãšãããã¥ã¢ã³ã¹ãæããŸãããTidy First?ããèªãã§ç§ãªãã«ãªãã·ã§ã³ã«ã€ããŠçè§£ãããŠããã€ããã§ããããããããŠãããããªç»å£ãèããŠç§ãªãã®è§£éããããããã£ãŠãããªäºæãããŠãããããæããŠããŸããã¿ã㪠Kent Beck ã奜ãã§ããããç§ãã§ãã 仿¹ããŠServiceã¯ã©ã¹ã«ã€ããŠèãã ãããRailséçºè
ã®10幎ã Yuki Eda (edy) https://kaigionrails.org/2025/talks/joker1007/#day1 Ruby on Railsã§ã¢ããªã±ãŒã·ã§ã³éçºã«åŸäºããŠãããšã³ãžãã¢ã§ããã°äžåºŠã¯éãã§ãããServiceã¯ã©ã¹ã2025幎ã®ãã®ã¿ã€ãã³ã°ã§jokerããããã®ã¿ã€ãã³ã°ã§çºè¡šãè¡ãçç±ãæ°ã«ãªãèŠèŽããŸããã åé ã§æŽå²çãªçµç·¯ãå«ããŠæ¥æ¬åœå
ã§åžæããèæ¯ã®èå¯ãããããŒãã§ã¯ãRuby on Railsãã«ãŠServiceã¯ã©ã¹ã顿ã«å·çãããåœæã®æå³ãå·çåŸæ°å¹Žçµã£ãŠããã®[Qiitaã§ã®ãšã³ããª]( https://qiita.com/joker1007/items/25de535cd8bb2857a685 )ãªã©ã«è§Šãããã€ã€ãServiceã¯ã©ã¹ã«å¯ŸããŠã¯åºæ¥ãéã䜿ããªãæ¹ãè¯ããšçµè«ã¥ããããŠããŸãããçç±ã¯ãéçºçµ±å¶ã®å°é£ããäžåãã¡ãªãããåŸãããªãããšã®ããšã ãã®ç¹ãç§ãæãåœããç¯ã¯ãããäŸãã°Fat Modelãè§£æ¶ããææ®µãšããŠServiceã¯ã©ã¹ãéžæããŠããéå»ããããŸããé©åãªåœåä»ãããããšããŠããã¢ããªã±ãŒã·ã§ã³ã®æé·ãæ°å¹Žéã®éçšã®éçšã§ç¹å®ã®ãã¡ã€ã³ã ãã®åŠçã§çãŸããã«è¥å€§åãããã©ã³ã¶ã¯ã·ã§ã³ã¹ã¯ãªããã«ãªãåŸåããããšæããŸããããã¯jokerãããèšåãããŠãããåºæºã®äœãã«ãããããæ¥ãéšåããé©åãªãã¡ã€ã³ã¢ããªã³ã°ãæ ã£ãçµæã®2ã€ã倧ããªåå ã ãšãçºè¡šãèããªããæ¹ããŠèããããããŸããã çµå±ã®ãšãããããžãã¹ã«ãããé¢å¿äºã顧客ãããŒã ã¡ã³ããŒã亀ããªããã·ã¹ãã å
ã§ããŸãå
·åã«è¡šçŸã§ãããããããã®äžå¯§ãªæœè±¡åãšå
·äœåã®ç¹°ãè¿ãäœæ¥ã倧äºã§ãServiceã¯ã©ã¹ãããã§ãã察æéЬãšããŠæããããããšã®å€ãFormã¯ã©ã¹ãå«ããŠããã¶ã€ã³æ¹æ³ã¯è¡šçŸææ³ã®äžã€ã«éããªããšããããšã§ããã çºè¡šã®æ«å°Ÿã®ã¹ã©ã€ãã®ãæ£è§£ã¯ãªããäžç·ã«èãç¶ããŸããããããœãããŠã§ã¢èšèšã¯ç¶ç¶çãªå¶ã¿ããéåžžã«å°è±¡çã§å¿ã«çããŠãããããšæããŸããã å±¥æŽ on Rails : Bitemporal Data Modelã§å®çŸããå±¥æŽç®¡ç Daichi Kamiyama - dak2 https://kaigionrails.org/2025/talks/hypermkt/#day2 https://speakerdeck.com/hypermkt/history-on-rails-with-bitemporal-data-model çŽè¿ã§å±¥æŽãæ®ããã©ããã®èšèšã«é ãæ©ãŸããããšããããBitemporal Data Model ã§ã®å±¥æŽç®¡çã®è¯ãæªããæ°ã«ãªã£ãã®ã§ãæèŠãããŠããããŸããã å±¥æŽããŒãã«ã®ãã¿ãŒã³ãšããŠåèã«ãªãã®ã¯ãäžäŒããã® https://user-first.ikyu.co.jp/entry/history-table ãã®ã¹ã©ã€ããéåžžã«åèã«ãªããšæã£ãŠããŸããæ®éã«âå±¥æŽâãšããæŠå¿µã衚çŸããã®ã§ããã°ããã®ã¹ã©ã€ãã®å
å®¹ã«æ²¿ã£ãŠå ŽååãããŠããã°å€ãã®å Žåã¯ç¶²çŸ
ã§ããããããªãããšæã£ãŠããŸãã ãã ãSmartHR ãããæ±ããã¡ã€ã³ãšã㊠âåŸæ¥å¡ãèµ·ç¹ãšããå€åâ ã«åãåã£ãŠããå Žåããããšããåãã£ãåºæ¥äºãæ£ããæ¥ä»ã§åæ ãããããšããããŒãºãããããã§ãã確ãã«èšãããŠã¿ãã°ããã§ãããã ã¬ã³ãŒããšããŠæå¹ãªæéïŒex. 2025/09/26 ãŸã§ã«åœ¹è·ãéšé·ã ã£ãïŒãšãæäœæéã®2ã€ã®æé軞ã§å±¥æŽã管çããã³ã³ã»ããã Bitemporal Data Model ã§ããæå¹ãªæéã ãã ãšããã®ã¬ã³ãŒãããã€ç»é²/ç¡å¹ã«ãªã£ããã®äºå®ãæãèœã¡ãã®ã§ã2ã€ã®æé軞ã§ç®¡çããããšãã話ã®ããã§ãã ãããšçŽæçã«æã£ãã®ã¯2ã€ã®æé軞ãèæ
®ããªããšãããªãã®ã§ãèããããšãæãç®ã§å¢ããŠããŸãæžå¿µãæã¡ãŸãããSQL ãè€éã«ãªãããã§ããããåŸããæå¹ãªæéã远å ãããå Žåã«ãæå¹æéãéè€ããŠã¯ãããªããšæãã®ã§ãããã®å¶çŽã Model ã®ããªããŒã·ã§ã³ãDatabase ã®å¶çŽãšãã«èæ
®ããå¿
èŠã¯ãããã ãããªãšãã ã¹ã©ã€ãã§ãæ³å®å€ã®å±¥æŽããŒã¿ãäœãããŠããããšããããåå 調æ»ã«äžžäžæ¥ããã£ããšããèšåããããŠããŸãããåºæ¬çã« INSERT ãããã¯ããªã®ã§ãããããåé¡ãšãªã£ãŠããããŒã¿ãç¹å®ããã®ã«æéãããããšããã®ã¯ãããã ãããªãšãactiverecord-bitemporal gem ã§ã¯ visualizer æ©èœããããã¬ã³ãŒãã®å±¥æŽãå¯èŠåããŠãããããã§ãã æå¹æéã®æ¥ä»ç®¡çã timestamp ã ãšæåç§ã®ç®¡çããããããdate åã«å€æŽããŠéçšå®¹ææ§ãæ
ä¿ãããšãã話ãè峿·±ãã£ãã§ãããã®éšåã§æå³ããªãã¬ã³ãŒããçãŸããã±ãŒã¹ã¯ããããã ãªãšæã£ãŠãããšããã https://tech.smarthr.jp/entry/2025/09/12/115617 ãæèŠãããŸãã«ãã®åé¡ããã£ãããã§ãããâå±¥æŽã®äžæ¬åºååŸãExcelã§é©çšæ¥ãç·šéãããšExcelã®ä»æ§ã§æåç§ã®æ
å ±ãã00:00:00ãã«äžžããããŠããŸãâãâäŸãã°éšçœ²ãã¹ã¿ãŒã®æŽæ°ãäžŠã¹æ¿ããåé€ãåŸæ¥å¡éšçœ²ã®ç»é²ãæŽæ°ãªã©ã§ã¯å€æ°ã®ã¢ãã«ãåäžãã©ã³ã¶ã¯ã·ã§ã³ã§æŽæ°ãããŸãã ãã®ãšããé©çšæ¥ã®æå»ãåºå®ããŠæããªããšãåŠçã¿ã€ãã³ã°ã®å
ããªãºã¬ã«ãã£ãŠé©çšæ¥ãç§æªæºã®ç²ŸåºŠã§ç°ãªã£ãå±¥æŽãäœæãããŠããŸãâ ãâåäžé©çšæ¥ã®æŽæ°ã«ãããŠã瀟å¡çªå·ãšé©çšæ¥ã®çµã¿åããã§ã¬ã³ãŒããç¹å®ããéããŠãŒã¶ãŒããç§æªæºãåãäžããæ¥æãåãåããç§æªæºãèæ
®ããŠå¯Ÿè±¡ã®å±¥æŽãæ¢ãâ ãªã©ãªã©ãããªãè² ã®åŽé¢ãæ±ããŠããããã§ãã倧å€ãªç§»è¡ã ã£ãããã§ããããšãŠãæå³ã®ããç§»è¡ã ãªãšæããªããæèŠããŸãããdate åã ãš unique å¶çŽã«ãã£ãŠéè€ã匟ãããããªããŸãããã âå±¥æŽâ ã衚çŸãã1ã€ã®ææ®µãšã㊠Bitemporal Data Model ã䜿ã£ããªã¢ã«ãªå£°ãå
¬éãããŠããã®ã¯ãæ¬åœã«å¬ããã§ããããšãŠãåèã«ãªã話ãèããŸãããä»åŸã¢ããªã³ã°ããéã¯ã1ã€ã®ææ®µãšããŠé ã®çé
ã«ã€ã³ããã¯ã¹ã貌ã£ãŠããããšæããŸããã Kaigi on Rails 2025 ã«åå ããã¿ã€ããŒã®ã¡ã³ããŒ
ããã«ã¡ã¯! ã¿ã€ããŒã§ããŒã¿ã¢ããªã¹ããããŠããtakahideã§ãã çªç¶ã§ãããããã®äºæ¥ãæåãããã«ã¯ã©ãããã°ïŒããšãã£ãããµããããšå€§ããªããŒããæž¡ãããŠããããŠãã©ãããæãã€ãããã...ã ãšæ©ãã çµéšã¯ãããŸãããïŒ ã¿ã€ããŒã§ããä»åŸããäŒç€Ÿã®éèŠèª²é¡ã«é¢ããåæãããžã§ã¯ããå¢ããäžã§ãããããäžæµã®èª²é¡ãèŠã€ãã粟床ã®é«ã仮説ãç«ãŠãåãããããã課é¡çºèŠã»ä»®èª¬æèåãã®éèŠæ§ãé«ãŸããšèããŠããŸãã æ¬èšäºã§ã¯ãã仮説åäžãããžã§ã¯ããã§ã®åãçµã¿ãå
ã«ãè€éãªèª²é¡ãæ§é åããå
·äœçãªã¢ã¯ã·ã§ã³ã«ç¹ããããã®æèæŽçè¡ãã玹ä»ããŸãã ãã®èšäºããåãããã«èª²é¡çºèŠã«æ©ãæ¹ã
ã®å©ãã«å°ãã§ããªãã°å¹žãã§ãã ãç¥ã£ãŠããããšãã§ãããã®å£ æèã®ããã»ã¹ãå¯èŠåããã仮説åäžãããžã§ã¯ãã æèæŽçã®ã3ã€ã®ã¹ãããã 1. ãåããããã5W1Hããžã®æŽç 2. ã5W1HããããFlywheelããžã®èœãšã蟌㿠3. ãFlywheelããããå®çŸ©ãã®åæŽçãž ä»åŸã®å±æ:æèããã»ã¹ãAIãçšããŠã¹ã±ãŒã«ããã Weâre Hiring! ãç¥ã£ãŠããããšãã§ãããã®å£ ãããŸã§ãããŒã¿ã¢ããªãã£ã¯ã¹éšã§ã¯ãäºæ¥éšã®ã¡ã³ããŒåãã«ä»®èª¬æ§ç¯ã®å匷äŒãéããŠããŸããã1åç®ã¯ä»®èª¬ã®ã¿ãããä»®èª¬ã®æšãè²ãŠãã仮説æ§ç¯ãã®å
šäœåãã2åç®ã§ã¯è«çãæŽçããããã®ã䟿å©ãªéå
· (ãã¬ãŒã ã¯ãŒã¯)ãã«ã€ããŠè¡ããŸããã ãããã§ãããŒã å
ã§ã仮説ããšããèšèã®ç®ç·ã¯äžå®æã£ãã®ããªããšæã£ãŠããŸããäžæ¹ãç¥èãšããŠãç¥ã£ãŠãããããšãšãå®è·µã§ã䜿ãããªãããããšã®éã«ã¯ãæã£ã以äžã«å€§ããªéããããããŸãã(åœããåã§ã¯ãããŸãããã)ã æèã®ããã»ã¹ãå¯èŠåããã仮説åäžãããžã§ã¯ãã ããã§ããã®å£ãä¹ãè¶ããããã«ãå®éšçãªã仮説åäžãããžã§ã¯ãããç«ã¡äžããŸããã ãã®ãããžã§ã¯ãã®ç®çã¯ããšãŠãã·ã³ãã«ã§ãã ãåããç«ãŠãåãåŒãäžããããšãã åæã®ç²ŸåºŠã¯ãæåã®ãåããã®è³ªã§ãã®ã»ãšãã©ã決ãŸã£ãŠããŸããŸããMECE (ã¢ã¬ãªããããããªã) ãããžãã¯ããªãŒãšãã£ããã¬ãŒã ã¯ãŒã¯ãšãã£ã調çåšå
·ã䜿ãåã«ããããããã©ã®é£æãã©ãæçããã¹ãã?ã ãšãããèŠç«ãŠãå (çŽ æã®ç®å©ã)ããéããããšã«ãã©ãŒã«ã¹ããŠã¿ãŸããã å
·äœçã«ã¯ãäŒç€ŸãšããŠã®éèŠããŒãã顿ã«ãã¡ã³ããŒãš1on1圢åŒã§ãã£ã¹ã«ãã·ã§ã³ãéããŸããããã®æœè±¡çãªãé¡ããã©ãæŽçããå
·äœçãªåæããŒãã«èœãšã蟌ãã§ãããããã®æèããã»ã¹ãç¹°ãè¿ããŸããã æèæŽçã®ã3ã€ã®ã¹ãããã ãã®å®éšçãªåãçµã¿ãæ°åç¹°ãè¿ãäžã§ãæå¿ãã®ããæèæŽçã®ããã»ã¹ãèŠããŠããŸããã 1. ãåããããã5W1Hããžã®æŽç ãã¹ãŠã¯ãäžã€ã®å€§ããªãåããããå§ãŸããŸããç¹ã«äŒç€Ÿã®éèŠèª²é¡ã«ã€ãªãããããªæœè±¡çãªåãã®å Žåããã®ãŸãŸã§ã¯ãã©ãããæãã€ããã°è¯ãã倿ããã¥ããã§ãã ããã§ããŸãã¯åããå
·äœçãªèŠçŽ ã«åè§£ããããšã§ããã®åŸã®ããã»ã¹ãã¹ã ãŒãºã«é²ãããšãåãããŸããã ç¹ã«ã5W1Hã¯åããå
·äœåããåææ®µéã«ãããŠãã·ã³ãã«ã§ãã䟿å©ãªãã¬ãŒã ã§ããã Who (誰ã) ãŸããã誰ã«ãšã£ãŠã®æåãªã®ã?ããå®çŸ©ããŸããç¹ã«ç§ãã¡ã®ãããªãã©ãããã©ãŒã äºæ¥ã§ã¯ãé¢ãããã¬ã€ã€ãŒãè€æ°ååšããŸããäŸãã°ããã¯ãŒã«ãŒããšãäºæ¥è
ãã§ãã What (äœã) 次ã«ããã®æ°ããäºæ¥ããå
·äœçã«äœã䟡å€ãšããŠæäŸããã®ããããããããã®ãã¬ã€ã€ãŒã®ç®ç·ã§å®çŸ©ããŸãã Why (ãªã) ãããŠãããããã®ãã¬ã€ã€ãŒãããªããæäŸããã䟡å€ã«é¢å¿ãæã£ãŠãé¢ãããããïŒããšããåæ©ãæ·±æãããŸããæäŸè
ãæ±ãããäžå®å®ããžã®äžæºãããå©çšè
ãæãããæ¢åãµãŒãã¹ãžã®ã³ã¹ããå質é¢ã®èª²é¡ããªã©ã äžã€ã®åããæ§ã
ãªèŠç¹ããåè§£ããŠããããšã§ãæŒ ç¶ãšããŠããããŒãã®èŒªéãèŠããŠããŸããããŒã å
šå¡ã®ç®ç·ãåãããåæã®ãã¬ããªããããã®æãéèŠãªåå°äœããšèããŠããŸãã 2. ã5W1HããããFlywheelããžã®èœãšã蟌㿠5W1Hã§äºæ¥ã®æ§æèŠçŽ ãæŽãåºããããæ¬¡ã«è¡ãã®ãFlywheel (ã¯ãã¿è»)ãžã®èœãšã蟌ã¿ã§ãã Flywheelãšã¯ãäºæ¥ããäžåºŠåãã°èªåŸçã«æé·ããŠãããµã€ã¯ã«ããšããŠæããããã®æèããŒã«ã§ãããäœãã©ãäœçšããŠã次ã®ã©ããªçµæã«ç¹ããã®ãïŒã ãšããäžé£ã®å æé¢ä¿ã®ã«ãŒããšããŠå¯èŠåããããšã§ãäºæ¥æé·ã®ãšã³ãžã³ãã©ãã«ããã®ããç¹å®ãããããªããŸãã ç§ãã¡ã®ãããªãã©ãããã©ãŒã äºæ¥ãäŸã«èããŠã¿ãŸãã 1. ãŸããäºæ¥ã®æé·ãä¿ãããã®ã¢ã¯ã·ã§ã³ããããŸããäŸãã°ãããŒã±ãã£ã³ã°æœçãå¶æ¥æŽ»åã«ãã£ãŠãã¯ãŒã«ãŒã®é客ã匷åãããšããŸãã 2. ãã©ãããã©ãŒã äžã®ã¯ãŒã«ãŒãå¢ãããšã人æãæ¢ããŠããäºæ¥è
ã«ãšã£ãŠã®é
åãå¢ããããããªãè¯ã人ãèŠã€ããããã ããšäºæ¥è
ã®å©çšãå¢å ããŸãã 3. äºæ¥è
ã®å©çšãå¢ããã°ãä»äºã®åéä»¶æ°ãå¢ããŸãã 4. ä»äºãå¢ããããšã§ãã¯ãŒã«ãŒã¯ããå€ãã®å°±æ¥æ©äŒãåŸãããšãã§ããæºè¶³åºŠãé«ãŸããŸãã 5. æºè¶³ããã¯ãŒã«ãŒããªããŒããããšãäºæ¥è
ã®æºè¶³åºŠã«ãç¹ãããŸããæºè¶³ããäºæ¥è
ã¯ç¶ç¶çã«å©çšããããã«å€ãã®ä»äºãåéããŠãããŸãã ãã®ããã«ããã¯ãŒã«ãŒã®å¢å â äºæ¥è
ã®å¢å â ä»äºã®å¢å â ã¯ãŒã«ãŒã®æºè¶³åºŠåäž â äºæ¥è
ã®æºè¶³åºŠåäž â ãããªãã¯ãŒã«ãŒãšäºæ¥è
ã®å¢å ...ã ãšããããã«ãçæ¹ã®æºè¶³ãããçæ¹ã®æºè¶³ãåŒã³ãéªã ããŸåŒã«äºæ¥ãæé·ããŠãã奜埪ç°ãçãŸããŸãã ãã®å³ãæããŠå
±éèªèãåŸãããšã§ãããã®ãµã€ã¯ã«ã®ã©ãã«ãšãã«ã®ãŒã泚ãã°ãæãå¹ççã«å
šäœãå éãããããã®ã?ã ãšãããäºæ¥æŠç¥ã®åæãèŠããŠããŸãã 3. ãFlywheelããããå®çŸ©ãã®åæŽçãž æåŸã®ã¹ãããã¯ãFlywheelã§äºæ¥å
šäœã®ãµã€ã¯ã«ã俯ç°ããªãããããäžåºŠæåã®åãã«ç«ã¡è¿ãããå®çŸ©ã®åæŽçãã§ãã 5W1Hã§åèŠçŽ ãåè§£ã(ç¹ã®çè§£)ãFlywheelã§ãããã®å æé¢ä¿ãç¹ãåããã(ç·ã®çè§£) ããšã§ãäºæ¥ãäžã€ã®åçãªã·ã¹ãã ãšããŠæããããããã«ãªããŸãããã®èŠç¹ãæã€ãšãåœåãŒããããšèšå®ããŠããèšèã®å®çŸ©ããããè§£å床ã®é«ããå
·äœçãªãã®ã«å€åããŠããããšã«æ°ã¥ããŸãã ç¹ã«ãæ±ããããŠãããæåãããFlywheelã®ã©ã®éšåããã©ã®ããã«åãããšãªã®ã?ããšããåãã«å€ãããŸãã ãçæçãªå£²äžããæåãšããã°ãæ°èŠç²åŸããããã³ã°çãšãã£ãå転æ°ãäžããããã®åæã«éäžããŸãã äžæ¹ããé·æçãªæé·ããæåã§ããã°ããªããŒãçãè©äŸ¡ãšãã£ã質ãé«ããé å¿åã匷ããããã®åæã«æ³šåããŸãã ãã®ããã«ãæœè±¡çãªèšèããå
·äœçãªææšãã¢ã¯ã·ã§ã³ãšçµã³ã€ãããããªããŸãã ãã®ã¹ããããè¡ãããšã§ãåæãåããã¹ããŽãŒã«ãæç¢ºã«ãªãããã®ç²ŸåºŠãé«ãŸããšæããŸãã ä»åŸã®å±æ:æèããã»ã¹ãAIãçšããŠã¹ã±ãŒã«ããã ä»åŸã¯ãæ¬ãããžã§ã¯ãã§åŸãããç¥èŠãåºã«ãAIãšã®å¯Ÿè©±ãéããŠåæ§ã®ã¯ãŒã¯ã誰ã§ãå®çŸã§ããä»çµã¿ãäœããããšèããŠããŸã(äŸãã°ä»¥äžã®ãããªãã®ãæ³å®ããŠããŸã)ã 1. åæããããåãããAIã«å
¥åãã 2. AIã察話圢åŒã§åæããŒãããµããŒããã 3. 仮説ãéžæã»ç·šéãã 4. æçµçãªåæãã©ã³ãææ¡ããã ç§ãã¡ã®ææŠã¯ãŸã å§ãŸã£ãã°ããã§ããããŒã¿ãã䟡å€ãçã¿åºãããã«ããããããã¢ããªã¹ãèªèº«ã®ãèããåãã磚ãç¶ããŠãããããšæããŸãã Weâre Hiring! ã¿ã€ããŒã®ããŒã¿ã¢ããªãã£ã¯ã¹éšã§ã¯ããšãã«åãã¡ã³ããŒãåéããŠããŸãïŒïŒ ã«ãžã¥ã¢ã«é¢è« ãè¡ã£ãŠããŸãã®ã§ãå°ãã§ãèå³ããããŸããããæ°è»œã«ãé£çµ¡ãã ããã
ã¯ããã« ã¿ã€ããŒã§Androidãšã³ãžãã¢ãããŠãããµãªã¡ã§ãã æ¬èšäºã¯ã ãDroidKaigi 2025 åå ã¬ããŒããPart 1ãã ã®èšäºã®ç¶ãã«ãªããŸãïŒ ãŸã Part 1ãèªãã§ãªããïŒãšèšãæ¹ã¯ããã²Part 1ãèªãã§ããã ãããšå¬ããã§ãã æ¬èšäºïŒPart 2ïŒã§ã¯ãPart 1ããç¶ããŠãšã³ãžãã¢ã¡ã³ããŒã«ããã»ãã·ã§ã³ã¬ããŒããšãã¿ã€ããŒã®ããŒã¹åºå±ã®æ§åããå±ãããŸã ð£ ãšã³ãžãã¢ã«ããã»ãã·ã§ã³ã¬ããŒã nakagawa 玹ä»ããã»ãã·ã§ã³ïŒ Gemini ãšãŒãžã§ã³ãã§ Android Studio éçºãé«éå ã¿ã€ããŒã§ã¯droidkaigiã§ããŒã¹ãåºããŠãããå€ãæ¹ã«è¶³ãæ¢ããŠããã ãããšãã§ããŸããã ããŒã¹ã«ç«ã£ãŠããäžã§åæ¥ã«ã©ããèŠèŠãã®ããæ¹ãããã£ããããããäŒãããããšãããŸããã£ãïŒããšèããŠã¿ãããç¹ã«é¢èã¯ãªããšã®ããšâŠ ç¿æ¥ã«èŽè¬ããã»ãã·ã§ã³ã§ãã®æ¹ãç»å£ããŠããããã®æã«æ°ã¥ããŸããã ããã®äººãYouTubeã®Geminiã§E2Eãã¹ãã®åç»ã«åºãŠã人ã ïŒïŒã www.youtube.com ã»ãã·ã§ã³ã§ã¯YouTubeã§èŠãŠæªæ¥ã«æãã銳ããŠããGeminiãèªç¶èšèªã§èšè¿°ããããã¹ããå®è¡ããJourneyã®ã©ã€ããã¢ãèŠãããšãã§ããã¡ããã©åœæ¥ã«Android Studio Canaryã§ãªãªãŒã¹ãããã°ãããšã®ããšã§ããã ãã¢ã§ã¯æ¥æ¬èªã§èšè¿°ããŠå®è¡çµæã®ã¹ã¯ãªãŒã³ã·ã§ãããšãã®çµæãšãã®æ ¹æ ãããã¹ãã§åºåããŠãããã¡ã³ããã³ã¹ã³ã¹ããäœãE2Eãã¹ãã®å®è£
ãã§ãããã ãšæããŸããã åŸã«Ask the speakerã«è³ªåããã«ãããèŠèŠãããã£ãçç±ã®è©±ãããã®ã§ãããã圌ã¯YouTube Famousã ãããããšäžç·ã«ç»å£ãããŠããMandaãããç¬ã£ãŠããŸããã ãCIã§åãããã«ãªãã®ã¯ãã€ã§ããïŒããšäŒºã£ããšãããçµ¶è³éçºäžãšã®ããšã§ãããæåŸ
ã§ãã DroidKaigiããåž°ã£ãŠãã£ããã¿ã€ããŒã®ãããžã§ã¯ãã§è©ŠããŠã¿ãŸãããããŸã åããªããâŠïŒBuild Logic䜿ã£ãŠãããããããŸã ããŸãèªããŠãªããããªæ°ãããŠããŸããããŸã ãã£ãããšã¯èŠããŠããŸãããå®å®çã«äœ¿ããããã«ãªã£ããå®éã®éçšã§äœ¿ããã詊ããŠã¿ãããšæããŸããã murataïŒ @murata ïŒ çŽ¹ä»ããã»ãã·ã§ã³ïŒ Cache Me If You Can RyuNen344ããã«ãããCache Me If You Canãã¯ãå€ãã®Androidéçºè
ã"äœãšãªã"ã§äœ¿ã£ãŠããŸããã¡ãª Gradleã®ãã£ãã·ã¥æ©æ§ ã«æ·±ãè¿«ãã»ãã·ã§ã³ã§ããã ç§èªèº«ãGradleã¯ãã©ãã¯ããã¯ã¹åç¶ã§ããã«ããšã©ãŒãèµ·ãããã³ã«Stack Overflowã圷埚ãâŠãããªå Žåœããçãªå¯Ÿå¿ãç¹°ãè¿ããŠããŸããããã®ã»ãã·ã§ã³ã¯ããããªç§ã®Gradleã«å¯ŸããèŠææèãæã¡ç ŽãããŸãã«ç®ããé±ã®å
容ã§ããïŒ ã»ãã·ã§ã³ã§åŸãç¥èãå
ã«ãã£ãããããžã§ã¯ãã®Gradleèšå®ãèŠçŽãããšããããã«ãããã©ãŒãã³ã¹ã«ã€ãªãã以äžã®æ¹åãå®çŸã§ããŸããã Configuration CacheãšäžŠåå®è¡ã®æå¹å ïŒ org.gradle.configuration-cache.parallel=true ïŒ ç°å¢å€æ°ãåç
§ããŠãã System.env() ã Provider API ã«çœ®ãæã éåžžã®ãã«ãã§ã¯äžèŠãªã¿ã¹ã¯ãæäŸãããã©ã°ã€ã³ã®é©ç𿹿³ãæé©å ãããŸã§ã¯Configuration Cacheãå¹ããã«é ãæ©ãŸããããšãå€ã
ãããŸããããä»ã§ã¯ãã®ã»ãã·ã§ã³ã§åŠãã ç¥èãæŠåšã«ãèªä¿¡ãæã£ãŠåå ã調æ»ã§ããæ°ãããŠããŸãð ãGradleã®ãã«ãé
ããªâŠã§ãããããããªãããåŸåãïŒããšãªã£ãŠãããããã®ããªãïŒ ãã²æ¬ã»ãã·ã§ã³ã®ã¢ãŒã«ã€ãåç»ãèŠèŽããŠãäžç·ã«Gradleã®äžçãåãæããŠã¿ãŸãããïŒð ã¹ãã³ãµãŒããŒã¹ãå€§çæ³ã§ããð DevRelã®ã¿ãŒãïŒ @earlgrayMK ïŒã§ãã ä»åã¿ã€ããŒã§ã¯ãŽãŒã«ãã¹ãã³ãµãŒãšããŠããŒã¹ãåºå±ããŸããã å€ãã®æ¹ã«ãç«ã¡å¯ãããã ããããããšãããããŸãïŒ ã¹ãããã€ããšããŠã¢ã³ã±ãŒãã®ãä»äºãã¿ãªããã«ãé¡ãããããããã®åçãããã ããã®ã§ã玹ä»ããŸãã ã¿ãªããã®ãæç¥šã®çµæãAndroidéçºã«ãããŠæãå°é£ã ãšæããããŠããã®ã¯ããæ¢åã³ãŒãããŒã¹ã®ä¿å®ã»æ¹åããšãOSããŒãžã§ã³ã»ããã€ã¹ã®å€æ§æ§ãã§ããããšãæããã«ãªããŸããã ãã®æ ¹æ·±ã課é¡ã«å¯ŸããŠãã¿ã€ããŒã®Androidãšã³ãžãã¢ãã©ã®ããã«åãåã£ãŠããã®ããå
·äœçãªåãçµã¿ããŸãšããŸããã 1. OSããŒãžã§ã³ã»ããã€ã¹ã®å€æ§æ§ãžã®å¯Ÿå¿ èªåãã¹ãã®æŽ»çš ãã¹ãèªååããŒã«ãMagicPodããå°å
¥ãããµããŒã察象OSã®äžäžéããŒãžã§ã³ã§æ¯æ¥ãã¹ããå®è¡ãåºç¯å²ã®ç°å¢ãå¹ççã«ã«ããŒããŠããŸãã 倿§ãªç©çããã€ã¹ã§ã®æ€èšŒ å€éšã®QAããŒã ããã¯ã©ãŠãåæ€èšŒãµãŒãã¹ãRemoteTestKitããæŽ»çšãããã«ã瀟å
Slackã§ç¹å®ç«¯æ«ãæã€ã¡ã³ããŒã«ååãä»°ããªã©ãç©çããã€ã¹ã§ã®å®æ©æ€èšŒã培åºããŠããŸããå人çã«æãããã¿ã¹ããã賌å
¥ããæ€èšŒã«æŽ»ããéçºè
ãããŸãã 2. æ¢åã³ãŒãããŒã¹ã®ä¿å®ã»æ¹å 鲿ã®ãèŠããåããšãä»çµã¿åã ãªãã¡ã¯ã¿ãªã³ã°ã®é²æãLinterã®warningæ°ãã¢ãžã¥ãŒã«ã®åå²ç¶æ³ãªã©ã§å®éçã«å¯èŠåããããŒã å
šäœã§èª²é¡æèãå
±æããä»çµã¿ãéèŠããŠããŸãããã¶ã€ã³ã·ã¹ãã ã®æ§ç¯ãEdge-to-Edge察å¿ããã®äžç°ã§ãã ãããã¯ããªãŒããŒïŒPOïŒãšã®å
±éçè§£ æè¡çè² åµã®è§£æ¶ããããã¯ãã®äŸ¡å€åäžã«äžå¯æ¬ ã§ãããšããç¹ãPOãšå
±æãããã«ãããèšç»çãªãªãã¡ã¯ã¿ãªã³ã°ãå®çŸããŠããŸãã é©åãªãšã³ãžãã¢ãªãœãŒã¹ã®ç¢ºä¿ ãªãœãŒã¹äžè¶³ãè² åµã®èç©ãšéçºã®æªåŸªç°ãæããªããããAndroidãšã³ãžãã¢ã®é©åãªãªãœãŒã¹ç¢ºä¿ã«åªããŠããŸãã ãã©ã³ã¹ã®åããæè¡éžå® æ°æè¡ã®å°å
¥æã¯ãå¿
ããã®åŠ¥åœæ§ãããŒã ã§è°è«ããåæåœ¢æãå³ããŸããããã«ãããå°æ¥ã®è² åµåãé²ããæè¡çãªãã©ã³ã¹ãä¿ã£ãŠããŸããïŒãã®é åã§ã¯ãç¹ã«ãšã³ãžãã¢ã®æç°ãéèŠãªåœ¹å²ãæ
ã£ãŠããŸããïŒ é«ããµãŒãã¹ã¬ãã«ç®æšïŒSLOïŒã®ç¶æ ãããã¯ãã®åè³ªç®æšãé«ãèšå®ãããããç¶æããæåããã³ãŒãããŒã¹ã®å¥å
šæ§ãä¿ã€åæ©ä»ãã«ããªã£ãŠããŸãã 䞡課é¡ã«å
±éãããã¿ã€ããŒã®åŒ·ã¿ åãããŒã äœå¶ ããŒã ã¡ã³ããŒãå€ããããæ°èŠã®ãããã¯ãéçºãšäžŠè¡ããªãããæ€èšŒããªãã¡ã¯ã¿ãªã³ã°ãšãã£ãæ¹å掻åãåæ
ããŠé²ããããäœå¶ã匷ã¿ã§ãã ãå°éãªåªåãã®æå ã¡ã³ããŒå
šå¡ããå°éã«æ¹åãç¶ãããããªãããšããå
±éèªèãæã£ãŠãããæ¥ã
ã®ç¶ç¶çãªåãçµã¿ã倧åã«ããŠããŸãã Day2ãéçºããŠããäžã§AIãã©ã®ããã«æŽ»çšããŠããŸããïŒã Day2ã§ã¯æ§ã
ãªãåçãããã ããã®ã§ãç¹ã«å€ãã£ããã®ãé¢çœããšæã£ããã®ããŸãšããŸããã ãããã« DroidKaigi 2025ã§ã¯ãåã»ãã·ã§ã³ãåå è
ã®æ¹ã
ãšã®äº€æµãããæ¥ã
ã®éçºã®åèã«ãªãç¥èŠãåŸãããšãã§ããŸãããããã§åŸãåŠã³ã¯ãä»åŸã®ãããã¯ãéçºã«ã€ãªããŠãããããšæããŸãðª ãŸãã10æ21æ¥(ç«)ã«ã³ã³ãã©ç€Ÿãã¢ã³ãããã瀟ã什åãã©ãã«ç€ŸããããŠã¿ã€ããŒã®4瀟å
±å¬ã§ã After iOSDC & DroidKaigi 2025 ããéå¬ããŸãã åœæ¥ã¯åŒç€ŸããAndroidãšã³ãžãã¢ã® tick-taku ãç»å£ããŸã ð ãã€ããªããéå¬ ãšãªã£ãŠãããŸãã®ã§ããèå³ã®ããæ¹ã¯ãã²æ°è»œã«ãåå ãã ãã ð reiwatravel.connpass.com æåŸã«ãæ¬ã«ã³ãã¡ã¬ã³ã¹ãæ¯ããéå¶ã»ç»å£è
ã®ã¿ãªããããªãã³ã«ã¿ã€ããŒããŒã¹ã«ãè¶ãããã ããæ¹ã
ãããããšãããããŸããïŒ
ã¯ããã« ã¿ã€ããŒã§Androidãšã³ãžãã¢ãããŠããã¿ãã¿ã§ãã 2025幎9æ10æ¥ãã12æ¥ã«ãããŠãAndroidã®æè¡ã«ã³ãã¡ã¬ã³ã¹ã§ããã DroidKaigi 2025 ããéå¬ãããŸãããã¿ã€ããŒããã¯AndroidããŒã ãã¯ãããšããè€æ°ã®ã¡ã³ããŒãçŸå°ã«åå ããä»å¹Žãæšå¹Žã«ç¶ããŠãŽãŒã«ãã¹ãã³ãµãŒãšããŠããŒã¹ãåºå±ããŸããã ã»ãã·ã§ã³ã§ã¯ææ°ã®ç¥èŠã«è§Šããæ©äŒãå€ããæ¥ã
ã®æ¥åã«ãã€ãªããå
·äœçãªåŠã³ãåŸãããšãã§ããŸããããŸããäŒæãéããŠã¯ç«ã¡è©±ãå±ç€ºããã£ããã«åå è
å士ãè°è«ãæ·±ããå Žé¢ãå€ãããã亀æµã®åºããã匷ãæããŸããããã®ãããªæ§åã¯äŒå Žã«ãšã©ãŸãããXãªã©ã®SNSãéããŠããªã³ã©ã€ã³ã§ãçãäžãããã¿ããŠããã®ãå°è±¡çã§ãã Part1ãPart2ã®2èšäºã«æž¡ãããšã³ãžãã¢ã¡ã³ããŒã«ããã»ãã·ã§ã³ã¬ããŒããšãããŒã¹åºå±ã®æ§åããå±ãããŸãã æ¬èšäºïŒPart 1ïŒã§ã¯ããšã³ãžãã¢ã¡ã³ããŒã«ããã»ãã·ã§ã³ã¬ããŒããã玹ä»ããŸãïŒ ãšã³ãžãã¢ã«ããã»ãã·ã§ã³ã¬ããŒã ãŸãã¯ãDroidKaigiã«åå ãããšã³ãžãã¢ã¡ã³ããŒã«ããã»ãã·ã§ã³ã¬ããŒãã玹ä»ããŸãã HunachiïŒ @_hunachi ïŒ çŽ¹ä»ããã»ãã·ã§ã³ïŒ Androidã©ã€ãã©ãªã¢ã³ã®æåŒãïŒå
ç¢ãªã©ã€ãã©ãªãšSDKã®æ§ç¯ ç§ã¯ã©ã€ãã©ãªãå
¬éããçµéšã¯ãªãã®ã§ããããã®ã»ãã·ã§ã³ã¯ã©ã€ãã©ãªéçºè
ã ãã§ãªãããã«ãã¢ãžã¥ãŒã«æ§æã§éçºããŠãã人ããããŠã©ã€ãã©ãªãå©çšãã人ã«ãå€ãã®åŠã³ããããéåžžã«æçãªå
容ã§ããã ãã®ã»ãã·ã§ã³ã§ç¹ã«å°è±¡çã ã£ããæ°ããåŠã¹ãç¹ãããã€ãã玹ä»ããŸãã å
¬éç¯å²ã®å¶åŸ¡ã®éèŠæ§ã«ã€ã㊠internal ãæ£ãã䜿ãããšã¯ãã¡ããã Explicit API mode ãæå¹ã«ããããšã§ãæå³ãããããªãã¯APIãå
¬éãããŠããŸãã®ãé²ãããšç¥ããŸãããããã«ãã£ãŠãã¢ãžã¥ãŒã«ã®è²¬ä»»ç¯å²ãæç¢ºã«ãªããAPIã®å¥å
šæ§ãä¿ã€ããšãã§ããŸãã 芪åãªAPIã®éæšå¥šåã€ã㊠ã¯ã©ã¹ã颿°ãéæšå¥šïŒDeprecatedïŒã«ããéã @Deprecated ã¢ãããŒã·ã§ã³ã® message ã replaceWith åŒæ°ã«å
·äœçãªèª¬æãèšè¿°ããããšã§ãå©çšè
ãã¹ã ãŒãºã«æ°ããå®è£
ã«ç§»è¡ã§ããé
æ
®ã倧åã ãšåŠã³ãŸããã ç Žå£ç倿Žã®èªåæ€ç¥ã«ã€ã㊠ãããªãã¯APIã倿Žãç¹ã«åé€ããéã«ã¯ã binary-compatibility-validator ãå°å
¥ããŠèªåçã«ãã§ãã¯ããããææ³ã玹ä»ãããŠããŸããããã£ããäºææ§ãå£ããŠããŸããã¹ãé²ãããã®ä»çµã¿ã¯ãç¹ã«ã©ã€ãã©ãªã®ã¡ã³ããã³ã¹ã«ãããŠéåžžã«éèŠã ãšæããŸãããã©ã€ãã©ãªãäœæããæ©äŒããã£ããå©çšããããã«ãããã§ãã ãŸããã©ã€ãã©ãªãšãããå©çšãããããžã§ã¯ãéã§ãªãœãŒã¹åãè¡çªãããšããåé¡ã«ã€ããŠã話ããããŸããããã«ãã¢ãžã¥ãŒã«ã§ã®åé¡ã«ãããŠã¯åŒç€Ÿã§ã察å¿ã¯æžãã§ãããã®ã®ãã©ã€ãã©ãªäœ¿çšè
ãšããŠäºæãã¬æåã«æ©ãŸãããçµéšãäœåºŠãããã®ã§èªåãã©ã€ãã©ãªãäœãåŽã«ãªã£ãæã¯æ°ãã€ããããšæããŸããã ã©ã€ãã©ãªã®è£åŽã§äœãèµ·ããŠããã®ããç¥ãããšã§ãå©çšè
ãšããŠãããè³¢ãä»ãåã£ãŠããããšãã§ãããšåèªèããŸãããä»åŸããã«ãã¢ãžã¥ãŒã«ã§ã®éçºãã©ã€ãã©ãªãå©çšããéã«ãä»ååŠãã ç¥èãæŽ»ãããŠããããã§ãã tick-taku 玹ä»ããã»ãã·ã§ã³ïŒ EncryptedSharedPreferences ã deprecated ã«ãªã£ã¡ãã£ãïŒã©ããããïŒ ã¿ã€ãã«ã®éãã§ããªã deprecated ã«ãªã£ãããªã©ã®èæ¯ãå«ã玹ä»ãèŠæãæ±ºããããŠãããçŽ æŽãããã»ãã·ã§ã³ã§ããã ã¿ã€ããŒã§ã¯ KeyStore + Cipher + DataStore ãå©çšããŠããŸããããå¥ã®ããã°ã§ Tink ãå©çšãããšããæãã« wrap ãããŠãè€éãªæå·ååšããã©ã€ãã©ãªã«ä»»ãã€ã€å®è¡é床ãéããªããšç¥ããŸãããç¹å®ç«¯æ«ã§ã®ã¿ã¯ã©ãã·ã¥ããŠãããªæ°é
ã Crashlytics ãã芳枬ããŠãããããããèªåã®å®è£
ãæªã Tink ã§ããã° Google æäŸã ããã®èŸºã察åŠããŠãããŠããã®ã§ã¯âŠ?ããšæãç§»è¡ããããšã¡ããã© DroidKaigi çŽåã« Issue ãäœæããŠæ€èšããŠãããšããããã®ã»ãã·ã§ã³ã®ååšãç¥ããŸããã çµè«ããã§ãããããæ¹ããããšã®ããšã§ã ð ã©ããã芳枬ããŠããã¯ã©ãã·ã¥ã¯ OEM ããã€ã¹ã® KeyStore ã®ãã°ã§ã©ããããããªããšãããµãªã§ããããã㯠security-crypto ã deprecated ã«ãªã£ãèŠå ã®1ã€ããããTink ã«ç§»è¡ãããšããã§è§£æ±ºããããããã¢ããªåŽã§ã®ãã³ããªã³ã°ãé£ãããªãããã§ãããããªã£ããã©ããããããªãã®ã§ããŒã¿ã¯æšãŠãŸããããšå²ãåããããªããšã®ããšã§ãã⊠ãŸããã¯ã©ãã·ã¥ã®èŠå ãšããŠãã1ã€ããã¯ã¢ããèšå®ã®è©±ããããŸããã allowBackup=false ã«èšå®ããŠãããã倧äžå€«ãšèããŠããã®ã§ãããAndroid 12 ããã¡ãŒã«ãŒã«ãã£ãŠã¯ device-transfer ã«ããããã¯ã¢ãã㯠allowBackup ã®èšå®ãç¡èŠããããã«ãªã£ãŠããããã§ãããããã§ããŒã¿ã¯ç§»è¡ãããã®ã« key ãç°ãªãã®ã§åŸ©å·ã«å€±æãããšãããã®ã§ããã æ¬åœã«ã¡ãããšäœã£ãŠããã¡ãŒã«ãŒâŠ ãŸã EncryptedSharedPreference ãååšããŠããŸããæ
ã«æã
ã¯ãªãã§ãããã§ãããã€ã¹ã®ã¹ãã¬ãŒãžã«ä¿åããŠããŸããšããææ³ã®ããš deprecated ã«ããèæ¯ãããããããããããããã®ããŒã¿ãããã€ã¹ã«ä¿åããå¿
èŠãããã®ãïŒãã¯èšèšæã«åžžã«æèãããäºé
ã ãšæããŸããã 玹ä»ããã»ãã·ã§ã³ïŒ OAuthãæ£ããå®è£
ããïŒAndroidã¢ããªã®ããã®ã»ãã¥ã¢ãªèªèšŒ OAuth ãå°å
¥ããããã®åºç€ç¥èãæŽå²ãçè§£ã§ããå
容ã§ããã äžåºŠå®è£
ãããè§Šãããããããšããã人ã¯ããã ãããšãªãå
容ãå€ã OAuth ã®å
¥éãšããŠéåžžã«å匷ã«ãªããšæããŸãã æ°ã«ãªã£ãç¹ãšããŠã¯ãå€ãã®ã¢ããªã§ã¯ access token ãããã€ã¹äžã«ä¿åããŠãããšæããŸããããã®éã¯å€ã«æå·åããã«ã·ã³ãã«ã« SharedPreference ã䜿ã£ãŠããã€ã¹ãä¿¡é ŒããŸããããšãã£ãè¶£æšã®å
容ã話ãããŠããŠãAndroid 㯠root åãããåŒãæãããšæã£ãã®ã§ãã倧äžå€«ãªãã§ãããã⊠ãŸãã PKCE ããã¹ããã©ã¯ãã£ã¹ãããã§ããããããŸã§å®è£
ããŠããã¢ããªã¯ã©ãã ãããã®ãæ°ã«ãªããŸãã haru 玹ä»ããã»ãã·ã§ã³ïŒ ã¹ããæ°æ³ã£ãŠäœïŒïŒïŒææœè¡ïŒã¢ããªããžãã¹ã«åœ±é¿ããã®ïŒ DroidKaigiåã®å
¬æ£ååŒå§å¡äŒã®äººã«ããçºè¡šã§ãäž»ã«ããããæœè¡ãããæ°ããæ³åŸã«é¢ãã話ã§ããã 察象ã«ãªãã®ã¯åºæ¬çã«AppleãGoogleãªã©ã®ãã©ãããã©ãŒã äºæ¥è
ã§ãIn App Biilingãªã©ã®æ©èœã«å¯ŸããŠåœ±é¿ãããããã§ããã ãšã¯ãããäžè¬ããããããŒã«éæŸããŠããªãæ©èœãéæŸããŠæ¬²ãããªã©ã®ãªã¯ãšã¹ããéãããšãã§ããããã«ãªããããã®ã§ãä»åŸã©ããªã£ãŠãããç®ãé¢ããªãæ³åŸã®1ã€ã§ããããŸããã ã¿ã㿠玹ä»ããã»ãã·ã§ã³ïŒ Be a Business-Driven Android Engineer DroidKaigi 2025ã«åå ããŠãç¹ã«å°è±¡ã«æ®ã£ãã»ãã·ã§ã³ã®1ã€ããohzonoããã®ã Be a Business-Driven Android Engineer ãã§ããAndroidãšã³ãžãã¢ãã©ã®ããã«ããžãã¹ã®æé·ã«è²¢ç®ã§ããã®ããè§£ãã»ãããå
容ã§ãä»ã®èªåãæå±ããã¹ããªãŒã ã¢ã©ã€ã³ãããŒã ïŒäŸ¡å€æäŸããŒã ïŒã®ç¶æ³ãšãéãªãããšãŠãå¿ã«æ®ããŸããã ç¹ã«å
±æããã®ã¯ãè¶å¢ããšããèãæ¹ã§ããçŸåšæå±ããããŒã ã¯å°äººæ°ã®ããããšã³ãžãã¢ãããŒã¿åæãæ
ã£ãããå°éå€ã®å®è£
ã«ææŠããããšã圹å²ã®å£æ ¹ãè¶ããåãæ¹ãèªç¶ã«è¡ãããŠããŸãããã®ããããè¶å¢ããšããèšèã¯ããšããšããŒã å
ã§ãããŒã¯ãŒãã«ãªã£ãŠããŸãããä»åã®ã»ãã·ã§ã³ã¯ãããããåãçµã¿ã䟡å€ãããã®ãšããŠè¯å®ããŠãããå
容ã§ããã倧ããªå±ã¿ã«ãªããŸãããAIã®é²åã«ãã£ãŠå°éå€ã®é åã«èžã¿èŸŒã¿ããããªã£ãŠããä»ããè¶å¢ãã¯ãããããŸããŸãéèŠã«ãªããšæããŸãã ãŸããéçºããŒã ã売äžãçŽæ¥çãªKPIãšããŠæã€ãšããè©±ãæ°é®®ã§ãããç§ã¯ãããŸã§ãããã©ãŒãã³ã¹æ¹åããšã©ãŒçã®äœæžããŠãŒã¶ãŒè¡åã«åºã¥ãææšãšãã£ããããã¯ãå
éšã®ææã«æ³šç®ããããšãå€ãã£ãã®ã§ããããã®ã»ãã·ã§ã³ã§ã¯ããã«å ããŠãèªåãã¡ã®ã¢ãŠãããããäºæ¥å
šäœã®ææãšçµã³ã€ããŠèããèŠç¹ãæç€ºãããŸãããèªåã®ä»äºãã©ãããžãã¹ã€ã³ãã¯ãã«ã€ãªããã®ããæèããããšã§ããšã³ãžãã¢ãšããŠãã£ãšåºãèŠéã§åãçµãã§ãããããšæããŸããã ããã«ããã®èãæ¹ãæè¡é¢ããæ¯ããææ®µãšããŠãKotlin Multiplatform (KMP) ã®ååšæãæ¹ããŠå®æããŸããã坿¥ãå¥ãããžã§ã¯ãã§KMPãå©çšããŠããçµéšãããããã®æå¹æ§ã匷ãæããŠããŸãããã¡ããããã«ãé床ãKMPãã®ãã®ã®è€éããiOSãšAndroidãšã³ãžãã¢éã®é£æºãšãã£ã課é¡ã¯ãŸã ãããŸãããã¡ã€ã³ã¬ã€ã€ãŒã®å
±éåã«ããã¡ãªããã¯å€§ãããKMPã¯Androidãšã³ãžãã¢ãiOSéçºãžãšãè¶å¢ãããåŸæŒããšãªããããŒã å
šäœã®çç£æ§ãé«ããçŸå®çãªéžæè¢ã ãšæããŸããä»åŸã泚ç®ããŠããããæè¡ã§ãã syam 玹ä»ããã»ãã·ã§ã³ïŒ Kotlinã§ã®AI掻çšã«ããéçº JetBrains ã® Sebastian Aigner ãããš Márton Braun ããã«ããã Kotlinã§ã®AI掻çšã«ããéçº ããšããã»ãã·ã§ã³ãæ°ã«ãªã£ãã®ã§èŽè¬ããŸããïŒ Kotlin ãš AI ã®é¢ããæ¹ããã³ãŒãè£å®ã®ãããªè»œãæ¯æŽãããããšãŒãžã§ã³ãã«ä»»ããèªåå®è£
ããŸã§æ®µéçã«ç޹ä»ããŠãããJetBrains ã® AI ãšãŒãžã§ã³ã Junie ã䜿ã£ããã¢ã§ã¯ãæ°ããç»é¢è¿œå ã UI ã®æ¹è¯ãèªåã§è¡ã£ãŠããŠãæ¢åã³ãŒãã®ãã¿ãŒã³ãèžãŸããä¿®æ£ãå°è±¡çã§ããã ãŸããKotlin 補ã®ãã¬ãŒã ã¯ãŒã¯ Koog ã玹ä»ããããã«ããã©ãããã©ãŒã ã§ AI ãšãŒãžã§ã³ããçµã¿èŸŒããä»çµã¿ãšããŠæŽ»çšã§ãããšã®ããšã§ããã nshibaïŒ @nshiba310 ïŒ çŽ¹ä»ããã»ãã·ã§ã³ïŒ ãŠãŒã¶ãŒãéçºè
ãæ©ãŸããªã TV ã¢ããªéçº - Compose ã®å
éšå®è£
ããåŠã¶ãã©ãŒã«ã¹å¶åŸ¡ AndroidTVã¢ããªã Compose ã䜿ã£ãŠå®è£
æ¹æ³ã玹ä»ããã»ãã·ã§ã³ã§ããã Compose 以åã®æä»£ã«ååšããŠãã leanback library ãšãã Google 補ã®ã©ã€ãã©ãªããããŸãããããã㯠Compose ã«ã¯å¯Ÿå¿ããŠããŸããã Compose ã§ AndroidTV ãå®è£
ããããšæã£ãããã©ããã£ãã©ã€ãã©ãªã䜿ã£ããè¯ãããšè¡ã£ãåºç€çãªããšããå§ãŸããleanback library ã§ã¯ããã©ã«ãã§ã©ã€ãã©ãªã察å¿ããŠãããŠããããã©ãŒã«ã¹åšãã®å¶åŸ¡ãããŸã©ã®UIã«ãã©ãŒã«ã¹ããã£ããŠãããããããããããªãUIã®å¶åŸ¡ãªã©ã Compose ã§ã¯èªåã§å®è£
ããå¿
èŠãããã©ããã£ã察å¿ãå¿
èŠãã«ã€ããŠã詳ãã解説ãããŠããŸããã ãŸã AndroidTV ã¢ããªã§ã¯ãã¹ã¯ããŒã«ã®å¶åŸ¡ã«ã€ããŠãéåžžã®ã¢ãã€ã«ã¢ããªãšã¯ç°ãªãå®è£
æ¹æ³ãå¿
èŠã«ãªããããã«ã€ããŠã詳ãã解説ãããŠããŸããã ã»ãã·ã§ã³ã¿ã€ãã«ã®éãã©ã®ã»ã¯ã·ã§ã³ã§ã Compose ã®å
éšå®è£
ãŸã§ã¡ãããšåŠçã远ã£ãŠèª¬æãããŠããŠãšãŠãããããããããããã Compose ã§ AndroidTV ã¢ããªãäœæããæ¹ã«ãšã£ãŠå¿
èŠã®å
容ãã€ãŸã£ãŠããŸããïŒ ç¶ãã¯Part 2ã®èšäºã§ïŒ åŒãç¶ããPart 2ã®èšäºã«ãŠä»ã®ãšã³ãžãã¢ã¡ã³ããŒã«ããã»ãã·ã§ã³ã¬ããŒããšãããŒã¹åºå±ã®æ§åããå±ãããŸãã ãã²èªãã§ãã ããïŒ tech.timee.co.jp