ๅ…จไฝ“ๅƒใœใ‚“ใŸใ„ใžใ†ใ‹ใ‚‰็Žฉๅ…ทใŠใ‚‚ใกใ‚ƒใฎไป•็ต„ใ—ใใฟใธโ€”โ€”ใ‚ใŸใ—ใฎๅˆ†ๆ•ฃๅž‹ใถใ‚“ใ•ใ‚“ใŒใŸใ‚ทใ‚นใƒ†ใƒ  Homelab ๅญฆ็ฟ’ใŒใใ—ใ‚…ใ†ๅœฐๅ›ณใกใš

2026-07-30

ใ“ใฎๆ™‚ๆœŸใ˜ใใ€ใ€Œๆœฌ็‰ฉใปใ‚“ใ‚‚ใฎใฎใ‚คใƒณใ‚ฟใƒผใƒใƒƒใƒˆใ‚ทใ‚นใƒ†ใƒ ใŒ้–‹็™บใ‹ใ„ใฏใคใ‹ใ‚‰ใƒชใƒชใƒผใ‚นใพใงใซใฉใ‚“ใชๆง‹ๆˆ่ฆ็ด ใ“ใ†ใ›ใ„ใ‚ˆใ†ใใ‚’็ตŒใธใ‚‹ใฎใ‹ใ€ใ‚’ไธธใพใ‚‹ใ”ใจๆ•ด็†ใ›ใ„ใ‚Šใ—ใฆใ€่‡ชๅˆ†ใ˜ใถใ‚“ใฎ PC + WSL2 ๅฎŸ้จ“ๅฎคใ˜ใฃใ‘ใ‚“ใ—ใคใฎๆง‹็ฏ‰ใ“ใ†ใกใ่จญ่จˆๅ›ณใ›ใฃใ‘ใ„ใšใจใ—ใฆใพใจใ‚ใŸใ€‚ๆŠ€่ก“้ธๅฎšใŽใ˜ใ‚…ใคใ›ใ‚“ใฆใ„ใฏใ€ไผš็คพใ‹ใ„ใ—ใ‚ƒใฎ Graphene ใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใงๆ™ฎๆฎตใตใ ใ‚“ใ‹ใ‚‰ๆ…ฃใชใ‚Œใฆใ„ใ‚‹ใ‚นใ‚ฟใƒƒใ‚ฏใซใ‚ใ–ใจๅฏ„ใ‚ˆใ›ใฆใ‚ใ‚Šใ€ใคใ„ใงใซๅฎŸ้š›ใ˜ใฃใ•ใ„ใซๅ‹•ใ†ใ”ใ‹ใ›ใ‚‹็Žฉๅ…ทใŠใ‚‚ใกใ‚ƒใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎ่จˆ็”ปใ‘ใ„ใ‹ใใจใ—ใฆใ‚‚่ฝใŠใจใ—่พผใ“ใ‚“ใ ใ€‚ใ“ใฎ่จ˜ไบ‹ใใ˜ใฏใ€ใใฎๅ…จไฝ“ๅƒใœใ‚“ใŸใ„ใžใ†ๅ›ณใšใจๅฎŸ่ฃ…ใ˜ใฃใใ†ใƒ—ใƒฉใƒณใฎไธกๆ–นใ‚Šใ‚‡ใ†ใปใ†ใ‚’ใพใจใ‚ใฆใ€่‡ชๅˆ†ใ˜ใถใ‚“ใฎใ“ใฎๅญฆ็ฟ’ใŒใใ—ใ‚…ใ†็ตŒ่ทฏใ‘ใ„ใ‚ใ‚’่จ˜้Œฒใใ‚ใใจใ—ใฆๆฎ‹ใฎใ“ใ—ใฆใŠใใ‚‚ใฎใ ใ€‚

ๅ…จไฝ“ใœใ‚“ใŸใ„ใฎใƒชใ‚ฏใ‚จใ‚นใƒˆใ‚Šใใˆใ™ใจ็ตŒ่ทฏใ‘ใ„ใ‚โ€”โ€”ใพใšๅ…จไฝ“ๅƒใœใ‚“ใŸใ„ใžใ†ใฎๅฟƒ็š„ใ—ใ‚“ใฆใใƒขใƒ‡ใƒซใ‚‚ใงใ‚‹ใ‚’ไฝœใคใใ‚‹

ๆœ€ใ‚‚ใฃใจใ‚‚ๅŸบๆœฌ็š„ใใปใ‚“ใฆใใช็ตŒ่ทฏใ‘ใ„ใ‚ใฏใ“ใ†ใ ใ€‚ใƒฆใƒผใ‚ถใƒผใฎใƒชใ‚ฏใ‚จใ‚นใƒˆใ‚Šใใˆใ™ใจใฏใพใš CDN ใ‚’็ตŒ็”ฑใ‘ใ„ใ‚†ใ—ใ€่ฒ ่ทๅˆ†ๆ•ฃใตใ‹ใถใ‚“ใ•ใ‚“๏ผˆLB๏ผ‰ใซๅฑŠใจใฉใใ€API ใ‚ฒใƒผใƒˆใ‚ฆใ‚งใ‚คใซๅ…ฅใฏใ„ใ‚Šใ€ใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚น็พคใใ‚“ใธใƒซใƒผใƒ†ใ‚ฃใƒณใ‚ฐใ‚‹ใƒผใฆใƒใ‚“ใใ•ใ‚Œใ‚‹ใ€‚ใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใฏใ‚ญใƒฃใƒƒใ‚ทใƒฅใƒปใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใƒปใƒกใƒƒใ‚ปใƒผใ‚ธใ‚ญใƒฅใƒผใจใ‚„ใ‚Šๅ–ใจใ‚Šใ—ใ€ๅŒๆ™‚ใฉใ†ใ˜ใซใƒญใ‚ฐใ‚ใใƒปๆŒ‡ๆจ™ใ—ใฒใ‚‡ใ†ใƒปใƒˆใƒฌใƒผใ‚นใจใ‚Œใƒผใ™ใƒ‡ใƒผใ‚ฟใŒ็ตฑไธ€็š„ใจใ†ใ„ใคใฆใใซๅŽ้›†ใ—ใ‚…ใ†ใ—ใ‚…ใ†ใ•ใ‚Œใ€็›ฃ่ฆ–ใ‹ใ‚“ใ—่ญฆๅ ฑใ‘ใ„ใปใ†ใ‚ทใ‚นใƒ†ใƒ ใ—ใ™ใฆใ‚€ใซ้€ใŠใใ‚‰ใ‚Œใ‚‹ใ€‚ๅฎŸใ˜ใคใฏไป•ไบ‹ใ—ใ”ใจใง่งฆใ•ใ‚ใฃใฆใ„ใ‚‹ Graphene ใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใฏใ€ใพใ•ใซใ“ใฎใƒ‘ใ‚ฟใƒผใƒณใฑใŸใƒผใ‚“ใฎไผๆฅญใใŽใ‚‡ใ†ๅ‘ใ‚€ใ‘ๅฎŸ่ฃ…ใ˜ใฃใใ†ใงใ‚ใ‚Šใ€่ฆๆจกใใผใจ็ตฑๅˆถใจใ†ใ›ใ„ใฎ่ค‡้›‘ใตใใ–ใคใ•ใŒใฏใ‚‹ใ‹ใซๅคงใŠใŠใใ„ใ ใ‘ใ ใ€‚ใพใšใ“ใฎๆœ€ใ‚‚ใฃใจใ‚‚ๅ˜็ด”ใŸใ‚“ใ˜ใ‚…ใ‚“ใชๅ›ณใšใ‚’้ ญใ‚ใŸใพใซๅฉใŸใŸใ่พผใ“ใ‚“ใงใŠใ‘ใฐใ€ใ“ใ‚Œใ‹ใ‚‰ๅ„ๅฑคใ‹ใใใ†ใ‚’ๅฑ•้–‹ใฆใ‚“ใ‹ใ„ใ™ใ‚‹ใฎใฏใ“ใฎๅ›ณใšใซ็ดฐ้ƒจใ•ใ„ใถใ‚’่ถณใŸใ—ใฆใ„ใไฝœๆฅญใ•ใŽใ‚‡ใ†ใซใชใ‚‹ใ€‚

ไธ€ใ„ใกใ€้–‹็™บใ‹ใ„ใฏใคใจใƒ‡ใƒชใƒใƒชใƒผใงใ‚Šใฐใ‚Šใƒผใฎๅฑคใใ†โ€”โ€”ใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐใ‹ใ‚‰ใƒชใƒชใƒผใ‚นใพใง

ใƒใƒผใ‚ธใƒงใƒณ็ฎก็†ใ‹ใ‚“ใ‚Šใฏ Git ใ‚’ไฝฟใคใ‹ใ„ใ€ใ“ใ‚Œใฏๆ—ขใ™ใงใซ่‡ชๅฎ…ใ˜ใŸใใงไฝฟใคใ‹ใฃใฆใ„ใ‚‹ใ€‚ใ‚ณใƒผใƒ‰ใƒ›ใ‚นใƒ†ใ‚ฃใƒณใ‚ฐใปใ™ใฆใƒใ‚“ใใจ CI ่ตทๅ‹•ใใฉใ†ใฏ GitHub / GitLabใ€่‡ชๅ‰ใ˜ใพใˆๆง‹็ฏ‰ใ“ใ†ใกใใชใ‚‰ Gitea ใฎๆ–นใปใ†ใŒ่ปฝ้‡ใ‘ใ„ใ‚Šใ‚‡ใ†ใ ใ€‚CI/CD ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใฑใ„ใทใ‚‰ใ„ใ‚“ใฏ Jenkins ใ‹ GitLab CI ใ‚’ไบˆๅฎšใ‚ˆใฆใ„ใ—ใฆใ„ใ‚‹ใ€‚ใƒ“ใƒซใƒ‰ใƒ„ใƒผใƒซใคใƒผใ‚‹ใฏ Java ๅดใŒใ‚ใงใ‚ˆใไฝฟใคใ‹ใ‚ใ‚Œใ‚‹ Mavenใ€‚ใ‚คใƒกใƒผใ‚ธใƒฌใ‚ธใ‚นใƒˆใƒชใ‚Œใ˜ใ™ใจใ‚Šใฏ Harbor๏ผˆไปฅๅ‰ใ„ใœใ‚“ๅŒๆœŸใฉใ†ใใ‚นใ‚ฏใƒชใƒ—ใƒˆใ™ใใ‚Šใทใจใ‚’็ต„ใใ‚“ใ ใ“ใจใŒใ‚ใ‚Šใ€ใกใ‚‡ใ†ใฉๅฏพๅฟœใŸใ„ใŠใ†ใ™ใ‚‹๏ผ‰ใงใ€ใ‚ทใƒณใƒ—ใƒซใชๅ ดๅˆใฐใ‚ใ„ใฏ Docker Hub ใงใ‚‚ใ„ใ„ใ€‚ๆˆๆžœ็‰ฉใ›ใ„ใ‹ใถใคใƒชใƒใ‚ธใƒˆใƒชใ‚Šใฝใ˜ใจใ‚Š๏ผˆJar/ไพๅญ˜ใ„ใžใ‚“ใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใฑใฃใ‘ใƒผใ˜ใฎไฟ็ฎกใปใ‹ใ‚“๏ผ‰ใฏ็™บๅฑ•ใฏใฃใฆใ‚“ๆฎต้šŽใ ใ‚“ใ‹ใ„ใจใ—ใฆ Nexus ใ‹ Artifactory ใ‚’ๆคœ่จŽใ‘ใ‚“ใจใ†ใงใใ‚‹ใ€‚ใ‚ณใƒผใƒ‰ๅ“่ณชใฒใ‚“ใ—ใคใ‚นใ‚ญใƒฃใƒณใ™ใใ‚ƒใ‚“ใฏ SonarQube ใง้™็š„ใ›ใ„ใฆใ่งฃๆžใ‹ใ„ใ›ใใ‚’่กŒใŠใ“ใชใ†ใ€‚

ไบŒใซใ€ใ‚ขใ‚ฏใ‚ปใ‚นๅฑคใใ†โ€”โ€”ใƒฆใƒผใ‚ถใƒผใƒชใ‚ฏใ‚จใ‚นใƒˆใฎๆœ€ๅˆใ•ใ„ใ—ใ‚‡ใฎๅ…ฅๅฃใ„ใ‚Šใใก

DNS ใจ CDN ใฏใฉใกใ‚‰ใ‚‚ Cloudflare ใ‚’ไฝฟใคใ‹ใ†โ€”โ€”ใ“ใฎไบŒใตใŸใคใฏใ€Œ็‰›้ฆฌใŽใ‚…ใ†ใฐใƒใƒฃใƒณใ€ใ‚ตใ‚คใƒˆใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใทใ‚ใ˜ใ‡ใใจใงๆ—ขใ™ใงใซไฝฟ็”จใ—ใ‚ˆใ†็ตŒ้จ“ใ‘ใ„ใ‘ใ‚“ใŒใ‚ใ‚Šใ€ๆฆ‚ๅฟตใŒใ„ใญใ‚“ใ‚’ใใฎใพใพๆต็”จใ‚Šใ‚…ใ†ใ‚ˆใ†ใงใใ‚‹ใ€‚่ฒ ่ทๅˆ†ๆ•ฃใตใ‹ใถใ‚“ใ•ใ‚“๏ผˆLB๏ผ‰ใฏ่‡ชๅฎ…ใ˜ใŸใใงใฏ Nginx ใ‚’่‡ชๅ‰ใ˜ใพใˆๆง‹็ฏ‰ใ“ใ†ใกใใ—ใฆ็ทด็ฟ’ใ‚Œใ‚“ใ—ใ‚…ใ†ใ™ใ‚‹ใฎใŒไธ€็•ชใ„ใกใฐใ‚“ๆ‰‹ใฆใฃๅ–ใจใ‚Šๆ—ฉใฏใ‚„ใใ€ใ‚ฏใƒฉใ‚ฆใƒ‰ไธŠใ˜ใ‚‡ใ†ใงใฏ ALB/NLB ใซ็›ธๅฝ“ใใ†ใจใ†ใ™ใ‚‹ใ€‚API ใ‚ฒใƒผใƒˆใ‚ฆใ‚งใ‚คใฏใƒซใƒผใƒ†ใ‚ฃใƒณใ‚ฐใ‚‹ใƒผใฆใƒใ‚“ใใƒป่ช่จผใซใ‚“ใ—ใ‚‡ใ†ใƒปๆต้‡ๅˆถ้™ใ‚Šใ‚…ใ†ใ‚Šใ‚‡ใ†ใ›ใ„ใ’ใ‚“ใจใ„ใฃใŸๅ…ฅๅฃใ„ใ‚Šใใกๅ‡ฆ็†ใ—ใ‚‡ใ‚Šใ‚’ๆ‹…ๅฝ“ใŸใ‚“ใจใ†ใ—ใ€Spring Cloud Gateway ใ‚’ไฝฟใคใ‹ใ†โ€”โ€”ใ“ใ‚Œใฏ Graphene ใฎๆŠ€่ก“ใŽใ˜ใ‚…ใคใ‚นใ‚ฟใƒƒใ‚ฏใ™ใŸใฃใใซใ‚‚ใจใ‹ใ‚‰ๅญ˜ๅœจใใ‚“ใ–ใ„ใ™ใ‚‹ๆง‹ๆˆ่ฆ็ด ใ“ใ†ใ›ใ„ใ‚ˆใ†ใใ ใ€‚

ไธ‰ใ•ใ‚“ใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณ/ใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นๅฑคใใ†

ใƒ“ใ‚ธใƒใ‚นใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ๆœฌไฝ“ใปใ‚“ใŸใ„ใฏ Spring Boot ใ‚’ไฝฟใคใ‹ใ†ใ€‚ใ‚ตใƒผใƒ“ใ‚น้–“ใ‹ใ‚“ๅ‘ผใ‚ˆใณๅ‡บใ ใ—ใฏ Feign๏ผˆSpring Cloud ใ‚จใ‚ณใ‚ทใ‚นใƒ†ใƒ ๏ผ‰ใ‚’็ตŒ็”ฑใ‘ใ„ใ‚†ใ™ใ‚‹ใ€‚ใ‚ตใƒผใƒ“ใ‚น็™ป้Œฒใจใ†ใ‚ใใจ็™บ่ฆ‹ใฏใฃใ‘ใ‚“ใฏ K8s Service + CoreDNS ใฎๅ›บๅฎšใ“ใฆใ„ใƒ‰ใƒกใ‚คใƒณใฉใ‚ใ„ใ‚“ใง็›ดๆŽฅใกใ‚‡ใใ›ใคๅ‡ฆ็†ใ—ใ‚‡ใ‚Šใ—ใ€ๅˆฅ้€”ในใฃใจ Nacos ใ‚’ไฝฟใคใ‹ใฃใฆใ‚ตใƒผใƒ“ใ‚น็™บ่ฆ‹ใฏใฃใ‘ใ‚“ใ‚’ใ•ใ›ใชใ„โ€”โ€”ใ“ใ‚Œใฏ K8s ใƒใ‚คใƒ†ใ‚ฃใƒ–็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ไธ‹ใ‹ใงใฎๆจ™ๆบ–ใฒใ‚‡ใ†ใ˜ใ‚…ใ‚“ๆ‰‹ๆณ•ใ—ใ‚…ใปใ†ใงใ‚ใ‚Šใ€Graphene ใ‚‚ใ“ใฎ้€šใจใŠใ‚Šใ ใ€‚่จญๅฎšใ›ใฃใฆใ„ใ‚ปใƒณใ‚ฟใƒผใ›ใ‚“ใŸใƒผใงใ‚ˆใ†ใ‚„ใ Nacos ใฎๅ‡บ็•ชใงใฐใ‚“ใจใชใ‚Šใ€K8s ็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ไธ‹ใ‹ใงใฏใ€Œๅ„ใ‹ใ็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ใฎ่จญๅฎšใ›ใฃใฆใ„ใ‚’ไธ€ๅ…ƒใ„ใกใ’ใ‚“็ฎก็†ใ‹ใ‚“ใ‚Šใ™ใ‚‹ใ€ใจใ„ใ†ใ“ใฎไธ€ๅฝนใฒใจใ‚„ใใ ใ‘ใ‚’ๆ‹…ใซใชใ†ใ€‚ใ‚ตใƒผใ‚ญใƒƒใƒˆใƒ–ใƒฌใƒผใ‚ซใƒผใจๆต้‡ๅˆถ้™ใ‚Šใ‚…ใ†ใ‚Šใ‚‡ใ†ใ›ใ„ใ’ใ‚“ใฏ Sentinel ใ‚’ไฝฟใคใ‹ใ†ใ€‚Spring Cloud Alibaba ใ‚จใ‚ณใ‚ทใ‚นใƒ†ใƒ ใซๅฑžใžใใ—ใ€Nacos ใจ็ต„ใใฟๅˆใ‚ใ‚ใ›ใ‚‹ใฎใŒ่‡ช็„ถใ—ใœใ‚“ใ ใ€‚ใƒ‡ใƒผใ‚ฟใ‚ขใ‚ฏใ‚ปใ‚นๅฑคใใ†ใฏ MyBatis ใง ORM ใ‚’่กŒใŠใ“ใชใ†ใ€‚ใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰ใฏ React ใ‚’ไฝฟใคใ‹ใ†ใ€‚ใ“ใ‚Œใฏๆฑ‚ไบบใใ‚…ใ†ใ˜ใ‚“ใ‚นใ‚ญใƒซใ™ใใ‚‹่กจใฒใ‚‡ใ†ใซๆ˜Ž่จ˜ใ‚ใ„ใใ•ใ‚Œใฆใ„ใ‚‹่ฆไปถใ‚ˆใ†ใ‘ใ‚“ใงใ‚ใ‚Šใ€ใ€Œ็‰›้ฆฌใŽใ‚…ใ†ใฐใƒใƒฃใƒณใ€ใ‚ตใ‚คใƒˆใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใทใ‚ใ˜ใ‡ใใจใง็ฉใคใฟไธŠใ‚ใ’ใฆใใŸใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰็ตŒ้จ“ใ‘ใ„ใ‘ใ‚“ใจใ‚‚ๅˆ่‡ดใŒใฃใกใ™ใ‚‹ใ€‚

ๅ››ใ‚ˆใ‚“ใ€ใƒ‡ใƒผใ‚ฟไฟๅญ˜ใปใžใ‚“ๅฑคใใ†

ไธญๆ ธใกใ‚…ใ†ใ‹ใใจใชใ‚‹ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใƒ‡ใƒผใ‚ฟใฏ MySQL ใซ็ฝฎใŠใใ€‚ๅคง้‡ใŸใ„ใ‚Šใ‚‡ใ†ใƒ‡ใƒผใ‚ฟใซๅฏพๅฟœใŸใ„ใŠใ†ใ™ใ‚‹ๅˆ†ๆ•ฃใถใ‚“ใ•ใ‚“ๅˆ†ๅ‰ฒใถใ‚“ใ‹ใค๏ผˆใ‚ทใƒฃใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ๏ผ‰ใฏ ShardingSphere ใ‚’ไฝฟใคใ‹ใ„ใ€Graphene ใงๆ…ฃใชใ‚Œใฆใ„ใ‚‹ Sharding Ops ใฎๆฆ‚ๅฟตใŒใ„ใญใ‚“ใซๅฏพๅฟœใŸใ„ใŠใ†ใ™ใ‚‹ใ€‚ใ‚ญใƒฃใƒƒใ‚ทใƒฅใฏไบŒๆฎตใซใ ใ‚“ๆง‹ใ“ใ†ใˆใงใ€Redis ใŒๅˆ†ๆ•ฃใถใ‚“ใ•ใ‚“ใ‚ญใƒฃใƒƒใ‚ทใƒฅใใ‚ƒใฃใ—ใ‚…ใ€Caffeine ใŒใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใ‚ญใƒฃใƒƒใ‚ทใƒฅใใ‚ƒใฃใ—ใ‚…ใ‚’ๆ‹…ๅฝ“ใŸใ‚“ใจใ†ใ—ใ€ๅคšๅฑคใŸใใ†ใ‚ญใƒฃใƒƒใ‚ทใƒฅใใ‚ƒใฃใ—ใ‚…ๆง‹้€ ใ“ใ†ใžใ†ใ‚’็ต„ใใ‚“ใงใ€่ชญใ‚ˆใฟๅ–ใจใ‚Š้€Ÿๅบฆใใใฉใฎๅ‘ไธŠใ“ใ†ใ˜ใ‚‡ใ†ใจใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น่ฒ ่ทใตใ‹ใฎ่ปฝๆธ›ใ‘ใ„ใ’ใ‚“ใ‚’ๅ›ณใฏใ‹ใ‚‹ใ€‚ใƒ•ใ‚กใ‚คใƒซใƒป็”ปๅƒใŒใžใ†ใชใฉใฎ้žใฒๆง‹้€ ใ“ใ†ใžใ†ใƒ‡ใƒผใ‚ฟใฏใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚นใƒˆใƒฌใƒผใ‚ธใ™ใจใ‚Œใƒผใ˜ใซ็ฝฎใŠใใ€AWS S3 ใ‚’้ธๅฎšใ›ใ‚“ใฆใ„ใ™ใ‚‹ใ€‚ใกใ‚‡ใ†ใฉ็พๅœจใ’ใ‚“ใ–ใ„ๅญฆ็ฟ’ไธญใŒใใ—ใ‚…ใ†ใกใ‚…ใ†ใฎ SAA-C03 ใฎๅ†…ๅฎนใชใ„ใ‚ˆใ†ใซใ‚‚ๅˆ่‡ดใŒใฃใกใ™ใ‚‹ใ€‚

ไบ”ใ”ใ€้žๅŒๆœŸใฒใฉใ†ใใจใƒกใƒƒใ‚ปใƒผใ‚ธใƒณใ‚ฐๅฑคใใ†

ใƒกใƒƒใ‚ปใƒผใ‚ธใ‚ญใƒฅใƒผใฏ Kafka ใ‚’ไฝฟใคใ‹ใ„ใ€่ฒ ่ทใตใ‹ใฎๅนณๆบ–ๅŒ–ใธใ„ใ˜ใ‚…ใ‚“ใ‹ใจ้žๅŒๆœŸใฒใฉใ†ใใช็–Ž็ตๅˆใใ‘ใคใ”ใ†ใ‚’ๅฎŸ็พใ˜ใคใ’ใ‚“ใ™ใ‚‹ใ€‚ใƒ‡ใƒƒใƒ‰ใƒฌใ‚ฟใƒผใ‚ญใƒฅใƒผ/้…ๅปถใกใˆใ‚“ใ‚ญใƒฅใƒผใฏๅˆฅ้€”ในใฃใจใฎๆ–ฐใ‚ใ‚‰ใŸใชๆง‹ๆˆ่ฆ็ด ใ“ใ†ใ›ใ„ใ‚ˆใ†ใใฏๅฐŽๅ…ฅใฉใ†ใซใ‚…ใ†ใ›ใšใ€Kafka ่‡ชไฝ“ใ˜ใŸใ„ใฎไป•็ต„ใ—ใใฟใจๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ๅฑคใใ†ใงใฎๅฎŸ่ฃ…ใ˜ใฃใใ†ใงๅคฑๆ•—ใ—ใฃใฑใ„ใƒกใƒƒใ‚ปใƒผใ‚ธใ‚„ๅฎšๆœŸใฆใ„ใใ‚ฟใ‚นใ‚ฏใŸใ™ใใ‚’ๅ‡ฆ็†ใ—ใ‚‡ใ‚Šใ™ใ‚‹ใ€‚ใƒใƒƒใƒๅ‡ฆ็†ใ—ใ‚‡ใ‚Šใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใ™ใ‘ใ˜ใ‚…ใƒผใ‚Šใ‚“ใใฏไป•ไบ‹ใ—ใ”ใจใงๆ…ฃใชใ‚Œใฆใ„ใ‚‹็ถ™็ถšใ‘ใ„ใžใๆ›ดๆ–ฐใ“ใ†ใ—ใ‚“ใƒใƒƒใƒใฐใฃใกใฎใ‚ˆใ†ใชๅ ด้ขใฐใ‚ใ‚“ใซๅฏพๅฟœใŸใ„ใŠใ†ใ—ใ€็™บๅฑ•ใฏใฃใฆใ‚“ๆฎต้šŽใ ใ‚“ใ‹ใ„ใจใ—ใฆ XXL-Job ใ‹ Spring Batch ใ‚’ๆคœ่จŽใ‘ใ‚“ใจใ†ใงใใ‚‹ใŒใ€็ฌฌไธ€ๆœŸใ ใ„ใ„ใฃใใงใฏๅ…ฅใ„ใ‚Œใชใใฆใ‚‚ๆง‹ใ‹ใพใ‚ใชใ„ใ€‚

ๅ…ญใ‚ใใ€ๆคœ็ดขใ‘ใ‚“ใ•ใใจใƒญใ‚ฐใ‚ใๅฑคใใ†๏ผˆEFK ใ‚นใ‚ฟใƒƒใ‚ฏ๏ผ‰

ๅ…จๆ–‡ใœใ‚“ใถใ‚“ๆคœ็ดขใ‘ใ‚“ใ•ใใจ่ค‡้›‘ใตใใ–ใคใชใ‚ฏใ‚จใƒชใใˆใ‚Šใฏ Elasticsearch ใ‚’ไฝฟใคใ‹ใ†ใ€‚ๅ„ใ‹ใใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใ‹ใ‚‰ใฎใƒญใ‚ฐใ‚ใๅŽ้›†ใ—ใ‚…ใ†ใ—ใ‚…ใ†ใฏ Filebeat ใŒๆ‹…ๅฝ“ใŸใ‚“ใจใ†ใ™ใ‚‹ใ€‚ใƒญใ‚ฐใ‚ใๅ‡ฆ็†ใ—ใ‚‡ใ‚Šใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใฑใ„ใทใ‚‰ใ„ใ‚“ใฎ Logstash ใฏไปปๆ„ใซใ‚“ใ„ใงใ€Filebeat ใ‹ใ‚‰็›ดๆŽฅใกใ‚‡ใใ›ใค ES ใซใƒญใ‚ฐใ‚ใใ‚’้€ใŠใใ‚‹ใชใ‚‰ใ€ใ“ใฎๅฑคใใ†ใฏๅ…ˆ้€ใ•ใใŠใใ‚Šใซใ—ใฆใ‚‚ใ‚ˆใ„ใ€‚ใƒญใ‚ฐใ‚ใใฎๆคœ็ดขใ‘ใ‚“ใ•ใใจ่กจ็คบใฒใ‚‡ใ†ใ˜ใฏ Kibana ใŒๆ‹…ๅฝ“ใŸใ‚“ใจใ†ใ™ใ‚‹ใ€‚Elasticsearch + Filebeat + Kibana ใฎ็ต„ใใฟๅˆใ‚ใ‚ใ›ใฏ้€šๅธธใคใ†ใ˜ใ‚‡ใ† EFK ใ‚นใ‚ฟใƒƒใ‚ฏใจๅ‘ผใ‚ˆใฐใ‚Œใ€ใ•ใ‚‰ใซ Logstash ใ‚’ๅŠ ใใ‚ใˆใ‚Œใฐใ€ใ‚ˆใ‚Šๅคๅ…ธ็š„ใ“ใฆใ‚“ใฆใใช ELK ใ‚นใ‚ฟใƒƒใ‚ฏใจใชใ‚‹ใ€‚ไปŠๅ›žใ“ใ‚“ใ‹ใ„ใฎ่จˆ็”ปใ‘ใ„ใ‹ใใงใกใ‚‡ใ†ใฉไฝฟใคใ‹ใ†ใฎใฏ EFK ใ ใ€‚

ไธƒใชใชใ€ใ‚ณใƒณใƒ†ใƒŠใ‚ชใƒผใ‚ฑใ‚นใƒˆใƒฌใƒผใ‚ทใƒงใƒณใจใ‚ฏใƒฉใ‚ฆใƒ‰ๅŸบ็›คใใฐใ‚“

ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใฎๆขฑๅŒ…ใ“ใ‚“ใฝใ†ใฏ Docker ใ‚’ไฝฟใคใ‹ใ†ใ€‚ใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใƒปใ‚นใ‚ฑใƒผใƒชใƒณใ‚ฐใƒป่‡ชๅทฑใ˜ใ“ไฟฎๅพฉใ—ใ‚…ใ†ใตใใจใ„ใฃใŸ่ƒฝๅŠ›ใฎใ†ใ‚Šใ‚‡ใใฏ K8s ใซไปปใพใ‹ใ›ใ€็พๆ™‚็‚นใ’ใ‚“ใ˜ใฆใ‚“ใงๆ—ขใ™ใงใซ k3d ใงใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใซๆง‹็ฏ‰ใ“ใ†ใกใใ—ใŸใ€‚K8s ใ‚ฏใƒฉใ‚นใ‚ฟใฎใƒˆใƒฉใƒ•ใ‚ฃใƒƒใ‚ฏๅ…ฅๅฃใ„ใ‚Šใใกใฏ nginx-ingress ใงใ€ใ“ใ‚Œใ‹ใ‚‰่‡ชๅˆ†ใ˜ใถใ‚“ใงๅฐŽๅ…ฅใฉใ†ใซใ‚…ใ†ใ—ใฆๆ‰‹ใฆใ‚’ๅ‹•ใ†ใ”ใ‹ใ—ใฆ็ทด็ฟ’ใ‚Œใ‚“ใ—ใ‚…ใ†ใ™ใ‚‹้ƒจๅˆ†ใถใถใ‚“ใ ใ€‚ใ‚คใƒณใƒ•ใƒฉใฎใ‚ณใƒผใƒ‰ๅŒ–ใ‹๏ผˆIaC๏ผ‰ใฏ Terraform ใ‹ Ansible ใ‚’ไฝฟใคใ‹ใ„ใ€้•ทๆœŸใกใ‚‡ใ†ใ่จˆ็”ปใ‘ใ„ใ‹ใใฎไธ€็’ฐใ„ใฃใ‹ใ‚“ใ ใ€‚ใ“ใ‚Œใ‚‰ๅ…จใ™ในใฆใ‚’ๆ”ฏใ•ใ•ใˆใ‚‹ใ‚ฏใƒฉใ‚ฆใƒ‰ๅŸบ็›คใใฐใ‚“ใฏ AWS ใงใ€ๅญฆ็ฟ’ไธญใŒใใ—ใ‚…ใ†ใกใ‚…ใ†ใฎ SAA-C03 ใฎๅ†…ๅฎนใชใ„ใ‚ˆใ†ใซๅฏพๅฟœใŸใ„ใŠใ†ใ™ใ‚‹ใ€‚

ๅ…ซใฏใกใ€ๅฏ่ฆณๆธฌๆ€งใ‹ใ‹ใ‚“ใใใ›ใ„ใฎไธ‰ๆœฌๆŸฑใ•ใ‚“ใปใ‚“ใฐใ—ใ‚‰

ๅฏ่ฆณๆธฌๆ€งใ‹ใ‹ใ‚“ใใใ›ใ„ใฏ้€šๅธธใคใ†ใ˜ใ‚‡ใ†ไธ‰ๆœฌๆŸฑใ•ใ‚“ใปใ‚“ใฐใ—ใ‚‰ใซๅˆ†ใ‚ใ‘ใ‚‰ใ‚Œใ‚‹ใ€‚ๆŒ‡ๆจ™ใ—ใฒใ‚‡ใ†๏ผˆMetrics๏ผ‰ใฏ Prometheus ใŒๅŽ้›†ใ—ใ‚…ใ†ใ—ใ‚…ใ†ใจไฟๅญ˜ใปใžใ‚“ใ‚’ๆ‹…ๅฝ“ใŸใ‚“ใจใ†ใ—ใ€Grafana ใŒใ“ใ‚Œใ‚‰ใฎๆŒ‡ๆจ™ใ—ใฒใ‚‡ใ†ใ‚’ใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰ใ ใฃใ—ใ‚…ใผใƒผใฉใจใ—ใฆ่กจ็คบใฒใ‚‡ใ†ใ˜ใ™ใ‚‹โ€”โ€”ใ“ใฎไบŒใตใŸใคใฏๆ—ขใ™ใงใซๅฐŽๅ…ฅใฉใ†ใซใ‚…ใ†ใซ็€ๆ‰‹ใกใ‚ƒใใ—ใ‚…ใ—ใฆใ„ใ‚‹ใ€‚่ญฆๅ ฑใ‘ใ„ใปใ†ใฏ Prometheus ใ‚จใ‚ณใ‚ทใ‚นใƒ†ใƒ ไป˜ๅฑžใตใžใใฎ Alertmanager ใซไปปใพใ‹ใ›ใ€้–พๅ€คใ—ใใ„ใกๅˆฐ้”ใจใ†ใŸใคใง้€š็Ÿฅใคใ†ใกใ‚’้€ใŠใใ‚‹ใ€‚ใƒญใ‚ฐใ‚ใใจใ„ใ†ๆŸฑใฏใ—ใ‚‰ใฏๅ‰่ฟฐใœใ‚“ใ˜ใ‚…ใคใฎ EFK ใ‚นใ‚ฟใƒƒใ‚ฏใใฎใ‚‚ใฎใ ใ€‚ใƒˆใƒฌใƒผใ‚นใจใ‚Œใƒผใ™๏ผˆTracing๏ผ‰ใฏ Jaeger ใ‹ Zipkin ใ‚’ไฝฟใคใ‹ใ„ใ€็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใจใ—ใฆใ€ไธ€ใฒใจใคใฎใƒชใ‚ฏใ‚จใ‚นใƒˆใ‚Šใใˆใ™ใจใŒใ‚ฒใƒผใƒˆใ‚ฆใ‚งใ‚คใƒปใ‚ตใƒผใƒ“ใ‚นAใƒปใ‚ตใƒผใƒ“ใ‚นBใ‚’ใฉใ†่ทจใพใŸใ„ใงไผๆ’ญใงใ‚“ใฑใ—ใฆใ„ใใ‹ใ‚’ๅฏ่ฆ–ๅŒ–ใ‹ใ—ใ‹ใงใใ‚‹โ€”โ€”ใกใชใฟใซ Graphene ใฎๆŠ€่ƒฝใŽใฎใ†่กจใฒใ‚‡ใ†ใซใ‚ใ‚‹ใ€ŒSleuth + Zipkinใ€ใฏใ€ใพใ•ใซ Spring ใ‚จใ‚ณใ‚ทใ‚นใƒ†ใƒ ใงใฎๆœ€ใ‚‚ใฃใจใ‚‚ๅคๅ…ธ็š„ใ“ใฆใ‚“ใฆใใชใƒˆใƒฌใƒผใ‚น็ต„ใใฟๅˆใ‚ใ‚ใ›ใงใ€ๅŸบๆœฌใใปใ‚“ใฎ็›ฃ่ฆ–ใ‹ใ‚“ใ—ใŒ่ปŒ้“ใใฉใ†ใซไน—ใฎใฃใŸใ‚‰ใ€ใ“ใฎๅฑคใใ†ใ‚’ๅŠ ใใ‚ใˆใ‚‹ไพกๅ€คใ‹ใกใฏๅๅˆ†ใ˜ใ‚…ใ†ใถใ‚“ใซใ‚ใ‚‹ใ€‚

ไนใใ‚…ใ†ใ€ใ‚ปใ‚ญใƒฅใƒชใƒ†ใ‚ฃใจใƒใƒƒใƒˆใƒฏใƒผใ‚ฏ๏ผˆ็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใ€ๅพŒๅ›žใ‚ใจใพใ‚ใ—ใงใ‚ˆใ„๏ผ‰

ใƒฆใƒผใ‚ถใƒผ่ช่จผใซใ‚“ใ—ใ‚‡ใ†่ชๅฏใซใ‚“ใ‹ใฏ Spring Security + JWT ใ‚’ไฝฟใคใ‹ใ†ใ€‚้ตใ‹ใŽ็ฎก็†ใ‹ใ‚“ใ‚ŠใฏๅŸบ็คŽใใๆฎต้šŽใ ใ‚“ใ‹ใ„ใงใฏ K8s Secretใ€็™บๅฑ•ใฏใฃใฆใ‚“ๆฎต้šŽใ ใ‚“ใ‹ใ„ใงใฏ Vault ใ‚’ๆคœ่จŽใ‘ใ‚“ใจใ†ใงใใ‚‹ใ€‚ใ‚ตใƒผใƒ“ใ‚น้–“ใ‹ใ‚“ใฎใ‚ขใ‚ฏใ‚ปใ‚นๅˆถๅพกใ›ใ„ใŽใ‚‡ใฏ K8s NetworkPolicy ใ‚’ไฝฟใคใ‹ใ†ใ€‚ใ“ใฎ็ฏ€ใ›ใคใฏๅ…จไฝ“ใœใ‚“ใŸใ„ใฎๅ„ชๅ…ˆใ‚†ใ†ใ›ใ‚“้ †ไฝใ˜ใ‚…ใ‚“ใ„ใจใ—ใฆใฏๅพŒใ‚ใจใ‚ใงใ€ๅ‰ๆฎตใœใ‚“ใ ใ‚“ใฎ้ชจ็ต„ใปใญใใฟใŒ่ปŒ้“ใใฉใ†ใซไน—ใฎใฃใฆใ‹ใ‚‰ๆˆปใ‚‚ใฉใฃใฆ่ฃœใŠใŽใชใ†ใ€‚

ๅ…จไฝ“ๅƒใœใ‚“ใŸใ„ใžใ†ๅ›ณใšใŒ็คบใ—ใ‚ใ™ไธƒใชใชใคใฎๆง‹็ฏ‰ใ“ใ†ใกใๆฎต้šŽใ ใ‚“ใ‹ใ„

ใ“ใฎๅ…จไฝ“ๅƒใœใ‚“ใŸใ„ใžใ†ๅ›ณใšๅ…จไฝ“ใœใ‚“ใŸใ„ใ‚’่‡ชๅˆ†ใ˜ใถใ‚“ใฎ PC ไธŠใ˜ใ‚‡ใ†ใซ่ฝใŠใจใ—่พผใ“ใ‚€ใจใ€ไธƒใชใชใคใฎๆฎต้šŽใ ใ‚“ใ‹ใ„ใซ่จˆ็”ปใ‘ใ„ใ‹ใใ•ใ‚Œใ‚‹ใ€‚ๆฎต้šŽใ ใ‚“ใ‹ใ„ไธ€ใ„ใกใฏ K8s ใฎๅŸบ็›คใใฐใ‚“๏ผˆk3d๏ผ‰ใซ Prometheus/Grafana ็›ฃ่ฆ–ใ‹ใ‚“ใ—ใ‚’ๅŠ ใใ‚ใˆใŸใ‚‚ใฎใงใ€ๆ—ขใ™ใงใซ็€ๆ‰‹ใกใ‚ƒใใ—ใ‚…ใ—ใฆใ„ใ‚‹ใ€‚ๆฎต้šŽใ ใ‚“ใ‹ใ„ไบŒใซใฏใ‚ทใƒณใƒ—ใƒซใช Spring Boot ใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใ‚’ไบŒใตใŸใคๆ›ธใ‹ใใ€ใ‚ตใƒผใƒ“ใ‚น้–“ใ‹ใ‚“ๅ‘ผใ‚ˆใณๅ‡บใ ใ—ใฏ Nacos ใ‚’็ตŒ็”ฑใ‘ใ„ใ‚†ใ›ใš K8s Service DNS ใ‚’็›ดๆŽฅใกใ‚‡ใใ›ใคไฝฟใคใ‹ใ„ใ€Nacos ใฏใ€Œ่จญๅฎšใ›ใฃใฆใ„ใ‚ปใƒณใ‚ฟใƒผใ›ใ‚“ใŸใƒผใ€ใจใ„ใ†ใ“ใฎไธ€ๅฝนใฒใจใ‚„ใใ ใ‘ใ‚’ๆ‹…ๅฝ“ใŸใ‚“ใจใ†ใ•ใ›ใ‚‹โ€”โ€”ใ€Œใ‚ฒใƒผใƒˆใ‚ฆใ‚งใ‚คใฎใƒซใƒผใƒ†ใ‚ฃใƒณใ‚ฐ โ†’ K8s DNS ๅ‘ผใ‚ˆใณๅ‡บใ ใ— โ†’ Nacos ใ‹ใ‚‰ใฎ่จญๅฎšใ›ใฃใฆใ„ๅ–ๅพ—ใ—ใ‚…ใจใใ€ใจใ„ใ†ใ“ใฎ็ตŒ่ทฏใ‘ใ„ใ‚ใ‚’้€šใจใŠใ™ใ“ใจใฏใ€ใ™ในใฆใฎใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นๅญฆ็ฟ’ใŒใใ—ใ‚…ใ†ใฎๅœŸๅฐใฉใ ใ„ใงใ‚ใ‚Šใ€Graphene ใฎๅฎŸ้š›ใ˜ใฃใ•ใ„ใฎใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใ‚ใƒผใใฆใใกใ‚ƒใจใ‚‚ไธ€่‡ดใ„ใฃใกใ™ใ‚‹ใ€‚ๆฎต้šŽใ ใ‚“ใ‹ใ„ไธ‰ใ•ใ‚“ใฏ MySQLใ€Redis/Caffeineใ€MyBatis ใ‚’ๆŽฅ็ถšใ›ใคใžใใ—ใ€ใ‚ญใƒฃใƒƒใ‚ทใƒฅ่ฒซ้€šใ‹ใ‚“ใคใ†ใƒปใ‚ญใƒฃใƒƒใ‚ทใƒฅๅดฉๅฃŠใปใ†ใ‹ใ„ใจใ„ใฃใŸๆฆ‚ๅฟตใŒใ„ใญใ‚“ใฎๅฎŸ้š›ใ˜ใฃใ•ใ„ใฎ็พ่ฑกใ’ใ‚“ใ—ใ‚‡ใ†ใ‚’ไฝ“้จ“ใŸใ„ใ‘ใ‚“ใ™ใ‚‹ใ€‚ๆฎต้šŽใ ใ‚“ใ‹ใ„ๅ››ใ‚ˆใ‚“ใฏ Kafka ใ‚’ๅฐŽๅ…ฅใฉใ†ใซใ‚…ใ†ใ—ใ€ใ€Œๆณจๆ–‡ใกใ‚…ใ†ใ‚‚ใ‚“ โ†’ ้žๅŒๆœŸใฒใฉใ†ใๅœจๅบซใ–ใ„ใ“ๆŽง้™คใ“ใ†ใ˜ใ‚‡ใ€ใฎใ‚ˆใ†ใชใ‚ทใƒŠใƒชใ‚ชใ—ใชใ‚ŠใŠใ‚’ไฝœใคใใ‚Šใ€ใƒกใƒƒใ‚ปใƒผใ‚ธใฎๆปž็•™ใŸใ„ใ‚Šใ‚…ใ†ใจๆถˆ่ฒปใ—ใ‚‡ใ†ใฒ้…ๅปถใกใˆใ‚“ใ‚’ไฝ“้จ“ใŸใ„ใ‘ใ‚“ใ™ใ‚‹ใ€‚ๆฎต้šŽใ ใ‚“ใ‹ใ„ไบ”ใ”ใฏ EFK ใƒญใ‚ฐใ‚ใ็ตŒ่ทฏใ‘ใ„ใ‚ใ‚’ๆง‹็ฏ‰ใ“ใ†ใกใใ—ใ€ๅ‰ๆฎตใœใ‚“ใ ใ‚“ๅ„ใ‹ใใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใฎใƒญใ‚ฐใ‚ใใ‚’็ตฑไธ€ใจใ†ใ„ใคๅŽ้›†ใ—ใ‚…ใ†ใ—ใ‚…ใ†ใ™ใ‚‹ใ€‚ๆฎต้šŽใ ใ‚“ใ‹ใ„ๅ…ญใ‚ใใฏ Jenkins CI/CD ใ‚’ๅฐŽๅ…ฅใฉใ†ใซใ‚…ใ†ใ—ใ€ใ€Œใ‚ณใƒผใƒ‰ๆๅ‡บใฆใ„ใ—ใ‚…ใค โ†’ ่‡ชๅ‹•ใ˜ใฉใ†ใƒ“ใƒซใƒ‰ใณใ‚‹ใฉ โ†’ k3d ใธใฎ่‡ชๅ‹•ใ˜ใฉใ†ใƒ‡ใƒ—ใƒญใ‚คใงใทใ‚ใ„ใ€ใจใ„ใ†้–‰ใธใ„ใƒซใƒผใƒ—ใ‚‹ใƒผใทใ‚’้€šใจใŠใ™ใ€‚ๆฎต้šŽใ ใ‚“ใ‹ใ„ไธƒใชใชใฏ็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใงใ€ใ‚ซใ‚นใ‚ฟใƒ  Ingressใ€ใƒˆใƒฌใƒผใ‚น๏ผˆZipkin๏ผ‰ใ€ใใ—ใฆ Terraform ใงใ‚คใƒณใƒ•ใƒฉใ„ใ‚“ใตใ‚‰ๅ…จไฝ“ใœใ‚“ใŸใ„ใ‚’็ฎก็†ใ‹ใ‚“ใ‚Šใ™ใ‚‹ใ“ใจใ‚’ๅซใตใใ‚€ใ€‚

็™บๅฑ•ใฏใฃใฆใ‚“่ชฒ้กŒใ‹ใ ใ„๏ผšGraphene ใฎ Zorro BLCSโ€”โ€”่‡ช็คพใ˜ใ—ใ‚ƒ้–‹็™บใ‹ใ„ใฏใคใฎ CDC ใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ข

Zorro BLCS ใฎๆ ธๅฟƒใ‹ใใ—ใ‚“ๅŽŸ็†ใ’ใ‚“ใ‚Šใฏใ€MySQL ใฎใ‚นใƒฌใƒผใƒ–ใซๅฝ่ฃ…ใŽใใ†ใ—ใฆใƒžใ‚นใ‚ฟใƒผใพใ™ใŸใƒผใฎ binlog ใ‚’็›ฃ่ฆ–ใ‹ใ‚“ใ—ใ—ใ€ๅค‰ๆ›ดใธใ‚“ใ“ใ†ใ‚คใƒ™ใƒณใƒˆใ‚’็ตฑไธ€ใจใ†ใ„ใคใ—ใฆ ZorroEvent ๅฝขๅผใ‘ใ„ใ—ใใซๅฐๅ…ฅใตใ†ใซใ‚…ใ†ใ—ใ€Kafka ใ‚ฏใƒฉใ‚นใ‚ฟใซ push ใ™ใ‚‹ไป•็ต„ใ—ใใฟใ ใ€‚ไธ‹ๆตใ‹ใ‚Šใ‚…ใ†ใฏ topic ใ”ใจใซๅˆ†ๅฒใถใ‚“ใใ—ใ€ใใ‚Œใžใ‚Œ็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใฆๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใ—ใ€ไบ’ใŸใŒใ„ใซ้–ข็Ÿฅใ‹ใ‚“ใกใ—ใชใ„ใ€‚ใ“ใ“ใซๅ…จใพใฃใŸใ็•ฐใ“ใจใชใ‚‹ๅ‡ฆ็†ใ—ใ‚‡ใ‚Šๆ–นๅผใปใ†ใ—ใใฎไบŒใตใŸใคใฎๆถˆ่ฒปใ—ใ‚‡ใ†ใฒ็ตŒ่ทฏใ‘ใ„ใ‚ใŒใ‚ใ‚‹ใ€‚CDC ใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใฏ ZorroEvent ใ‚’่งฃๆžใ‹ใ„ใ›ใใ—ใŸๅพŒใฎใกใ€ๅค‰ๆ›ดใธใ‚“ใ“ใ†ใ‚’ insert/update/delete ใจใ—ใฆ Elasticsearch ใซๆ›ธใ‹ใ่พผใ“ใฟใ€ไฟ้™บ่จผๅˆธใปใ‘ใ‚“ใ—ใ‚‡ใ†ใ‘ใ‚“ไธ€่ฆงใ„ใกใ‚‰ใ‚“ใฎใ‚ˆใ†ใชๅ•ใจใ„ๅˆใ‚ใ‚ใ›ใŒ ES ใ‚’็ตŒ็”ฑใ‘ใ„ใ‚†ใ™ใ‚‹ CQRS ใฎ่ชญใ‚ˆใฟๅ–ใจใ‚Š็ตŒ่ทฏใ‘ใ„ใ‚ใ‚’ไฝฟใคใ‹ใˆใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹ใ€‚Alphad ใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใฏ ZorroEvent ใ‚’ SQL ใซๅพฉๅ…ƒใตใใ’ใ‚“ใ—ใฆ็›ดๆŽฅใกใ‚‡ใใ›ใคๅฎŸ่กŒใ˜ใฃใ“ใ†ใ—ใ€ๅ…ƒใ‚‚ใจใฎใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฎๆ›ธใ‹ใ่พผใ“ใฟๆ“ไฝœใใ†ใ•ใ‚’ใใฎใพใพ CBQ ๅธณ็ฅจใกใ‚‡ใ†ใฒใ‚‡ใ†ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใซ้กๅ†™ใ‹ใŒใฟใ†ใคใ—ใซใ™ใ‚‹โ€”โ€”ใ“ใฎใ€Œbinlog ใ‚คใƒ™ใƒณใƒˆ โ†’ SQL ใซๅพฉๅ…ƒใตใใ’ใ‚“ โ†’ ๅฏพ่ฑกใŸใ„ใ—ใ‚‡ใ†ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใงๅ†็”Ÿใ•ใ„ใ›ใ„ใ€ใจใ„ใ†ใƒ‘ใ‚ฟใƒผใƒณใฑใŸใƒผใ‚“ใฏใ€ๆœฌ่ณช็š„ใปใ‚“ใ—ใคใฆใใซใฏ่‡ช็คพใ˜ใ—ใ‚ƒ้–‹็™บใ‹ใ„ใฏใคใฎ่ซ–็†ใ‚ใ‚“ใ‚Š่ค‡่ฃฝใตใใ›ใ„๏ผˆlogical replication๏ผ‰ใงใ‚ใ‚Šใ€ๅŠนๆžœใ“ใ†ใ‹ใฏ MySQL ่‡ชไฝ“ใ˜ใŸใ„ใฎ row-based binlog ่ค‡่ฃฝใตใใ›ใ„ใซไผผใซใฆใ„ใ‚‹ใŒใ€ใ‚ทใ‚นใƒ†ใƒ ใ‚’่ทจใพใŸใŽ Kafka ใ‚’็ตŒ็”ฑใ‘ใ„ใ‚†ใ—ใฆไธญ็ถ™ใกใ‚…ใ†ใ‘ใ„ใ•ใ‚Œใ‚‹็‚นใฆใ‚“ใŒ้•ใกใŒใ†ใ€‚BLCS-OPS ใฎ็”ป้ขใŒใ‚ใ‚“ใ‹ใ‚‰็ขบ่ชใ‹ใใซใ‚“ใงใใŸ้‡่ฆใ˜ใ‚…ใ†ใ‚ˆใ†ใช่จญ่จˆใ›ใฃใ‘ใ„ใƒใ‚คใƒณใƒˆใฝใ„ใ‚“ใจใฏใ„ใใคใ‹ใ‚ใ‚‹ใ€‚ใƒใ‚ธใ‚ทใƒงใƒณ๏ผˆไฝ็ฝฎใ„ใกๆƒ…ๅ ฑใ˜ใ‚‡ใ†ใปใ†๏ผ‰ใซใฏ MySQL ใฎ GTID Set ใ‚’ไฝฟใคใ‹ใ„ใ€ๅฝขๅผใ‘ใ„ใ—ใใฏ server-uuid ใจใƒˆใƒฉใƒณใ‚ถใ‚ฏใ‚ทใƒงใƒณ็•ชๅทใฐใ‚“ใ”ใ†ใฎ็ต„ใใฟๅˆใ‚ใ‚ใ›ใงใ€GTID ใฎๅˆฉ็‚นใ‚Šใฆใ‚“ใฏใƒžใ‚นใ‚ฟใƒผใพใ™ใŸใƒผ/ใ‚นใƒฌใƒผใƒ–ใฎๅˆ‡ใใ‚Šๆ›ฟใ‹ใˆๅพŒใ”ใ‚‚ๅ…จไฝ“ใœใ‚“ใŸใ„ใงไธ€ๆ„ใ„ใกใ„ใ‹ใคๅ˜่ชฟใŸใ‚“ใกใ‚‡ใ†ๅข—ๅŠ ใžใ†ใ‹ใ—็ถšใคใฅใ‘ใ‚‹ใ“ใจใงใ€ใ‚ฟใ‚นใ‚ฏใŸใ™ใๅ†่ตทๅ‹•ใ•ใ„ใใฉใ†ๆ™‚ใ˜ใซๅ‰ๅ›žใœใ‚“ใ‹ใ„ใฎใƒใ‚ธใ‚ทใƒงใƒณใ‹ใ‚‰็ถšใคใฅใใ‚’่ชญใ‚ˆใฟ่พผใ“ใ‚ใ‚‹ใ€‚ใ€Œใƒกใƒƒใ‚ปใƒผใ‚ธใฎ่‡ชๅ‹•ใ˜ใฉใ†่ฃœๅฎŒใปใ‹ใ‚“ใ€ใจใ„ใ†ใ‚ชใƒ—ใ‚ทใƒงใƒณใŒใ‚ใ‚Šใ€ไธญๆ–ญใกใ‚…ใ†ใ ใ‚“ๆœŸ้–“ใใ‹ใ‚“ใซๆผใ‚‚ใ‚ŒใŸ binlog ใ‚คใƒ™ใƒณใƒˆใฏๅ†่ตทๅ‹•ใ•ใ„ใใฉใ†ๆ™‚ใ˜ใซ้ธๆŠž็š„ใ›ใ‚“ใŸใใฆใใซๅ†็”Ÿใ•ใ„ใ›ใ„่ฃœๅฎŒใปใ‹ใ‚“ใงใใ€ใƒ‡ใƒผใ‚ฟๆฌ ๆใ‘ใฃใใ‚“ใ‚’้˜ฒใตใ›ใๆœ€ๅพŒใ•ใ„ใ”ใฎ็ ฆใจใ‚Šใงใจใชใ‚‹ใ€‚report ใจ cdc ใฏใใ‚Œใžใ‚Œใใ‚Œใžใ‚Œ็‹ฌ็ซ‹ใฉใใ‚Šใคใซ่จญๅฎšใ›ใฃใฆใ„ใ•ใ‚ŒใŸ BLCS ใ‚ฟใ‚นใ‚ฏใงใ€ใใ‚Œใžใ‚Œๅ˜็‹ฌใŸใ‚“ใฉใใง่ชญใ‚ˆใฟๅ–ใจใ‚Šๅฐ‚็”จใ›ใ‚“ใ‚ˆใ†ใƒฌใƒ—ใƒชใ‚ซใ‚Œใทใ‚Šใ‹ใซๆŽฅ็ถšใ›ใคใžใใ—ใ€ใใ‚Œใžใ‚Œๅ€‹ๅˆฅใ“ในใคใฎ Kafka topic ใซ็™บ่กŒใฏใฃใ“ใ†ใ™ใ‚‹ใ€‚ใƒ•ใ‚ฃใƒซใ‚ฟใƒชใƒณใ‚ฐใฎ่ปธใ˜ใใซใฏใ€ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นๅใ‚ใ„่กจ็พใฒใ‚‡ใ†ใ’ใ‚“ใƒปใƒ†ใƒผใƒ–ใƒซๅใ‚ใ„ใฎๆญฃ่ฆ่กจ็พใ›ใ„ใใฒใ‚‡ใ†ใ’ใ‚“๏ผˆๅˆ†ๆ•ฃใถใ‚“ใ•ใ‚“ๅˆ†ๅ‰ฒใถใ‚“ใ‹ใคใฎๆ•ฐๅญ—ใ™ใ†ใ˜ๆŽฅๅฐพ่พžใ›ใคใณใ˜ใซๅฏพๅฟœใŸใ„ใŠใ†๏ผ‰ใ€ใใ—ใฆๅˆ†ๆ•ฃใถใ‚“ใ•ใ‚“ๅˆ†ๅ‰ฒใถใ‚“ใ‹ใคใ‚ญใƒผใใƒผ๏ผˆไธ‹ๆตใ‹ใ‚Šใ‚…ใ†ใงๅˆ†ๅ‰ฒใถใ‚“ใ‹ใคใ‚’่ทจใพใŸใ„ใ ้›†่จˆใ—ใ‚…ใ†ใ‘ใ„ใ‚’ใ™ใ‚‹ใŸใ‚๏ผ‰ใŒๅซใตใใพใ‚Œใ‚‹ใ€‚ๅ…ƒใ‚‚ใจใฎใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นๆŽฅ็ถšใ›ใคใžใใซใฏๅฐ‚็”จใ›ใ‚“ใ‚ˆใ†ใฎ _ro ๆŽฅๅฐพ่พžใ›ใคใณใ˜ไป˜ใคใ่ชญใ‚ˆใฟๅ–ใจใ‚Šๅฐ‚็”จใ›ใ‚“ใ‚ˆใ†ใ‚ขใ‚ซใ‚ฆใƒณใƒˆใ‚ใ‹ใ†ใ‚“ใจใ‚’ไฝฟใคใ‹ใ„ใ€CDC ใฎ่ชญใ‚ˆใฟๅ–ใจใ‚ŠใŒๆœฌ็•ชใปใ‚“ใฐใ‚“ใƒžใ‚นใ‚ฟใƒผใพใ™ใŸใƒผใฎๆ›ธใ‹ใ่พผใ“ใฟ็ตŒ่ทฏใ‘ใ„ใ‚ใซๅฝฑ้Ÿฟใˆใ„ใใ‚‡ใ†ใ—ใชใ„ใ‚ˆใ†ๅˆ†้›ขใถใ‚“ใ‚Šใ™ใ‚‹ใ€‚ใ•ใ‚‰ใซใ€Œzorro ๅฝขๅผใ‘ใ„ใ—ใใ‚’ไฝฟ็”จใ—ใ‚ˆใ†ใ™ใ‚‹ใ€ใจใ„ใ†ใ‚ชใƒ—ใ‚ทใƒงใƒณใŒใ‚ใ‚Šใ€ใ“ใฎ filter ใƒซใƒผใƒซใ‚‹ใƒผใ‚‹ใซไธ€่‡ดใ„ใฃใกใ—ใŸ binlog ๅค‰ๆ›ดใธใ‚“ใ“ใ†ใ‚’ ZorroEvent ใจใ„ใ†็ตฑไธ€ใจใ†ใ„ใคใ‚คใƒ™ใƒณใƒˆใ„ในใ‚“ใจใƒ—ใƒญใƒˆใ‚ณใƒซใทใ‚ใจใ“ใ‚‹ใงๅฐๅ…ฅใตใ†ใซใ‚…ใ†ใ™ใ‚‹ใ‹ใฉใ†ใ‹ใ‚’ๆฑบใใ‚ใ‚‹ใ€‚

ใ“ใฎไป•็ต„ใ—ใใฟใฏ homelab ใงใฏใ‚ชใƒผใƒ—ใƒณใ‚ฝใƒผใ‚นใŠใƒผใทใ‚“ใใƒผใ™ใฎ Canal ใงๅ†็พใ•ใ„ใ’ใ‚“ใ™ใ‚‹ไบˆๅฎšใ‚ˆใฆใ„ใ โ€”โ€”ๅŽŸ็†ใ’ใ‚“ใ‚Šใฏ Zorro BLCS ใจไธ€่‡ดใ„ใฃใกใ—ใฆใŠใ‚Šใ€ๆœฌ็•ชใปใ‚“ใฐใ‚“ๅดใŒใ‚ใ‚’ๆจกๆ“ฌใ‚‚ใŽใ™ใ‚‹ใฎใซไฝฟใคใ‹ใ†ใ€‚่‡ชๅˆ†ใ˜ใถใ‚“ใฎ MySQL ใซๆŽฅ็ถšใ›ใคใžใใ—ใ€binlog ใ‚’่ณผ่ชญใ“ใ†ใฉใใ—ใ€Kafka ใซ็™บ่กŒใฏใฃใ“ใ†ใ™ใ‚‹ใ€‚ๆถˆ่ฒปใ—ใ‚‡ใ†ใฒๅดใŒใ‚ใฏใ‚ทใƒณใƒ—ใƒซใชใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใ‚’ไบŒใตใŸใคๆ›ธใ‹ใใ€‚ไธ€ใฒใจใคใฏ CDC ใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใ‚’ๆจกๆ“ฌใ‚‚ใŽใ—๏ผˆๆถˆ่ฒปใ—ใ‚‡ใ†ใฒๅพŒใ”ใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใฎ Elasticsearch ใซๆ›ธใ‹ใ่พผใ“ใ‚€๏ผ‰ใ€ใ‚‚ใ†ไธ€ใฒใจใคใฏ Alphad ใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใ‚’ๆจกๆ“ฌใ‚‚ใŽใ™ใ‚‹๏ผˆๆถˆ่ฒปใ—ใ‚‡ใ†ใฒๅพŒใ”ใ‚คใƒ™ใƒณใƒˆใ‚’ SQL ใซๅพฉๅ…ƒใตใใ’ใ‚“ใ—ใ€ๅˆฅในใคใฎ MySQL ใ‚นใ‚ญใƒผใƒžใงๅฎŸ่กŒใ˜ใฃใ“ใ†ใ—ใ€ๅธณ็ฅจใกใ‚‡ใ†ใฒใ‚‡ใ†ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฎ้กๅ†™ใ‹ใŒใฟใ†ใคใ—ใ‚’ๆจกๆ“ฌใ‚‚ใŽใ™ใ‚‹๏ผ‰ใ€‚ใ“ใ†ใ™ใ‚‹ใ“ใจใงใ€GTID ใƒใ‚ธใ‚ทใƒงใƒณใƒปใƒ–ใƒฌใƒผใ‚ฏใƒใ‚คใƒณใƒˆใ‹ใ‚‰ใฎๅ†้–‹ใ•ใ„ใ‹ใ„ใ€ใใ—ใฆใ€ŒๅŒใŠใชใ˜ๅค‰ๆ›ดใธใ‚“ใ“ใ†ใ‚คใƒ™ใƒณใƒˆใ€ไบŒใตใŸใคใฎๅ…จใพใฃใŸใ็•ฐใ“ใจใชใ‚‹ๆถˆ่ฒปใ—ใ‚‡ใ†ใฒๆˆฆ็•ฅใ›ใ‚“ใ‚Šใ‚ƒใใ€ใจใ„ใ†ๅŠนๆžœใ“ใ†ใ‹ใ‚’ไธธใพใ‚‹ใ”ใจไฝ“้จ“ใŸใ„ใ‘ใ‚“ใงใใ‚‹ใ€‚ใ™ใงใซ็ขบ่ชใ‹ใใซใ‚“ใงใใ€ใ“ใ‚ŒไปฅไธŠใ„ใ˜ใ‚‡ใ†ๅŒๅƒšใฉใ†ใ‚Šใ‚‡ใ†ใซ่žใใๅฟ…่ฆใฒใคใ‚ˆใ†ใฎใชใ„ไบŒใตใŸใคใฎๅ•้กŒใ‚‚ใ‚“ใ ใ„ใฏใ€report topic ใฏ Alphad ใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใŒๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใ—ใฆ SQL ้กๅ†™ใ‹ใŒใฟใ†ใคใ—ๅฎŸ่กŒใ˜ใฃใ“ใ†ใ‚’ใ—ใฆใ„ใ‚‹ใ“ใจใ€ใใ—ใฆ Zorro ใฏ็ตฑไธ€ใจใ†ใ„ใคใฎ CDC ใ‚คใƒ™ใƒณใƒˆใƒ—ใƒญใƒˆใ‚ณใƒซใทใ‚ใจใ“ใ‚‹ใจใƒ„ใƒผใƒซใคใƒผใ‚‹ๅใ‚ใ„ใงใ‚ใ‚Šใ€ๅ˜็ด”ใŸใ‚“ใ˜ใ‚…ใ‚“ใชๅฝขๅผใ‘ใ„ใ—ใใ‚ชใƒ—ใ‚ทใƒงใƒณใŠใทใ—ใ‚‡ใ‚“ใงใฏใชใ„ใ“ใจใ ใ€‚ใพใ ็ขบ่ชใ‹ใใซใ‚“ๅพ…ใพใกใฎๆœช่งฃๆฑบใฟใ‹ใ„ใ‘ใคๅ•้กŒใ‚‚ใ‚“ใ ใ„ใฏใ€ZorroEvent ๅ…ทไฝ“็š„ใใŸใ„ใฆใใชใ‚นใ‚ญใƒผใƒžใ™ใใƒผใพ/ใƒ•ใ‚ฃใƒผใƒซใƒ‰ๆง‹้€ ใ“ใ†ใžใ†ใ€ใใ—ใฆใ€Œใƒžใ‚ทใƒณๅ‰ฒใ‚ใ‚Šๅฝ“ใ‚ใฆใ€ใƒœใ‚ฟใƒณใฎไป•็ต„ใ—ใใฟใŒใ‚ตใƒผใƒ“ใ‚น็™บ่ฆ‹ใฏใฃใ‘ใ‚“/ใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใฎๅ•้กŒใ‚‚ใ‚“ใ ใ„ใฎไธ€็จฎใ„ใฃใ—ใ‚…ใชใฎใ‹ใฉใ†ใ‹ใ€ใƒใƒƒใƒใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใฎ ZK ๆ–นๅผใปใ†ใ—ใใจ้กžๆฏ”ใ‚‹ใ„ใฒใงใใ‚‹ใ‹ใฉใ†ใ‹ใ ใ€‚

ES + CQRS๏ผš่ชญใ‚ˆใฟๆ›ธใ‹ใๅˆ†้›ขใถใ‚“ใ‚Šใ€่ชญใ‚ˆใฟๅ–ใจใ‚Šใฏ ES ใซๅผทใคใ‚ˆใไพๅญ˜ใ„ใžใ‚“

ใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใฏ MySQL ใซๆ›ธใ‹ใ่พผใ“ใ‚“ใ ๅพŒใ”่ƒฝๅ‹•็š„ใฎใ†ใฉใ†ใฆใใซ Kafka ใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’็™บ่กŒใฏใฃใ“ใ†ใ—ใ€็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใŸ CDC ๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใŒใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’่ณผ่ชญใ“ใ†ใฉใใ—ใฆ ES ใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใ„ใ‚“ใงใฃใใ™ใซๆ›ธใ‹ใ่พผใ“ใ‚€ใ€‚ไฟ้™บ่จผๅˆธใปใ‘ใ‚“ใ—ใ‚‡ใ†ใ‘ใ‚“ไธ€่ฆงใ„ใกใ‚‰ใ‚“ใฎใ‚ˆใ†ใชๅ•ใจใ„ๅˆใ‚ใ‚ใ›ใฏ ES ใ‚’็›ดๆŽฅใกใ‚‡ใใ›ใค่ชญใ‚ˆใฟใ€ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฏ่ชญใ‚ˆใพใชใ„โ€”โ€”ใ“ใ‚ŒใŒๆจ™ๆบ–็š„ใฒใ‚‡ใ†ใ˜ใ‚…ใ‚“ใฆใใช CQRS๏ผˆใ‚ณใƒžใƒณใƒ‰ใƒปใ‚ฏใ‚จใƒช่ฒฌๅ‹™ใ›ใใ‚€ๅˆ†้›ขใถใ‚“ใ‚Š๏ผ‰ใƒ‘ใ‚ฟใƒผใƒณใงใ€ๆ›ธใ‹ใ่พผใ“ใฟ็ตŒ่ทฏใ‘ใ„ใ‚ใฏ MySQLใ€่ชญใ‚ˆใฟๅ–ใจใ‚Š็ตŒ่ทฏใ‘ใ„ใ‚ใฏ ESใ€ไธก่€…ใ‚Šใ‚‡ใ†ใ—ใ‚ƒใฎ้–“ใ‚ใ„ใ ใฏ้žๅŒๆœŸใฒใฉใ†ใใƒกใƒƒใ‚ปใƒผใ‚ธใซใ‚ˆใ‚‹ๆœ€็ต‚็š„ใ•ใ„ใ—ใ‚…ใ†ใฆใๆ•ดๅˆๆ€งใ›ใ„ใ”ใ†ใ›ใ„ใง็น‹ใคใชใŒใ‚‹ใ€‚ใ‚ˆใใ‚ใ‚‹้šœๅฎณใ—ใ‚‡ใ†ใŒใ„็‚นใฆใ‚“ใฏใ€CDC ๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใŒ้…ๅปถใกใˆใ‚“ใ™ใ‚‹ใ‹ๅœๆญขใฆใ„ใ—ใ™ใ‚‹ใจใ€ES ใƒ‡ใƒผใ‚ฟใŒๅฎŸใ˜ใคใฎใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‚ˆใ‚Š้…ใŠใใ‚Œใ€ใƒฆใƒผใ‚ถใƒผใŒไปŠใ„ใพไฝœใคใใฃใŸใฐใ‹ใ‚Šใฎใƒ‡ใƒผใ‚ฟใŒใ€Œไธ€ๆ™‚็š„ใ„ใกใ˜ใฆใใซ่ฆ‹ใฟใˆใชใ„ใ€ใจใ„ใ†็พ่ฑกใ’ใ‚“ใ—ใ‚‡ใ†ใŒ่ตทใŠใใ‚‹ใ“ใจใ€ใใ—ใฆ Kafka ใƒกใƒƒใ‚ปใƒผใ‚ธใฎๆถˆๅคฑใ—ใ‚‡ใ†ใ—ใคใ‚„้‡่ค‡ใ˜ใ‚…ใ†ใตใๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใง ES ใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใ„ใ‚“ใงใฃใใ™ใฎใƒ‡ใƒผใ‚ฟๆฌ ่ฝใ‘ใคใ‚‰ใใ‚„้‡่ค‡ใ˜ใ‚…ใ†ใตใใŒ่ตทใŠใใ‚‹ใ“ใจใ ใ€‚ใ•ใ‚‰ใซใ€ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใจ ES ใ‚’ๅฎšๆœŸ็š„ใฆใ„ใใฆใใซๅ…จ้‡ใœใ‚“ใ‚Šใ‚‡ใ†ๆฏ”่ผƒใฒใ‹ใใ™ใ‚‹่ฃœๅ„Ÿใปใ—ใ‚‡ใ†ๆฉŸๆง‹ใใ“ใ†ใŒใ‚ใ‚‹ใ‹ใ€ๅคฑๆ•—ใ—ใฃใฑใ„ๆ™‚ใ˜ใฎๅ†่ฉฆ่กŒใ•ใ„ใ—ใ“ใ†ใ‚„ใƒ‡ใƒƒใƒ‰ใƒฌใ‚ฟใƒผใ‚ญใƒฅใƒผใŒใ‚ใ‚‹ใ‹ใ‚’็ขบ่ชใ‹ใใซใ‚“ใ™ใ‚‹ๅฟ…่ฆใฒใคใ‚ˆใ†ใŒใ‚ใ‚‹ใ€‚homelab ใงใฏใ€ใ‚ทใƒณใƒ—ใƒซใช Spring Boot ใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใŒ MySQL ใซๆ›ธใ‹ใ่พผใ“ใ‚“ใ ๅพŒใ” Kafka ใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’็™บ่กŒใฏใฃใ“ใ†ใ—ใ€ใ‚‚ใ†ไธ€ใฒใจใคใฎใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใŒใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’ๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใ—ใฆ Elasticsearch ใซๆ›ธใ‹ใ่พผใ“ใ‚€ใ€ใ€Œไธ€่ฆงใ„ใกใ‚‰ใ‚“็…งไผšใ—ใ‚‡ใ†ใ‹ใ„ใฏ ESใ€่ฉณ็ดฐใ—ใ‚‡ใ†ใ•ใ„็…งไผšใ—ใ‚‡ใ†ใ‹ใ„ใฏ MySQLใ€ใจใ„ใ†ๅฐใกใ„ใ•ใชใƒ‡ใƒขใ‚’ไฝœใคใใ‚Šใ€ใ‚ใ–ใจๆถˆ่ฒปใ—ใ‚‡ใ†ใฒๅดใŒใ‚ใ‚’ใ—ใฐใ‚‰ใๆญขใจใ‚ใฆใ€ใƒ‡ใƒผใ‚ฟไธๆ•ดๅˆใตใ›ใ„ใ”ใ†ใ‚ฆใ‚ฃใƒณใƒ‰ใ‚ฆใ†ใƒใ‚“ใฉใ†ใฎๅฎŸ้š›ใ˜ใฃใ•ใ„ใฎๆง˜ๅญใ‚ˆใ†ใ™ใ‚’่ฆณๅฏŸใ‹ใ‚“ใ•ใคใ™ใ‚‹ไบˆๅฎšใ‚ˆใฆใ„ใ ใ€‚

่‡ช็คพใ˜ใ—ใ‚ƒ้–‹็™บใ‹ใ„ใฏใคใƒใƒƒใƒใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐ + Zookeeper๏ผšๅผทใใ‚‡ใ†ๆ•ดๅˆๆ€งใ›ใ„ใ”ใ†ใ›ใ„ๅ”่ชฟใใ‚‡ใ†ใกใ‚‡ใ† vs K8s ใƒใ‚คใƒ†ใ‚ฃใƒ–ใฎ็™บ่ฆ‹ใฏใฃใ‘ใ‚“

ใƒใƒƒใƒใ‚ฟใ‚นใ‚ฏๆœฌไฝ“ใปใ‚“ใŸใ„ใฏๅ„ใ‹ใใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใทใ‚ใ˜ใ‡ใใจใซๅˆ†ๆ•ฃใถใ‚“ใ•ใ‚“ใ—ใฆใŠใ‚Šใ€็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใŸใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใฏ Zookeeper ใงใ‚ตใƒผใƒ“ใ‚น็™บ่ฆ‹ใฏใฃใ‘ใ‚“ใ‚’่กŒใŠใ“ใชใ†โ€”โ€”ๅ„ใ‹ใใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใฏ ZK ใฎไธ€ๆ™‚ใ„ใกใ˜ใƒŽใƒผใƒ‰๏ผˆephemeral znode๏ผ‰ใซ็™ป้Œฒใจใ†ใ‚ใใ•ใ‚Œใ€K8s Service ใฏ็ตŒ็”ฑใ‘ใ„ใ‚†ใ—ใชใ„ใ€‚ใ“ใฎ่ƒŒๅพŒใฏใ„ใ”ใซใ‚ใ‚‹ๆŠ€่ก“็š„ใŽใ˜ใ‚…ใคใฆใๅˆคๆ–ญใฏใ‚“ใ ใ‚“ใฏใ€K8s Service ใฏใ€Œๅฅๅ…จใ‘ใ‚“ใœใ‚“ใชใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ„ใ‚“ใ™ใŸใ‚“ใ™ใซไธ€ใฒใจใคใƒซใƒผใƒ†ใ‚ฃใƒณใ‚ฐใ‚‹ใƒผใฆใƒใ‚“ใใ™ใ‚‹ใ€ใจใ„ใ†ใ“ใจใ—ใ‹็ญ”ใ“ใŸใˆใ‚‰ใ‚Œใšใ€ใ€Œ็พๅœจใ’ใ‚“ใ–ใ„ใฉใ‚“ใชใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ„ใ‚“ใ™ใŸใ‚“ใ™ใŒใ‚ใ‚‹ใ‹ใ€่ชฐใ ใ‚ŒใŒใƒชใƒผใƒ€ใƒผใ‹ใ€ใจใ„ใฃใŸๆญฃ็ขบใ›ใ„ใ‹ใใชใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ„ใ‚“ใ™ใŸใ‚“ใ™ไธ€่ฆงใ„ใกใ‚‰ใ‚“ใ‚’่ฆใ‚ˆใ†ใ™ใ‚‹ๅ•้กŒใ‚‚ใ‚“ใ ใ„ใซใฏ็ญ”ใ“ใŸใˆใ‚‰ใ‚Œใชใ„ใ€ใจใ„ใ†ใ‚‚ใฎใ ใ€‚ใƒใƒƒใƒใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใงใ‚ˆใใ‚ใ‚‹ๅˆ†ๅ‰ฒใถใ‚“ใ‹ใคใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐ๏ผˆใ‚ฟใ‚นใ‚ฏใ‚’ ID ใƒใƒƒใ‚ทใƒฅใฏใฃใ—ใ‚…ใง่ค‡ๆ•ฐใตใใ™ใ†ใฎ worker ใซๅˆ†ๅ‰ฒใถใ‚“ใ‹ใคใ™ใ‚‹๏ผ‰ใจใƒชใƒผใƒ€ใƒผ้ธๅ‡บใ›ใ‚“ใ—ใ‚…ใค๏ผˆ่ค‡ๆ•ฐใตใใ™ใ†ใฎใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒฉใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ„ใ‚“ใ™ใŸใ‚“ใ™ใฎใ†ใกๅฎŸ้š›ใ˜ใฃใ•ใ„ใซใ‚ฟใ‚นใ‚ฏใ‚’ไธ‹ใใ ใ›ใ‚‹ใฎใฏไธ€ใฒใจใคใ ใ‘๏ผ‰ใฏใ€็”Ÿๆฅใ›ใ„ใ‚‰ใ„ ZK ใฎใ‚ˆใ†ใชๅผทใใ‚‡ใ†ๆ•ดๅˆๆ€งใ›ใ„ใ”ใ†ใ›ใ„๏ผˆCP๏ผ‰ใƒ—ใƒฉใ‚นๅˆ†ๆ•ฃใถใ‚“ใ•ใ‚“ๅ”่ชฟใใ‚‡ใ†ใกใ‚‡ใ†ใƒ—ใƒชใƒŸใƒ†ใ‚ฃใƒ–โ€”โ€”ไธ€ๆ™‚ใ„ใกใ˜ใƒŽใƒผใƒ‰ใƒป้ †ๅบใ˜ใ‚…ใ‚“ใ˜ใ‚‡ใƒŽใƒผใƒ‰ใƒปwatch ๆฉŸๆง‹ใใ“ใ†โ€”โ€”ใ‚’ๅฟ…่ฆใฒใคใ‚ˆใ†ใจใ—ใ€ๅ˜ใŸใ‚“ใชใ‚‹ใ‚ตใƒผใƒ“ใ‚นใƒฌใƒ™ใƒซใฎ่ฒ ่ทๅˆ†ๆ•ฃใตใ‹ใถใ‚“ใ•ใ‚“ใงใฏๆธˆใ™ใพใชใ„ใ€‚ใ‚ˆใ‚Šๆœ‰ๅŠ›ใ‚†ใ†ใ‚Šใ‚‡ใใชๅฎŸ้š›ใ˜ใฃใ•ใ„ใฎไบ‹ๆƒ…ใ˜ใ˜ใ‚‡ใ†ใฏใ€ใƒใƒƒใƒใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใŒ่ช•็”ŸใŸใ‚“ใ˜ใ‚‡ใ†ใ—ใŸๆ™‚ๆœŸใ˜ใใŒใ‚ทใ‚นใƒ†ใƒ ๅ…จ้ขใœใ‚“ใ‚ใ‚“ใฎ K8s ็งป่กŒใ„ใ“ใ†ใ‚ˆใ‚Šๆ—ฉใฏใ‚„ใใ€ZK ใฏใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใฎใ‚ณใƒผใƒ‰ใƒญใ‚ธใƒƒใ‚ฏใ‚ใ˜ใฃใ่‡ชไฝ“ใ˜ใŸใ„ใฎไธ€้ƒจใ„ใกใถ๏ผˆelastic-job/tbschedule ใฎใ‚ˆใ†ใชใ‚ชใƒผใƒ—ใƒณใ‚ฝใƒผใ‚นใŠใƒผใทใ‚“ใใƒผใ™ใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใ€ใ‚ใ‚‹ใ„ใฏๅŒใŠใชใ˜็™บๆƒณใฏใฃใใ†ใฎ่‡ช็คพใ˜ใ—ใ‚ƒ้–‹็™บใ‹ใ„ใฏใค็‰ˆใฐใ‚“ใ‚’ไฝฟใคใ‹ใฃใŸๅฏ่ƒฝๆ€งใ‹ใฎใ†ใ›ใ„ใŒใ‚ใ‚‹๏ผ‰ใงใ‚ใ‚Šใ€ๆญดๅฒ็š„ใ‚Œใใ—ใฆใ็ตŒ็ทฏใ‘ใ„ใ„ใจใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏไพๅญ˜ใ„ใžใ‚“ใฎ่‡ช็„ถใ—ใœใ‚“ใช็ตๆžœใ‘ใฃใ‹ใงใ‚ใฃใฆใ€ใƒใƒผใƒ ใŒใ‚ใ–ใ‚ใ–ไบŒใตใŸ็ณป็ตฑใ‘ใ„ใจใ†ใฎ็™ป้Œฒใจใ†ใ‚ใ็™บ่ฆ‹ใฏใฃใ‘ใ‚“ใ‚’้ธใˆใ‚‰ใ‚“ใ ใ‚ใ‘ใงใฏใชใ„ใ€ใจใ„ใ†ใ‚‚ใฎใ ใ€‚็ขบ่ชใ‹ใใซใ‚“ๅพ…ใพใกใฎๆœช่งฃๆฑบใฟใ‹ใ„ใ‘ใคๅ•้กŒใ‚‚ใ‚“ใ ใ„ใซใฏใ€ใƒใƒƒใƒใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใŒ่‡ช็คพใ˜ใ—ใ‚ƒ้–‹็™บใ‹ใ„ใฏใคใ‹ใ‚ชใƒผใƒ—ใƒณใ‚ฝใƒผใ‚นใŠใƒผใทใ‚“ใใƒผใ™ใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใฎไบŒๆฌกใซใ˜้–‹็™บใ‹ใ„ใฏใคใ‹ใ€ZK ใ‚ฏใƒฉใ‚นใ‚ฟใซๆŽฅ็ถšใ›ใคใžใไธๅฎ‰ๅฎšใตใ‚ใ‚“ใฆใ„ใ‚„ session ใ‚ฟใ‚คใƒ ใ‚ขใ‚ฆใƒˆ่จญๅฎšใ›ใฃใฆใ„ใจใ„ใฃใŸๅฎ‰ๅฎšๆ€งใ‚ใ‚“ใฆใ„ใ›ใ„ๅ•้กŒใ‚‚ใ‚“ใ ใ„ใฎๅฑฅๆญดใ‚Šใ‚ŒใใŒใ‚ใ‚‹ใ‹ใŒๅซใตใใพใ‚Œใ‚‹ใ€‚homelab ๅ†็พใ•ใ„ใ’ใ‚“ใฎๆ–น้‡ใปใ†ใ—ใ‚“ใฏใ€่‡ชๅฎ…ใ˜ใŸใใซๅ˜ไธ€ใŸใ‚“ใ„ใคใƒŽใƒผใƒ‰ใฎ Zookeeper ใ‚’ๅฐŽๅ…ฅใฉใ†ใซใ‚…ใ†ใ—ใ€ZK ๅ…ฌๅผใ“ใ†ใ—ใๆŽจๅฅจใ™ใ„ใ—ใ‚‡ใ†ใฎ Curator ใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใงใ€Œ่ค‡ๆ•ฐใตใใ™ใ†ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ„ใ‚“ใ™ใŸใ‚“ใ™็™ป้Œฒใจใ†ใ‚ใ + ใƒชใƒผใƒ€ใƒผ้ธๅ‡บใ›ใ‚“ใ—ใ‚…ใคใ€ใฎใƒ‡ใƒขใ‚’ๆ›ธใ‹ใใ€ไธ€ๆ™‚ใ„ใกใ˜ใƒŽใƒผใƒ‰ใƒปwatch ใจใ„ใฃใŸๆฆ‚ๅฟตใŒใ„ใญใ‚“ใ‚’่‡ชใ˜ใ‚‰ใฎๆ‰‹ใฆใงไธ€้€šใฒใจใจใŠใ‚Šไฝฟใคใ‹ใฃใฆใฟใฆใ€ใใ‚Œใจๆฏ”่ผƒใฒใ‹ใใ—ใชใŒใ‚‰็ด”็ฒ‹ใ˜ใ‚…ใ‚“ใ™ใ„ใช K8s Service DNS ใฎ็ญ‰ไพกใจใ†ใ‹ๅฎŸ่ฃ…ใ˜ใฃใใ†ใ‚‚ๆ›ธใ‹ใใ€ไธก่€…ใ‚Šใ‚‡ใ†ใ—ใ‚ƒใฎๆœฌ่ณช็š„ใปใ‚“ใ—ใคใฆใใช้•ใกใŒใ„ใ‚’ไฝ“ๆ„ŸใŸใ„ใ‹ใ‚“ใ™ใ‚‹ใ“ใจใ ใ€‚

ใ‚ˆใ‚Š็พไปฃ็š„ใ’ใ‚“ใ ใ„ใฆใใช่ฃœๅฎŒใปใ‹ใ‚“ๆ–นๅ‘ใปใ†ใ“ใ†๏ผšๆ—ขๅญ˜ใใžใ‚“ใฎ้ชจ็ต„ใปใญใใฟใซๆฎ‹ใฎใ“ใ‚‹ๆœฌๅฝ“ใปใ‚“ใจใ†ใฎ้š™้–“ใ™ใใพ

ใ‚ฒใƒผใƒˆใ‚ฆใ‚งใ‚คใซใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใ€K8sใ€CDC/CQRSใ€็›ฃ่ฆ–ใ‹ใ‚“ใ—ใƒญใ‚ฐใ‚ใใ‚’ๅŠ ใใ‚ใˆใŸใ“ใฎ้ชจ็ต„ใปใญใใฟใฏใ€ๆ—ขใ™ใงใซไธญใกใ‚…ใ†ๅคงใ ใ„่ฆๆจกใใผไผๆฅญใใŽใ‚‡ใ†ใฎๆ•™็ง‘ๆ›ธ็š„ใใ‚‡ใ†ใ‹ใ—ใ‚‡ใฆใใชๆจ™ๆบ–ใฒใ‚‡ใ†ใ˜ใ‚…ใ‚“่ถณๅ ดใ‚ใ—ใฐใ ใŒใ€2026ๅนดใญใ‚“ใฎ่ฆ–็‚นใ—ใฆใ‚“ใ‹ใ‚‰่ฆ‹ใฟใ‚‹ใจๆœฌๅฝ“ใปใ‚“ใจใ†ใฎ้š™้–“ใ™ใใพใŒใพใ ใ„ใใคใ‹ใ‚ใ‚‹ใ€‚ไธ€ใฒใจใค็›ฎใ‚ใฏๅˆ†ๆ•ฃใถใ‚“ใ•ใ‚“ใƒˆใƒฉใƒณใ‚ถใ‚ฏใ‚ทใƒงใƒณใงใ€CQRS ใŒ่งฃๆฑบใ‹ใ„ใ‘ใคใ™ใ‚‹ใฎใฏ่ชญใ‚ˆใฟๆ›ธใ‹ใๅˆ†้›ขใถใ‚“ใ‚Šไธ‹ใ‹ใงใฎๆœ€็ต‚็š„ใ•ใ„ใ—ใ‚…ใ†ใฆใๆ•ดๅˆๆ€งใ›ใ„ใ”ใ†ใ›ใ„ใ ใŒใ€ไธ€ๅ›žใ„ใฃใ‹ใ„ใฎๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ๆ“ไฝœใใ†ใ•ใŒ่ค‡ๆ•ฐใตใใ™ใ†ใฎใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใฎๆ›ธใ‹ใ่พผใ“ใฟๆ“ไฝœใใ†ใ•ใ‚’่ทจใพใŸใๅ ดๅˆใฐใ‚ใ„ใ€ใฉใ†ๅ…จใ™ในใฆๆˆๅŠŸใ›ใ„ใ“ใ†ใ™ใ‚‹ใ‹ๅ…จใ™ในใฆใƒญใƒผใƒซใƒใƒƒใ‚ฏใ™ใ‚‹ใ‹ใ‚’ไฟ่จผใปใ—ใ‚‡ใ†ใ™ใ‚‹ใ‹ใจใ„ใ†ใ€ใ‚ˆใ‚Šๆ นๆœฌ็š„ใ“ใ‚“ใฝใ‚“ใฆใใชๅ•้กŒใ‚‚ใ‚“ใ ใ„ใฏๆœช็€ๆ‰‹ใฟใกใ‚ƒใใ—ใ‚…ใ ใ€‚ใƒขใƒŽใƒชใ‚ทใƒƒใ‚ฏใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใชใ‚‰ @Transactional ไธ€ใฒใจใคใง็‰‡ไป˜ใ‹ใŸใฅใ่ฉฑใฏใชใ—ใŒใ€ใƒžใ‚คใ‚ฏใƒญใ‚ตใƒผใƒ“ใ‚นใซๅˆ†่งฃใถใ‚“ใ‹ใ„ใ—ใŸๅพŒใ”ใฏๅคฉ็„ถใฆใ‚“ใญใ‚“ใฎ่งฃใ‹ใ„ใŒใชใใ€ๆจ™ๆบ–ใฒใ‚‡ใ†ใ˜ใ‚…ใ‚“่งฃๆณ•ใ‹ใ„ใปใ†ใฏ Saga ใƒ‘ใ‚ฟใƒผใƒณ๏ผˆใฉใฎๆฎต้šŽใ ใ‚“ใ‹ใ„ใงๅคฑๆ•—ใ—ใฃใฑใ„ใ—ใฆใ‚‚ๅ‰ใพใˆใฎๆฎต้šŽใ ใ‚“ใ‹ใ„ใฎ่ฃœๅ„Ÿใปใ—ใ‚‡ใ†ๆ“ไฝœใใ†ใ•ใ‚’่ตทๅ‹•ใใฉใ†ใ™ใ‚‹๏ผ‰ใจ TCC๏ผˆTry-Confirm-Cancel ใฎไธ‰ๆฎต้šŽใ•ใ‚“ใ ใ‚“ใ‹ใ„๏ผ‰ใ ใ€‚homelab ใงใฏใ‚ขใƒชใƒใƒใ‚ใ‚Šใฐใฐใ‚ชใƒผใƒ—ใƒณใ‚ฝใƒผใ‚นใŠใƒผใทใ‚“ใใƒผใ™ใฎ Seata ใ‚’็Žฉๅ…ทใŠใ‚‚ใกใ‚ƒๆณจๆ–‡ใกใ‚…ใ†ใ‚‚ใ‚“ใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใซ็ต„ใใฟ่พผใ“ใฟใ€ใ‚ใ–ใจใฉใ“ใ‹ใฎๆฎต้šŽใ ใ‚“ใ‹ใ„ใงๅคฑๆ•—ใ—ใฃใฑใ„ใ•ใ›ใฆใ€่ฃœๅ„Ÿใปใ—ใ‚‡ใ†ๆฉŸๆง‹ใใ“ใ†ใŒๅ‰ใพใˆใฎๆ“ไฝœใใ†ใ•ใ‚’ใฉใ†ๅ–ใจใ‚Šๆถˆใ‘ใ™ใ‹ใ‚’่ฆณๅฏŸใ‹ใ‚“ใ•ใคใ™ใ‚‹ไบˆๅฎšใ‚ˆใฆใ„ใ ใ€‚ไบŒใตใŸใค็›ฎใ‚ใฏใ‚ซใƒŠใƒชใ‚ขใƒชใƒชใƒผใ‚น/ใƒ–ใƒซใƒผใ‚ฐใƒชใƒผใƒณใƒ‡ใƒ—ใƒญใ‚คใงใ€ๆœฌ็•ชใปใ‚“ใฐใ‚“ใฎๆจ™ๆบ–็š„ใฒใ‚‡ใ†ใ˜ใ‚…ใ‚“ใฆใใชใ‚„ใ‚Šๆ–นใ‚„ใ‚Šใ‹ใŸใฏไธ€้ƒจใ„ใกใถใฎใƒˆใƒฉใƒ•ใ‚ฃใƒƒใ‚ฏใ ใ‘ใงๆ–ฐใ—ใ‚“ใƒใƒผใ‚ธใƒงใƒณใ‚’ๆคœ่จผใ‘ใ‚“ใ—ใ‚‡ใ†ใ—ใฆใ‹ใ‚‰ๅ…จ้‡ใœใ‚“ใ‚Šใ‚‡ใ†ๅˆ‡ใใ‚Šๆ›ฟใ‹ใˆใ‚‹ใจใ„ใ†ใ‚‚ใฎใงใ€K8s ใƒใ‚คใƒ†ใ‚ฃใƒ–ใงใฏ Service ใฎ้‡ใ˜ใ‚…ใ†ใฟไป˜ใฟใฅใ‘ใƒซใƒผใƒ†ใ‚ฃใƒณใ‚ฐใง็ฐกๅ˜ใ‹ใ‚“ใŸใ‚“ใซๆจกๆ“ฌใ‚‚ใŽใงใใ€็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใงใฏ Argo Rollouts ใงใ€Œใƒชใƒชใƒผใ‚นใงใใ‚‹ใ€ใ“ใจใจใ€Œๆ€ใŠใ‚‚ใ„ๅˆ‡ใใฃใฆใƒชใƒชใƒผใ‚นใ™ใ‚‹ใ€ใ“ใจใฎ้–“ใ‚ใ„ใ ใฎๅทฎใ•ใ‚’ไฝ“้จ“ใŸใ„ใ‘ใ‚“ใ™ใ‚‹ใ€‚ไธ‰ใฟใฃใค็›ฎใ‚ใฏ่ฒ ่ทใตใ‹่ฉฆ้จ“ใ—ใ‘ใ‚“ใจใ‚ซใ‚ชใ‚นใ‚จใƒณใ‚ธใƒ‹ใ‚ขใƒชใƒณใ‚ฐใงใ€SRE ใฎๆ–นๅ‘ใปใ†ใ“ใ†ๆ€งใ›ใ„ใจใ—ใฆใฏ็‰นใจใใซ้‡่ฆใ˜ใ‚…ใ†ใ‚ˆใ†ใ ใ€‚่ฒ ่ทใตใ‹่ฉฆ้จ“ใ—ใ‘ใ‚“ใฏ k6/JMeter/Gatling ใงๆฅต้™ใใ‚‡ใใ’ใ‚“ QPS ใ‚’ๆธฌใฏใ‹ใ‚Šใ€ใƒ‘ใƒ•ใ‚ฉใƒผใƒžใƒณใ‚นใฎใƒœใƒˆใƒซใƒใƒƒใ‚ฏใ‚’ๆŽขใ•ใŒใ™ใ€‚ใ‚ซใ‚ชใ‚นใ‚จใƒณใ‚ธใƒ‹ใ‚ขใƒชใƒณใ‚ฐใฏใ‚ขใƒชใƒใƒใ‚ชใƒผใƒ—ใƒณใ‚ฝใƒผใ‚นใŠใƒผใทใ‚“ใใƒผใ™ใฎ ChaosBlade ใ‚„ Chaos Mesh ใง่ƒฝๅ‹•็š„ใฎใ†ใฉใ†ใฆใใซ้šœๅฎณใ—ใ‚‡ใ†ใŒใ„ใ‚’ๆณจๅ…ฅใกใ‚…ใ†ใซใ‚…ใ†ใ—๏ผˆPod ใ‚’ๆฎบใ“ใ‚ใ™ใ€ใƒใƒƒใƒˆใƒฏใƒผใ‚ฏ้…ๅปถใกใˆใ‚“ใ‚’ๆจกๆ“ฌใ‚‚ใŽใ™ใ‚‹ใ€ใ‚ณใƒใ‚ฏใ‚ทใƒงใƒณใƒ—ใƒผใƒซๆžฏๆธ‡ใ“ใ‹ใคใ‚’ๆจกๆ“ฌใ‚‚ใŽใ™ใ‚‹๏ผ‰ใ€ใ‚ทใ‚นใƒ†ใƒ ใŒ่‡ชๅทฑใ˜ใ“ไฟฎๅพฉใ—ใ‚…ใ†ใตใใงใใ‚‹ใ‹ใ€่ญฆๅ ฑใ‘ใ„ใปใ†ใŒ้ฉๆ™‚ใฆใใ˜ใซ็™บ่ฆ‹ใฏใฃใ‘ใ‚“ใ•ใ‚Œใ‚‹ใ‹ใ‚’่ฆณๅฏŸใ‹ใ‚“ใ•ใคใ™ใ‚‹ใ€‚ใพใš k6 ใง่ฒ ่ทใตใ‹่ฉฆ้จ“ใ—ใ‘ใ‚“ใ‚’ใ—ใ€ใใ‚Œใ‹ใ‚‰ Chaos Mesh ใงใƒฉใƒณใƒ€ใƒ ใซ Pod ใ‚’ๆฎบใ“ใ‚ใ—ใฆใ€RCA ่ƒฝๅŠ›ใฎใ†ใ‚Šใ‚‡ใใ‚’ๅ—ๅ‹•็š„ใ˜ใ‚…ใฉใ†ใฆใใซ้šœๅฎณใ—ใ‚‡ใ†ใŒใ„ใ‚’ๅพ…ใพใคใ‚‚ใฎใ‹ใ‚‰่ƒฝๅ‹•็š„ใฎใ†ใฉใ†ใฆใใซ้›ใใŸใˆใ‚‹ใ‚‚ใฎใธใจๅค‰ใ‹ใˆใ‚‹ไบˆๅฎšใ‚ˆใฆใ„ใ ใ€‚ๅ››ใ‚ˆใฃใค็›ฎใ‚ใฏ Service Mesh ใงใ€Spring Cloud Gateway ใƒ—ใƒฉใ‚น Feign ใจใ„ใ†ใ“ใฎ็ต„ใใฟๅˆใ‚ใ‚ใ›ใฏใ‚ตใƒผใ‚ญใƒƒใƒˆใƒ–ใƒฌใƒผใ‚ซใƒผ/ใƒชใƒˆใƒฉใ‚ค/ใ‚ฟใ‚คใƒ ใ‚ขใ‚ฆใƒˆ/ๆš—ๅทๅŒ–ใ‚ใ‚“ใ”ใ†ใ‹ใ‚’ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใ‚ณใƒผใƒ‰ใซๆ‰‹ๅ‹•ใ—ใ‚…ใฉใ†ใง็ต„ใใฟ่พผใ“ใ‚€ๅฟ…่ฆใฒใคใ‚ˆใ†ใŒใ‚ใ‚‹ใŒใ€Istio ใฎใ‚ˆใ†ใช Service Mesh ใฏใ“ใ‚Œใ‚‰ใฎ่ƒฝๅŠ›ใฎใ†ใ‚Šใ‚‡ใใ‚’ๅŸบ็›คใใฐใ‚“ๅฑคใใ†ใฎ sidecar ใƒ—ใƒญใ‚ญใ‚ทใทใ‚ใใ—ใƒผใซๆฒˆใ—ใšใ‚่พผใ“ใฟใ€ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใ‚ณใƒผใƒ‰ใฏๅ…จใพใฃใŸใๆ„่ญ˜ใ„ใ—ใใ—ใชใใฆใ‚ˆใ„โ€”โ€”Spring Cloud ใŒๆ™‚ไปฃ้…ใ˜ใ ใ„ใŠใใ‚Œใจใ„ใ†่ฉฑใฏใชใ—ใงใฏใชใใ€ใ‚ˆใ‚Š็พไปฃ็š„ใ’ใ‚“ใ ใ„ใฆใใชใ‚ตใƒผใƒ“ใ‚น็ตฑๅˆถใจใ†ใ›ใ„ใฎใ‚„ใ‚Šๆ–นใ‚„ใ‚Šใ‹ใŸใ‚’ไฝ“้จ“ใŸใ„ใ‘ใ‚“ใ™ใ‚‹ไพกๅ€คใ‹ใกใŒใ‚ใ‚‹ใจใ„ใ†ใ“ใจใ ใ€‚ไบ”ใ„ใคใค็›ฎใ‚ใฏ OLAP ๅธณ็ฅจใกใ‚‡ใ†ใฒใ‚‡ใ†ใ‚จใƒณใ‚ธใƒณใˆใ‚“ใ˜ใ‚“ใงใ€Alphad ใŒ MySQL ใซ้กๅ†™ใ‹ใŒใฟใ†ใคใ—ใซใ™ใ‚‹ใ“ใจ่‡ชไฝ“ใ˜ใŸใ„ใฏๅ‹•ใ†ใ”ใใŒใ€MySQL ใฏๆœฌ่ณช็š„ใปใ‚“ใ—ใคใฆใใซใฏใƒˆใƒฉใƒณใ‚ถใ‚ฏใ‚ทใƒงใƒณๅ‘ใ‚€ใ‘ใซๆœ€้ฉๅŒ–ใ•ใ„ใฆใใ‹ใ•ใ‚ŒใŸ่กŒใŽใ‚‡ใ†ๆŒ‡ๅ‘ใ—ใ“ใ†ใ‚นใƒˆใƒฌใƒผใ‚ธใ™ใจใ‚Œใƒผใ˜ใงใ‚ใ‚Šใ€ๅคง้‡ใŸใ„ใ‚Šใ‚‡ใ†ใฎ้›†่จˆใ—ใ‚…ใ†ใ‘ใ„ใ‚ฏใ‚จใƒชใใˆใ‚Šใฏๅˆ—ใ‚ŒใคๆŒ‡ๅ‘ใ—ใ“ใ†ใ‚นใƒˆใƒฌใƒผใ‚ธใ™ใจใ‚Œใƒผใ˜ใ‚ˆใ‚Šใ‹ใชใ‚Š้…ใŠใใใชใ‚‹ใ€‚็พไปฃ็š„ใ’ใ‚“ใ ใ„ใฆใใชใ‚„ใ‚Šๆ–นใ‚„ใ‚Šใ‹ใŸใฏ ClickHouse ใ‚„ Apache Doris ใฎใ‚ˆใ†ใชๅฐ‚็”จใ›ใ‚“ใ‚ˆใ†ใฎๅˆ†ๆžใถใ‚“ใ›ใใ‚จใƒณใ‚ธใƒณใˆใ‚“ใ˜ใ‚“ใซใ‚ˆใ‚Šๅ‚พใ‹ใŸใ‚€ใ„ใฆใŠใ‚Šใ€ใ“ใ‚ŒใฏๅพŒ่ฟฐใ“ใ†ใ˜ใ‚…ใคใฎใƒ“ใƒƒใ‚ฐใƒ‡ใƒผใ‚ฟๅŸบ็›คใใฐใ‚“ใจ็›ดๆŽฅใกใ‚‡ใใ›ใค้–ขไฟ‚ใ‹ใ‚“ใ‘ใ„ใ™ใ‚‹ใฎใงใ€ใพใจใ‚ใฆ็ทด็ฟ’ใ‚Œใ‚“ใ—ใ‚…ใ†ใ™ใ‚‹ไบˆๅฎšใ‚ˆใฆใ„ใ ใ€‚

ใƒ“ใƒƒใ‚ฐใƒ‡ใƒผใ‚ฟๅŸบ็›คใใฐใ‚“๏ผšๅ˜ไธ€ใŸใ‚“ใ„ใคๅ–ๅผ•ใจใ‚Šใฒใใ‹ใ‚‰ๅคง้‡ใŸใ„ใ‚Šใ‚‡ใ†ๅˆ†ๆžใถใ‚“ใ›ใใธ

ใƒ“ใƒƒใ‚ฐใƒ‡ใƒผใ‚ฟๅŸบ็›คใใฐใ‚“ใฎ็”Ÿใ†ใฟใฎ่ฆชใŠใ‚„ใฏ Hadoop ใงใ€2006ๅนดใญใ‚“ใ‹ใ‚‰2013ๅนดใญใ‚“ใ”ใ‚ใฎๆจ™ๆบ–ใฒใ‚‡ใ†ใ˜ใ‚…ใ‚“ไธ‰็จฎใ•ใ‚“ใ—ใ‚…ใฎ็ฅžๅ™จใ˜ใ‚“ใŽใฏ HDFS๏ผˆๅˆ†ๆ•ฃใถใ‚“ใ•ใ‚“ใƒ•ใ‚กใ‚คใƒซใ‚ทใ‚นใƒ†ใƒ ใ€ใƒ‡ใƒผใ‚ฟใ‚’ใฉใ“ใซ็ฝฎใŠใใ‹ใ‚’็ฎก็†ใ‹ใ‚“ใ‚Š๏ผ‰ใ€MapReduce๏ผˆ่จˆ็ฎ—ใ‘ใ„ใ•ใ‚“ใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใ€ใƒ‡ใƒผใ‚ฟใฎ่จˆ็ฎ—ใ‘ใ„ใ•ใ‚“ๆ–นๆณ•ใปใ†ใปใ†ใ‚’็ฎก็†ใ‹ใ‚“ใ‚Šใ™ใ‚‹ใŒใ€ๅ„ใ‹ใใ‚นใƒ†ใƒƒใƒ—ใ™ใฆใฃใทใ”ใจใซใƒ‡ใ‚ฃใ‚นใ‚ฏใซ่ฝใŠใจใ™ใŸใ‚ๆฏ”่ผƒ็š„ใฒใ‹ใใฆใ้…ใŠใใ„๏ผ‰ใ€YARN๏ผˆใƒชใ‚ฝใƒผใ‚นใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใ€ใ‚ฟใ‚นใ‚ฏใ‚’ใ‚ฏใƒฉใ‚นใ‚ฟใฎใฉใฎใƒžใ‚ทใƒณใซๅ‰ฒใ‚ใ‚Šๅฝ“ใ‚ใฆใ‚‹ใ‹ใ‚’็ฎก็†ใ‹ใ‚“ใ‚Š๏ผ‰ใ ใ€‚็พไปฃใ’ใ‚“ใ ใ„ใฎใƒ“ใƒƒใ‚ฐใƒ‡ใƒผใ‚ฟใ‚นใ‚ฟใƒƒใ‚ฏใฏใ€ๆœฌ่ณช็š„ใปใ‚“ใ—ใคใฆใใซใฏใ“ใฎไธ‰ใฟใฃใคใฎๆง‹ๆˆ่ฆ็ด ใ“ใ†ใ›ใ„ใ‚ˆใ†ใใŒไธ€ใฒใจใคใšใค็ฝฎใŠใๆ›ใ‹ใˆใ‚‰ใ‚ŒใŸ็”ฃ็‰ฉใ•ใ‚“ใถใคใงใ‚ใ‚‹ใ€‚HDFS ใฏ MinIO/S3 ใซ็ฝฎใŠใๆ›ใ‹ใ‚ใ‚Šใ€ใ‚ˆใ‚Š่ปฝ้‡ใ‘ใ„ใ‚Šใ‚‡ใ†ใ‹ใคใ‚ฏใƒฉใ‚ฆใƒ‰ใƒใ‚คใƒ†ใ‚ฃใƒ–ใซใชใฃใŸใ€‚MapReduce ใฏ Spark ใซ็ฝฎใŠใๆ›ใ‹ใ‚ใ‚Šใ€ใƒกใƒขใƒชใƒ™ใƒผใ‚นใฎ่จˆ็ฎ—ใ‘ใ„ใ•ใ‚“ใงไธ€ๆกใฒใจใ‘ใŸ้€Ÿใฏใ‚„ใ„ใ€‚YARN ใฏ K8s ใซ็ฝฎใŠใๆ›ใ‹ใ‚ใ‚Šใ€ใ‚ณใƒณใƒ†ใƒŠใ‚ชใƒผใ‚ฑใ‚นใƒˆใƒฌใƒผใ‚ทใƒงใƒณใซ็ตฑไธ€ใจใ†ใ„ใคใ—ใฆๅธๅŽใใ‚…ใ†ใ—ใ‚…ใ†ใ•ใ‚ŒใŸใ€‚้ชจ็ต„ใปใญใใฟใฎใƒญใ‚ธใƒƒใ‚ฏใ‚ใ˜ใฃใใฏ Hadoop ใŒ็™บๆ˜Žใฏใคใ‚ใ„ใ—ใŸใ‚‚ใฎใ ใŒใ€ๅ…ทไฝ“็š„ใใŸใ„ใฆใใชๅฎŸ่ฃ…ใ˜ใฃใใ†ใฏใ™ใงใซไธ–ไปฃไบคไปฃใ›ใ ใ„ใ“ใ†ใŸใ„ใ—ใฆใ„ใ‚‹โ€”โ€”homelab ใงใฏ Hadoop ่‡ชไฝ“ใ˜ใŸใ„ใ‚’้…ๅ‚™ใฏใ„ใณใ™ใ‚‹ๆ™‚้–“ใ˜ใ‹ใ‚“ใ‚’ใ‹ใ‘ใ‚‹ไบˆๅฎšใ‚ˆใฆใ„ใฏใชใ„ใŒใ€ไปŠๅพŒใ“ใ‚“ใ”ไป•ไบ‹ใ—ใ”ใจใงใพใ  Hadoop/Hive ใ‚’ไฝฟใคใ‹ใฃใฆใ„ใ‚‹ๅคใตใ‚‹ใ„ใ‚ทใ‚นใƒ†ใƒ ใซๅ‡บใงไผšใ‚ใฃใŸใจใใฎใŸใ‚ใซใ€ใ“ใฎ็”จ่ชžใ‚ˆใ†ใ”ไฝ“็ณปใŸใ„ใ‘ใ„ใ ใ‘ใฏ่ฆšใŠใผใˆใฆใŠใๅฟ…่ฆใฒใคใ‚ˆใ†ใŒใ‚ใ‚‹ใ€‚ๅ…ทไฝ“็š„ใใŸใ„ใฆใใช้šŽๅฑคใ‹ใ„ใใ†ใซ่ฝใŠใจใ™ใจใ€ใƒ‡ใƒผใ‚ฟๅŽ้›†ใ—ใ‚…ใ†ใ—ใ‚…ใ†ๅฑคใใ†ใฏๆ—ขๅญ˜ใใžใ‚“ใฎ Canal๏ผˆZorro BLCS ใ‚’ๆจกๆ“ฌใ‚‚ใŽ๏ผ‰ใƒ—ใƒฉใ‚น Kafka ใ‚’ๆต็”จใ‚Šใ‚…ใ†ใ‚ˆใ†ใ—ใ€ๅŒใŠใชใ˜ binlog ใ‚คใƒ™ใƒณใƒˆใซๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒใ‚’ใ‚‚ใ†ไธ€ใฒใจใคๆŽฅ็ถšใ›ใคใžใใ™ใ‚‹ใ€‚ใƒ‡ใƒผใ‚ฟใƒฌใ‚คใ‚ฏใฎไฟๅญ˜ใปใžใ‚“ๅฑคใใ†ใฏ MinIO ใ‚’ไฝฟใคใ‹ใ„ใ€ใ‚ชใƒผใƒ—ใƒณใ‚ฝใƒผใ‚นใŠใƒผใทใ‚“ใใƒผใ™ใง S3 ใƒ—ใƒญใƒˆใ‚ณใƒซไบ’ๆ›ใ”ใ‹ใ‚“ใ€่‡ชๅฎ…ใ˜ใŸใๅฎŸ้จ“ๅฎคใ˜ใฃใ‘ใ‚“ใ—ใคใซใฏๆœ€้ฉใ•ใ„ใฆใใช้ธๆŠžใ›ใ‚“ใŸใใ ใ€‚ใƒ‡ใƒผใ‚ฟใ‚ฆใ‚งใ‚ขใƒใ‚ฆใ‚น/OLAP ๅฑคใใ†ใฏ ClickHouse ใ‹ Apache Doris ใ‚’ไฝฟใคใ‹ใ„ใ€ๅˆ—ใ‚ŒใคๆŒ‡ๅ‘ใ—ใ“ใ†ใ‚นใƒˆใƒฌใƒผใ‚ธใ™ใจใ‚Œใƒผใ˜ใง้›†่จˆใ—ใ‚…ใ†ใ‘ใ„ใ‚ฏใ‚จใƒชใใˆใ‚Šใซ็‰นๅŒ–ใจใฃใ‹ๆœ€้ฉๅŒ–ใ•ใ„ใฆใใ‹ใ•ใ‚Œใฆใ„ใ‚‹ใ€‚ใƒใƒƒใƒ่จˆ็ฎ—ใ‘ใ„ใ•ใ‚“ใ‚จใƒณใ‚ธใƒณใˆใ‚“ใ˜ใ‚“ใฏ Spark ใ‚’ไฝฟใคใ‹ใ„ใ€ๆฅญ็•ŒใŽใ‚‡ใ†ใ‹ใ„ๆจ™ๆบ–ใฒใ‚‡ใ†ใ˜ใ‚…ใ‚“ใงใ€็‰นใจใใซ Spark SQL ใŒไธญๅฟƒใกใ‚…ใ†ใ—ใ‚“ใ ใ€‚ใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ใ‚นใƒˆใƒชใƒผใƒ ่จˆ็ฎ—ใ‘ใ„ใ•ใ‚“ใ‚จใƒณใ‚ธใƒณใˆใ‚“ใ˜ใ‚“ใฏ Flink ใ‚’ไฝฟใคใ‹ใ„ใ€Kafka ๅ†…ใชใ„ใฎ CDC ใ‚คใƒ™ใƒณใƒˆใ‚’็›ดๆŽฅใกใ‚‡ใใ›ใคๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใ—ใฆใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ้›†่จˆใ—ใ‚…ใ†ใ‘ใ„๏ผˆไพ‹ใŸใจใˆใฐใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ไฟ้™บๆ–™ใปใ‘ใ‚“ใ‚Šใ‚‡ใ†็ตฑ่จˆใจใ†ใ‘ใ„๏ผ‰ใŒใงใใ‚‹ใ€‚ใ‚ฟใ‚นใ‚ฏใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใฏ Airflow ใ‚’ไฝฟใคใ‹ใ„ใ€ๆฅญ็•ŒใŽใ‚‡ใ†ใ‹ใ„ๆจ™ๆบ–ใฒใ‚‡ใ†ใ˜ใ‚…ใ‚“ใง DAG ๅฏ่ฆ–ๅŒ–ใ‹ใ—ใ‹ใŒๅฏ่ƒฝใ‹ใฎใ†ใ ใ€‚ใƒกใ‚ฟใƒ‡ใƒผใ‚ฟ็ฎก็†ใ‹ใ‚“ใ‚Š/ใƒ‡ใƒผใ‚ฟใ‚ซใ‚ฟใƒญใ‚ฐใฏ DataHub ใ‚’ไฝฟใคใ‹ใ„ใ€็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใงไปปๆ„ใซใ‚“ใ„ใ€ใพใ ๅ…ฅใ„ใ‚Œใชใใฆใ‚‚ใ„ใ„ใ€‚BI/ๅฏ่ฆ–ๅŒ–ใ‹ใ—ใ‹ใฏ Superset ใ‚’ไฝฟใคใ‹ใ„ใ€ใ‚ชใƒผใƒ—ใƒณใ‚ฝใƒผใ‚นใŠใƒผใทใ‚“ใใƒผใ™ใฎ Apache ่ฒกๅ›ฃใ–ใ„ใ ใ‚“ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใทใ‚ใ˜ใ‡ใใจใงใ€็ฟ’ๅพ—ใ—ใ‚…ใ†ใจใใŒๆ—ฉใฏใ‚„ใ„ใ€‚

ใ“ใ“ใงๆœ€ใ‚‚ใฃใจใ‚‚ไพกๅ€คใ‹ใกใŒใ‚ใ‚‹้ƒจๅˆ†ใถใถใ‚“ใฏใ€ๆ—ขๅญ˜ใใžใ‚“ใฎใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใ‚ใƒผใใฆใใกใ‚ƒใจใฎๆŽฅ็ถšใ›ใคใžใ็‚นใฆใ‚“ใ ใ€‚ใƒ‡ใƒผใ‚ฟใ‚’ใ‚ผใƒญใ‹ใ‚‰ไฝœใคใใ‚‹ๅฟ…่ฆใฒใคใ‚ˆใ†ใฏใชใใ€ๆฎต้šŽใ ใ‚“ใ‹ใ„ๅ››ใ‚ˆใ‚“ใงๆง‹็ฏ‰ใ“ใ†ใกใใ—ใŸ Kafka + Canal CDC ็ตŒ่ทฏใ‘ใ„ใ‚ใ‚’ใใฎใพใพๆต็”จใ‚Šใ‚…ใ†ใ‚ˆใ†ใ—ใ€ๅŒใŠใชใ˜ binlog ๅค‰ๆ›ดใธใ‚“ใ“ใ†ใ‚คใƒ™ใƒณใƒˆใซใ€ๆ—ขๅญ˜ใใžใ‚“ใฎ ES ๆ›ธใ‹ใ่พผใ“ใฟๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒใซๅŠ ใใ‚ใˆใฆใ€ใƒ‡ใƒผใ‚ฟใƒฌใ‚คใ‚ฏใธใฎๆ›ธใ‹ใ่พผใ“ใฟ/Flink ใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ่จˆ็ฎ—ใ‘ใ„ใ•ใ‚“ใ‚’่ตทๅ‹•ใใฉใ†ใ™ใ‚‹ๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒใ‚’ใ‚‚ใ†ไธ€ใฒใจใค่ถณใŸใ™ใ€‚ใ“ใ†ใ™ใ‚‹ใ“ใจใงใ€ใ€ŒๅŒใŠใชใ˜ใƒ‡ใƒผใ‚ฟใงใ‚‚ใ€ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใ‚ทใ‚นใƒ†ใƒ ใ‹ใ‚‰่ฆ‹ใฟใ‚Œใฐ CQRS ใฎไธ€็’ฐใ„ใฃใ‹ใ‚“ใ ใŒใ€ใƒ“ใƒƒใ‚ฐใƒ‡ใƒผใ‚ฟๅŸบ็›คใใฐใ‚“ใ‹ใ‚‰่ฆ‹ใฟใ‚Œใฐๅˆ†ๆžใถใ‚“ใ›ใใƒ‡ใƒผใ‚ฟๆบใ’ใ‚“ใ ใ€ใจใ„ใ†่ฆ–็‚นใ—ใฆใ‚“ใฎๅˆ‡ใใ‚Šๆ›ฟใ‹ใˆใ‚’ๅฎŸ้š›ใ˜ใฃใ•ใ„ใซไฝ“้จ“ใŸใ„ใ‘ใ‚“ใงใใ‚‹ใ€‚ๆๆกˆใฆใ„ใ‚ใ‚“ใ™ใ‚‹ๆง‹็ฏ‰ใ“ใ†ใกใ้ †ๅบใ˜ใ‚…ใ‚“ใ˜ใ‚‡ใฏใ€ใพใš MinIO ใ‚’ๅ…ฅใ„ใ‚Œใฆใƒ‡ใƒผใ‚ฟใŒ่ฝใŠใจใ—่พผใ“ใ‚ใ‚‹็Šถๆ…‹ใ˜ใ‚‡ใ†ใŸใ„ใ‚’้€šใจใŠใ—ใ€ๆฌกใคใŽใซ ClickHouse ใ‚’ๅ…ฅใ„ใ‚Œใฆใ€ไปฅๅ‰ใ„ใœใ‚“ Alphad ใŒ้กๅ†™ใ‹ใŒใฟใ†ใคใ—ใซใ—ใฆใ„ใŸๅธณ็ฅจใกใ‚‡ใ†ใฒใ‚‡ใ†ใƒ‡ใƒผใ‚ฟใ‚’ MySQL ใ‹ใ‚‰ ClickHouse ใซๅˆ‡ใใ‚Šๆ›ฟใ‹ใˆใ€ใ‚ฏใ‚จใƒช้€Ÿๅบฆใใใฉใฎ้•ใกใŒใ„ใ‚’็›ดๆ„Ÿ็š„ใกใ‚‡ใฃใ‹ใ‚“ใฆใใซๆฏ”่ผƒใฒใ‹ใใ™ใ‚‹ใ€‚ใใ‚Œใ‹ใ‚‰ Flink ใ‚’ๆŽฅ็ถšใ›ใคใžใใ—ใ€Kafka ๅ†…ใชใ„ใฎ CDC ใ‚คใƒ™ใƒณใƒˆใ‚’ๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใ—ใฆใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ไฟ้™บๆ–™ใปใ‘ใ‚“ใ‚Šใ‚‡ใ†็ดฏ่จˆใ‚‹ใ„ใ‘ใ„้›†่จˆใ—ใ‚…ใ†ใ‘ใ„ใฎๅฐใกใ„ใ•ใชใƒ‡ใƒขใ‚’ไฝœใคใใ‚Šใ€ClickHouse ใซๆ›ธใ‹ใ่พผใ“ใ‚€ใ€‚็ถšใคใฅใ„ใฆ Superset ใ‚’ๆŽฅ็ถšใ›ใคใžใใ—ใ€ClickHouse ใซ็น‹ใคใชใ„ใง5ๅˆ†ใตใ‚“ใงใƒ€ใƒƒใ‚ทใƒฅใƒœใƒผใƒ‰ใ‚’ใƒ‰ใƒฉใƒƒใ‚ฐใฉใ‚‰ใฃใ&ใƒ‰ใƒญใƒƒใƒ—ใงไฝœใคใใ‚‹ใ€้”ๆˆๆ„ŸใŸใฃใ›ใ„ใ‹ใ‚“ใŒไธ€็•ชใ„ใกใฐใ‚“ๅผทใคใ‚ˆใ„ใ‚นใƒ†ใƒƒใƒ—ใ ใ€‚ๆœ€ๅพŒใ•ใ„ใ”ใซ็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใจใ—ใฆ Airflow ใ‚’ๅ…ฅใ„ใ‚Œใ€ๆฏŽๆ—ฅใพใ„ใซใกๆœชๆ˜Žใฟใ‚ใ„ใซไธ€ๅ›žใ„ใฃใ‹ใ„่ตฐใฏใ—ใ‚‹ๅ…จ้‡ใœใ‚“ใ‚Šใ‚‡ใ†็…งๅˆใ—ใ‚‡ใ†ใ”ใ†/้›†่จˆใ—ใ‚…ใ†ใ‘ใ„ใ‚ฟใ‚นใ‚ฏใ‚’็ทจๆˆใธใ‚“ใ›ใ„ใ—ใ€Graphene ่‡ช็คพใ˜ใ—ใ‚ƒ้–‹็™บใ‹ใ„ใฏใคใฎใƒใƒƒใƒใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใจๆฏ”่ผƒใฒใ‹ใใ—ใฆใ€ใƒ‡ใƒผใ‚ฟ ETL ใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใจๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใƒใƒƒใƒใ‚นใ‚ฑใ‚ธใƒฅใƒผใƒชใƒณใ‚ฐใฎ่จญ่จˆใ›ใฃใ‘ใ„ใฎ้•ใกใŒใ„ใ‚’ไฝ“ๆ„ŸใŸใ„ใ‹ใ‚“ใ™ใ‚‹ใ€‚Spark ใฏๆœ€ๅพŒใ•ใ„ใ”ใซๅŠ ใใ‚ใˆใ€ใƒใƒƒใƒๅ‡ฆ็†ใ—ใ‚‡ใ‚Šใ‚จใƒณใ‚ธใƒณใˆใ‚“ใ˜ใ‚“ใจใ‚นใƒˆใƒชใƒผใƒ ๅ‡ฆ็†ใ—ใ‚‡ใ‚Šใฏๆฆ‚ๅฟต็š„ใŒใ„ใญใ‚“ใฆใใซไธ€้ƒจใ„ใกใถ้‡ใ‹ใ•ใชใ‚‹ใŸใ‚ใ€ใ‚นใƒˆใƒชใƒผใƒ ๅ‡ฆ็†ใ—ใ‚‡ใ‚Šใซ็ฟ’็†Ÿใ—ใ‚…ใ†ใ˜ใ‚…ใใ—ใŸๅพŒใ‚ใจใง็†่งฃใ‚Šใ‹ใ„ใ™ใ‚‹ๆ–นใปใ†ใŒๆ—ฉใฏใ‚„ใ„ใ€‚

AI ใจใƒ™ใ‚ฏใƒˆใƒซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น๏ผšใ‚ผใƒญใ‹ใ‚‰่งฃใจใๆ˜Žใ‚ใ‹ใ™ๆ–ฐใ—ใ‚“ใƒขใ‚ธใƒฅใƒผใƒซ

ใ“ใฎๅˆ†้‡Žใถใ‚“ใ‚„ใฏไปฅๅ‰ใ„ใœใ‚“ๅ…จใพใฃใŸใ่งฆใตใ‚ŒใŸใ“ใจใŒใชใ„ใฎใงใ€ไธ€็•ชใ„ใกใฐใ‚“ๅŸบ็คŽใใใฎๆฆ‚ๅฟตใŒใ„ใญใ‚“ใ‹ใ‚‰่ฉฑใฏใชใ™ใ€‚ใƒ™ใ‚ฏใƒˆใƒซ๏ผˆvector๏ผ‰/embedding ใจใฏไฝ•ใชใซใ‹โ€”โ€”ไธ€ๆฎตใ„ใกใ ใ‚“ใฎๆ–‡็ซ ใถใ‚“ใ—ใ‚‡ใ†ใ‚„็”ปๅƒใŒใžใ†ใ‚’ embedding ใƒขใƒ‡ใƒซใซๆธกใ‚ใŸใ™ใจใ€ใƒขใƒ‡ใƒซใฏไธ€้€ฃใ„ใกใ‚Œใ‚“ใฎๆ•ฐๅญ—ใ™ใ†ใ˜๏ผˆไพ‹ใŸใจใˆใฐ1536ๅ€‹ใ“ใฎๆตฎๅ‹•ๅฐๆ•ฐ็‚นใตใฉใ†ใ—ใ‚‡ใ†ใ™ใ†ใฆใ‚“๏ผ‰ใ‚’ๅ‡บๅŠ›ใ—ใ‚…ใคใ‚Šใ‚‡ใใ—ใ€ใ“ใฎๆ•ฐๅญ—ใ™ใ†ใ˜ๅˆ—ใ‚ŒใคใŒใใฎๆ–‡็ซ ใถใ‚“ใ—ใ‚‡ใ†ใฎๆ„ๅ‘ณใ„ใฟใ‚’่กจใ‚ใ‚‰ใ‚ใ™ใ€‚้‡่ฆใ˜ใ‚…ใ†ใ‚ˆใ†ใชๆ€ง่ณชใ›ใ„ใ—ใคใฏใ€ๆ„ๅ‘ณใ„ใฟใŒ่ฟ‘ใกใ‹ใ„ๆ–‡็ซ ใถใ‚“ใ—ใ‚‡ใ†ใฏๅค‰ๆ›ใธใ‚“ใ‹ใ‚“ๅพŒใ”ใฎๆ•ฐๅญ—ใ™ใ†ใ˜ๅˆ—ใ‚Œใคใ‚‚ๆ•ฐๅญฆ็š„ใ™ใ†ใŒใใฆใใซ่ฟ‘ใกใ‹ใใชใ‚‹ใ“ใจใงใ€ใ‚ณใ‚ตใ‚คใƒณ้กžไผผๅบฆใ‚‹ใ„ใ˜ใฉใงใใฎ่ฟ‘ใกใ‹ใ•ใ‚’ๆธฌใฏใ‹ใ‚Œใ‚‹โ€”โ€”ไพ‹ใŸใจใˆใฐใ€Œไฟ้™บใปใ‘ใ‚“็†ใ‚Š่ณ ใฐใ„ใ€ใจใ€Œ่ซ‹ๆฑ‚ใ›ใ„ใใ‚…ใ†็”ณ่ซ‹ใ—ใ‚“ใ›ใ„ใ€ใฏๅญ—้ขใ˜ใฅใ‚‰ใงใฏๅ…จใพใฃใŸใ้•ใกใŒใ†ใŒใ€ใƒ™ใ‚ฏใƒˆใƒซใซๅค‰ๆ›ใธใ‚“ใ‹ใ‚“ใ™ใ‚‹ใจๆ•ฐๅญฆ็š„ใ™ใ†ใŒใใฆใใช่ท้›ขใใ‚‡ใ‚Šใฏใจใฆใ‚‚่ฟ‘ใกใ‹ใใชใ‚‹ใ€‚ใƒ™ใ‚ฏใƒˆใƒซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใจใฏไฝ•ใชใซใ‹โ€”โ€”ไผ็ตฑ็š„ใงใ‚“ใจใ†ใฆใใชใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น๏ผˆMySQL๏ผ‰ใฏๆญฃ็ขบใ›ใ„ใ‹ใไธ€่‡ดใ„ใฃใกใฎๆคœ็ดขใ‘ใ‚“ใ•ใใŒๅพ—ๆ„ใจใใ„ใงใ€ใƒ™ใ‚ฏใƒˆใƒซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฏ้กžไผผๅบฆใ‚‹ใ„ใ˜ใฉๆคœ็ดขใ‘ใ‚“ใ•ใใŒๅพ—ๆ„ใจใใ„ใ€ๅ…จใพใฃใŸใ็•ฐใ“ใจใชใ‚‹ใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นๆง‹้€ ใ“ใ†ใžใ†ใจใ‚ฏใ‚จใƒชๆ–นๅผใปใ†ใ—ใใ ใ€‚RAG๏ผˆๆคœ็ดขใ‘ใ‚“ใ•ใๆ‹กๅผตใ‹ใใกใ‚‡ใ†็”Ÿๆˆใ›ใ„ใ›ใ„๏ผ‰ใฏ็พๅœจใ’ใ‚“ใ–ใ„ใฎ AI ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใงๆœ€ใ‚‚ใฃใจใ‚‚ๆ ธๅฟƒ็š„ใ‹ใใ—ใ‚“ใฆใใชใƒ‘ใ‚ฟใƒผใƒณใฑใŸใƒผใ‚“ใงใ€LLM ใŒ็งๆœ‰ใ—ใ‚†ใ†ใƒ‡ใƒผใ‚ฟใ‚’็Ÿฅใ—ใ‚‰ใชใ„ใ“ใจใƒป็Ÿฅ่ญ˜ใกใ—ใใŒ้™ณ่…ๅŒ–ใกใ‚“ใทใ‹ใ™ใ‚‹ใ“ใจใ‚’่งฃๆฑบใ‹ใ„ใ‘ใคใ™ใ‚‹ใ€‚ๆตใชใŒใ‚Œใฏใ€ใพใš็งๆœ‰ใ—ใ‚†ใ†ใฎๆ–‡ๆ›ธใถใ‚“ใ—ใ‚‡๏ผˆใŸใจใˆใฐๆทฑใตใ‹ใๅญฆ็ฟ’ใŒใใ—ใ‚…ใ†ใ—ใŸ SLI-BAT001 ใฎใ‚ˆใ†ใชไป•ๆง˜ใ—ใ‚ˆใ†ๆ–‡ๆ›ธใถใ‚“ใ—ใ‚‡๏ผ‰ใ‚’ๅฐใ—ใ‚‡ใ†ๆฎต่ฝใ ใ‚“ใ‚‰ใใซๅˆ‡ใใ‚Šๅˆ†ใ‚ใ‘ใ€ๅ„ๆฎตใ‹ใใ ใ‚“ใ‚’ใƒ™ใ‚ฏใƒˆใƒซใซๅค‰ๆ›ใธใ‚“ใ‹ใ‚“ใ—ใฆใƒ™ใ‚ฏใƒˆใƒซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใซไฟๅญ˜ใปใžใ‚“ใ™ใ‚‹ใ€‚ใƒฆใƒผใ‚ถใƒผใŒ่ณชๅ•ใ—ใคใ‚‚ใ‚“ใ™ใ‚‹ใจใใฏใพใšใใฎ่ณชๅ•ใ—ใคใ‚‚ใ‚“ใ‚‚ใƒ™ใ‚ฏใƒˆใƒซใซๅค‰ๆ›ใธใ‚“ใ‹ใ‚“ใ—ใ€ใƒ™ใ‚ฏใƒˆใƒซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‹ใ‚‰ๆœ€ใ‚‚ใฃใจใ‚‚้กžไผผใ‚‹ใ„ใ˜ใ—ใŸๅŽŸๆ–‡ใ’ใ‚“ใถใ‚“ใฎๆ•ฐๆฎตใ™ใ†ใ ใ‚“ใ‚’ๆคœ็ดขใ‘ใ‚“ใ•ใใ™ใ‚‹ใ€‚ใใ—ใฆใ€ใใ‚Œใ‚‰ใฎๅŽŸๆ–‡ใ’ใ‚“ใถใ‚“ใจใƒฆใƒผใ‚ถใƒผใฎ่ณชๅ•ใ—ใคใ‚‚ใ‚“ใ‚’ๅˆใ‚ใ‚ใ›ใฆ LLM ใซๆธกใ‚ใŸใ—ใ€LLM ใซใ“ใ‚Œใ‚‰ใฎ่ณ‡ๆ–™ใ—ใ‚Šใ‚‡ใ†ใ‚’ๅ‚่€ƒใ•ใ‚“ใ“ใ†ใซใ—ใฆๅ›ž็ญ”ใ‹ใ„ใจใ†ใ•ใ›ใ‚‹โ€”โ€”ใ“ใ†ใ™ใ‚‹ใ“ใจใงใ€LLM ใฏๆœฌ็‰ฉใปใ‚“ใ‚‚ใฎใฎ็งๆœ‰ใ—ใ‚†ใ†ใƒ‡ใƒผใ‚ฟใ‚’ไฝฟใคใ‹ใฃใฆๅ›ž็ญ”ใ‹ใ„ใจใ†ใ—ใ€่จ“็ทดใใ‚“ใ‚Œใ‚“่จ˜ๆ†ถใใŠใใซ้ ผใŸใ‚ˆใฃใฆใงใŸใ‚‰ใ‚ใซไฝœใคใใ‚‹๏ผˆใƒใƒซใ‚ทใƒใƒผใ‚ทใƒงใƒณ๏ผ‰ใ“ใจใŒใชใใชใ‚Šใ€LLM ใฎ็Ÿฅ่ญ˜ใกใ—ใใฎ้™ณ่…ๅŒ–ใกใ‚“ใทใ‹ๅ•้กŒใ‚‚ใ‚“ใ ใ„ใ‚’่งฃๆฑบใ‹ใ„ใ‘ใคใ™ใ‚‹ๆœ€ใ‚‚ใฃใจใ‚‚ไธปๆตใ—ใ‚…ใ‚Šใ‚…ใ†ใชๆ–นๆณ•ใปใ†ใปใ†ใงใ‚‚ใ‚ใ‚‹ใ€‚

ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใซๆ–ฐ่ฆใ—ใ‚“ใใซ่ฟฝๅŠ ใคใ„ใ‹ใŒๅฟ…่ฆใฒใคใ‚ˆใ†ใชใƒขใ‚ธใƒฅใƒผใƒซใซใฏไปฅไธ‹ใ„ใ‹ใŒๅซใตใใพใ‚Œใ‚‹ใ€‚embedding ใƒขใƒ‡ใƒซใฏ Ollama ใงใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใƒขใƒ‡ใƒซ๏ผˆไพ‹ใŸใจใˆใฐ nomic-embed-text๏ผ‰ใ‚’ๅ‹•ใ†ใ”ใ‹ใ—ใ€ๆœ‰ๆ–™ใ‚†ใ†ใ‚Šใ‚‡ใ† API ใ‚’ๅ‘ผใ‚ˆใถๅฟ…่ฆใฒใคใ‚ˆใ†ใŒใชใ„ใ€‚ใƒ™ใ‚ฏใƒˆใƒซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฏใ€homelab ใฎๅ‡บ็™บ็‚นใ—ใ‚…ใฃใฑใคใฆใ‚“ใจใ—ใฆใฏ pgvector ใ‚’ไฝฟใคใ‹ใ†โ€”โ€”PostgreSQL ใฎใƒ—ใƒฉใ‚ฐใ‚คใƒณใงใ€ๆ—ขใ™ใงใซใƒชใƒฌใƒผใ‚ทใƒงใƒŠใƒซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใซๆ…ฃใชใ‚Œใฆใ„ใ‚‹ใชใ‚‰ใ€ใƒ—ใƒฉใ‚ฐใ‚คใƒณใ‚’ๅ…ฅใ„ใ‚Œใ‚‹ใ ใ‘ใงใƒ™ใ‚ฏใƒˆใƒซ่ƒฝๅŠ›ใฎใ†ใ‚Šใ‚‡ใใŒๆ‰‹ใฆใซๅ…ฅใฏใ„ใ‚Šใ€ไธธใพใ‚‹ใ”ใจๆ–ฐใ‚ใŸใ‚‰ใ—ใ„ใ‚ทใ‚นใƒ†ใƒ ใ‚’ๅญฆใพใชใถๅฟ…่ฆใฒใคใ‚ˆใ†ใŒใชใ„ใ€‚็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใจใ—ใฆใ€ๆฉŸ่ƒฝใใฎใ†ใŒใ‚ˆใ‚Šๅ……ๅฎŸใ˜ใ‚…ใ†ใ˜ใคใ—ใฆใ„ใ‚‹ใŒ้…ๅ‚™ใฏใ„ใณใŒใ‚ˆใ‚Š่ค‡้›‘ใตใใ–ใคใช Milvus ใ‚‚้ธๆŠž่‚ขใ›ใ‚“ใŸใใ—ใ ใ€‚LLM ๆŽจ่ซ–ใ™ใ„ใ‚ใ‚“ใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใฏ Ollama ใงใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใซใ‚ชใƒผใƒ—ใƒณใ‚ฝใƒผใ‚นใŠใƒผใทใ‚“ใใƒผใ™ใƒขใƒ‡ใƒซใ‚’ๅ‹•ใ†ใ”ใ‹ใ™ใ€‚ใ‚ชใƒผใ‚ฑใ‚นใƒˆใƒฌใƒผใ‚ทใƒงใƒณใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใฏใ€ใ„ใค LLM ใ‚’ๅ‘ผใ‚ˆใถใ‹ใ€ๅ‘ผใ‚ˆใถๅ‰ใพใˆใซ่ณ‡ๆ–™ใ—ใ‚Šใ‚‡ใ†ใ‚’ๆคœ็ดขใ‘ใ‚“ใ•ใใ™ใ‚‹ใ‹ใ—ใชใ„ใ‹ใ€ใƒ„ใƒผใƒซใ‚’ๅ‘ผใ‚ˆใถๅฟ…่ฆใฒใคใ‚ˆใ†ใŒใ‚ใ‚‹ใ‹ใ€็ตๆžœใ‘ใฃใ‹ใ‚’ใฉใ†ๅ‡ฆ็†ใ—ใ‚‡ใ‚Šใ™ใ‚‹ใ‹ใ‚’ๆฑบใใ‚ใ‚‹ใ€ใ“ใฎใ€Œใฎใ‚Šใฎ้ƒจๅˆ†ใถใถใ‚“ใฎใƒญใ‚ธใƒƒใ‚ฏใ‚ใ˜ใฃใใ€ใ‚’ๆจ™ๆบ–ใฒใ‚‡ใ†ใ˜ใ‚…ใ‚“ๅŒ–ใ‹ใ™ใ‚‹ใ“ใจใŒ้‡่ฆใ˜ใ‚…ใ†ใ‚ˆใ†ใ ใ€‚LangChain ใฏใƒใ‚งใƒผใƒณ็Šถใ˜ใ‚‡ใ†/็ทšๅฝขใ›ใ‚“ใ‘ใ„ใฎใƒ•ใƒญใƒผใตใ‚ใƒผใซ้ฉใฆใใ—ใฆใŠใ‚Šใ€RAG ใฎใ‚ˆใ†ใชใ€Œ่ณ‡ๆ–™ใ—ใ‚Šใ‚‡ใ†ใ‚’ๆคœ็ดขใ‘ใ‚“ใ•ใใ™ใ‚‹ โ†’ LLM ใซๆธกใ‚ใŸใ™ โ†’ ็ตๆžœใ‘ใฃใ‹ใ‚’ๅ‡บใ ใ™ใ€ใจใ„ใ†ๆตใชใŒใ‚Œใซๅ‘ใ‚€ใใ€‚LangGraph ใฏใƒซใƒผใƒ—/ๆกไปถใ˜ใ‚‡ใ†ใ‘ใ‚“ๅˆ†ๅฒใถใ‚“ใใฎใ‚ใ‚‹ใ‚ฐใƒฉใƒ•ใใ‚‰ใต็Šถใ˜ใ‚‡ใ†ใฎใƒ•ใƒญใƒผใตใ‚ใƒผใซ้ฉใฆใใ—ใฆใŠใ‚Šใ€็พๅœจใ’ใ‚“ใ–ใ„ Agent๏ผˆใ‚จใƒผใ‚ธใ‚งใƒณใƒˆใ€็Ÿฅ่ƒฝไฝ“ใกใฎใ†ใŸใ„๏ผ‰ใ‚’ไฝœใคใใ‚‹ไธŠใ†ใˆใงใฎไธปๆตใ—ใ‚…ใ‚Šใ‚…ใ†ใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใ ใ€‚AI ใ‚ฒใƒผใƒˆใ‚ฆใ‚งใ‚คใฏ็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใจใ—ใฆไปปๆ„ใซใ‚“ใ„ใงใ€LiteLLM Proxy ใง่ค‡ๆ•ฐใตใใ™ใ†ใฎ LLM ๅ‘ผใ‚ˆใณๅ‡บใ ใ—ใฎๆต้‡ๅˆถ้™ใ‚Šใ‚…ใ†ใ‚Šใ‚‡ใ†ใ›ใ„ใ’ใ‚“/ใƒซใƒผใƒ†ใ‚ฃใƒณใ‚ฐ/ใ‚ณใ‚นใƒˆ่ฟฝ่ทกใคใ„ใ›ใใ‚’็ตฑไธ€ใจใ†ใ„ใค็ฎก็†ใ‹ใ‚“ใ‚Šใ™ใ‚‹ใ€‚ใ‚ชใƒผใ‚ฑใ‚นใƒˆใƒฌใƒผใ‚ทใƒงใƒณใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใ‚’ไฝฟใคใ‹ใ‚ใชใใฆใ‚‚ RAG ใ‚’ๆ‰‹ๆ›ธใฆใŒใใงๅฎŸ่ฃ…ใ˜ใฃใใ†ใงใใ‚‹ใŒใ€ๆตใชใŒใ‚ŒใŒ่ค‡้›‘ใตใใ–ใคใซใชใ‚‹ใจโ€”โ€”ใพใš่ณชๅ•ใ—ใคใ‚‚ใ‚“ใŒใฉใฎ็จฎ้กžใ—ใ‚…ใ‚‹ใ„ใฎ็Ÿฅ่ญ˜ใกใ—ใใƒ™ใƒผใ‚นในใƒผใ™ใซๅฑžใžใใ™ใ‹ๅˆคๆ–ญใฏใ‚“ใ ใ‚“ใ—ใ€ๆฌกใคใŽใซ่ณ‡ๆ–™ใ—ใ‚Šใ‚‡ใ†ใ‚’ๆคœ็ดขใ‘ใ‚“ใ•ใใ™ใ‚‹ใ‹ใฉใ†ใ‹ๆฑบใใ‚ใ€ๆคœ็ดขใ‘ใ‚“ใ•ใๅพŒใ”ใฏ่จˆ็ฎ—ๆฉŸใ‘ใ„ใ•ใ‚“ใใ‚„ๅคฉๆฐ—ใฆใ‚“ใ็…งไผšใ—ใ‚‡ใ†ใ‹ใ„ใฎใ‚ˆใ†ใชๅค–้ƒจใŒใ„ใถใƒ„ใƒผใƒซใ‚’ๅ‘ผใ‚ˆใถๅฟ…่ฆใฒใคใ‚ˆใ†ใŒใ‚ใ‚‹ใ‹ใ‚‚ใ—ใ‚Œใšใ€ๆœ€ๅพŒใ•ใ„ใ”ใซ่ฆ็ด„ใ‚ˆใ†ใ‚„ใใ™ใ‚‹โ€”โ€”ๆ‰‹ๆ›ธใฆใŒใใฎ if-else ใฏใ™ใใซ็ ด็ถปใฏใŸใ‚“ใ™ใ‚‹ใ€‚LangChain ใฏๆ–‡ๆ›ธใถใ‚“ใ—ใ‚‡่ชญใ‚ˆใฟ่พผใ“ใฟใƒปๅˆ†ๅ‰ฒใถใ‚“ใ‹ใคใƒปembeddingใƒปๆคœ็ดขใ‘ใ‚“ใ•ใใƒปใƒ—ใƒญใƒณใƒ—ใƒˆ็ต„ใใฟ็ซ‹ใŸใฆใƒปLLM ๅ‘ผใ‚ˆใณๅ‡บใ ใ—ใƒปๅ‡บๅŠ›ใ—ใ‚…ใคใ‚Šใ‚‡ใ่งฃๆžใ‹ใ„ใ›ใใจใ„ใฃใŸใ‚ˆใใ‚ใ‚‹ใ‚นใƒ†ใƒƒใƒ—ใ™ใฆใฃใทใ‚’็ต„ใใฟๅˆใ‚ใ‚ใ›ๅฏ่ƒฝใ‹ใฎใ†ใชใ€Œใƒใ‚งใƒผใƒณใ€ใซๅฐๅ…ฅใตใ†ใซใ‚…ใ†ใ—ใ€LangGraph ใฏๆตใชใŒใ‚Œๅ…จไฝ“ใœใ‚“ใŸใ„ใ‚’็Šถๆ…‹ใ˜ใ‚‡ใ†ใŸใ„ๆฉŸๆขฐใใ‹ใ„ใจใ—ใฆใƒขใƒ‡ใƒซๅŒ–ใ‹ใ—ใ€ใƒซใƒผใƒ—ใƒปๆกไปถใ˜ใ‚‡ใ†ใ‘ใ‚“ๅˆ†ๅฒใถใ‚“ใใƒปใ€Œๆบ€่ถณใพใ‚“ใžใใ™ใ‚‹ใพใงไฝ•ใชใ‚“ๅบฆใฉใ‚‚่ฉฆใŸใ‚ใ™ใ€ใ“ใจใ‚’ใ‚ตใƒใƒผใƒˆใ™ใ‚‹ใ€‚Agent ใฏ็พๅœจใ’ใ‚“ใ–ใ„ๆฅญ็•ŒใŽใ‚‡ใ†ใ‹ใ„ใงใปใผ LangGraph ใ‹้กžไผผใ‚‹ใ„ใ˜ใฎใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใ‚’ไฝฟใคใ‹ใฃใฆใŠใ‚Šใ€ไธก่€…ใ‚Šใ‚‡ใ†ใ—ใ‚ƒใฏไบŒใซ่€…ๆŠžไธ€ใ—ใ‚ƒใŸใใ„ใคใงใฏใชใใ€ๅคšใŠใŠใใฎๅฎŸ้š›ใ˜ใฃใ•ใ„ใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใงใฏ LangChain ใŒใ‚ทใƒณใƒ—ใƒซใช RAG ้ƒจๅˆ†ใถใถใ‚“ใ‚’ใ€LangGraph ใŒใ‚ˆใ‚Š่ค‡้›‘ใตใใ–ใคใชๅคšๆฎต้šŽใŸใ ใ‚“ใ‹ใ„ Agent ใƒญใ‚ธใƒƒใ‚ฏใ‚ใ˜ใฃใใ‚’ๆ‹…ๅฝ“ใŸใ‚“ใจใ†ใ—ใฆใ„ใ‚‹ใ€‚

ๆๆกˆใฆใ„ใ‚ใ‚“ใ™ใ‚‹ๆง‹็ฏ‰ใ“ใ†ใกใ้ †ๅบใ˜ใ‚…ใ‚“ใ˜ใ‚‡ใฏใ€ใพใš PostgreSQL + pgvector ใƒ—ใƒฉใ‚ฐใ‚คใƒณใ‚’ๅ…ฅใ„ใ‚Œใ‚‹โ€”โ€”ๅฐ‚็”จใ›ใ‚“ใ‚ˆใ†ใฎใƒ™ใ‚ฏใƒˆใƒซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‚’ๅ…ฅใ„ใ‚Œใ‚‹ใ‚ˆใ‚Šใšใฃใจ็ฐกๅ˜ใ‹ใ‚“ใŸใ‚“ใ ใ€‚Ollama ใงๅฐใ—ใ‚‡ใ†ใ•ใช embedding ใƒขใƒ‡ใƒซใ‚’ๅ‹•ใ†ใ”ใ‹ใ—ใ€ใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‚’ๆ›ธใ‹ใ„ใฆ BSD ๅญฆ็ฟ’ใŒใใ—ใ‚…ใ†ๆ–‡ๆ›ธใถใ‚“ใ—ใ‚‡๏ผˆไพ‹ใŸใจใˆใฐ SLI-BAT001๏ผ‰ใ‚’ๆฎต่ฝใ ใ‚“ใ‚‰ใใ”ใจใซๅˆ‡ใใ‚Šใ€ใƒ™ใ‚ฏใƒˆใƒซใซๅค‰ๆ›ใธใ‚“ใ‹ใ‚“ใ—ใฆ pgvector ใซไฟๅญ˜ใปใžใ‚“ใ™ใ‚‹ใ€‚ใ‚ทใƒณใƒ—ใƒซใชๆคœ็ดขใ‘ใ‚“ใ•ใใƒ‡ใƒขใ‚’ๆ›ธใ‹ใใ€ใ€Œไฟๅ…จใปใœใ‚“ๅค‰ๆ›ดใธใ‚“ใ“ใ†ใฎๅ‡ฆ็†ใ—ใ‚‡ใ‚ŠๆตใชใŒใ‚Œใฏไฝ•ใชใซใ‹ใ€ใฎใ‚ˆใ†ใชไธ€ๆ–‡ใ„ใกใถใ‚“ใ‚’ๅ…ฅๅŠ›ใซใ‚…ใ†ใ‚Šใ‚‡ใใ—ใฆใ€pgvector ใ‹ใ‚‰ๆœ€ใ‚‚ใฃใจใ‚‚้–ข้€ฃใ‹ใ‚“ใ‚Œใ‚“ใ™ใ‚‹ๅŽŸๆ–‡ใ’ใ‚“ใถใ‚“ใฎๆ•ฐๆฎตใ™ใ†ใ ใ‚“ใ‚’ๆคœ็ดขใ‘ใ‚“ใ•ใใ—ใ€ใพใšใฏๆ„ๅ‘ณใ„ใฟใฎ้กžไผผใ‚‹ใ„ใ˜ใจใ„ใ†ไป•็ต„ใ—ใใฟใŒๆœฌๅฝ“ใปใ‚“ใจใ†ใซ work ใ™ใ‚‹ใ‹ใ ใ‘ใ‚’ๆคœ่จผใ‘ใ‚“ใ—ใ‚‡ใ†ใ™ใ‚‹ใ€‚Ollama ใฎๅฏพ่ฉฑใŸใ„ใ‚ใƒขใƒ‡ใƒซใ‚’ๆŽฅ็ถšใ›ใคใžใใ—ใ€ๆคœ็ดขใ‘ใ‚“ใ•ใใ•ใ‚ŒใŸๅŽŸๆ–‡ใ’ใ‚“ใถใ‚“ใจ่ณชๅ•ใ—ใคใ‚‚ใ‚“ใ‚’ๅˆใ‚ใ‚ใ›ใฆๆธกใ‚ใŸใ—ใ€RAG ใƒ•ใƒญใƒผใตใ‚ใƒผใ‚’ไธ€้€šใฒใจใจใŠใ‚Š้€šใจใŠใ™โ€”โ€”ใ“ใ“ใพใงๅฎŒไบ†ใ‹ใ‚“ใ‚Šใ‚‡ใ†ใ™ใ‚Œใฐใ€BSD ่ฆ็ฏ„ใใฏใ‚“่ณชๅ•ใ—ใคใ‚‚ใ‚“ใซๅ›ž็ญ”ใ‹ใ„ใจใ†ใงใใ‚‹็งๆœ‰ใ—ใ‚†ใ†ใฎ AI ใ‚ขใ‚ทใ‚นใ‚ฟใƒณใƒˆใŒๆ‰‹ใฆใซๅ…ฅใฏใ„ใ‚Šใ€็พๅœจใ’ใ‚“ใ–ใ„ใฎ BSD ๅญฆ็ฟ’ใŒใใ—ใ‚…ใ†ใซ็›ดๆŽฅใกใ‚‡ใใ›ใคๅฎŸ็”จใ˜ใคใ‚ˆใ†ไพกๅ€คใ‹ใกใŒใ‚ใ‚‹ใ€‚ๅฐ†ๆฅใ—ใ‚‡ใ†ใ‚‰ใ„ PC ใซ3090ใ‚’็ฉใคใ‚“ใ ใ‚‰ใ€ๅŒใŠใชใ˜ๆตใชใŒใ‚Œใ‚’ใใฎใพใพใ‚ˆใ‚ŠๅคงใŠใŠใใชใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใƒขใƒ‡ใƒซใซๅ…ฅใ„ใ‚Œๆ›ฟใ‹ใˆใ‚‰ใ‚Œใ‚‹ใ€‚ใ“ใฎๅˆ†้‡Žใถใ‚“ใ‚„ใฏๆ—ขๅญ˜ใใžใ‚“ใฎไบŒใตใŸใคใฎใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใซใ‚‚้‚„ๅ…ƒใ‹ใ‚“ใ’ใ‚“ใงใใ‚‹ใ€‚BSD ๅญฆ็ฟ’ใŒใใ—ใ‚…ใ†้ขใ‚ใ‚“ใงใฏใ€ๆ—ขใ™ใงใซๆทฑใตใ‹ใๅญฆ็ฟ’ใŒใใ—ใ‚…ใ†ใ—ใŸ SLI-API/BAT/ACC/USR ใฎๆ–‡ๆ›ธใถใ‚“ใ—ใ‚‡ใ‚’ๅ…จ้ƒจใœใ‚“ใถๆตใชใŒใ—่พผใ“ใฟใ€ๅฐ‚ๅฑžใ›ใ‚“ใžใใฎไฟ้™บใปใ‘ใ‚“ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€็Ÿฅ่ญ˜ใกใ—ใ่ณช็–‘ใ—ใคใŽใ‚ขใ‚ทใ‚นใ‚ฟใƒณใƒˆใ‚’ไฝœใคใใ‚Œใ‚‹ใ€‚็‰›้ฆฌใŽใ‚…ใ†ใฐใƒใƒฃใƒณไธ€ๅฎถใ„ใฃใ‹้ขใ‚ใ‚“ใงใฏใ€ๅฐ†ๆฅใ—ใ‚‡ใ†ใ‚‰ใ„ใ‚ตใ‚คใƒˆใซ็‰ฉ่ชžใ‚‚ใฎใŒใŸใ‚Šๅ†…ๅฎนใชใ„ใ‚ˆใ†ใฎๆ„ๅ‘ณใ„ใฟๆคœ็ดขใ‘ใ‚“ใ•ใใ‚„็ฐกๅ˜ใ‹ใ‚“ใŸใ‚“ใชใ‚ญใƒฃใƒฉใ‚ฏใ‚ฟใƒผ่ณช็–‘ใ—ใคใŽใ‚คใƒณใ‚ฟใƒฉใ‚ฏใ‚ทใƒงใƒณใ‚’ๅŠ ใใ‚ใˆใŸใใชใฃใŸใจใใ€ใ“ใฎ RAG ใฎ็ตŒ้จ“ใ‘ใ„ใ‘ใ‚“ใ‚’ใใฎใพใพๆต็”จใ‚Šใ‚…ใ†ใ‚ˆใ†ใงใใ‚‹ใ€‚

่จญ่จˆๅ›ณใ›ใฃใ‘ใ„ใšใ‹ใ‚‰ๅฎŸ่ฃ…ใ˜ใฃใใ†ใธ๏ผšใƒŸใƒ‹ไฟๅ˜ใปใŸใ‚“็ฎก็†ใ‹ใ‚“ใ‚Šใ‚ทใ‚นใƒ†ใƒ ๏ผˆMini Policy System๏ผ‰

ๅ…จไฝ“ๅƒใœใ‚“ใŸใ„ใžใ†ๅ›ณใšใ ใ‘ใงใฏ่ถณใŸใ‚Šใšใ€Claude Code ใซ VSCode ใงๅ›ณ้ขใšใ‚ใ‚“ใฉใŠใ‚Šใซๆ–ฝๅทฅใ›ใ“ใ†ใ•ใ›ใ‚‹ใ€ๅ…ทไฝ“็š„ใใŸใ„ใฆใใซๅ‹•ใ†ใ”ใๅฎŸ่ฃ…ใ˜ใฃใใ†ใƒ—ใƒฉใƒณใŒๅฟ…่ฆใฒใคใ‚ˆใ†ใ ใ€‚่จญ่จˆใ›ใฃใ‘ใ„ๅŽŸๅ‰‡ใ’ใ‚“ใใใฏไบ”ใ„ใคใคใ‚ใ‚‹ใ€‚ไธ€ใฒใจใค็›ฎใ‚ใ€ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€้ ˜ๅŸŸใ‚Šใ‚‡ใ†ใ„ใใ‚’็ตฑไธ€ใจใ†ใ„ใคใ—ใ€ใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ขใ‚’ไฝฟใคใ‹ใ†ใŸใ‚ใฎไฝฟ็”จใ—ใ‚ˆใ†ใ‚’้ฟใ•ใ‘ใ‚‹โ€”โ€”ใ™ในใฆใฎใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใฏๅŒใŠใชใ˜็ฐก็•ฅๅŒ–ใ‹ใ‚“ใ‚Šใ‚ƒใใ‹ใ•ใ‚ŒใŸๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€้ ˜ๅŸŸใ‚Šใ‚‡ใ†ใ„ใใ€ไธ€ใฒใจใคใฎใƒŸใƒ‹ไฟๅ˜ใปใŸใ‚“็ฎก็†ใ‹ใ‚“ใ‚Šใ‚ทใ‚นใƒ†ใƒ ใ‚’ไธญๅฟƒใกใ‚…ใ†ใ—ใ‚“ใซ็ฝฎใŠใใ€ๅ‘ฝๅใ‚ใ„ใ‚ใ„ใ‚„ใƒ•ใ‚ฃใƒผใƒซใƒ‰ใฏๆ—ขใ™ใงใซๆ…ฃใชใ‚Œใฆใ„ใ‚‹ใƒ†ใƒณใ‚ฌใƒณ/ใ‚คใƒณใ‚ฐใƒฉใƒ ๅผใ—ใใฎ็”จ่ชžใ‚ˆใ†ใ”ใ‚’ไฝฟใคใ‹ใˆใ‚‹ใฎใงใ€ใ‚ˆใ‚ŠๅฎŸๆ„Ÿใ˜ใฃใ‹ใ‚“ใ‚’ใ‚‚ใฃใฆ็ทด็ฟ’ใ‚Œใ‚“ใ—ใ‚…ใ†ใงใใ‚‹ใ€‚ไบŒใตใŸใค็›ฎใ‚ใ€ไบŒใตใŸใคใฎ็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ใซๅŒใŠใชใ˜ใ‚ณใƒผใƒ‰โ€”โ€”ใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹้–‹็™บใ‹ใ„ใฏใคใฏ docker-compose ใงใƒฏใƒณใ‚ณใƒžใƒณใƒ‰ใง MySQL/Redis/Kafka/ES ใชใฉใฎใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ขใ‚’็ซ‹ใŸใกไธŠใ‚ใ’ใ€ใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™่‡ชไฝ“ใ˜ใŸใ„ใฏ IDE ใ‚„ Claude Code ใง็›ดๆŽฅใกใ‚‡ใใ›ใคๅ‹•ใ†ใ”ใ‹ใ™๏ผˆใ‚ณใƒณใƒ†ใƒŠใซใฏๅ…ฅใ„ใ‚Œใšใ€ใƒ‡ใƒใƒƒใ‚ฐใ—ใ‚„ใ™ใใ™ใ‚‹๏ผ‰ใ€‚ใ€Œๆœฌ็•ชใปใ‚“ใฐใ‚“ใ€็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ใงใฏๅ…จใ™ในใฆใฎใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใจใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ขใŒ k3s ไธŠใ˜ใ‚‡ใ†ใงๅ‹•ใ†ใ”ใใ€Harbor ใ‚คใƒกใƒผใ‚ธใƒฌใ‚ธใ‚นใƒˆใƒชใจ CI/CD ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใงใƒ‡ใƒ—ใƒญใ‚คใงใทใ‚ใ„ใ—ใ€ๆœฌ็‰ฉใปใ‚“ใ‚‚ใฎใฎใƒชใƒชใƒผใ‚นใƒ•ใƒญใƒผใ‚’ๆจกๆ“ฌใ‚‚ใŽใ™ใ‚‹ใ€‚ไธ‰ใฟใฃใค็›ฎใ‚ใ€ๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒ/็”Ÿ็”ฃ่€…ใ›ใ„ใ•ใ‚“ใ—ใ‚ƒ้–ขไฟ‚ใ‹ใ‚“ใ‘ใ„ใฏ้ฃพใ‹ใ–ใ‚Šใงใฏใชใๆœฌ็‰ฉใปใ‚“ใ‚‚ใฎใงใชใ‘ใ‚Œใฐใชใ‚‰ใšใ€ๅฐ‘ใ™ใใชใใจใ‚‚ไบŒใตใŸใคใฎ็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใŸ Kafka ๆถˆ่ฒปใ—ใ‚‡ใ†ใฒ็ตŒ่ทฏใ‘ใ„ใ‚ใŒๅฟ…่ฆใฒใคใ‚ˆใ†ใงใ€ๅ…จไฝ“ๅƒใœใ‚“ใŸใ„ใžใ†ๅ›ณใšใฎใ€ŒๅŒใŠใชใ˜ใ‚คใƒ™ใƒณใƒˆใ€ไบŒใตใŸใคใฎๆถˆ่ฒปใ—ใ‚‡ใ†ใฒๆˆฆ็•ฅใ›ใ‚“ใ‚Šใ‚ƒใใ€ใจใ„ใ†่จญ่จˆใ›ใฃใ‘ใ„ใซๅฏพๅฟœใŸใ„ใŠใ†ใ™ใ‚‹ใ€‚ๅ››ใ‚ˆใฃใค็›ฎใ‚ใ€ๅ„ใ‹ใๆฎต้šŽใ ใ‚“ใ‹ใ„ใงๅฟ…ใ‹ใชใ‚‰ใšๅ‹•ใ†ใ”ใ„ใฆๅŠนๆžœใ“ใ†ใ‹ใŒ่ฆ‹ใฟใˆใชใ‘ใ‚Œใฐใชใ‚‰ใšใ€่ฃ…ใ‚ˆใใŠใฃใŸใ ใ‘ใงไฝฟใคใ‹ใ‚ใ‚Œใชใ„ใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ขใฎๆŠœใฌใ‘ๆฎปใŒใ‚‰ใ‚’็ฉใคใฟไธŠใ‚ใ’ใชใ„ใ€‚ไบ”ใ„ใคใค็›ฎใ‚ใ€ๅพŒ็ถšใ“ใ†ใžใใฎใƒ“ใƒƒใ‚ฐใƒ‡ใƒผใ‚ฟ/AI ๆฎต้šŽใ ใ‚“ใ‹ใ„ใฎใŸใ‚ใซใƒ•ใƒƒใ‚ฏใ‚’ๆฎ‹ใฎใ“ใ—ใฆใŠใใŒใ€็ฌฌไธ€ๆœŸใ ใ„ใ„ใฃใใงใฏๅฎŸ่ฃ…ใ˜ใฃใใ†ใ—ใชใ„โ€”โ€”่จญ่จˆใ›ใฃใ‘ใ„ไธŠใ˜ใ‚‡ใ†ใง่‡ชๅˆ†ใ˜ใถใ‚“ใซๅœฐ้›ทใ˜ใ‚‰ใ„ใ‚’ๅŸ‹ใ†ใ‚ใชใ„ใ‚ˆใ†ใซใ™ใ‚‹ใ ใ‘ใงใ€ไพ‹ใŸใจใˆใฐ Kafka topic ่จญ่จˆใ›ใฃใ‘ใ„ใจใ‚คใƒ™ใƒณใƒˆใ‚นใ‚ญใƒผใƒžใฏๅฐ†ๆฅใ—ใ‚‡ใ†ใ‚‰ใ„่ค‡ๆ•ฐใตใใ™ใ†ใฎๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒใซๆต็”จใ‚Šใ‚…ใ†ใ‚ˆใ†ใ•ใ‚Œใ‚‹ใ“ใจใ‚’่€ƒๆ…ฎใ“ใ†ใ‚Šใ‚‡ใ™ใ‚‹ใ€‚

ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€้ ˜ๅŸŸใ‚Šใ‚‡ใ†ใ„ใใ‚’ไธ€่จ€ใฒใจใ“ใจใง่จ€ใ„ใ†ใจใ€ใƒฆใƒผใ‚ถใƒผใŒใƒญใ‚ฐใ‚คใƒณใ‚ใใ„ใ‚“ใ—ใ€ไฟๅ˜ใปใŸใ‚“ใ‚’ไฝœๆˆใ•ใใ›ใ„/็…งไผšใ—ใ‚‡ใ†ใ‹ใ„ใ—ใ€ไฟๅ˜ใปใŸใ‚“ไฝœๆˆใ•ใใ›ใ„ๅพŒใ”้žๅŒๆœŸใฒใฉใ†ใใง้€š็Ÿฅใคใ†ใกใ‚’่ตทๅ‹•ใใฉใ†ใ—ใคใค้žๅŒๆœŸใฒใฉใ†ใใงๆคœ็ดขใ‘ใ‚“ใ•ใใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใซๆ›ธใ‹ใ่พผใ“ใฟใ€ๆœ€ๅพŒใ•ใ„ใ”ใซไฟๅ˜ใปใŸใ‚“ใ‚’ๆคœ็ดขใ‘ใ‚“ใ•ใใงใใ‚‹ใ€ใจใ„ใ†ใ‚‚ใฎใ ใ€‚ไธญๆ ธใกใ‚…ใ†ใ‹ใๅฎŸไฝ“ใ˜ใฃใŸใ„ Policy๏ผˆไฟๅ˜ใปใŸใ‚“๏ผ‰ใซใฏ idใ€policyNo๏ผˆไฟๅ˜ใปใŸใ‚“็•ชๅทใฐใ‚“ใ”ใ†๏ผ‰ใ€holderName๏ผˆๅฅ‘็ด„่€…ใ‘ใ„ใ‚„ใใ—ใ‚ƒๆฐๅใ—ใ‚ใ„๏ผ‰ใ€productType๏ผˆๅ•†ๅ“ใ—ใ‚‡ใ†ใฒใ‚“็จฎ้กžใ—ใ‚…ใ‚‹ใ„ใ€TENGAN ใ‹ INGURAMU ใงใ€ๆ…ฃใชใ‚Œใฆใ„ใ‚‹ไบŒใตใŸใคใฎๅ•†ๅ“ใ—ใ‚‡ใ†ใฒใ‚“ใƒฉใ‚คใƒณใ‚‰ใ„ใ‚“ใซๅฏพๅฟœใŸใ„ใŠใ†๏ผ‰ใ€premium๏ผˆไฟ้™บๆ–™ใปใ‘ใ‚“ใ‚Šใ‚‡ใ†๏ผ‰ใ€status๏ผˆ็Šถๆ…‹ใ˜ใ‚‡ใ†ใŸใ„๏ผšDRAFT/ACTIVE/CANCELLED๏ผ‰ใ€ใใ—ใฆไฝœๆˆใ•ใใ›ใ„/ๆ›ดๆ–ฐใ“ใ†ใ—ใ‚“ๆ—ฅๆ™‚ใซใกใ˜ใŒๅซใตใใพใ‚Œใ‚‹ใ€‚ใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ไธ€่ฆงใ„ใกใ‚‰ใ‚“ใฏๅ…จ้ƒจใœใ‚“ใถใงไบ”ใ„ใคใคใ€‚frontend ใฏใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰ SPA ใง React + Vite ใ‚’ไฝฟใคใ‹ใ„ใ€ใƒญใ‚ฐใ‚คใƒณใ‚ใใ„ใ‚“ใƒปไฟๅ˜ใปใŸใ‚“ไธ€่ฆงใ„ใกใ‚‰ใ‚“/ไฝœๆˆใ•ใใ›ใ„ใƒ•ใ‚ฉใƒผใƒ ใตใ‰ใƒผใ‚€ใƒปๆคœ็ดขใ‘ใ‚“ใ•ใใƒšใƒผใ‚ธใบใƒผใ˜ใ‚’ๆ‹…ๅฝ“ใŸใ‚“ใจใ†ใ™ใ‚‹ใ€‚gateway-service ใฏ API ใ‚ฒใƒผใƒˆใ‚ฆใ‚งใ‚คใง Spring Cloud Gateway ใ‚’ไฝฟใคใ‹ใ„ใ€ใƒซใƒผใƒ†ใ‚ฃใƒณใ‚ฐใ‚‹ใƒผใฆใƒใ‚“ใใƒปJWT ่ช่จผใซใ‚“ใ—ใ‚‡ใ†ใƒปๆต้‡ๅˆถ้™ใ‚Šใ‚…ใ†ใ‚Šใ‚‡ใ†ใ›ใ„ใ’ใ‚“ใ‚’ๆ‹…ๅฝ“ใŸใ‚“ใจใ†ใ™ใ‚‹ใ€‚policy-service ใฏไธญๆ ธใกใ‚…ใ†ใ‹ใใฎๆ›ธใ‹ใ่พผใ“ใฟใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใง Spring Boot + MyBatis + Liquibase + MySQL + Redis ใ‚’ไฝฟใคใ‹ใ„ใ€ไฟๅ˜ใปใŸใ‚“ CRUD ใฎๆ›ธใ‹ใ่พผใ“ใฟ็ตŒ่ทฏใ‘ใ„ใ‚ใ€Redis ใซใ‚ˆใ‚‹่ฉณ็ดฐใ—ใ‚‡ใ†ใ•ใ„็…งไผšใ—ใ‚‡ใ†ใ‹ใ„ใ‚ญใƒฃใƒƒใ‚ทใƒฅใ€ไฝœๆˆใ•ใใ›ใ„/ๆ›ดๆ–ฐใ“ใ†ใ—ใ‚“ๆ™‚ใ˜ใฎ Kafka ใ‚คใƒ™ใƒณใƒˆ็™บ่กŒใฏใฃใ“ใ†ใ€่ตทๅ‹•ใใฉใ†ๆ™‚ใ˜ใฎ Liquibase ่‡ชๅ‹•ใ˜ใฉใ†ใƒ†ใƒผใƒ–ใƒซใƒžใ‚คใ‚ฐใƒฌใƒผใ‚ทใƒงใƒณใพใ„ใใ‚Œใƒผใ—ใ‚‡ใ‚“ใ‚’ๆ‹…ๅฝ“ใŸใ‚“ใจใ†ใ™ใ‚‹ใ€‚notification-service ใฏๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒ A ใงใ€ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‚’ๆŒใ‚‚ใŸใชใ„็ด”็ฒ‹ใ˜ใ‚…ใ‚“ใ™ใ„ใชๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒใจใ—ใฆ policy-events topic ใ‚’่ณผ่ชญใ“ใ†ใฉใใ—ใ€้€š็Ÿฅใคใ†ใกใฎ้€ไฟกใใ†ใ—ใ‚“ใ‚’ๆจกๆ“ฌใ‚‚ใŽใ™ใ‚‹ใ€‚ใƒญใ‚ฐใ‚ใใ‚’ๅ‡บใ ใ™ใ€ใ‚ใ‚‹ใ„ใฏใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใƒ•ใ‚กใ‚คใƒซใซๆ›ธใ‹ใใ ใ‘ใงใ„ใ„ใ€‚search-service ใฏๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒ B ใ‹ใค่ชญใ‚ˆใฟๅ–ใจใ‚Šใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใง Spring Boot + Elasticsearch ใ‚’ไฝฟใคใ‹ใ„ใ€ๅŒใŠใชใ˜ topic ใ‚’่ณผ่ชญใ“ใ†ใฉใใ—ใฆ ES ใซๆ›ธใ‹ใ่พผใ“ใฟใ€ๅค–้ƒจใŒใ„ใถใซไฟๅ˜ใปใŸใ‚“ๆคœ็ดขใ‘ใ‚“ใ•ใใจใ„ใ†่ชญใ‚ˆใฟๅ–ใจใ‚Šๅฐ‚็”จใ›ใ‚“ใ‚ˆใ† API ใ‚’ๅ…ฌ้–‹ใ“ใ†ใ‹ใ„ใ—ใ€CQRS ่ชญใ‚ˆใฟๅ–ใจใ‚Š็ตŒ่ทฏใ‘ใ„ใ‚ใ‚’ๆง‹ๆˆใ“ใ†ใ›ใ„ใ™ใ‚‹ใ€‚ใƒ†ใƒผใƒ–ใƒซๆง‹้€ ใ“ใ†ใžใ†็ฎก็†ใ‹ใ‚“ใ‚Šใฏใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใ‚ณใƒผใƒ‰ใฎ่ตทๅ‹•ใใฉใ†ๆ™‚ใ˜ใซใƒ†ใƒผใƒ–ใƒซใฎๆœ‰็„กใ†ใ‚€ใ‚’ๆคœ็Ÿฅใ‘ใ‚“ใกใ—ใฆไฝœๆˆใ•ใใ›ใ„ใ™ใ‚‹ใจใ„ใ†็ด ๆœดใใผใใชใ‚„ใ‚Šๆ–นใ‹ใŸใฏๆŽก็”จใ•ใ„ใ‚ˆใ†ใ›ใšใ€ไผš็คพใ‹ใ„ใ—ใ‚ƒใงๅฎŸ้š›ใ˜ใฃใ•ใ„ใซไฝฟใคใ‹ใ‚ใ‚Œใฆใ„ใ‚‹ใƒ„ใƒผใƒซใจๆƒใใ‚ใˆใฆ Liquibase ใ‚’ไฝฟใคใ‹ใ†ใ€‚ๅค‰ๆ›ดใธใ‚“ใ“ใ†ใ‚ปใƒƒใƒˆใ›ใฃใจใฏ changelog ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชไธ‹ใ‹ใซ้ †็•ชใ˜ใ‚…ใ‚“ใฐใ‚“ใซ็•ชๅทใฐใ‚“ใ”ใ†ไป˜ใฅใ‘ใฆ็ฝฎใŠใใ€ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณ่ตทๅ‹•ใใฉใ†ๆ™‚ใ˜ใซใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฎ็พๅœจใ’ใ‚“ใ–ใ„ใฎใƒใƒผใ‚ธใƒงใƒณใ‚’่‡ชๅ‹•ใ˜ใฉใ†็ขบ่ชใ‹ใใซใ‚“ใ—ใ€ๆœชใฟ้ฉ็”จใฆใใ‚ˆใ†ใฎๅค‰ๆ›ดใธใ‚“ใ“ใ†ใ‚ปใƒƒใƒˆใ›ใฃใจใ‚’ๅฎŸ่กŒใ˜ใฃใ“ใ†ใ™ใ‚‹ใ“ใจใงใ€ใƒ†ใƒผใƒ–ใƒซๆง‹็ฏ‰ใ“ใ†ใกใ่‡ชไฝ“ใ˜ใŸใ„ใ‚‚ใƒใƒผใ‚ธใƒงใƒณ็ฎก็†ใ‹ใ‚“ใ‚Šใ•ใ‚Œ่ฟฝ่ทกใคใ„ใ›ใๅฏ่ƒฝใ‹ใฎใ†ใช้Ž็จ‹ใ‹ใฆใ„ใซใชใ‚‹ใ€‚

ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชๆง‹้€ ใ“ใ†ใžใ†ใฏไธ€ใฒใจใคใฎ monorepo ใงใ€ๅ…จใ™ในใฆใ‚’ไธ€ใฒใจใคใฎใƒ•ใ‚ฉใƒซใƒ€ใซ็ฝฎใŠใ„ใฆ VSCode ใง็ตฑไธ€ใจใ†ใ„ใค็ฎก็†ใ‹ใ‚“ใ‚Šใ—ใ‚„ใ™ใใ™ใ‚‹ใ€‚frontendใ€gateway-serviceใ€policy-serviceใ€notification-serviceใ€search-service ใจใ„ใ†ไบ”ใ„ใคใคใฎใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใŒใใ‚Œใžใ‚Œไธ€ใฒใจใคใฎใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’ๆŒใ‚‚ใคใ€‚infra ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชไธ‹ใ‹ใซใฏ docker-compose.dev.yml๏ผˆใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹้–‹็™บใ‹ใ„ใฏใคใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ข๏ผ‰ใ€k8s ใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช๏ผˆใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใ”ใจใซไธ€ใฒใจใคใฎใƒ‡ใƒ—ใƒญใ‚คใงใทใ‚ใ„ใƒžใƒ‹ใƒ•ใ‚งใ‚นใƒˆใพใซใตใ‡ใ™ใจใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ€ใใ‚Œใซ k3s ไธŠใ˜ใ‚‡ใ†ใงๆœฌ็•ชใปใ‚“ใฐใ‚“็”จใ‚ˆใ†ใซไฝฟใคใ‹ใ†ใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ขใ‚’็ฝฎใŠใ middleware ใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใ‚’ๅŠ ใใ‚ใˆใ‚‹๏ผ‰ใ€jenkins ใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒช๏ผˆJenkinsfile ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆ๏ผ‰ใ‚’็ฝฎใŠใใ€‚docs ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใฏ kafka-event-schema.md ใ‚’็ฝฎใŠใใ€ๅ„ใ‹ใใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ๅ…ฑๆœ‰ใใ‚‡ใ†ใ‚†ใ†ใฎใ‚คใƒ™ใƒณใƒˆๅฝขๅผใ‘ใ„ใ—ใๅฅ‘็ด„ใ‘ใ„ใ‚„ใใจใ™ใ‚‹ใ€‚ใƒซใƒผใƒˆใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใฏ README ใ‚’ไธ€ใฒใจใค็ฝฎใŠใใ€ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆๅ…จไฝ“ใœใ‚“ใŸใ„ๆฆ‚่ฆณใŒใ„ใ‹ใ‚“ใจใ™ใ‚‹ใ€‚ๅ„ใ‹ใใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใฎใ‚ตใƒ–ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใซใฏๅฟ…ใ‹ใชใ‚‰ใš็‹ฌ่‡ชใฉใใ˜ใฎ README ใ‚’็ฝฎใŠใใ€ใ“ใฎใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใŒไฝ•ใชใซใ‚’ใ™ใ‚‹ใ‚‚ใฎใ‹ใ€ใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใงๅ˜็‹ฌใŸใ‚“ใฉใใงใฉใ†ๅ‹•ใ†ใ”ใ‹ใ™ใ‹ใ€ใฉใฎใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ขใซไพๅญ˜ใ„ใžใ‚“ใ™ใ‚‹ใ‹ใ€ใฉใฎใƒใƒผใƒˆ/API ใ‚’ๅ…ฌ้–‹ใ“ใ†ใ‹ใ„ใ™ใ‚‹ใ‹ใ‚’ๆ˜Ž่จ˜ใ‚ใ„ใใ™ใ‚‹ใ“ใจใ‚’็ด„ๆŸใ‚„ใใใใ™ใ‚‹ใ€‚

็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ใฏๅ˜็ด”ใŸใ‚“ใ˜ใ‚…ใ‚“ใชใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹/ๆœฌ็•ชใปใ‚“ใฐใ‚“ใฎไบŒๅˆ†ๆณ•ใซใถใ‚“ใปใ†ใงใฏใชใใ€ไธ‰ๅ…ƒใ•ใ‚“ใ’ใ‚“ๅˆถใ›ใ„ใ‚’ๆŽก็”จใ•ใ„ใ‚ˆใ†ใ™ใ‚‹ใ€‚ใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹้–‹็™บใ‹ใ„ใฏใค็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ใฎ docker-compose ใซใฏใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ขใ ใ‘ใ‚’ๅ…ฅใ„ใ‚Œใ‚‹๏ผˆMySQLใ€Redisใ€KRaft ใƒขใƒผใƒ‰ใงๅˆฅ้€”ในใฃใจ Zookeeper ใŒไธ่ฆใตใ‚ˆใ†ใช Kafkaใ€Elasticsearchใ€Kibana๏ผ‰ใ€‚ใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™่‡ชไฝ“ใ˜ใŸใ„ใฏ mvn spring-boot:run ใ‹ npm run dev ใง็›ดๆŽฅใกใ‚‡ใใ›ใคๅ‹•ใ†ใ”ใ‹ใ—ใ€ใƒ–ใƒฌใƒผใ‚ฏใƒใ‚คใƒณใƒˆใ‚’ๆ‰“ใ†ใฃใฆใƒ‡ใƒใƒƒใ‚ฐใ—ใ‚„ใ™ใใ™ใ‚‹ใ€‚ใ€Œๆœฌ็•ชใปใ‚“ใฐใ‚“ใ€็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ๅดใŒใ‚ใฎไธญๆ ธใกใ‚…ใ†ใ‹ใๆฑบๅฎšใ‘ใฃใฆใ„ใฏใ€ใ‚นใƒ†ใƒผใƒˆใƒ•ใƒซใชใƒŸใƒ‰ใƒซใ‚ฆใ‚งใ‚ขใงใ‚ใ‚‹ MySQL ใจ Redis ใฏ k3s ใซๅ…ฅใ„ใ‚Œใšใ€Docker ใฎๅธธ้งใ˜ใ‚‡ใ†ใกใ‚…ใ†ใ‚ณใƒณใƒ†ใƒŠใจ systemd ใง็ฎก็†ใ‹ใ‚“ใ‚Šใ—ใฆใƒ›ใ‚นใƒˆใƒžใ‚ทใƒณไธŠใ˜ใ‚‡ใ†ใง็›ดๆŽฅใกใ‚‡ใใ›ใคๅ‹•ใ†ใ”ใ‹ใ—ใ€ใ‚ฏใƒฉใ‚ฆใƒ‰ใƒ™ใƒณใƒ€ใƒผใฎใƒžใƒใƒผใ‚ธใƒ‰ใ‚ตใƒผใƒ“ใ‚น๏ผˆRDS/ElastiCache๏ผ‰ใฎๅฝนๅ‰ฒใ‚„ใใ‚ใ‚Šใ‚’ๆผ”ใˆใ‚“ใ˜ใ•ใ›ใ‚‹ใ€ใจใ„ใ†ใ‚‚ใฎใ โ€”โ€”ใชใœใชใ‚‰ๆœฌ็•ชใปใ‚“ใฐใ‚“็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ใงใ‚‚ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใ‚ฏใƒฉใ‚นใ‚ฟๅ†…ใชใ„ใง่‡ชๅˆ†ใ˜ใถใ‚“ใงใ‚นใƒ†ใƒผใƒˆใƒ•ใƒซ DB ใฎ้ซ˜ๅฏ็”จๆ€งใ“ใ†ใ‹ใ‚ˆใ†ใ›ใ„ใ‚’็ฎก็†ใ‹ใ‚“ใ‚Šใ™ใ‚‹ใ“ใจใฏ้€šๅธธใคใ†ใ˜ใ‚‡ใ†ใชใ„ใ—ใ€ใ“ใฎๅค–้ƒจใŒใ„ใถไพๅญ˜ใ„ใžใ‚“้–ขไฟ‚ใ‹ใ‚“ใ‘ใ„ใ‚’ๆจกๆ“ฌใ‚‚ใŽใ™ใ‚‹ๆ–นใปใ†ใŒ k3s ๅ†…ใชใ„ใซ็ฐกๆ˜“ใ‹ใ‚“ใ„ใช HA ใ‚’็ต„ใใ‚€ใ‚ˆใ‚Šๆœฌ็‰ฉใปใ‚“ใ‚‚ใฎใฎใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใ‚ใƒผใใฆใใกใ‚ƒใซ่ฟ‘ใกใ‹ใใ€ใ—ใ‹ใ‚‚ MySQL ใŒใƒ›ใ‚นใƒˆใƒžใ‚ทใƒณไธŠใ˜ใ‚‡ใ†ใงๅ‹•ใ†ใ”ใ„ใฆใ„ใ‚‹ใจใ€ๅพŒ็ถšใ“ใ†ใžใใฎ Canal ใซใ‚ˆใ‚‹ binlog ็›ฃ่ฆ–ใ‹ใ‚“ใ—ใŒใ‚ˆใ‚Š็›ดๆŽฅ็š„ใกใ‚‡ใใ›ใคใฆใใซใชใ‚‹ใ‹ใ‚‰ใ ใ€‚k3s ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใ‚ฏใƒฉใ‚นใ‚ฟใŒใƒ›ใ‚นใƒˆใƒžใ‚ทใƒณไธŠใ˜ใ‚‡ใ†ใฎ MySQL/Redis ใซใ‚ขใ‚ฏใ‚ปใ‚นใ‚ใใ›ใ™ใ™ใ‚‹ใซใฏใ€ใ€Œselector ใชใ—ใฎ Serviceใ€ใจใ„ใ†ๆ–ฐใ‚ใŸใ‚‰ใ—ใ„็Ÿฅ่ญ˜ใกใ—ใ็‚นใฆใ‚“ใŒ็™ปๅ ดใจใ†ใ˜ใ‚‡ใ†ใ™ใ‚‹ใ€‚้€šๅธธใคใ†ใ˜ใ‚‡ใ†ใฎ Service ใฏ selector ใงๅŒใŠใชใ˜ namespace ๅ†…ใชใ„ใฎใƒฉใƒ™ใƒซใŒไธ€่‡ดใ„ใฃใกใ™ใ‚‹ Pod ใ‚’่‡ชๅ‹•ใ˜ใฉใ†้–ข้€ฃใ‹ใ‚“ใ‚Œใ‚“ไป˜ใคใ‘ใ‚‹ใŒใ€selector ใชใ—ใฎ Service ใฏๅฐ‚ใ‚‚ใฃใฑใ‚‰ใ‚ฏใƒฉใ‚นใ‚ฟๅค–้ƒจใŒใ„ใถใฎใƒชใ‚ฝใƒผใ‚นใ‚’ๆŒ‡ใ•ใ™ใŸใ‚ใซไฝฟใคใ‹ใ†ใ€‚ๆ‰‹ๅ‹•ใ—ใ‚…ใฉใ†ใง Endpoints ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ๆ›ธใ‹ใ„ใฆใƒ›ใ‚นใƒˆใƒžใ‚ทใƒณใฎ IP ใจใƒใƒผใƒˆใ‚’ๆŒ‡ใ•ใ—ใ€ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใ‚ณใƒผใƒ‰ใ‹ใ‚‰่ฆ‹ใฟใˆใ‚‹ใฎใฏๆจ™ๆบ–็š„ใฒใ‚‡ใ†ใ˜ใ‚…ใ‚“ใฆใใช Service DNS ๅใ‚ใ„ใงใ€ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใŒๅฎŸ้š›ใ˜ใฃใ•ใ„ใซใฏใ‚ฏใƒฉใ‚นใ‚ฟใฎๅค–ใใจใซใ‚ใ‚‹ใ“ใจใ‚’ๅ…จใพใฃใŸใๆ„่ญ˜ใ„ใ—ใใ—ใชใใฆใ‚ˆใ„โ€”โ€”ใ“ใ‚Œใฏๆœฌ็‰ฉใปใ‚“ใ‚‚ใฎใฎใ‚ฏใƒฉใ‚ฆใƒ‰็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ใงใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใŒ RDS ใฎๅ…ทไฝ“็š„ใใŸใ„ใฆใใช้…ๅ‚™ใฏใ„ใณๅ ดๆ‰€ใฐใ—ใ‚‡ใ‚’ๆฐ—ใใซใ—ใชใ„ใฎใจๅŒใŠใชใ˜็–Ž็ตๅˆใใ‘ใคใ”ใ†ใฎ็™บๆƒณใฏใฃใใ†ใ ใ€‚Kafka ใจ Elasticsearch ใฏใใ‚Œใใ‚Œ่‡ชไฝ“ใ˜ใŸใ„ใŒใ‚นใƒ†ใƒผใƒˆใƒฌใ‚นใ‹่‡ชๅ‰ใ˜ใพใˆใฎๅˆ†ๆ•ฃใถใ‚“ใ•ใ‚“ๅ†—้•ทใ˜ใ‚‡ใ†ใกใ‚‡ใ†่จญ่จˆใ›ใฃใ‘ใ„ใ‚’ๆŒใ‚‚ใคใŸใ‚ใ€k3s ๅ†…ใชใ„ใงๅ‹•ใ†ใ”ใ‹ใ—ใฆใ‚‚ๅ•้กŒใ‚‚ใ‚“ใ ใ„ใฏๅฐ‘ใ™ใใชใใ€Bitnami ใฎ Helm ใƒใƒฃใƒผใƒˆใงๅ˜ไธ€ใŸใ‚“ใ„ใคใƒฌใƒ—ใƒชใ‚ซใ‚Œใทใ‚Šใ‹้…ๅ‚™ใฏใ„ใณใ™ใ‚Œใฐใ‚ˆใใ€YAML/Helm values ใ‚’ๆ›ธใ‹ใ็ทด็ฟ’ใ‚Œใ‚“ใ—ใ‚…ใ†ใซ้‡็‚นใ˜ใ‚…ใ†ใฆใ‚“ใ‚’็ฝฎใŠใใ€ๆœฌ็•ชใปใ‚“ใฐใ‚“็ดšใใ‚…ใ†ใฎ่ค‡ๆ•ฐใตใใ™ใ†ใƒฌใƒ—ใƒชใ‚ซใ‚Œใทใ‚Šใ‹่จญๅฎšใ›ใฃใฆใ„ใซใฏใ“ใ ใ‚ใ‚‰ใชใ„ใ€‚ใ‚คใƒกใƒผใ‚ธใฎๆต้€šใ‚Šใ‚…ใ†ใคใ†ใฏใ€ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใฎใ‚คใƒกใƒผใ‚ธใ‚’็ตฑไธ€ใจใ†ใ„ใคใ—ใฆ Harbor ใซ push ใ—ใ€k3s ใฏ Harbor ใ‹ใ‚‰ใ‚คใƒกใƒผใ‚ธใ‚’ pull ใ™ใ‚‹ใ€‚ใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใง build ใ—ใŸใ‚คใƒกใƒผใ‚ธใฏ docker push ใง Harbor ใซ้€ใŠใใ‚‹ๅฟ…่ฆใฒใคใ‚ˆใ†ใŒใ‚ใ‚Šใ€k3s ๅดใŒใ‚ใฏ imagePullSecrets ใ‚’่จญๅฎšใ›ใฃใฆใ„ใ—ใฆ Harbor ใ‚’ๆŒ‡ใ•ใ™ใ‚ˆใ†ใซใ—ใ€ใคใ„ใงใซใƒ—ใƒฉใ‚คใƒ™ใƒผใƒˆใทใ‚‰ใ„ในใƒผใจใƒฌใ‚ธใ‚นใƒˆใƒชใฎ่ช่จผใซใ‚“ใ—ใ‚‡ใ†ๅ‘จใพใ‚ใ‚ŠใฎๅฎŸๅ‹™ใ˜ใคใ‚€ใ‚‚็ทด็ฟ’ใ‚Œใ‚“ใ—ใ‚…ใ†ใ™ใ‚‹ใ€‚ใ“ใฎใ‚ทใ‚นใƒ†ใƒ ๅ…จไฝ“ใœใ‚“ใŸใ„ใฎใŸใ‚ใซ toy-system ใจใ„ใ† namespace ใ‚’ๅ˜็‹ฌใŸใ‚“ใฉใใงไฝœใคใใ‚Šใ€k3s ่‡ชๅ‰ใ˜ใพใˆใฎ kube-system ใจใฏๅˆ†ใ‚ใ‘ใฆใ€็ฎก็†ใ‹ใ‚“ใ‚ŠใจๅพŒ็ถšใ“ใ†ใžใใฎไธธใพใ‚‹ใ”ใจๆธ…ๆŽƒใ›ใ„ใใ†ใ‚’ใ—ใ‚„ใ™ใใ™ใ‚‹ใ€‚ใ•ใ‚‰ใซใ€ไธป็ทšใ—ใ‚…ใ›ใ‚“ใฎ้€ฒ่กŒใ—ใ‚“ใ“ใ†ใ‚’้˜ปๅฎณใใŒใ„ใ—ใชใ„็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใŸ็ทด็ฟ’ใ‚Œใ‚“ใ—ใ‚…ใ†ใƒขใ‚ธใƒฅใƒผใƒซใ‚’ไธ€ใฒใจใค็”จๆ„ใ‚ˆใ†ใ„ใ—ใŸโ€”โ€”mysql-statefulset-demo ใจๅ‘ผใ‚ˆใถๅ˜ไธ€ใŸใ‚“ใ„ใคใƒŽใƒผใƒ‰ใฎ MySQL StatefulSet ใ‚’่ฟฝๅŠ ใคใ„ใ‹ใง้…ๅ‚™ใฏใ„ใณใ—ใ€ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใจใฏๆŽฅ็ถšใ›ใคใžใใ—ใชใ„ๅ˜็‹ฌใŸใ‚“ใฉใใฎใƒ†ใ‚นใƒˆDBใ‚’ไฝœใคใใ‚Šใ€็ด”็ฒ‹ใ˜ใ‚…ใ‚“ใ™ใ„ใซ Pod ใ‚’ๅ‰Š้™คใ•ใใ˜ใ‚‡ใƒปๅ†ไฝœๆˆใ•ใ„ใ•ใใ›ใ„ใ—ใฆใ‚‚ใƒ‡ใƒผใ‚ฟใŒๆฎ‹ใฎใ“ใ‚‹ใ“ใจใ€PVC ใจ PV ใฎ็ดใฒใ‚‚ใฅใ้–ขไฟ‚ใ‹ใ‚“ใ‘ใ„ใ€ใใ—ใฆ selector ใชใ—ใฎ Service ใจใ„ใ†ๆ–นๅผใปใ†ใ—ใใจใฎๆœฌ่ณช็š„ใปใ‚“ใ—ใคใฆใใช้•ใกใŒใ„ใ‚’ไฝ“้จ“ใŸใ„ใ‘ใ‚“ใ™ใ‚‹ใ€‚ๆฎต้šŽใ ใ‚“ใ‹ใ„ไบ”ใ”ใฎๅพŒใ‚ใจใ€ๆฎต้šŽใ ใ‚“ใ‹ใ„ๅ…ญใ‚ใใฎๅ‰ใพใˆใซใ€ใ„ใคใงใ‚‚ๆŒฟใ•ใ—่พผใ“ใ‚“ใงๆง‹ใ‹ใพใ‚ใชใ„ใ€‚

CI/CD ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใฎๆง‹ๆˆ่ฆ็ด ใ“ใ†ใ›ใ„ใ‚ˆใ†ใ้ธๅฎšใ›ใ‚“ใฆใ„ใฏใ€ใ‚ณใƒผใƒ‰ใƒชใƒใ‚ธใƒˆใƒชใ‚Šใฝใ˜ใจใ‚Šใฏใพใš Gitea ใ‚’่‡ชๅ‰ใ˜ใพใˆๆง‹็ฏ‰ใ“ใ†ใกใใ™ใ‚‹ใ€‚GitLab CE ใ‚ˆใ‚Šใšใฃใจ่ปฝ้‡ใ‘ใ„ใ‚Šใ‚‡ใ†ใงใ€8ใ‚ณใ‚ข15G ใƒกใƒขใƒชใฎใ‚ˆใ†ใชใƒžใ‚ทใƒณใซใ‚ˆใ‚Š้ฉใฆใใ—ใฆใŠใ‚Šใ€ไปŠๅพŒใ“ใ‚“ใ”ไผๆฅญใใŽใ‚‡ใ†็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ใซใ‚ˆใ‚Š่ฟ‘ใกใ‹ใ„ๆฉŸ่ƒฝใใฎใ†๏ผˆMR ๆ‰ฟ่ชใ—ใ‚‡ใ†ใซใ‚“ใƒ•ใƒญใƒผใ€CI ๅค‰ๆ•ฐใธใ‚“ใ™ใ†็ฎก็†ใ‹ใ‚“ใ‚Š UI๏ผ‰ใ‚’็ทด็ฟ’ใ‚Œใ‚“ใ—ใ‚…ใ†ใ—ใŸใใชใฃใŸใ‚‰ GitLab CE ใซไน—ใฎใ‚Šๆ›ใ‹ใˆใ‚‰ใ‚Œใ‚‹ใ€‚CI/CD ใ‚จใƒณใ‚ธใƒณใฏใ™ใงใซๅฐŽๅ…ฅใฉใ†ใซใ‚…ใ†ไบˆๅฎšใ‚ˆใฆใ„ใฎ Jenkins ใ‚’ไฝฟใคใ‹ใ†ใ€‚ใ‚คใƒกใƒผใ‚ธใƒฌใ‚ธใ‚นใƒˆใƒชใฏๆ—ขๅญ˜ใใžใ‚“ใฎ็ตŒ้จ“ใ‘ใ„ใ‘ใ‚“ใŒใ‚ใ‚‹ Harbor ใ‚’ๆต็”จใ‚Šใ‚…ใ†ใ‚ˆใ†ใ™ใ‚‹ใ€‚็ฌฌไธ€ๆœŸใ ใ„ใ„ใฃใใฎใƒ‡ใƒ—ใƒญใ‚คใงใทใ‚ใ„ๆ–นๅผใปใ†ใ—ใใฏ Jenkins ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณๅ†…ใชใ„ใง็›ดๆŽฅใกใ‚‡ใใ›ใค kubectl set image / kubectl apply ใ‚’ไฝฟใคใ‹ใ†ใ€ใ‚ทใƒณใƒ—ใƒซใ‹ใค็›ดๆŽฅใกใ‚‡ใใ›ใคใงใ€ใพใš้–‰ใธใ„ใƒซใƒผใƒ—ใ‚‹ใƒผใทใ‚’้€šใจใŠใ™ใ“ใจใ‚’ๅ„ชๅ…ˆใ‚†ใ†ใ›ใ‚“ใ™ใ‚‹ใ€‚็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใฎ็ฌฌไบŒๆœŸใ ใ„ใซใใงใฏ Argo CD ใซใ‚ˆใ‚‹ GitOps ใ‚’ๅŠ ใใ‚ใˆใ€ใ‚ซใƒŠใƒชใ‚ขใƒชใƒชใƒผใ‚นใฎๆ–นๅ‘ใปใ†ใ“ใ†ใซๅฏพๅฟœใŸใ„ใŠใ†ใ™ใ‚‹ใ€ใ‚ˆใ‚Š็พไปฃ็š„ใ’ใ‚“ใ ใ„ใฆใใชใƒ‡ใƒ—ใƒญใ‚คใงใทใ‚ใ„ใฎใ‚„ใ‚Šๆ–นใ‚„ใ‚Šใ‹ใŸใ ใ€‚policy-service ใ‚’ไพ‹ใ‚Œใ„ใซๅ–ใจใ‚‹ใจใ€ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใฎๆฎต้šŽใ ใ‚“ใ‹ใ„ใฏใ€้–‹็™บ่€…ใ‹ใ„ใฏใคใ—ใ‚ƒใŒ git push ใ‚’ Gitea ใซ้€ใŠใใ‚Šใ€Gitea ใฎ webhook ใŒ Jenkins ใ‚’่ตทๅ‹•ใใฉใ†ใ—ใ€Jenkins Pipeline ใŒ้ †ใ˜ใ‚…ใ‚“ใซ Checkout ใ‚ณใƒผใƒ‰ใƒปmvn test ๅ˜ไฝ“ใŸใ‚“ใŸใ„ใƒ†ใ‚นใƒˆใƒปmvn package ใง Jar ไฝœๆˆใ•ใใ›ใ„ใƒปdocker build ใงใ‚ฟใ‚ฐไป˜ใฅใ‘ใƒปdocker push ใง Harbor ใธใƒปๆœ€ๅพŒใ•ใ„ใ”ใซ kubectl set image ใง k8s ใฎใƒญใƒผใƒชใƒณใ‚ฐใƒชใƒชใƒผใ‚นใ‚’่ตทๅ‹•ใใฉใ†ใ™ใ‚‹ใ€ใจใ„ใ†ๆตใชใŒใ‚Œใงใ€Deployment ใฎใƒญใƒผใƒชใƒณใ‚ฐใ‚ขใƒƒใƒ—ใƒ‡ใƒผใƒˆใฎ้Ž็จ‹ใ‹ใฆใ„ใ‚’ใคใ„ใงใซ่ฆณๅฏŸใ‹ใ‚“ใ•ใคใงใใ‚‹ใ€‚Jenkinsfile ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใฏใƒ‘ใƒฉใƒกใƒผใ‚ฟๅŒ–ใ‹ใ—ใฆๆ›ธใ‹ใใ€ๅ„ใ‹ใใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใฎ Jenkinsfile ใฏใใ‚Œใ‚’ๅ‚็…งใ•ใ‚“ใ—ใ‚‡ใ†ใ—ใฆใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ๅใ‚ใ„ใ‚„ใƒใƒผใƒˆใชใฉใฎๅทฎๅˆ†ใ•ใถใ‚“ใƒ‘ใƒฉใƒกใƒผใ‚ฟใ ใ‘ใ‚’ๆธกใ‚ใŸใ—ใ€้‡่ค‡ใ˜ใ‚…ใ†ใตใใ‚’ๆธ›ใธใ‚‰ใ™ใ€‚

ๆฎต้šŽๅˆฅใ ใ‚“ใ‹ใ„ในใคๅฎŸๆ–ฝใ˜ใฃใ—้ †ๅบใ˜ใ‚…ใ‚“ใ˜ใ‚‡ใฏๅ…จไฝ“ๅƒใœใ‚“ใŸใ„ใžใ†ๅ›ณใšใซๆƒใใ‚ใˆใคใคใ€ใ“ใฎใŠใ‚‚ใกใ‚ƒใ‚ทใ‚นใƒ†ใƒ ๅ‘ใ‚€ใ‘ใซๅ†้…็ฝฎใ•ใ„ใฏใ„ใกใ—ใŸใ‚‚ใฎใงใ€ๅ…จ้ƒจใœใ‚“ใถใง12ๆฎต้šŽใ ใ‚“ใ‹ใ„ใ‚ใ‚‹ใ€‚P0ใฏใ™ใงใซๅฎŒไบ†ใ‹ใ‚“ใ‚Šใ‚‡ใ†ใ€k3s ๅ˜ไธ€ใŸใ‚“ใ„ใคใƒŽใƒผใƒ‰ใจ Dockerใ€‚P1ใฏใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ docker-compose ใง MySQL/Redis ใ‚’่ตทๅ‹•ใใฉใ†ใ—ใ€policy-service๏ผˆRedis ใ‚ญใƒฃใƒƒใ‚ทใƒฅๅซใตใใ‚€๏ผ‰ใ‚’ๆ›ธใ‹ใใ€ใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใง CRUD ใ‚’็›ดๆŽฅใกใ‚‡ใใ›ใค้€šใจใŠใ™ใ€‚P2ใฏ gateway-service ใ‚’ๅŠ ใใ‚ใˆใฆ JWT ่ช่จผใซใ‚“ใ—ใ‚‡ใ†ใ‚’ๆŽฅ็ถšใ›ใคใžใใ—ใ€frontend ใฎใƒญใ‚ฐใ‚คใƒณใ‚ใใ„ใ‚“ใจไธ€่ฆงใ„ใกใ‚‰ใ‚“ใƒšใƒผใ‚ธใบใƒผใ˜ใ‚’ๅŠ ใใ‚ใˆใ€ใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰ใ‹ใ‚‰ใ‚ฒใƒผใƒˆใ‚ฆใ‚งใ‚ค่ช่จผใซใ‚“ใ—ใ‚‡ใ†ใ‹ใ‚‰ใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰ใพใงใฎๅฎŒๅ…จใ‹ใ‚“ใœใ‚“ใช็ตŒ่ทฏใ‘ใ„ใ‚ใ‚’้€šใจใŠใ™ใ€‚P3ใฏใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใซ Kafka ใ‚’ๅŠ ใใ‚ใˆใ€policy-service ใŒไฟๅ˜ใปใŸใ‚“ไฝœๆˆใ•ใใ›ใ„ๆ™‚ใ˜ใซใ‚คใƒ™ใƒณใƒˆใ‚’็™บ่กŒใฏใฃใ“ใ†ใ—ใ€notification-service ใ‚’ๆ›ธใ‹ใ„ใฆๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใ•ใ›ใ€ๅŒใŠใชใ˜ใ‚คใƒ™ใƒณใƒˆใ‚’็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใŸๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒใŒ็–Ž็ตๅˆใใ‘ใคใ”ใ†ใ—ใฆๅ‡ฆ็†ใ—ใ‚‡ใ‚Šใ™ใ‚‹ๆง˜ๅญใ‚ˆใ†ใ™ใ‚’ไฝ“้จ“ใŸใ„ใ‘ใ‚“ใ™ใ‚‹ใ€‚P4ใฏใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใซ ES ใ‚’ๅŠ ใใ‚ใˆใ€search-service ใ‚’ๆ›ธใ‹ใ„ใฆๅŒใŠใชใ˜ใ‚คใƒ™ใƒณใƒˆใ‚’ๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใ—ใฆ ES ใซๆ›ธใ‹ใ่พผใ“ใฟใ€ๆคœ็ดขใ‘ใ‚“ใ•ใ API ใ‚’ๅ…ฌ้–‹ใ“ใ†ใ‹ใ„ใ—ใ€ใƒ•ใƒญใƒณใƒˆใ‚จใƒณใƒ‰ใซๆคœ็ดขใ‘ใ‚“ใ•ใใƒšใƒผใ‚ธใบใƒผใ˜ใ‚’ๅŠ ใใ‚ใˆใ€ๅฎŒๅ…จใ‹ใ‚“ใœใ‚“ใช CQRS ่ชญใ‚ˆใฟๆ›ธใ‹ใๅˆ†้›ขใถใ‚“ใ‚Š็ตŒ่ทฏใ‘ใ„ใ‚ใ‚’้€šใจใŠใ™ใ€‚P5ใฏใƒ›ใ‚นใƒˆใƒžใ‚ทใƒณไธŠใ˜ใ‚‡ใ†ใง Docker ๅธธ้งใ˜ใ‚‡ใ†ใกใ‚…ใ†ใซใ‚ˆใ‚Š MySQL/Redis ใ‚’่ตทๅ‹•ใใฉใ†ใ—ใฆใ‚ฏใƒฉใ‚ฆใƒ‰ใƒžใƒใƒผใ‚ธใƒ‰ใ‚’ๆจกๆ“ฌใ‚‚ใŽใ—ใ€k3s ๅ†…ใชใ„ใซ toy-system namespace ใ‚’ไฝœใคใใ‚Šใ€selector ใชใ—ใฎ Service ใงๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใ‚’ใƒ›ใ‚นใƒˆใƒžใ‚ทใƒณใฎ MySQL/Redis ใซๆŽฅ็ถšใ›ใคใžใใ•ใ›ใ€Kafka/ES ใฏ Helm ๅ˜ไธ€ใŸใ‚“ใ„ใคใƒฌใƒ—ใƒชใ‚ซใ‚Œใทใ‚Šใ‹ใง k3s ใซ้…ๅ‚™ใฏใ„ใณใ—ใ€ใ™ในใฆใฎๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใ‚’ใพใš kubectl apply ใงๆ‰‹ๅ‹•ใ—ใ‚…ใฉใ†้…ๅ‚™ใฏใ„ใณใ™ใ‚‹๏ผˆCI/CD ใฏๆœชใฟๆŽฅ็ถšใ›ใคใžใ๏ผ‰ใ€ใ€Œๆœฌ็•ชใปใ‚“ใฐใ‚“ใ€็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ใงไธ€ใฒใจ้€šใจใŠใ‚Šๅ…จไฝ“ใœใ‚“ใŸใ„็ตŒ่ทฏใ‘ใ„ใ‚ใ‚’้€šใจใŠใ™ใ€‚P5.5ใฏๆŒฟๅ…ฅใใ†ใซใ‚…ใ†ๅผใ—ใใฎ็ทด็ฟ’ใ‚Œใ‚“ใ—ใ‚…ใ†ใงใ€็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใŸ MySQL StatefulSet + PV ใฎใƒ‡ใƒขใ‚’่ฟฝๅŠ ใคใ„ใ‹้…ๅ‚™ใฏใ„ใณใ—ใ€ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใƒ‡ใƒผใ‚ฟใจใฏๆŽฅ็ถšใ›ใคใžใใ—ใชใ„ใ€‚P6ใงใฏใ“ใฎใ‚ฟใ‚คใƒŸใƒณใ‚ฐใงใ‚ˆใ†ใ‚„ใ Prometheus/Grafana ใ‚’ๅฐŽๅ…ฅใฉใ†ใซใ‚…ใ†ใ™ใ‚‹ใ€‚ใ™ใงใซๆœฌ็‰ฉใปใ‚“ใ‚‚ใฎใฎใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใจใƒˆใƒฉใƒ•ใ‚ฃใƒƒใ‚ฏใŒใ‚ใ‚Š่ฆณๅฏŸใ‹ใ‚“ใ•ใคใงใใ‚‹ใ‹ใ‚‰ใงใ€ๆœฌ็‰ฉใปใ‚“ใ‚‚ใฎใฎ CPU/ใƒกใƒขใƒช/QPS ใฎๆ›ฒ็ทšใใ‚‡ใใ›ใ‚“ใ‚’่ฆ‹ใฟใ‚‰ใ‚Œใ€ใ‚ใ–ใจ Pod ใ‚’ไธ€ใฒใจใค kill ใ—ใฆ่‡ชๅทฑใ˜ใ“ไฟฎๅพฉใ—ใ‚…ใ†ใตใใ‚’่ฆณๅฏŸใ‹ใ‚“ใ•ใคใงใใ‚‹ใ€‚P7ใฏ Gitea + Jenkins + Harbor ใ‚’ๆŽฅ็ถšใ›ใคใžใใ—ใ€P5ใฎๆ‰‹ๅ‹•ใ—ใ‚…ใฉใ†้…ๅ‚™ใฏใ„ใณใ‚’่‡ชๅ‹•ใ˜ใฉใ†ๅŒ–ใ‹ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใซๅค‰ใ‹ใˆใ€git push ใ™ใ‚Œใฐ้…ๅ‚™ใฏใ„ใณใ•ใ‚Œใ€ใƒญใƒผใƒชใƒณใ‚ฐใƒชใƒชใƒผใ‚นใŒ้€šใจใŠใ‚‹ใ€‚P8ใฏ EFK ใƒญใ‚ฐใ‚ใ็ตŒ่ทฏใ‘ใ„ใ‚ใ‚’ใ“ใ‚Œใ‚‰ใฎใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใซๆŽฅ็ถšใ›ใคใžใใ—ใ€ๅ•้กŒใ‚‚ใ‚“ใ ใ„่ชฟๆŸปใกใ‚‡ใ†ใ•ๆ™‚ใ˜ใซ kubectl logs ใงไธ€ใฒใจใคใšใค่ฆ‹ใฟใ‚‹ใฎใงใฏใชใใƒญใ‚ฐใ‚ใใ‚’ๆคœ็ดขใ‘ใ‚“ใ•ใใงใใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹ใ€‚P9ใฏ็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใงใ€Canal ใ‚’ๅฐŽๅ…ฅใฉใ†ใซใ‚…ใ†ใ—ใฆใƒ›ใ‚นใƒˆใƒžใ‚ทใƒณใฎ MySQL ใฎ binlog ใ‚’็›ฃ่ฆ–ใ‹ใ‚“ใ—ใ—ใ€็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใŸ report-events topic ใจ report-service ใ‚’ๆ–ฐ่จญใ—ใ‚“ใ›ใคใ™ใ‚‹ใ€‚Canal ใŒ report-events ใซ็™บ่กŒใฏใฃใ“ใ†ใ—ใ€report-service ใŒๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใ—ใŸๅพŒใฎใกใ‚คใƒ™ใƒณใƒˆใ‚’ SQL ใซๅพฉๅ…ƒใตใใ’ใ‚“ใ—ใฆ MySQL ใงใฏใชใ ClickHouse ใซ้กๅ†™ใ‹ใŒใฟใ†ใคใ—ใซใ—ใ€OLAP ๅˆ—ใ‚ŒใคๆŒ‡ๅ‘ใ—ใ“ใ†ใ‚นใƒˆใƒฌใƒผใ‚ธใ™ใจใ‚Œใƒผใ˜ใฎ้›†่จˆใ—ใ‚…ใ†ใ‘ใ„ใ‚ฏใ‚จใƒชใใˆใ‚Šใฎๅ„ชไฝๆ€งใ‚†ใ†ใ„ใ›ใ„ใ‚’ไฝ“้จ“ใŸใ„ใ‘ใ‚“ใ™ใ‚‹ใ€‚ๆ—ขๅญ˜ใใžใ‚“ใฎ policy-service ใŒๆ‰‹ๅ‹•ใ—ใ‚…ใฉใ†ใง policy-events ใ‚’็™บ่กŒใฏใฃใ“ใ†ใ™ใ‚‹้ƒจๅˆ†ใถใถใ‚“ใฏใใฎใพใพ็ถญๆŒใ„ใ˜ใ—ใ€ไบŒใตใŸใคใฎ็ตŒ่ทฏใ‘ใ„ใ‚ใ‚’ไธฆๅญ˜ใธใ„ใžใ‚“ๆฏ”่ผƒใฒใ‹ใใ•ใ›ใ€Zorro BLCS ใฎใ€ŒๅŒใŠใชใ˜ binlogใ€ไบŒใตใŸใคใฎ็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใŸๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใ€ใจใ„ใ†่จญ่จˆใ›ใฃใ‘ใ„ๆ€ๆƒณใ—ใใ†ใ‚’ๅฎŒๅ…จใ‹ใ‚“ใœใ‚“ใซๅ†็พใ•ใ„ใ’ใ‚“ใ™ใ‚‹ใ€‚P10ใฎ็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใฏ Argo CD ใซใ‚ˆใ‚‹ GitOps ๅผใ—ใ้…ๅ‚™ใฏใ„ใณใƒ—ใƒฉใ‚น็ฐกๅ˜ใ‹ใ‚“ใŸใ‚“ใชใ‚ซใƒŠใƒชใ‚ขใƒชใƒชใƒผใ‚นใฎใƒ‡ใƒขใ€‚P11ใฎ็™บๅฑ•ใฏใฃใฆใ‚“ๅ†…ๅฎนใชใ„ใ‚ˆใ†ใฏ k6 ใง policy-service ใ‚’่ฒ ่ทใตใ‹่ฉฆ้จ“ใ—ใ‘ใ‚“ใ—ใ€Chaos Mesh ใงใƒฉใƒณใƒ€ใƒ ใซ Pod ใ‚’ kill ใ™ใ‚‹ใ€‚ใƒ“ใƒƒใ‚ฐใƒ‡ใƒผใ‚ฟใจ AI/RAG ใฎใ“ใฎไบŒใตใŸใคใฏ็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใŸๅพŒ็ถšใ“ใ†ใžใๆ‹กๅผตใ‹ใใกใ‚‡ใ†ใจใ—ใฆใ€็ฌฌไธ€ๆœŸใ ใ„ใ„ใฃใใฎ็ฏ„ๅ›ฒใฏใ‚“ใ„ใซใฏ่ฉฐใคใ‚่พผใ“ใพใชใ„ใŒใ€่จญ่จˆใ›ใฃใ‘ใ„ไธŠใ˜ใ‚‡ใ†ใฏใ™ใงใซไบ’ๆ›ใ”ใ‹ใ‚“ๆ€งใ›ใ„ใŒใ‚ใ‚‹ใ€‚policy-events topic ใฏๅฐ†ๆฅใ—ใ‚‡ใ†ใ‚‰ใ„ๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒใ‚’ใ‚‚ใ†ไธ€ใฒใจใคๅŠ ใใ‚ใˆใฆ MinIO ใซๆ›ธใ‹ใ่พผใ“ใ‚“ใ ใ‚Š Flink ใ‚’่ตทๅ‹•ใใฉใ†ใ—ใŸใ‚Šใงใใ€ๆ—ขๅญ˜ใใžใ‚“ใฎไบŒใตใŸใคใฎๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒใซใฏๅฝฑ้Ÿฟใˆใ„ใใ‚‡ใ†ใ—ใชใ„ใ€‚ES ๅ†…ใชใ„ใฎไฟๅ˜ใปใŸใ‚“ใƒ‡ใƒผใ‚ฟใ‚‚ๅพŒ็ถšใ“ใ†ใžใใง pgvector/embedding ใฎๅฎŸ้จ“ใ˜ใฃใ‘ใ‚“็”จใ‚ˆใ†ใฎใƒ‡ใƒผใ‚ฟๆบใ’ใ‚“ใจใ—ใฆไฝฟใคใ‹ใˆใ‚‹ใ€‚

Kafka ใ‚คใƒ™ใƒณใƒˆๅฅ‘็ด„ใ‘ใ„ใ‚„ใใฏ docs/kafka-event-schema.md ใซๆ›ธใ‹ใ‹ใ‚ŒใฆใŠใ‚Šใ€Claude Code ใŒๅŽณๆ ผใ’ใ‚“ใ‹ใใซ้ตๅฎˆใ˜ใ‚…ใ‚“ใ—ใ‚…ใ™ในใ้ƒจๅˆ†ใถใถใ‚“ใ ใ€‚policy-events ใจใ„ใ† topic ใฎใ‚คใƒ™ใƒณใƒˆๆง‹้€ ใ“ใ†ใžใ†ใซใฏ eventIdใ€eventType๏ผˆPOLICY_CREATED/POLICY_UPDATED/POLICY_CANCELLED๏ผ‰ใ€occurredAt ใ‚ฟใ‚คใƒ ใ‚นใ‚ฟใƒณใƒ—ใ€ใใ—ใฆๅ…ฅใ„ใ‚Œๅญใ“ใฎ policy ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ๏ผˆidใ€policyNoใ€holderNameใ€productTypeใ€premiumใ€status๏ผ‰ใŒๅซใตใใพใ‚Œใ‚‹ใ€‚ๅ˜ไธ€ใŸใ‚“ใ„ใค topic ใซ่ค‡ๆ•ฐใตใใ™ใ†ใฎใ‚คใƒ™ใƒณใƒˆ็จฎ้กžใ—ใ‚…ใ‚‹ใ„ใ‚’ๆŒใ‚‚ใŸใ›ใ€eventType ใƒ•ใ‚ฃใƒผใƒซใƒ‰ใงๅˆ†ๅฒใถใ‚“ใใ•ใ›ใ‚‹ใ€ๅคงๅŠใŸใ„ใฏใ‚“ใฎ Kafka ใ‚คใƒ™ใƒณใƒˆ่จญ่จˆใ›ใฃใ‘ใ„ใฎๅฎŸ่ทตใ˜ใฃใ›ใ‚“ใซๅˆ่‡ดใŒใฃใกใ™ใ‚‹ใ‚„ใ‚Šๆ–นใ‚„ใ‚Šใ‹ใŸใ ใ€‚P9ๆฎต้šŽใ ใ‚“ใ‹ใ„ใงๆ–ฐ่จญใ—ใ‚“ใ›ใคใ™ใ‚‹ report-events topic ใฏ Canal ใŒใƒ›ใ‚นใƒˆใƒžใ‚ทใƒณ MySQL ใฎ binlog ใ‚’็›ฃ่ฆ–ใ‹ใ‚“ใ—ใ—ใฆ็”Ÿๆˆใ›ใ„ใ›ใ„ใ™ใ‚‹ใ‚‚ใฎใงใ€ๅฝขๅผใ‘ใ„ใ—ใใฏ ZorroEvent ใฎ็™บๆƒณใฏใฃใใ†ใซๆƒใใ‚ใˆใ€็ตฑไธ€ใจใ†ใ„ใคใ‚คใƒ™ใƒณใƒˆใƒ—ใƒญใƒˆใ‚ณใƒซใทใ‚ใจใ“ใ‚‹ใง binlog ๅค‰ๆ›ดใธใ‚“ใ“ใ†ใ‚’ๅฐๅ…ฅใตใ†ใซใ‚…ใ†ใ™ใ‚‹ใ‚‚ใฎใงใ€policy-events ใจใ„ใ†ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ๅฑคใใ†ใ‚คใƒ™ใƒณใƒˆใ‚นใ‚ญใƒผใƒžใ‚’ใใฎใพใพๆต็”จใ‚Šใ‚…ใ†ใ‚ˆใ†ใ™ใ‚‹ใ‚‚ใฎใงใฏใชใ„ใ€‚gtidใ€databaseใ€tableใ€eventType๏ผˆINSERT/UPDATE/DELETE๏ผ‰ใ€data๏ผˆๅค‰ๆ›ดใธใ‚“ใ“ใ†ๅพŒใ”ใฎ่กŒใŽใ‚‡ใ†ใƒ‡ใƒผใ‚ฟ๏ผ‰ใ€ใใ—ใฆ occurredAt ใ‚’ๅซใตใใ‚€ใ€‚report-service ใฏใ“ใฎ topic ใ‚’ๆถˆ่ฒปใ—ใ‚‡ใ†ใฒใ—ใ€ใ‚คใƒ™ใƒณใƒˆใ‚’ SQL ใซๅพฉๅ…ƒใตใใ’ใ‚“ใ—ใฆ ClickHouse ใงๅ†็”Ÿใ•ใ„ใ›ใ„ใ™ใ‚‹ใ€Alphad ใฎ้กๅ†™ใ‹ใŒใฟใ†ใคใ—ๅฎŸ่กŒใ˜ใฃใ“ใ†ใƒ‘ใ‚ฟใƒผใƒณใซๅฏพๅฟœใŸใ„ใŠใ†ใ™ใ‚‹ใ‚‚ใฎใงใ€ใ“ใฎ็ตŒ่ทฏใ‘ใ„ใ‚ใจ policy-events ใฏไบŒใตใŸใคใฎ็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใŸ topic ใงใ‚ใ‚Šใ€ไบ’ใŸใŒใ„ใซๅฝฑ้Ÿฟใˆใ„ใใ‚‡ใ†ใ—ใชใ„ใ€‚

Claude Code ใธใฎๅฎŸ่ฃ…ใ˜ใฃใใ†่ฆไปถใ‚ˆใ†ใ‘ใ‚“ใฏๅ…จ้ƒจใœใ‚“ใถใง8้ …็›ฎใ“ใ†ใ‚‚ใใ‚ใ‚‹ใ€‚ๅ„ใ‹ใใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใฏ็‹ฌ็ซ‹ใฉใใ‚Šใคใ—ใŸ pom.xml/package.json ใ‚’ๆŒใ‚‚ใกใ€่ฆชๅญใŠใ‚„ใ“ module ใซใฏใ—ใชใ„ใ—ใชใ„ใ€ใ‚ทใƒณใƒ—ใƒซใ•ใ‚’ไฟใŸใ‚‚ใคใ€‚ใ™ในใฆใฎใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™่จญๅฎšใ›ใฃใฆใ„ใฏ็’ฐๅขƒใ‹ใ‚“ใใ‚‡ใ†ๅค‰ๆ•ฐใธใ‚“ใ™ใ†ใงๆณจๅ…ฅใกใ‚…ใ†ใซใ‚…ใ†ใ—ใ€ใƒใƒผใƒ‰ใ‚ณใƒผใƒ‰ใ—ใชใ„ใ€‚ใƒญใƒผใ‚ซใƒซใ‚ใƒผใ‹ใ‚‹ใงใฏ .env ใ‹ IDE ใฎ run configurationใ€k3s ๅ†…ใชใ„ใงใฏ ConfigMap/Secret ใ‚’ไฝฟใคใ‹ใ†ใ€‚ๅ„ใ‹ใใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใฏ /actuator/health ใ‚’ๆไพ›ใฆใ„ใใ‚‡ใ†ใ—ใ€ๅพŒ็ถšใ“ใ†ใžใใฎ Prometheus ๆŽฅ็ถšใ›ใคใžใใซๅ‚™ใใชใˆใ‚‹ใ€‚policy-service ใŒ Kafka ใ‚คใƒ™ใƒณใƒˆใ‚’็™บ่กŒใฏใฃใ“ใ†ใ™ใ‚‹ใ‚ณใƒผใƒ‰ใฏๅ˜็‹ฌใŸใ‚“ใฉใใง EventPublisher ใจใ„ใ†ใ‚ฏใƒฉใ‚นใใ‚‰ใ™ใซๅฐๅ…ฅใตใ†ใซใ‚…ใ†ใ—ใ€P9ๆฎต้šŽใ ใ‚“ใ‹ใ„ใง Canal ใซ็ฝฎใŠใๆ›ใ‹ใˆใ‚‹ใจใใ€Œ่ชฐใ ใ‚ŒใŒใ‚คใƒ™ใƒณใƒˆ้€ไฟกใใ†ใ—ใ‚“ใ‚’่ตทๅ‹•ใใฉใ†ใ™ใ‚‹ใ‹ใ€ใจใ„ใ†ใ“ใฎๅฑคใใ†ใ ใ‘ใ‚’ๅ…ฅใ„ใ‚Œๆ›ฟใ‹ใˆใ‚Œใฐๆธˆใ™ใฟใ€EventPublisher ่‡ชไฝ“ใ˜ใŸใ„ใจไธ‹ๆตใ‹ใ‚Šใ‚…ใ†ใฎๆถˆ่ฒป่€…ใ—ใ‚‡ใ†ใฒใ—ใ‚ƒใซใฏๆ‰‹ใฆใ‚’ใคใ‘ใชใ„ใ€‚P1ใ‹ใ‚‰P4ใฎ้ †ใ˜ใ‚…ใ‚“ใงๅฎŸ่ฃ…ใ˜ใฃใใ†ใ—ใ€ๅ„ใ‹ใๆฎต้šŽใ ใ‚“ใ‹ใ„ใ‚’ไธ€ใฒใจใคๅฎŒไบ†ใ‹ใ‚“ใ‚Šใ‚‡ใ†ใ™ใ‚‹ใŸใณใซๅ‹•ใ†ใ”ใ‹ใ—ใฆๅŠนๆžœใ“ใ†ใ‹ใ‚’่ฆ‹ใฟใ‚‰ใ‚Œใ‚‹ในใใงใ€ใ™ในใฆใฎใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใ‚ณใƒผใƒ‰ใ‚’ไธ€ๆ‹ฌใ„ใฃใ‹ใคใงๆ›ธใ‹ใ็ต‚ใŠใˆใฆใ‹ใ‚‰็ตๅˆใ‘ใคใ”ใ†ใƒ†ใ‚นใƒˆใฆใ™ใจใ™ใ‚‹ใฎใงใฏใชใ„ใ€‚policy-service ใฎใƒ†ใƒผใƒ–ใƒซๆง‹้€ ใ“ใ†ใžใ†ๅค‰ๆ›ดใธใ‚“ใ“ใ†ใฏไธ€ๅพ‹ใ„ใกใ‚Šใค Liquibase changelog ใง็ฎก็†ใ‹ใ‚“ใ‚Šใ—ใ€Java ใ‚ณใƒผใƒ‰ๅ†…ใชใ„ใงใƒ†ใƒผใƒ–ใƒซๆœ‰็„กใ†ใ‚€ใ‚’ๆคœ็Ÿฅใ‘ใ‚“ใกใ—ใฆไฝœๆˆใ•ใใ›ใ„ใ™ใ‚‹ใƒญใ‚ธใƒƒใ‚ฏใ‚’ๆ‰‹ๆ›ธใฆใŒใใ™ใ‚‹ใ“ใจใฏ่จฑๅฏใใ‚‡ใ‹ใ—ใชใ„ใ€‚P5ๆฎต้šŽใ ใ‚“ใ‹ใ„ใฎ selector ใชใ— Service ใƒ—ใƒฉใ‚น Endpoints ใฎ่จญๅฎšใ›ใฃใฆใ„ใฏไธ€ใฒใจใคใฎใƒ•ใ‚กใ‚คใƒซใซๅ˜็‹ฌใŸใ‚“ใฉใใงๆ˜Ž่จ˜ใ‚ใ„ใใ—ใ€ใƒ•ใ‚กใ‚คใƒซๅ†’้ ญใผใ†ใจใ†ใซใ‚ณใƒกใƒณใƒˆใงใ€Œใ“ใ‚Œใฏใ‚ฏใƒฉใ‚ฆใƒ‰ใƒžใƒใƒผใ‚ธใƒ‰ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใ‚’ๆจกๆ“ฌใ‚‚ใŽใ—ใฆใŠใ‚Šใ€ใƒ›ใ‚นใƒˆใƒžใ‚ทใƒณใฎ IP ใ‚’ๆŒ‡ใ•ใ—ใฆใ„ใ‚‹ใ€ใจ่ชฌๆ˜Žใ›ใคใ‚ใ„ใ—ใ€ๅพŒใฎใกใงๅพฉ็ฟ’ใตใใ—ใ‚…ใ†ใ™ใ‚‹ใจใใซไธ€็›ฎใฒใจใ‚ใงๆ„ๅ›ณใ„ใจใŒๅˆ†ใ‚ใ‹ใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹ใ€‚

็ต่ชžใ‘ใคใ”๏ผšใ€Œใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใ‚ใƒผใใฆใใกใ‚ƒใ‚’็†่งฃใ‚Šใ‹ใ„ใ™ใ‚‹ใ€ใจใ€Œๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใ‚ณใƒผใƒ‰ใ‚’ๆ›ธใ‹ใใ€ใ‚’ๅˆ†ใ‚ใ‘ใ‚‹

ใ“ใฎ่จˆ็”ปใ‘ใ„ใ‹ใๅ…จไฝ“ใœใ‚“ใŸใ„ใฎ่ƒŒๅพŒใฏใ„ใ”ใซใฏๆ„ๅ›ณ็š„ใ„ใจใฆใใชๅˆ†ๆฅญใถใ‚“ใŽใ‚‡ใ†ใŒใ‚ใ‚‹ใ€‚็ทด็ฟ’ใ‚Œใ‚“ใ—ใ‚…ใ†ใ™ใ‚‹ใฎใฏใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใ‚ใƒผใใฆใใกใ‚ƒใฎ้ชจ็ต„ใปใญใใฟใจๅ„ใ‹ใๆง‹ๆˆ่ฆ็ด ใ“ใ†ใ›ใ„ใ‚ˆใ†ใใŒใฉใ†ๅ”่ชฟใใ‚‡ใ†ใกใ‚‡ใ†ใ™ใ‚‹ใ‹ใงใ€ๆฅญๅ‹™ใŽใ‚‡ใ†ใ‚€ใƒญใ‚ธใƒƒใ‚ฏใ‚ใ˜ใฃใใฎใ‚ณใƒผใƒ‰โ€”โ€”ใŠใ‚‚ใกใ‚ƒใฎๆณจๆ–‡ใกใ‚…ใ†ใ‚‚ใ‚“ใ‚ตใƒผใƒ“ใ‚นใ•ใƒผใณใ™ใ€embedding ๅˆ‡ใใ‚Šๅˆ†ใ‚ใ‘ใ‚นใ‚ฏใƒชใƒ—ใƒˆใ€Flink ้›†่จˆใ—ใ‚…ใ†ใ‘ใ„ใ‚ธใƒงใƒ–ใ˜ใ‚‡ใถใชใฉโ€”โ€”ใฏ่‡ชๅˆ†ใ˜ใถใ‚“ใงใ‚ผใƒญใ‹ใ‚‰ๆ‰‹ๆ›ธใฆใŒใใ™ใ‚‹ๅฟ…่ฆใฒใคใ‚ˆใ†ใฏใชใใ€Claude Code ใซๅฎŸ่ฃ…ใ˜ใฃใใ†ใ•ใ›ใ‚‹ๆ–นใปใ†ใŒๆ™‚้–“ใ˜ใ‹ใ‚“ใฎ็ฏ€็ด„ใ›ใคใ‚„ใใซใชใ‚‹ใ€‚่‡ชๅˆ†ใ˜ใถใ‚“ใฏใ€Œๅ„ๅฑคใ‹ใใใ†ใŒไฝ•ใชใซใ‚’ใ—ใฆใ„ใ‚‹ใ‹ใ€ใชใœใ“ใ†่จญ่จˆใ›ใฃใ‘ใ„ใ•ใ‚Œใฆใ„ใ‚‹ใ‹ใ€ใฉใ†้šœๅฎณใ—ใ‚‡ใ†ใŒใ„่ชฟๆŸปใกใ‚‡ใ†ใ•ใ™ใ‚‹ใ‹ใ€ใจใ„ใ†ๆ ธๅฟƒใ‹ใใ—ใ‚“็›ฎๆจ™ใ‚‚ใใฒใ‚‡ใ†ใซ้›†ไธญใ—ใ‚…ใ†ใกใ‚…ใ†ใ™ใ‚‹ใ€‚ๅ…จไฝ“ๅƒใœใ‚“ใŸใ„ใžใ†ๅ›ณใšใฏใ€Œไฝ•ใชใซใŒใ‚ใ‚‹ใ‹ใ‚’็Ÿฅใ—ใ‚‹ใ€ใ“ใจใงใ€ๅฎŸ่ฃ…ใ˜ใฃใใ†ใƒ—ใƒฉใƒณใฏใ€Œ่‡ชใ˜ใ‚‰ใฎๆ‰‹ใฆใงๅ‹•ใ†ใ”ใ‹ใ—ใฆใฟใ‚‹ใ€ใ“ใจใ ใ€‚ใ“ใฎไธกๆ–นใ‚Šใ‚‡ใ†ใปใ†ใ‚’ๅˆใ‚ใ‚ใ›ใŸใ‚‚ใฎใŒใ€ใ“ใ‚Œใ‹ใ‚‰ใ—ใฐใ‚‰ใใฎ้–“ใ‚ใ„ใ ่‡ชๅˆ†ใ˜ใถใ‚“ใซ่ชฒใ‹ใ™ๅฎฟ้กŒใ—ใ‚…ใใ ใ„ใจใ„ใ†ใ‚ใ‘ใ ใ€‚