@k2works/claude-code-booster 4.17.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (755) hide show
  1. package/lib/assets/.claude/skills/apply-okf/SKILL.md +88 -0
  2. package/lib/assets/.claude/skills/apply-okf/evals/evals.json +8 -0
  3. package/lib/assets/.claude/skills/apply-okf/scripts/__pycache__/okf_apply.cpython-314.pyc +0 -0
  4. package/lib/assets/.claude/skills/apply-okf/scripts/okf_apply.py +397 -0
  5. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.json +20 -0
  6. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.md +13 -0
  7. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/eval_metadata.json +14 -0
  8. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/grading.json +39 -0
  9. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/001-db.md +12 -0
  10. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/002-cache-strategy.md +20 -0
  11. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/index.md +4 -0
  12. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/data-model.md +12 -0
  13. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/index.md +3 -0
  14. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/index.md +10 -0
  15. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/log.md +7 -0
  16. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  17. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy.md +12 -0
  18. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/index.md +4 -0
  19. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  20. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/report.md +76 -0
  21. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/grading.json +39 -0
  22. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/001-db.md +12 -0
  23. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/002-cache-strategy.md +20 -0
  24. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/index.md +4 -0
  25. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/data-model.md +12 -0
  26. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/index.md +3 -0
  27. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/index.md +10 -0
  28. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/log.md +7 -0
  29. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  30. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy.md +12 -0
  31. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/index.md +4 -0
  32. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  33. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/report.md +22 -0
  34. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/eval_metadata.json +13 -0
  35. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/grading.json +34 -0
  36. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/001-db.md +12 -0
  37. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  38. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/index.md +3 -0
  39. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/data-model.md +14 -0
  40. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/index.md +3 -0
  41. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/index.md +10 -0
  42. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/log.md +7 -0
  43. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  44. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy.md +12 -0
  45. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/index.md +4 -0
  46. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  47. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/report.md +61 -0
  48. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/grading.json +34 -0
  49. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/001-db.md +12 -0
  50. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  51. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/index.md +3 -0
  52. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/data-model.md +13 -0
  53. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/index.md +3 -0
  54. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/index.md +10 -0
  55. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/log.md +7 -0
  56. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy-old.md +12 -0
  57. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy.md +12 -0
  58. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/index.md +4 -0
  59. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  60. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/report.md +18 -0
  61. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/eval_metadata.json +13 -0
  62. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/grading.json +34 -0
  63. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/001-db.md +12 -0
  64. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  65. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/index.md +3 -0
  66. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/data-model.md +12 -0
  67. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/index.md +3 -0
  68. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/index.md +10 -0
  69. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/log.md +7 -0
  70. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy-old.md +13 -0
  71. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy.md +12 -0
  72. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/index.md +7 -0
  73. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  74. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/report.md +83 -0
  75. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/grading.json +34 -0
  76. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/001-db.md +12 -0
  77. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
  78. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/index.md +3 -0
  79. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/data-model.md +12 -0
  80. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/index.md +3 -0
  81. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/index.md +10 -0
  82. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/log.md +7 -0
  83. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy-old.md +14 -0
  84. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy.md +12 -0
  85. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/index.md +4 -0
  86. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  87. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/report.md +15 -0
  88. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/review.html +1325 -0
  89. package/lib/assets/.claude/skills/closing-iteration/SKILL.md +16 -0
  90. package/lib/assets/.claude/skills/creating-adr/SKILL.md +4 -0
  91. package/lib/assets/.claude/skills/creating-journal/SKILL.md +12 -1
  92. package/lib/assets/.claude/skills/migrating-okf/SKILL.md +149 -0
  93. package/lib/assets/.claude/skills/migrating-okf/evals/evals.json +23 -0
  94. package/lib/assets/.claude/skills/migrating-okf/scripts/__pycache__/okf_check.cpython-314.pyc +0 -0
  95. package/lib/assets/.claude/skills/migrating-okf/scripts/okf_check.py +468 -0
  96. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.json +20 -0
  97. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.md +13 -0
  98. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/eval_metadata.json +15 -0
  99. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/grading.json +44 -0
  100. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/adr/index.md +10 -0
  101. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/index.md +15 -0
  102. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/log.md +5 -0
  103. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +966 -0
  104. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/index.md +6 -0
  105. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +261 -0
  106. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +480 -0
  107. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +681 -0
  108. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/report.md +85 -0
  109. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/grading.json +44 -0
  110. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/adr/index.md +8 -0
  111. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/index.md +11 -0
  112. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/log.md +7 -0
  113. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +964 -0
  114. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/index.md +9 -0
  115. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +250 -0
  116. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +469 -0
  117. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +677 -0
  118. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/report.md +49 -0
  119. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/eval_metadata.json +13 -0
  120. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/grading.json +34 -0
  121. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/index.md +7 -0
  122. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/log.md +7 -0
  123. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/metrics/churn.md +9 -0
  124. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/metrics/income-statement.md +15 -0
  125. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/report.md +147 -0
  126. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/review.html +1325 -0
  127. package/lib/assets/.claude/skills/opening-iteration/SKILL.md +15 -0
  128. package/lib/assets/.claude/skills/orchestrating-analysis/SKILL.md +4 -1
  129. package/lib/assets/.claude/skills/orchestrating-development/SKILL.md +2 -0
  130. package/lib/assets/.claude/skills/orchestrating-operation/SKILL.md +3 -1
  131. package/lib/assets/.claude/skills/orchestrating-project/SKILL.md +4 -1
  132. package/lib/assets/.claude/skills/planning-releases/SKILL.md +2 -0
  133. package/lib/assets/.env.example +9 -0
  134. package/lib/assets/CLAUDE.md +218 -216
  135. package/lib/assets/docs/article/functional-desgin-ppp/all/01-immutability-and-data-transformation.md +9 -0
  136. package/lib/assets/docs/article/functional-desgin-ppp/all/02-function-composition.md +9 -0
  137. package/lib/assets/docs/article/functional-desgin-ppp/all/03-polymorphism.md +9 -0
  138. package/lib/assets/docs/article/functional-desgin-ppp/all/04-data-validation.md +9 -0
  139. package/lib/assets/docs/article/functional-desgin-ppp/all/05-property-based-testing.md +9 -0
  140. package/lib/assets/docs/article/functional-desgin-ppp/all/06-tdd-and-functional.md +9 -0
  141. package/lib/assets/docs/article/functional-desgin-ppp/all/07-composite-pattern.md +9 -0
  142. package/lib/assets/docs/article/functional-desgin-ppp/all/08-decorator-pattern.md +10 -1
  143. package/lib/assets/docs/article/functional-desgin-ppp/all/09-adapter-pattern.md +9 -0
  144. package/lib/assets/docs/article/functional-desgin-ppp/all/10-strategy-pattern.md +9 -0
  145. package/lib/assets/docs/article/functional-desgin-ppp/all/11-command-pattern.md +9 -0
  146. package/lib/assets/docs/article/functional-desgin-ppp/all/12-visitor-pattern.md +9 -0
  147. package/lib/assets/docs/article/functional-desgin-ppp/all/13-abstract-factory-pattern.md +9 -0
  148. package/lib/assets/docs/article/functional-desgin-ppp/all/14-abstract-server-pattern.md +9 -0
  149. package/lib/assets/docs/article/functional-desgin-ppp/all/15-gossiping-bus-drivers.md +9 -0
  150. package/lib/assets/docs/article/functional-desgin-ppp/all/16-payroll-system.md +9 -0
  151. package/lib/assets/docs/article/functional-desgin-ppp/all/17-video-rental-system.md +9 -0
  152. package/lib/assets/docs/article/functional-desgin-ppp/all/18-concurrency-system.md +9 -0
  153. package/lib/assets/docs/article/functional-desgin-ppp/all/19-wa-tor-simulation.md +10 -1
  154. package/lib/assets/docs/article/functional-desgin-ppp/all/20-pattern-interactions.md +9 -0
  155. package/lib/assets/docs/article/functional-desgin-ppp/all/21-best-practices.md +9 -0
  156. package/lib/assets/docs/article/functional-desgin-ppp/all/22-oo-to-fp-migration.md +9 -0
  157. package/lib/assets/docs/article/functional-desgin-ppp/clojure/01-immutability-and-data-transformation.md +9 -0
  158. package/lib/assets/docs/article/functional-desgin-ppp/clojure/02-function-composition.md +9 -0
  159. package/lib/assets/docs/article/functional-desgin-ppp/clojure/03-polymorphism.md +9 -0
  160. package/lib/assets/docs/article/functional-desgin-ppp/clojure/04-clojure-spec.md +9 -0
  161. package/lib/assets/docs/article/functional-desgin-ppp/clojure/05-property-based-testing.md +9 -0
  162. package/lib/assets/docs/article/functional-desgin-ppp/clojure/06-tdd-in-functional.md +9 -0
  163. package/lib/assets/docs/article/functional-desgin-ppp/clojure/07-composite-pattern.md +9 -0
  164. package/lib/assets/docs/article/functional-desgin-ppp/clojure/08-decorator-pattern.md +9 -0
  165. package/lib/assets/docs/article/functional-desgin-ppp/clojure/09-adapter-pattern.md +9 -0
  166. package/lib/assets/docs/article/functional-desgin-ppp/clojure/10-strategy-pattern.md +9 -0
  167. package/lib/assets/docs/article/functional-desgin-ppp/clojure/11-command-pattern.md +9 -0
  168. package/lib/assets/docs/article/functional-desgin-ppp/clojure/12-visitor-pattern.md +9 -0
  169. package/lib/assets/docs/article/functional-desgin-ppp/clojure/13-abstract-factory-pattern.md +9 -0
  170. package/lib/assets/docs/article/functional-desgin-ppp/clojure/14-abstract-server-pattern.md +9 -0
  171. package/lib/assets/docs/article/functional-desgin-ppp/clojure/15-gossiping-bus-drivers.md +9 -0
  172. package/lib/assets/docs/article/functional-desgin-ppp/clojure/16-payroll-system.md +9 -0
  173. package/lib/assets/docs/article/functional-desgin-ppp/clojure/17-video-rental-system.md +9 -0
  174. package/lib/assets/docs/article/functional-desgin-ppp/clojure/18-concurrency-system.md +9 -0
  175. package/lib/assets/docs/article/functional-desgin-ppp/clojure/19-wator-simulation.md +9 -0
  176. package/lib/assets/docs/article/functional-desgin-ppp/clojure/20-pattern-interactions.md +9 -0
  177. package/lib/assets/docs/article/functional-desgin-ppp/clojure/21-best-practices.md +9 -0
  178. package/lib/assets/docs/article/functional-desgin-ppp/clojure/22-oo-to-fp-migration.md +9 -0
  179. package/lib/assets/docs/article/functional-desgin-ppp/clojure/index.md +3 -3
  180. package/lib/assets/docs/article/functional-desgin-ppp/elixir/01-immutability-and-data-transformation.md +9 -0
  181. package/lib/assets/docs/article/functional-desgin-ppp/elixir/02-function-composition.md +9 -0
  182. package/lib/assets/docs/article/functional-desgin-ppp/elixir/03-polymorphism.md +9 -0
  183. package/lib/assets/docs/article/functional-desgin-ppp/elixir/04-data-validation.md +9 -0
  184. package/lib/assets/docs/article/functional-desgin-ppp/elixir/05-property-based-testing.md +9 -0
  185. package/lib/assets/docs/article/functional-desgin-ppp/elixir/06-tdd-and-fp.md +9 -0
  186. package/lib/assets/docs/article/functional-desgin-ppp/elixir/07-effects-and-pure-functions.md +9 -0
  187. package/lib/assets/docs/article/functional-desgin-ppp/elixir/08-error-handling-strategies.md +9 -0
  188. package/lib/assets/docs/article/functional-desgin-ppp/elixir/09-io-and-external-systems.md +9 -0
  189. package/lib/assets/docs/article/functional-desgin-ppp/elixir/10-concurrency-patterns.md +9 -0
  190. package/lib/assets/docs/article/functional-desgin-ppp/elixir/11-command-pattern.md +9 -0
  191. package/lib/assets/docs/article/functional-desgin-ppp/elixir/12-visitor-pattern.md +9 -0
  192. package/lib/assets/docs/article/functional-desgin-ppp/elixir/13-abstract-factory-pattern.md +9 -0
  193. package/lib/assets/docs/article/functional-desgin-ppp/elixir/14-abstract-server-pattern.md +9 -0
  194. package/lib/assets/docs/article/functional-desgin-ppp/elixir/15-gossiping-bus-drivers.md +9 -0
  195. package/lib/assets/docs/article/functional-desgin-ppp/elixir/16-payroll-system.md +9 -0
  196. package/lib/assets/docs/article/functional-desgin-ppp/elixir/17-video-rental-system.md +9 -0
  197. package/lib/assets/docs/article/functional-desgin-ppp/elixir/18-concurrency-system.md +9 -0
  198. package/lib/assets/docs/article/functional-desgin-ppp/elixir/19-wator-simulation.md +9 -0
  199. package/lib/assets/docs/article/functional-desgin-ppp/elixir/20-pattern-interactions.md +9 -0
  200. package/lib/assets/docs/article/functional-desgin-ppp/elixir/21-best-practices.md +9 -0
  201. package/lib/assets/docs/article/functional-desgin-ppp/elixir/22-oo-to-fp-migration.md +9 -0
  202. package/lib/assets/docs/article/functional-desgin-ppp/elixir/index.md +22 -22
  203. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/01-immutability-and-data-transformation.md +9 -0
  204. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/02-function-composition.md +9 -0
  205. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/03-polymorphism.md +9 -0
  206. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/04-data-validation.md +9 -0
  207. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/05-property-based-testing.md +9 -0
  208. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/06-tdd-functional.md +9 -0
  209. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/07-composite-pattern.md +9 -0
  210. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/08-decorator-pattern.md +9 -0
  211. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/09-adapter-pattern.md +9 -0
  212. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/10-strategy-pattern.md +9 -0
  213. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/11-command-pattern.md +9 -0
  214. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/12-visitor-pattern.md +9 -0
  215. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/13-abstract-factory-pattern.md +9 -0
  216. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/14-abstract-server-pattern.md +9 -0
  217. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/15-gossiping-bus-drivers.md +9 -0
  218. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/16-payroll-system.md +9 -0
  219. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/17-video-rental-system.md +9 -0
  220. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/18-concurrency-system.md +9 -0
  221. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/19-wator-simulation.md +9 -0
  222. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/20-pattern-interactions.md +9 -0
  223. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/21-best-practices.md +9 -0
  224. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/22-oo-to-fp-migration.md +9 -0
  225. package/lib/assets/docs/article/functional-desgin-ppp/haskell/01-immutability-and-data-transformation.md +9 -0
  226. package/lib/assets/docs/article/functional-desgin-ppp/haskell/02-function-composition.md +9 -0
  227. package/lib/assets/docs/article/functional-desgin-ppp/haskell/03-polymorphism.md +9 -0
  228. package/lib/assets/docs/article/functional-desgin-ppp/haskell/04-data-validation.md +9 -0
  229. package/lib/assets/docs/article/functional-desgin-ppp/haskell/05-property-based-testing.md +9 -0
  230. package/lib/assets/docs/article/functional-desgin-ppp/haskell/06-tdd-functional.md +9 -0
  231. package/lib/assets/docs/article/functional-desgin-ppp/haskell/07-composite-pattern.md +9 -0
  232. package/lib/assets/docs/article/functional-desgin-ppp/haskell/08-decorator-pattern.md +9 -0
  233. package/lib/assets/docs/article/functional-desgin-ppp/haskell/09-adapter-pattern.md +9 -0
  234. package/lib/assets/docs/article/functional-desgin-ppp/haskell/10-strategy-pattern.md +9 -0
  235. package/lib/assets/docs/article/functional-desgin-ppp/haskell/11-command-pattern.md +9 -0
  236. package/lib/assets/docs/article/functional-desgin-ppp/haskell/12-visitor-pattern.md +9 -0
  237. package/lib/assets/docs/article/functional-desgin-ppp/haskell/13-abstract-factory-pattern.md +9 -0
  238. package/lib/assets/docs/article/functional-desgin-ppp/haskell/14-abstract-server-pattern.md +9 -0
  239. package/lib/assets/docs/article/functional-desgin-ppp/haskell/15-gossiping-bus-drivers.md +9 -0
  240. package/lib/assets/docs/article/functional-desgin-ppp/haskell/16-payroll-system.md +9 -0
  241. package/lib/assets/docs/article/functional-desgin-ppp/haskell/17-video-rental-system.md +9 -0
  242. package/lib/assets/docs/article/functional-desgin-ppp/haskell/18-concurrency-system.md +9 -0
  243. package/lib/assets/docs/article/functional-desgin-ppp/haskell/19-wator-simulation.md +9 -0
  244. package/lib/assets/docs/article/functional-desgin-ppp/haskell/20-pattern-interactions.md +9 -0
  245. package/lib/assets/docs/article/functional-desgin-ppp/haskell/21-best-practices.md +9 -0
  246. package/lib/assets/docs/article/functional-desgin-ppp/haskell/22-oo-to-fp-migration.md +9 -0
  247. package/lib/assets/docs/article/functional-desgin-ppp/rust/01-immutability-and-data-transformation.md +9 -0
  248. package/lib/assets/docs/article/functional-desgin-ppp/rust/02-function-composition.md +9 -0
  249. package/lib/assets/docs/article/functional-desgin-ppp/rust/03-polymorphism.md +9 -0
  250. package/lib/assets/docs/article/functional-desgin-ppp/rust/04-data-validation.md +9 -0
  251. package/lib/assets/docs/article/functional-desgin-ppp/rust/05-property-based-testing.md +9 -0
  252. package/lib/assets/docs/article/functional-desgin-ppp/rust/06-tdd-and-functional.md +9 -0
  253. package/lib/assets/docs/article/functional-desgin-ppp/rust/07-composite-pattern.md +9 -0
  254. package/lib/assets/docs/article/functional-desgin-ppp/rust/08-decorator-pattern.md +9 -0
  255. package/lib/assets/docs/article/functional-desgin-ppp/rust/09-adapter-pattern.md +9 -0
  256. package/lib/assets/docs/article/functional-desgin-ppp/rust/10-strategy-pattern.md +9 -0
  257. package/lib/assets/docs/article/functional-desgin-ppp/rust/11-command-pattern.md +9 -0
  258. package/lib/assets/docs/article/functional-desgin-ppp/rust/12-visitor-pattern.md +9 -0
  259. package/lib/assets/docs/article/functional-desgin-ppp/rust/13-abstract-factory-pattern.md +9 -0
  260. package/lib/assets/docs/article/functional-desgin-ppp/rust/14-abstract-server-pattern.md +9 -0
  261. package/lib/assets/docs/article/functional-desgin-ppp/rust/15-gossiping-bus-drivers.md +9 -0
  262. package/lib/assets/docs/article/functional-desgin-ppp/rust/16-payroll-system.md +9 -0
  263. package/lib/assets/docs/article/functional-desgin-ppp/rust/17-video-rental-system.md +9 -0
  264. package/lib/assets/docs/article/functional-desgin-ppp/rust/18-concurrency-system.md +9 -0
  265. package/lib/assets/docs/article/functional-desgin-ppp/rust/19-wator-simulation.md +9 -0
  266. package/lib/assets/docs/article/functional-desgin-ppp/rust/20-pattern-interactions.md +9 -0
  267. package/lib/assets/docs/article/functional-desgin-ppp/rust/21-best-practices.md +9 -0
  268. package/lib/assets/docs/article/functional-desgin-ppp/rust/22-oo-to-fp-migration.md +9 -0
  269. package/lib/assets/docs/article/functional-desgin-ppp/scala/01-immutability-and-data-transformation.md +9 -0
  270. package/lib/assets/docs/article/functional-desgin-ppp/scala/02-function-composition.md +9 -0
  271. package/lib/assets/docs/article/functional-desgin-ppp/scala/03-polymorphism.md +9 -0
  272. package/lib/assets/docs/article/functional-desgin-ppp/scala/04-data-validation.md +9 -0
  273. package/lib/assets/docs/article/functional-desgin-ppp/scala/05-property-based-testing.md +9 -0
  274. package/lib/assets/docs/article/functional-desgin-ppp/scala/06-tdd-functional.md +9 -0
  275. package/lib/assets/docs/article/functional-desgin-ppp/scala/07-composite-pattern.md +9 -0
  276. package/lib/assets/docs/article/functional-desgin-ppp/scala/08-decorator-pattern.md +9 -0
  277. package/lib/assets/docs/article/functional-desgin-ppp/scala/09-adapter-pattern.md +9 -0
  278. package/lib/assets/docs/article/functional-desgin-ppp/scala/10-strategy-pattern.md +9 -0
  279. package/lib/assets/docs/article/functional-desgin-ppp/scala/11-command-pattern.md +9 -0
  280. package/lib/assets/docs/article/functional-desgin-ppp/scala/12-visitor-pattern.md +9 -0
  281. package/lib/assets/docs/article/functional-desgin-ppp/scala/13-abstract-factory-pattern.md +9 -0
  282. package/lib/assets/docs/article/functional-desgin-ppp/scala/14-abstract-server-pattern.md +9 -0
  283. package/lib/assets/docs/article/functional-desgin-ppp/scala/15-gossiping-bus-drivers.md +9 -0
  284. package/lib/assets/docs/article/functional-desgin-ppp/scala/16-payroll-system.md +9 -0
  285. package/lib/assets/docs/article/functional-desgin-ppp/scala/17-video-rental-system.md +9 -0
  286. package/lib/assets/docs/article/functional-desgin-ppp/scala/18-concurrency-system.md +9 -0
  287. package/lib/assets/docs/article/functional-desgin-ppp/scala/19-wator-simulation.md +9 -0
  288. package/lib/assets/docs/article/functional-desgin-ppp/scala/20-pattern-interactions.md +9 -0
  289. package/lib/assets/docs/article/functional-desgin-ppp/scala/21-best-practices.md +9 -0
  290. package/lib/assets/docs/article/functional-desgin-ppp/scala/22-oo-to-fp-migration.md +9 -0
  291. package/lib/assets/docs/article/getting-start-docker-kubernetes/01-container-and-docker-basics.md +341 -332
  292. package/lib/assets/docs/article/getting-start-docker-kubernetes/02-container-deployment.md +785 -776
  293. package/lib/assets/docs/article/getting-start-docker-kubernetes/03-practical-container-build-deploy.md +466 -457
  294. package/lib/assets/docs/article/getting-start-docker-kubernetes/04-multi-container-application.md +878 -869
  295. package/lib/assets/docs/article/getting-start-docker-kubernetes/05-kubernetes-introduction.md +585 -576
  296. package/lib/assets/docs/article/getting-start-docker-kubernetes/06-kubernetes-deploy-cluster.md +620 -611
  297. package/lib/assets/docs/article/getting-start-docker-kubernetes/07-kubernetes-advanced.md +621 -612
  298. package/lib/assets/docs/article/getting-start-docker-kubernetes/08-kubernetes-packaging.md +518 -509
  299. package/lib/assets/docs/article/getting-start-docker-kubernetes/09-container-operations.md +546 -537
  300. package/lib/assets/docs/article/getting-start-docker-kubernetes/10-optimal-container-image.md +640 -631
  301. package/lib/assets/docs/article/getting-start-docker-kubernetes/11-continuous-delivery.md +607 -598
  302. package/lib/assets/docs/article/getting-start-docker-kubernetes/12-container-use-cases.md +463 -454
  303. package/lib/assets/docs/article/getting-start-docker-kubernetes/13-case-monolith-compose-vs-kustomize.md +346 -337
  304. package/lib/assets/docs/article/getting-start-docker-kubernetes/14-case-event-driven-kustomize-vs-helm.md +324 -315
  305. package/lib/assets/docs/article/getting-start-docker-kubernetes/15-case-escqrs-axon-kustomize-vs-helm.md +297 -288
  306. package/lib/assets/docs/article/getting-start-docker-kubernetes/16-case-escqrs-kafka-kustomize-vs-helm.md +256 -247
  307. package/lib/assets/docs/article/getting-start-docker-kubernetes/17-case-comparison-summary.md +141 -132
  308. package/lib/assets/docs/article/getting-start-docker-kubernetes/18-case-load-testing.md +303 -294
  309. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-a-dev-tools-setup.md +274 -265
  310. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-b-orchestration-environments.md +530 -521
  311. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-c-tips.md +519 -510
  312. package/lib/assets/docs/article/getting-start-docker-kubernetes/outline.md +220 -211
  313. package/lib/assets/docs/article/getting-start-tdd/clojure/01-todo-list-and-first-test.md +9 -0
  314. package/lib/assets/docs/article/getting-start-tdd/clojure/02-fake-it-and-triangulation.md +9 -0
  315. package/lib/assets/docs/article/getting-start-tdd/clojure/03-obvious-implementation-and-refactoring.md +9 -0
  316. package/lib/assets/docs/article/getting-start-tdd/clojure/04-version-control-and-conventional-commits.md +9 -0
  317. package/lib/assets/docs/article/getting-start-tdd/clojure/05-package-management-and-static-analysis.md +9 -0
  318. package/lib/assets/docs/article/getting-start-tdd/clojure/06-task-runner-and-ci-cd.md +9 -0
  319. package/lib/assets/docs/article/getting-start-tdd/clojure/07-protocols-and-records.md +9 -0
  320. package/lib/assets/docs/article/getting-start-tdd/clojure/08-multimethods-and-design-patterns.md +9 -0
  321. package/lib/assets/docs/article/getting-start-tdd/clojure/09-namespaces-and-module-design.md +9 -0
  322. package/lib/assets/docs/article/getting-start-tdd/clojure/10-higher-order-functions-and-composition.md +9 -0
  323. package/lib/assets/docs/article/getting-start-tdd/clojure/11-persistent-data-and-pipeline.md +9 -0
  324. package/lib/assets/docs/article/getting-start-tdd/clojure/12-error-handling-and-spec.md +9 -0
  325. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter01.md +9 -0
  326. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter02.md +9 -0
  327. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter03.md +9 -0
  328. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter04.md +9 -0
  329. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter05.md +9 -0
  330. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter06.md +9 -0
  331. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter07.md +9 -0
  332. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter08.md +9 -0
  333. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter09.md +9 -0
  334. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter10.md +9 -0
  335. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter11.md +9 -0
  336. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter12.md +9 -0
  337. package/lib/assets/docs/article/getting-start-tdd/elixir/01-todo-list-and-first-test.md +9 -0
  338. package/lib/assets/docs/article/getting-start-tdd/elixir/02-fake-it-and-triangulation.md +9 -0
  339. package/lib/assets/docs/article/getting-start-tdd/elixir/03-obvious-implementation-and-refactoring.md +9 -0
  340. package/lib/assets/docs/article/getting-start-tdd/elixir/04-version-control-and-conventional-commits.md +9 -0
  341. package/lib/assets/docs/article/getting-start-tdd/elixir/05-package-management-and-static-analysis.md +9 -0
  342. package/lib/assets/docs/article/getting-start-tdd/elixir/06-task-runner-and-ci-cd.md +9 -0
  343. package/lib/assets/docs/article/getting-start-tdd/elixir/07-structs-and-protocols.md +9 -0
  344. package/lib/assets/docs/article/getting-start-tdd/elixir/08-pattern-matching-and-guards.md +9 -0
  345. package/lib/assets/docs/article/getting-start-tdd/elixir/09-module-design-and-behaviours.md +9 -0
  346. package/lib/assets/docs/article/getting-start-tdd/elixir/10-higher-order-functions-and-pipeline.md +9 -0
  347. package/lib/assets/docs/article/getting-start-tdd/elixir/11-stream-and-lazy-evaluation.md +9 -0
  348. package/lib/assets/docs/article/getting-start-tdd/elixir/12-error-handling-and-with.md +9 -0
  349. package/lib/assets/docs/article/getting-start-tdd/elixir/index.md +2 -2
  350. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter01.md +9 -0
  351. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter02.md +9 -0
  352. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter03.md +9 -0
  353. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter04.md +9 -0
  354. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter05.md +9 -0
  355. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter06.md +9 -0
  356. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter07.md +9 -0
  357. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter08.md +9 -0
  358. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter09.md +9 -0
  359. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter10.md +9 -0
  360. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter11.md +9 -0
  361. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter12.md +9 -0
  362. package/lib/assets/docs/article/getting-start-tdd/go/01-todo-list-and-first-test.md +9 -0
  363. package/lib/assets/docs/article/getting-start-tdd/go/02-fake-it-and-triangulation.md +9 -0
  364. package/lib/assets/docs/article/getting-start-tdd/go/03-obvious-implementation-and-refactoring.md +9 -0
  365. package/lib/assets/docs/article/getting-start-tdd/go/04-version-control-and-conventional-commits.md +9 -0
  366. package/lib/assets/docs/article/getting-start-tdd/go/05-package-management-and-static-analysis.md +9 -0
  367. package/lib/assets/docs/article/getting-start-tdd/go/06-task-runner-and-ci-cd.md +9 -0
  368. package/lib/assets/docs/article/getting-start-tdd/go/07-encapsulation-and-polymorphism.md +8 -0
  369. package/lib/assets/docs/article/getting-start-tdd/go/08-design-patterns.md +8 -0
  370. package/lib/assets/docs/article/getting-start-tdd/go/09-solid-principles-and-module-design.md +8 -0
  371. package/lib/assets/docs/article/getting-start-tdd/go/10-higher-order-functions-and-composition.md +8 -0
  372. package/lib/assets/docs/article/getting-start-tdd/go/11-immutable-data-and-pipeline.md +8 -0
  373. package/lib/assets/docs/article/getting-start-tdd/go/12-error-handling-and-type-safety.md +8 -0
  374. package/lib/assets/docs/article/getting-start-tdd/haskell/01-todo-list-and-first-test.md +9 -0
  375. package/lib/assets/docs/article/getting-start-tdd/haskell/02-fake-it-and-triangulation.md +9 -0
  376. package/lib/assets/docs/article/getting-start-tdd/haskell/03-obvious-implementation-and-refactoring.md +9 -0
  377. package/lib/assets/docs/article/getting-start-tdd/haskell/04-version-control-and-conventional-commits.md +9 -0
  378. package/lib/assets/docs/article/getting-start-tdd/haskell/05-package-management-and-static-analysis.md +9 -0
  379. package/lib/assets/docs/article/getting-start-tdd/haskell/06-task-runner-and-ci-cd.md +9 -0
  380. package/lib/assets/docs/article/getting-start-tdd/haskell/07-algebraic-data-types-and-type-classes.md +9 -0
  381. package/lib/assets/docs/article/getting-start-tdd/haskell/08-pattern-matching-and-guards.md +9 -0
  382. package/lib/assets/docs/article/getting-start-tdd/haskell/09-module-design-and-smart-constructors.md +9 -0
  383. package/lib/assets/docs/article/getting-start-tdd/haskell/10-higher-order-functions-and-currying.md +9 -0
  384. package/lib/assets/docs/article/getting-start-tdd/haskell/11-function-composition-and-point-free.md +9 -0
  385. package/lib/assets/docs/article/getting-start-tdd/haskell/12-monad-and-error-handling.md +9 -0
  386. package/lib/assets/docs/article/getting-start-tdd/integration/01-language-overview.md +9 -0
  387. package/lib/assets/docs/article/getting-start-tdd/integration/02-test-framework-comparison.md +9 -0
  388. package/lib/assets/docs/article/getting-start-tdd/integration/03-tdd-pattern-comparison.md +9 -0
  389. package/lib/assets/docs/article/getting-start-tdd/integration/04-type-system-comparison.md +9 -0
  390. package/lib/assets/docs/article/getting-start-tdd/integration/05-dev-environment-comparison.md +9 -0
  391. package/lib/assets/docs/article/getting-start-tdd/integration/06-learning-roadmap.md +9 -0
  392. package/lib/assets/docs/article/getting-start-tdd/java/01-todo-list-and-first-test.md +9 -0
  393. package/lib/assets/docs/article/getting-start-tdd/java/02-fake-it-and-triangulation.md +9 -0
  394. package/lib/assets/docs/article/getting-start-tdd/java/03-obvious-implementation-and-refactoring.md +9 -0
  395. package/lib/assets/docs/article/getting-start-tdd/java/04-version-control-and-conventional-commits.md +9 -0
  396. package/lib/assets/docs/article/getting-start-tdd/java/05-package-management-and-static-analysis.md +9 -0
  397. package/lib/assets/docs/article/getting-start-tdd/java/06-task-runner-and-ci-cd.md +9 -0
  398. package/lib/assets/docs/article/getting-start-tdd/java/07-encapsulation-and-polymorphism.md +9 -0
  399. package/lib/assets/docs/article/getting-start-tdd/java/08-design-patterns.md +9 -0
  400. package/lib/assets/docs/article/getting-start-tdd/java/09-solid-principles-and-module-design.md +9 -0
  401. package/lib/assets/docs/article/getting-start-tdd/java/10-higher-order-functions-and-composition.md +9 -0
  402. package/lib/assets/docs/article/getting-start-tdd/java/11-immutable-data-and-pipeline.md +9 -0
  403. package/lib/assets/docs/article/getting-start-tdd/java/12-error-handling-and-type-safety.md +9 -0
  404. package/lib/assets/docs/article/getting-start-tdd/node/01-todo-list-and-first-test.md +9 -0
  405. package/lib/assets/docs/article/getting-start-tdd/node/02-fake-it-and-triangulation.md +9 -0
  406. package/lib/assets/docs/article/getting-start-tdd/node/03-obvious-implementation-and-refactoring.md +9 -0
  407. package/lib/assets/docs/article/getting-start-tdd/node/04-version-control-and-conventional-commits.md +9 -0
  408. package/lib/assets/docs/article/getting-start-tdd/node/05-package-management-and-static-analysis.md +9 -0
  409. package/lib/assets/docs/article/getting-start-tdd/node/06-task-runner-and-ci-cd.md +9 -0
  410. package/lib/assets/docs/article/getting-start-tdd/node/07-encapsulation-and-polymorphism.md +9 -0
  411. package/lib/assets/docs/article/getting-start-tdd/node/08-design-patterns.md +9 -0
  412. package/lib/assets/docs/article/getting-start-tdd/node/09-solid-principles-and-module-design.md +9 -0
  413. package/lib/assets/docs/article/getting-start-tdd/node/10-higher-order-functions-and-composition.md +9 -0
  414. package/lib/assets/docs/article/getting-start-tdd/node/11-immutable-data-and-pipeline.md +9 -0
  415. package/lib/assets/docs/article/getting-start-tdd/node/12-error-handling-and-type-safety.md +9 -0
  416. package/lib/assets/docs/article/getting-start-tdd/php/01-todo-list-and-first-test.md +9 -0
  417. package/lib/assets/docs/article/getting-start-tdd/php/02-fake-it-and-triangulation.md +9 -0
  418. package/lib/assets/docs/article/getting-start-tdd/php/03-obvious-implementation-and-refactoring.md +9 -0
  419. package/lib/assets/docs/article/getting-start-tdd/php/04-version-control-and-conventional-commits.md +9 -0
  420. package/lib/assets/docs/article/getting-start-tdd/php/05-package-management-and-static-analysis.md +9 -0
  421. package/lib/assets/docs/article/getting-start-tdd/php/06-task-runner-and-ci-cd.md +9 -0
  422. package/lib/assets/docs/article/getting-start-tdd/php/07-encapsulation-and-polymorphism.md +8 -0
  423. package/lib/assets/docs/article/getting-start-tdd/php/08-design-patterns.md +8 -0
  424. package/lib/assets/docs/article/getting-start-tdd/php/09-solid-principles-and-module-design.md +8 -0
  425. package/lib/assets/docs/article/getting-start-tdd/php/10-higher-order-functions-and-composition.md +8 -0
  426. package/lib/assets/docs/article/getting-start-tdd/php/11-immutable-data-and-pipeline.md +8 -0
  427. package/lib/assets/docs/article/getting-start-tdd/php/12-error-handling-and-type-safety.md +8 -0
  428. package/lib/assets/docs/article/getting-start-tdd/python/01-todo-list-and-first-test.md +9 -0
  429. package/lib/assets/docs/article/getting-start-tdd/python/02-fake-it-and-triangulation.md +9 -0
  430. package/lib/assets/docs/article/getting-start-tdd/python/03-obvious-implementation-and-refactoring.md +9 -0
  431. package/lib/assets/docs/article/getting-start-tdd/python/04-version-control-and-conventional-commits.md +9 -0
  432. package/lib/assets/docs/article/getting-start-tdd/python/05-package-management-and-static-analysis.md +9 -0
  433. package/lib/assets/docs/article/getting-start-tdd/python/06-task-runner-and-ci-cd.md +9 -0
  434. package/lib/assets/docs/article/getting-start-tdd/python/07-encapsulation-and-polymorphism.md +9 -0
  435. package/lib/assets/docs/article/getting-start-tdd/python/08-design-patterns.md +9 -0
  436. package/lib/assets/docs/article/getting-start-tdd/python/09-solid-principles-and-module-design.md +9 -0
  437. package/lib/assets/docs/article/getting-start-tdd/python/10-higher-order-functions-and-composition.md +9 -0
  438. package/lib/assets/docs/article/getting-start-tdd/python/11-immutable-data-and-pipeline.md +9 -0
  439. package/lib/assets/docs/article/getting-start-tdd/python/12-error-handling-and-type-safety.md +9 -0
  440. package/lib/assets/docs/article/getting-start-tdd/ruby/01-todo-list-and-first-test.md +9 -0
  441. package/lib/assets/docs/article/getting-start-tdd/ruby/02-fake-it-and-triangulation.md +9 -0
  442. package/lib/assets/docs/article/getting-start-tdd/ruby/03-obvious-implementation-and-refactoring.md +9 -0
  443. package/lib/assets/docs/article/getting-start-tdd/ruby/04-version-control-and-conventional-commits.md +9 -0
  444. package/lib/assets/docs/article/getting-start-tdd/ruby/05-package-management-and-static-analysis.md +9 -0
  445. package/lib/assets/docs/article/getting-start-tdd/ruby/06-task-runner-and-ci-cd.md +9 -0
  446. package/lib/assets/docs/article/getting-start-tdd/ruby/07-encapsulation-and-polymorphism.md +9 -0
  447. package/lib/assets/docs/article/getting-start-tdd/ruby/08-design-patterns.md +9 -0
  448. package/lib/assets/docs/article/getting-start-tdd/ruby/09-solid-principles-and-module-design.md +9 -0
  449. package/lib/assets/docs/article/getting-start-tdd/ruby/10-higher-order-functions-and-composition.md +9 -0
  450. package/lib/assets/docs/article/getting-start-tdd/ruby/11-immutable-data-and-pipeline.md +9 -0
  451. package/lib/assets/docs/article/getting-start-tdd/ruby/12-error-handling-and-type-safety.md +9 -0
  452. package/lib/assets/docs/article/getting-start-tdd/rust/01-todo-list-and-first-test.md +9 -0
  453. package/lib/assets/docs/article/getting-start-tdd/rust/02-fake-it-and-triangulation.md +9 -0
  454. package/lib/assets/docs/article/getting-start-tdd/rust/03-obvious-implementation-and-refactoring.md +9 -0
  455. package/lib/assets/docs/article/getting-start-tdd/rust/04-version-control-and-conventional-commits.md +9 -0
  456. package/lib/assets/docs/article/getting-start-tdd/rust/05-package-management-and-static-analysis.md +9 -0
  457. package/lib/assets/docs/article/getting-start-tdd/rust/06-task-runner-and-ci-cd.md +9 -0
  458. package/lib/assets/docs/article/getting-start-tdd/rust/07-encapsulation-and-polymorphism.md +9 -0
  459. package/lib/assets/docs/article/getting-start-tdd/rust/08-design-patterns.md +9 -0
  460. package/lib/assets/docs/article/getting-start-tdd/rust/09-solid-principles-and-module-design.md +9 -0
  461. package/lib/assets/docs/article/getting-start-tdd/rust/10-higher-order-functions-and-composition.md +9 -0
  462. package/lib/assets/docs/article/getting-start-tdd/rust/11-immutable-data-and-pipeline.md +9 -0
  463. package/lib/assets/docs/article/getting-start-tdd/rust/12-error-handling-and-type-safety.md +9 -0
  464. package/lib/assets/docs/article/getting-start-tdd/scala/01-todo-list-and-first-test.md +9 -0
  465. package/lib/assets/docs/article/getting-start-tdd/scala/02-fake-it-and-triangulation.md +9 -0
  466. package/lib/assets/docs/article/getting-start-tdd/scala/03-obvious-implementation-and-refactoring.md +9 -0
  467. package/lib/assets/docs/article/getting-start-tdd/scala/04-version-control-and-conventional-commits.md +9 -0
  468. package/lib/assets/docs/article/getting-start-tdd/scala/05-package-management-and-static-analysis.md +9 -0
  469. package/lib/assets/docs/article/getting-start-tdd/scala/06-task-runner-and-ci-cd.md +9 -0
  470. package/lib/assets/docs/article/getting-start-tdd/scala/07-case-classes-and-traits.md +9 -0
  471. package/lib/assets/docs/article/getting-start-tdd/scala/08-pattern-matching-and-sealed-traits.md +9 -0
  472. package/lib/assets/docs/article/getting-start-tdd/scala/09-packages-and-module-design.md +9 -0
  473. package/lib/assets/docs/article/getting-start-tdd/scala/10-higher-order-functions-and-composition.md +9 -0
  474. package/lib/assets/docs/article/getting-start-tdd/scala/11-collections-and-lazy-evaluation.md +9 -0
  475. package/lib/assets/docs/article/getting-start-tdd/scala/12-error-handling-and-type-safety.md +9 -0
  476. package/lib/assets/docs/article/grokking-concurrency/all/index.md +0 -1
  477. package/lib/assets/docs/article/grokking-concurrency/all/part-1-ch02-sequential.md +9 -0
  478. package/lib/assets/docs/article/grokking-concurrency/all/part-2-ch04-05-threads.md +9 -0
  479. package/lib/assets/docs/article/grokking-concurrency/all/part-3-ch06-multitasking.md +9 -0
  480. package/lib/assets/docs/article/grokking-concurrency/all/part-4-ch07-parallel-patterns.md +9 -0
  481. package/lib/assets/docs/article/grokking-concurrency/all/part-5-ch08-09-synchronization.md +9 -0
  482. package/lib/assets/docs/article/grokking-concurrency/all/part-6-ch10-11-nonblocking-io.md +9 -0
  483. package/lib/assets/docs/article/grokking-concurrency/all/part-7-ch12-async.md +9 -0
  484. package/lib/assets/docs/article/grokking-concurrency/all/part-8-ch13-mapreduce.md +9 -0
  485. package/lib/assets/docs/article/grokking-concurrency/clojure/index.md +0 -10
  486. package/lib/assets/docs/article/grokking-concurrency/clojure/part-1.md +6 -7
  487. package/lib/assets/docs/article/grokking-concurrency/clojure/part-2.md +6 -7
  488. package/lib/assets/docs/article/grokking-concurrency/clojure/part-3.md +6 -7
  489. package/lib/assets/docs/article/grokking-concurrency/clojure/part-4.md +6 -7
  490. package/lib/assets/docs/article/grokking-concurrency/clojure/part-5.md +6 -7
  491. package/lib/assets/docs/article/grokking-concurrency/clojure/part-6.md +6 -7
  492. package/lib/assets/docs/article/grokking-concurrency/clojure/part-7.md +6 -7
  493. package/lib/assets/docs/article/grokking-concurrency/clojure/part-8.md +6 -7
  494. package/lib/assets/docs/article/grokking-concurrency/csharp/index.md +0 -10
  495. package/lib/assets/docs/article/grokking-concurrency/csharp/part-1.md +6 -7
  496. package/lib/assets/docs/article/grokking-concurrency/csharp/part-2.md +6 -7
  497. package/lib/assets/docs/article/grokking-concurrency/csharp/part-3.md +6 -7
  498. package/lib/assets/docs/article/grokking-concurrency/csharp/part-4.md +6 -7
  499. package/lib/assets/docs/article/grokking-concurrency/csharp/part-5.md +6 -7
  500. package/lib/assets/docs/article/grokking-concurrency/csharp/part-6.md +6 -7
  501. package/lib/assets/docs/article/grokking-concurrency/csharp/part-7.md +6 -7
  502. package/lib/assets/docs/article/grokking-concurrency/csharp/part-8.md +6 -7
  503. package/lib/assets/docs/article/grokking-concurrency/fsharp/index.md +0 -10
  504. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-1.md +6 -7
  505. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-2.md +6 -7
  506. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-3.md +6 -7
  507. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-4.md +6 -7
  508. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-5.md +6 -7
  509. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-6.md +6 -7
  510. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-7.md +6 -7
  511. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-8.md +6 -7
  512. package/lib/assets/docs/article/grokking-concurrency/haskell/index.md +0 -10
  513. package/lib/assets/docs/article/grokking-concurrency/haskell/part-1.md +6 -7
  514. package/lib/assets/docs/article/grokking-concurrency/haskell/part-2.md +6 -7
  515. package/lib/assets/docs/article/grokking-concurrency/haskell/part-3.md +6 -7
  516. package/lib/assets/docs/article/grokking-concurrency/haskell/part-4.md +6 -7
  517. package/lib/assets/docs/article/grokking-concurrency/haskell/part-5.md +6 -7
  518. package/lib/assets/docs/article/grokking-concurrency/haskell/part-6.md +6 -7
  519. package/lib/assets/docs/article/grokking-concurrency/haskell/part-7.md +6 -7
  520. package/lib/assets/docs/article/grokking-concurrency/haskell/part-8.md +6 -7
  521. package/lib/assets/docs/article/grokking-concurrency/java/index.md +0 -10
  522. package/lib/assets/docs/article/grokking-concurrency/java/part-1.md +8 -9
  523. package/lib/assets/docs/article/grokking-concurrency/java/part-2.md +8 -9
  524. package/lib/assets/docs/article/grokking-concurrency/java/part-3.md +7 -8
  525. package/lib/assets/docs/article/grokking-concurrency/java/part-4.md +8 -9
  526. package/lib/assets/docs/article/grokking-concurrency/java/part-5.md +7 -8
  527. package/lib/assets/docs/article/grokking-concurrency/java/part-6.md +6 -7
  528. package/lib/assets/docs/article/grokking-concurrency/java/part-7.md +6 -7
  529. package/lib/assets/docs/article/grokking-concurrency/java/part-8.md +6 -7
  530. package/lib/assets/docs/article/grokking-concurrency/python/index.md +0 -10
  531. package/lib/assets/docs/article/grokking-concurrency/python/part-1.md +7 -8
  532. package/lib/assets/docs/article/grokking-concurrency/python/part-2.md +10 -11
  533. package/lib/assets/docs/article/grokking-concurrency/python/part-3.md +8 -9
  534. package/lib/assets/docs/article/grokking-concurrency/python/part-4.md +8 -9
  535. package/lib/assets/docs/article/grokking-concurrency/python/part-5.md +9 -10
  536. package/lib/assets/docs/article/grokking-concurrency/python/part-6.md +9 -10
  537. package/lib/assets/docs/article/grokking-concurrency/python/part-7.md +9 -10
  538. package/lib/assets/docs/article/grokking-concurrency/python/part-8.md +8 -9
  539. package/lib/assets/docs/article/grokking-concurrency/rust/index.md +0 -10
  540. package/lib/assets/docs/article/grokking-concurrency/rust/part-1.md +6 -7
  541. package/lib/assets/docs/article/grokking-concurrency/rust/part-2.md +6 -7
  542. package/lib/assets/docs/article/grokking-concurrency/rust/part-3.md +6 -7
  543. package/lib/assets/docs/article/grokking-concurrency/rust/part-4.md +6 -7
  544. package/lib/assets/docs/article/grokking-concurrency/rust/part-5.md +6 -7
  545. package/lib/assets/docs/article/grokking-concurrency/rust/part-6.md +6 -7
  546. package/lib/assets/docs/article/grokking-concurrency/rust/part-7.md +6 -7
  547. package/lib/assets/docs/article/grokking-concurrency/rust/part-8.md +6 -7
  548. package/lib/assets/docs/article/grokking-concurrency/scala/index.md +0 -10
  549. package/lib/assets/docs/article/grokking-concurrency/scala/part-1.md +6 -7
  550. package/lib/assets/docs/article/grokking-concurrency/scala/part-2.md +6 -7
  551. package/lib/assets/docs/article/grokking-concurrency/scala/part-3.md +6 -7
  552. package/lib/assets/docs/article/grokking-concurrency/scala/part-4.md +6 -7
  553. package/lib/assets/docs/article/grokking-concurrency/scala/part-5.md +6 -7
  554. package/lib/assets/docs/article/grokking-concurrency/scala/part-6.md +6 -7
  555. package/lib/assets/docs/article/grokking-concurrency/scala/part-7.md +6 -7
  556. package/lib/assets/docs/article/grokking-concurrency/scala/part-8.md +6 -7
  557. package/lib/assets/docs/article/grokkingfp/all/part-1-ch01-fp-introduction.md +9 -0
  558. package/lib/assets/docs/article/grokkingfp/all/part-1-ch02-pure-functions.md +9 -0
  559. package/lib/assets/docs/article/grokkingfp/all/part-2-ch03-immutable-data.md +9 -0
  560. package/lib/assets/docs/article/grokkingfp/all/part-2-ch04-higher-order-functions.md +9 -0
  561. package/lib/assets/docs/article/grokkingfp/all/part-2-ch05-flatmap.md +9 -0
  562. package/lib/assets/docs/article/grokkingfp/all/part-3-ch06-option.md +9 -0
  563. package/lib/assets/docs/article/grokkingfp/all/part-3-ch07-either-adt.md +9 -0
  564. package/lib/assets/docs/article/grokkingfp/all/part-4-ch08-io-monad.md +9 -0
  565. package/lib/assets/docs/article/grokkingfp/all/part-4-ch09-streams.md +9 -0
  566. package/lib/assets/docs/article/grokkingfp/all/part-5-ch10-concurrency.md +9 -0
  567. package/lib/assets/docs/article/grokkingfp/all/part-6-ch11-application.md +9 -0
  568. package/lib/assets/docs/article/grokkingfp/all/part-6-ch12-testing.md +9 -0
  569. package/lib/assets/docs/article/grokkingfp/all/writing-plan.md +9 -0
  570. package/lib/assets/docs/article/grokkingfp/clojure/part-1.md +9 -0
  571. package/lib/assets/docs/article/grokkingfp/clojure/part-2.md +9 -0
  572. package/lib/assets/docs/article/grokkingfp/clojure/part-3.md +9 -0
  573. package/lib/assets/docs/article/grokkingfp/clojure/part-4.md +9 -0
  574. package/lib/assets/docs/article/grokkingfp/clojure/part-5.md +9 -0
  575. package/lib/assets/docs/article/grokkingfp/clojure/part-6.md +9 -0
  576. package/lib/assets/docs/article/grokkingfp/csharp/part-1.md +9 -0
  577. package/lib/assets/docs/article/grokkingfp/csharp/part-2.md +9 -0
  578. package/lib/assets/docs/article/grokkingfp/csharp/part-3.md +9 -0
  579. package/lib/assets/docs/article/grokkingfp/csharp/part-4.md +9 -0
  580. package/lib/assets/docs/article/grokkingfp/csharp/part-5.md +9 -0
  581. package/lib/assets/docs/article/grokkingfp/csharp/part-6.md +9 -0
  582. package/lib/assets/docs/article/grokkingfp/elixir/part-1.md +9 -0
  583. package/lib/assets/docs/article/grokkingfp/elixir/part-2.md +9 -0
  584. package/lib/assets/docs/article/grokkingfp/elixir/part-3.md +9 -0
  585. package/lib/assets/docs/article/grokkingfp/elixir/part-4.md +9 -0
  586. package/lib/assets/docs/article/grokkingfp/elixir/part-5.md +9 -0
  587. package/lib/assets/docs/article/grokkingfp/elixir/part-6.md +9 -0
  588. package/lib/assets/docs/article/grokkingfp/fsharp/part-1.md +9 -0
  589. package/lib/assets/docs/article/grokkingfp/fsharp/part-2.md +9 -0
  590. package/lib/assets/docs/article/grokkingfp/fsharp/part-3.md +9 -0
  591. package/lib/assets/docs/article/grokkingfp/fsharp/part-4.md +9 -0
  592. package/lib/assets/docs/article/grokkingfp/fsharp/part-5.md +9 -0
  593. package/lib/assets/docs/article/grokkingfp/fsharp/part-6.md +9 -0
  594. package/lib/assets/docs/article/grokkingfp/haskell/part-1.md +9 -0
  595. package/lib/assets/docs/article/grokkingfp/haskell/part-2.md +9 -0
  596. package/lib/assets/docs/article/grokkingfp/haskell/part-3.md +9 -0
  597. package/lib/assets/docs/article/grokkingfp/haskell/part-4.md +9 -0
  598. package/lib/assets/docs/article/grokkingfp/haskell/part-5.md +9 -0
  599. package/lib/assets/docs/article/grokkingfp/haskell/part-6.md +9 -0
  600. package/lib/assets/docs/article/grokkingfp/java/part-1.md +9 -0
  601. package/lib/assets/docs/article/grokkingfp/java/part-2.md +9 -0
  602. package/lib/assets/docs/article/grokkingfp/java/part-3.md +9 -0
  603. package/lib/assets/docs/article/grokkingfp/java/part-4.md +9 -0
  604. package/lib/assets/docs/article/grokkingfp/java/part-5.md +9 -0
  605. package/lib/assets/docs/article/grokkingfp/java/part-6.md +9 -0
  606. package/lib/assets/docs/article/grokkingfp/python/part-1.md +9 -0
  607. package/lib/assets/docs/article/grokkingfp/python/part-2.md +9 -0
  608. package/lib/assets/docs/article/grokkingfp/python/part-3.md +9 -0
  609. package/lib/assets/docs/article/grokkingfp/python/part-4.md +9 -0
  610. package/lib/assets/docs/article/grokkingfp/python/part-5.md +9 -0
  611. package/lib/assets/docs/article/grokkingfp/python/part-6.md +9 -0
  612. package/lib/assets/docs/article/grokkingfp/ruby/part-1.md +9 -0
  613. package/lib/assets/docs/article/grokkingfp/ruby/part-2.md +9 -0
  614. package/lib/assets/docs/article/grokkingfp/ruby/part-3.md +9 -0
  615. package/lib/assets/docs/article/grokkingfp/ruby/part-4.md +9 -0
  616. package/lib/assets/docs/article/grokkingfp/ruby/part-5.md +9 -0
  617. package/lib/assets/docs/article/grokkingfp/ruby/part-6.md +9 -0
  618. package/lib/assets/docs/article/grokkingfp/rust/part-1.md +9 -0
  619. package/lib/assets/docs/article/grokkingfp/rust/part-2.md +9 -0
  620. package/lib/assets/docs/article/grokkingfp/rust/part-3.md +9 -0
  621. package/lib/assets/docs/article/grokkingfp/rust/part-4.md +9 -0
  622. package/lib/assets/docs/article/grokkingfp/rust/part-5.md +9 -0
  623. package/lib/assets/docs/article/grokkingfp/rust/part-6.md +9 -0
  624. package/lib/assets/docs/article/grokkingfp/scala/part-1.md +9 -0
  625. package/lib/assets/docs/article/grokkingfp/scala/part-2.md +9 -0
  626. package/lib/assets/docs/article/grokkingfp/scala/part-3.md +9 -0
  627. package/lib/assets/docs/article/grokkingfp/scala/part-4.md +9 -0
  628. package/lib/assets/docs/article/grokkingfp/scala/part-5.md +9 -0
  629. package/lib/assets/docs/article/grokkingfp/scala/part-6.md +9 -0
  630. package/lib/assets/docs/article/grokkingfp/typescript/part-1.md +9 -0
  631. package/lib/assets/docs/article/grokkingfp/typescript/part-2.md +9 -0
  632. package/lib/assets/docs/article/grokkingfp/typescript/part-3.md +9 -0
  633. package/lib/assets/docs/article/grokkingfp/typescript/part-4.md +9 -0
  634. package/lib/assets/docs/article/grokkingfp/typescript/part-5.md +9 -0
  635. package/lib/assets/docs/article/grokkingfp/typescript/part-6.md +9 -0
  636. package/lib/assets/docs/article/practical-database-design/part1/chapter01.md +9 -0
  637. package/lib/assets/docs/article/practical-database-design/part1/chapter02.md +9 -0
  638. package/lib/assets/docs/article/practical-database-design/part1/chapter03.md +9 -0
  639. package/lib/assets/docs/article/practical-database-design/part2/chapter04.md +9 -0
  640. package/lib/assets/docs/article/practical-database-design/part2/chapter05.md +9 -0
  641. package/lib/assets/docs/article/practical-database-design/part2/chapter06.md +9 -0
  642. package/lib/assets/docs/article/practical-database-design/part2/chapter07.md +9 -0
  643. package/lib/assets/docs/article/practical-database-design/part2/chapter08.md +9 -0
  644. package/lib/assets/docs/article/practical-database-design/part2/chapter09.md +9 -0
  645. package/lib/assets/docs/article/practical-database-design/part2/chapter10.md +9 -0
  646. package/lib/assets/docs/article/practical-database-design/part2/chapter11.md +9 -0
  647. package/lib/assets/docs/article/practical-database-design/part2/chapter12.md +9 -0
  648. package/lib/assets/docs/article/practical-database-design/part2/chapter13.md +9 -0
  649. package/lib/assets/docs/article/practical-database-design/part3/chapter14.md +9 -0
  650. package/lib/assets/docs/article/practical-database-design/part3/chapter15.md +9 -0
  651. package/lib/assets/docs/article/practical-database-design/part3/chapter16.md +9 -0
  652. package/lib/assets/docs/article/practical-database-design/part3/chapter17.md +9 -0
  653. package/lib/assets/docs/article/practical-database-design/part3/chapter18.md +9 -0
  654. package/lib/assets/docs/article/practical-database-design/part3/chapter19.md +9 -0
  655. package/lib/assets/docs/article/practical-database-design/part3/chapter20.md +9 -0
  656. package/lib/assets/docs/article/practical-database-design/part3/chapter21.md +9 -0
  657. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter14-orm.md +9 -0
  658. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter15-orm.md +9 -0
  659. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter16-orm.md +9 -0
  660. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter17-orm.md +9 -0
  661. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter18-orm.md +9 -0
  662. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter19-orm.md +9 -0
  663. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter20-orm.md +9 -0
  664. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter21-orm.md +9 -0
  665. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter22-orm.md +9 -0
  666. package/lib/assets/docs/article/practical-database-design/part4/chapter22.md +9 -0
  667. package/lib/assets/docs/article/practical-database-design/part4/chapter23.md +9 -0
  668. package/lib/assets/docs/article/practical-database-design/part4/chapter24.md +9 -0
  669. package/lib/assets/docs/article/practical-database-design/part4/chapter25.md +9 -0
  670. package/lib/assets/docs/article/practical-database-design/part4/chapter26.md +9 -0
  671. package/lib/assets/docs/article/practical-database-design/part4/chapter27.md +9 -0
  672. package/lib/assets/docs/article/practical-database-design/part4/chapter28.md +9 -0
  673. package/lib/assets/docs/article/practical-database-design/part4/chapter29.md +8 -0
  674. package/lib/assets/docs/article/practical-database-design/part4/chapter30.md +8 -0
  675. package/lib/assets/docs/article/practical-database-design/part4/chapter31.md +8 -0
  676. package/lib/assets/docs/article/practical-database-design/part4/chapter32.md +8 -0
  677. package/lib/assets/docs/article/practical-database-design/part5/chapter33.md +9 -0
  678. package/lib/assets/docs/article/practical-database-design/part5/chapter34.md +9 -0
  679. package/lib/assets/docs/article/practical-database-design/part5/chapter35.md +9 -0
  680. package/lib/assets/docs/article/practical-database-design/part5/chapter36.md +9 -0
  681. package/lib/assets/docs/article/practical-database-design/part5/chapter37.md +9 -0
  682. package/lib/assets/docs/article/practical-database-design/part5/chapter38.md +9 -0
  683. package/lib/assets/docs/article/practical-database-design/part5/chapter39.md +9 -0
  684. package/lib/assets/docs/article/practical-database-design/study/study2-1.md +9 -0
  685. package/lib/assets/docs/article/practical-database-design/study/study2-2.md +9 -0
  686. package/lib/assets/docs/article/practical-database-design/study/study2-3.md +9 -0
  687. package/lib/assets/docs/article/practical-database-design/study/study2-4.md +9 -0
  688. package/lib/assets/docs/article/practical-database-design/study/study2-5.md +9 -0
  689. package/lib/assets/docs/article/practical-database-design/study/study3-1.md +9 -0
  690. package/lib/assets/docs/article/practical-database-design/study/study3-2.md +9 -0
  691. package/lib/assets/docs/article/practical-database-design/study/study3-3.md +9 -0
  692. package/lib/assets/docs/article/practical-database-design/study/study3-4.md +9 -0
  693. package/lib/assets/docs/article/practical-database-design/study/study3-5.md +9 -0
  694. package/lib/assets/docs/article/practical-database-design/study/study4-1.md +9 -0
  695. package/lib/assets/docs/article/practical-database-design/study/study4-2.md +9 -0
  696. package/lib/assets/docs/article/practical-database-design/study/study4-3.md +9 -0
  697. package/lib/assets/docs/article/practical-database-design/study/study4-4.md +9 -0
  698. package/lib/assets/docs/article/practical-database-design/study/study4-5.md +9 -0
  699. package/lib/assets/docs/index.md +4 -0
  700. package/lib/assets/docs/log.md +5 -0
  701. package/lib/assets/docs/operation/index.md +15 -1
  702. package/lib/assets/docs/reference/CodexCLIMCP/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/351/226/213/347/231/272/343/203/225/343/203/255/343/203/274.md +13 -4
  703. package/lib/assets/docs/reference/CodexCLIMCP/343/202/265/343/203/274/343/203/220/343/203/274/350/250/255/345/256/232/346/211/213/351/240/206.md +10 -0
  704. package/lib/assets/docs/reference/Java/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/346/247/213/347/257/211/343/202/254/343/202/244/343/203/211.md +11 -1
  705. package/lib/assets/docs/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
  706. package/lib/assets/docs/reference/SonarQube/343/203/255/343/203/274/343/202/253/343/203/253/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +10 -0
  707. package/lib/assets/docs/reference/TypeScript/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/346/247/213/347/257/211/343/202/254/343/202/244/343/203/211.md +11 -1
  708. package/lib/assets/docs/reference/UI/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +10 -1
  709. package/lib/assets/docs/reference/Vim/346/223/215/344/275/234/343/203/236/343/203/213/343/203/245/343/202/242/343/203/253.md +177 -168
  710. package/lib/assets/docs/reference/index.md +54 -53
  711. package/lib/assets/docs/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +7 -8
  712. package/lib/assets/docs/reference//343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +10 -1
  713. package/lib/assets/docs/reference//343/202/244/343/203/263/343/203/225/343/203/251/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +10 -1
  714. package/lib/assets/docs/reference//343/202/250/343/202/257/343/202/271/343/203/210/343/203/252/343/203/274/343/203/240/343/203/227/343/203/255/343/202/260/343/203/251/343/203/237/343/203/263/343/202/260.md +6 -7
  715. package/lib/assets/docs/reference//343/202/263/343/203/274/343/203/207/343/202/243/343/203/263/343/202/260/343/201/250/343/203/206/343/202/271/343/203/210/343/202/254/343/202/244/343/203/211.md +10 -1
  716. package/lib/assets/docs/reference//343/203/206/343/202/271/343/203/210/346/210/246/347/225/245/343/202/254/343/202/244/343/203/211.md +10 -1
  717. package/lib/assets/docs/reference//343/203/207/343/203/274/343/202/277/343/203/242/343/203/207/343/203/253/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +10 -1
  718. package/lib/assets/docs/reference//343/203/211/343/203/241/343/202/244/343/203/263/343/203/242/343/203/207/343/203/253/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +10 -1
  719. package/lib/assets/docs/reference//343/203/223/343/202/270/343/203/215/343/202/271/343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243/345/210/206/346/236/220/343/202/254/343/202/244/343/203/211.md +9 -0
  720. package/lib/assets/docs/reference//343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/344/275/234/346/210/220/343/202/254/343/202/244/343/203/211.md +10 -1
  721. package/lib/assets/docs/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +9 -0
  722. package/lib/assets/docs/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/203/273/343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/350/250/210/347/224/273/343/202/254/343/202/244/343/203/211.md +7 -8
  723. package/lib/assets/docs/reference//343/203/255/343/202/270/343/202/253/343/203/253/343/202/267/343/203/263/343/202/255/343/203/263/343/202/260.md +9 -0
  724. package/lib/assets/docs/reference//344/274/201/346/245/255/347/265/214/345/226/266/350/253/226.md +10 -1
  725. package/lib/assets/docs/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +10 -0
  726. package/lib/assets/docs/reference//347/265/214/345/226/266/346/210/246/347/225/245/345/210/206/346/236/220/343/202/254/343/202/244/343/203/211.md +9 -0
  727. package/lib/assets/docs/reference//350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +10 -1
  728. package/lib/assets/docs/reference//350/250/200/350/252/236/345/210/245/351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +9 -0
  729. package/lib/assets/docs/reference//351/201/213/345/226/266/347/256/241/347/220/206.md +10 -1
  730. package/lib/assets/docs/reference//351/201/213/347/224/250/343/202/271/343/202/257/343/203/252/343/203/227/343/203/210/344/275/234/346/210/220/343/202/254/343/202/244/343/203/211.md +9 -0
  731. package/lib/assets/docs/reference//351/201/213/347/224/250/350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +10 -1
  732. package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +9 -0
  733. package/lib/assets/docs/reference//351/235/236/346/251/237/350/203/275/350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +10 -1
  734. package/lib/assets/docs/template/ADR.md +9 -0
  735. package/lib/assets/docs/template/AWS/343/202/271/343/203/206/343/203/274/343/202/270/343/203/263/343/202/260/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +9 -0
  736. package/lib/assets/docs/template/AWS/343/203/227/343/203/255/343/203/200/343/202/257/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +9 -0
  737. package/lib/assets/docs/template/README.md +9 -0
  738. package/lib/assets/docs/template//343/201/276/343/201/232/343/201/223/343/202/214/343/202/222/350/252/255/343/202/202/343/201/206/343/203/252/343/202/271/343/203/210.md +9 -0
  739. package/lib/assets/docs/template//343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/351/226/213/347/231/272/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +9 -0
  740. package/lib/assets/docs/template//343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/345/256/214/344/272/206/345/240/261/345/221/212/346/233/270.md +10 -1
  741. package/lib/assets/docs/template//343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/350/250/210/347/224/273.md +11 -2
  742. package/lib/assets/docs/template//343/202/244/343/203/263/343/202/273/343/203/227/343/202/267/343/203/247/343/203/263/343/203/207/343/203/203/343/202/255.md +9 -0
  743. package/lib/assets/docs/template//343/203/223/343/202/270/343/203/215/343/202/271/343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243.md +9 -0
  744. package/lib/assets/docs/template//343/203/252/343/203/252/343/203/274/343/202/271/345/256/214/344/272/206/345/240/261/345/221/212/346/233/270.md +9 -0
  745. package/lib/assets/docs/template//343/203/252/343/203/252/343/203/274/343/202/271/350/250/210/347/224/273.md +289 -280
  746. package/lib/assets/docs/template//344/272/213/344/276/213/345/210/206/346/236/220.md +9 -0
  747. package/lib/assets/docs/template//344/274/201/346/245/255/345/210/206/346/236/220.md +9 -0
  748. package/lib/assets/docs/template//345/256/214/345/205/250/345/275/242/345/274/217/343/201/256/343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271.md +7 -8
  749. package/lib/assets/docs/template//350/246/201/344/273/266/345/256/232/347/276/251.md +7 -8
  750. package/lib/assets/docs/template//350/250/255/350/250/210.md +10 -1
  751. package/lib/assets/docs/template//351/226/213/347/231/272/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +9 -0
  752. package/lib/assets/gulpfile.js +4 -2
  753. package/lib/assets/ops/scripts/okf.js +272 -0
  754. package/lib/assets/package.json +2 -0
  755. package/package.json +1 -1
@@ -1,315 +1,324 @@
1
- # 第 14 章 イベント駆動マイクロサービスのデプロイ — Kustomize 対 Helm
2
-
3
- ## はじめに
4
-
5
- 前章では構成要素の少ないモノリスを題材に、Docker Compose と Kustomize を比較しました。この章では、同じ国際貨物輸送システム(Cargo Tracker)を**イベント駆動マイクロサービス**として実装した版(case-2)を取り上げます。構成要素が一気に増えるため、デプロイ手段の選択がより本質的な意味を持ちます。
6
-
7
- ここでの比較軸は **Kustomize 対 Helm** です。多数の似た構造を持つマイクロサービスを、どちらがどのように扱うかを実装と動作検証を通じて確認します。
8
-
9
- 実装は [`apps/case-studies/case-2-event-driven/`](https://github.com/k2works/getting-started-docker-kubernetes/tree/main/apps/case-studies/case-2-event-driven) にあります。バックエンド(Gradle マルチプロジェクト)とフロントエンドのソースを同梱しており、リポジトリ単体でビルド・デプロイを再現できます。
10
-
11
- ---
12
-
13
- ## 1. アーキテクチャ概要
14
-
15
- イベント駆動版は、貨物追跡の業務をドメインごとのマイクロサービスに分割し、API ゲートウェイで束ね、サービス間の連携を RabbitMQ のイベントで行う構成です。
16
-
17
- ```plantuml
18
- @startuml
19
- title イベント駆動マイクロサービス版 Cargo Tracker
20
-
21
- actor 利用者
22
- node "frontend\n(nginx, SPA)" as fe
23
- node "gatewayms\n(Spring Cloud Gateway, :8080)" as gw
24
- node "authms :8081" as auth
25
- node "bookingms :8082" as booking
26
- node "routingms :8083" as routing
27
- node "trackingms :8084" as tracking
28
- node "billingms :8086" as billing
29
- queue "RabbitMQ" as mq
30
- database "PostgreSQL\n(6 DB)" as db
31
-
32
- 利用者 --> fe
33
- fe --> gw : /api/...
34
- gw --> auth
35
- gw --> booking
36
- gw --> routing
37
- gw --> tracking
38
- gw --> billing
39
- booking ..> mq : publish
40
- tracking ..> mq : subscribe
41
- auth --> db
42
- booking --> db
43
- routing --> db
44
- tracking --> db
45
- billing --> db
46
- @enduml
47
- ```
48
-
49
- 構成要素は次のとおりです。
50
-
51
- - **gatewayms**(8080): `/api/v1/auth/**` → authms、`/api/booking/**` → bookingms などのパスベースルーティング
52
- - **6 つのマイクロサービス**: authms(8081)・bookingms(8082)・routingms(8083)・trackingms(8084)・handlingms(8085)・billingms(8086)
53
- - **frontend**: SPA を配信し `/api/` を gateway へプロキシ
54
- - **PostgreSQL**: 1 インスタンスに 6 データベース(`auth_db`・`booking_db` …)
55
- - **RabbitMQ**: bookingms・trackingms 間のイベント連携
56
-
57
- モノリスが「アプリ 1 + DB 1」だったのに対し、こちらは **アプリ 8 + インフラ 2(PostgreSQL・RabbitMQ)= 10 個のワークロード**になります。
58
-
59
- ### イメージのビルド
60
-
61
- バックエンドは Gradle マルチプロジェクトです。一度のビルドで全サービスの jar を生成し、各サービスをイメージ化します。
62
-
63
- ```bash
64
- cd apps/case-studies/case-2-event-driven/backend
65
- ./gradlew bootJar -x test
66
- for s in gatewayms authms bookingms routingms trackingms handlingms billingms; do
67
- docker build -t "cargo2-$s:0.0.1" "$s"
68
- done
69
- cd ../frontend && docker build -t cargo2-frontend:0.0.1 .
70
- ```
71
-
72
- ---
73
-
74
- ## 2. Kustomize による実装
75
-
76
- Kustomize では、リソースを種別・コンポーネントごとのファイルに分割します。`apps/case-studies/case-2-event-driven/k8s/kustomize/base/` の構成は次のとおりです。
77
-
78
- ```
79
- base/
80
- ├── kustomization.yaml # 束ねる定義 + configMapGenerator + images
81
- ├── namespace.yaml
82
- ├── secret.yaml # DB 認証
83
- ├── init-databases.sql # 6 DB 作成(ConfigMap 化)
84
- ├── postgres.yaml
85
- ├── rabbitmq.yaml
86
- ├── authms.yaml # ┐
87
- ├── bookingms.yaml # │ サービスごとに Deployment + Service を記述
88
- ├── routingms.yaml # │
89
- ├── trackingms.yaml # │
90
- ├── handlingms.yaml # │
91
- ├── billingms.yaml # ┘
92
- ├── gatewayms.yaml
93
- ├── frontend.yaml
94
- └── ingress.yaml
95
- ```
96
-
97
- 注目すべきは、**6 つのバックエンドサービスがほぼ同じ構造の Deployment + Service を持つ**点です。違いは名前・ポート・接続先データベース・RabbitMQ の要否だけですが、Kustomize ではそれぞれを個別のファイルとして書き下します。例として `bookingms.yaml` の要点は次のとおりです。
98
-
99
- ```yaml
100
- env:
101
- - name: SPRING_PROFILES_ACTIVE
102
- value: local-prod
103
- - name: DB_URL
104
- value: jdbc:postgresql://postgres:5432/booking_db
105
- - name: DB_USERNAME
106
- valueFrom:
107
- secretKeyRef: { name: db-credentials, key: DB_USERNAME }
108
- - name: DB_PASSWORD
109
- valueFrom:
110
- secretKeyRef: { name: db-credentials, key: DB_PASSWORD }
111
- - name: RABBITMQ_HOST
112
- value: rabbitmq
113
- ```
114
-
115
- `kustomization.yaml` では、6 DB の初期化 SQL を `configMapGenerator` で ConfigMap 化し、イメージタグを `images` で集中管理します。
116
-
117
- ```yaml
118
- configMapGenerator:
119
- - name: postgres-init
120
- files:
121
- - init-databases.sql=init-databases.sql
122
-
123
- images:
124
- - name: cargo2-authms
125
- newTag: 0.0.1
126
- # ... 8 イメージ分
127
- ```
128
-
129
- ### デプロイと動作確認
130
-
131
- ```bash
132
- kubectl apply -k apps/case-studies/case-2-event-driven/k8s/kustomize/base
133
- ```
134
-
135
- 10 個の Pod がすべて `1/1 Running` になります(DB 起動待ちで一部 Pod に再起動が入りますが、`readinessProbe` の範囲で復帰します)。
136
-
137
- ```bash
138
- kubectl -n cargo-event get pods
139
- # authms / billingms / bookingms / frontend / gatewayms / handlingms /
140
- # postgres / rabbitmq / routingms / trackingms — すべて 1/1 Running
141
- ```
142
-
143
- ゲートウェイ経由の疎通を確認します。
144
-
145
- ```bash
146
- kubectl -n cargo-event port-forward svc/gatewayms 18090:8080
147
- curl http://localhost:18090/actuator/health
148
- # {"groups":["liveness","readiness"],"status":"UP"}
149
-
150
- curl -s -o /dev/null -w '%{http_code}\n' http://localhost:18090/api/v1/auth/
151
- # 401 ← ゲートウェイが authms に到達し、認証が要求された(疎通成功)
152
- ```
153
-
154
- `/api/...` が各サービスで `401`(認証要求)を返すことは、ゲートウェイがバックエンドへ正しくルーティングできている証拠です(バックエンド停止なら 502/503 になります)。フロントエンドも `HTTP 200` で SPA を配信します。
155
-
156
- ---
157
-
158
- ## 3. Helm による実装
159
-
160
- Helm は Go テンプレートでマニフェストを生成します。`apps/case-studies/case-2-event-driven/helm/cargo-event/` の構成は次のとおりです。
161
-
162
- ```
163
- helm/cargo-event/
164
- ├── Chart.yaml
165
- ├── values.yaml # 設定値(サービス一覧・認証・ポート)
166
- └── templates/
167
- ├── infra.yaml # secret + postgres-init + postgres + rabbitmq
168
- ├── microservices.yaml # 6 サービスをループで生成
169
- ├── gateway.yaml
170
- ├── frontend.yaml
171
- └── ingress.yaml
172
- ```
173
-
174
- 最大の違いは、Kustomize で 6 ファイルに分かれていたバックエンドサービスが、**`values.yaml` のリスト + テンプレートのループ 1 つ**に集約される点です。
175
-
176
- `values.yaml`:
177
-
178
- ```yaml
179
- services:
180
- - name: authms
181
- port: 8081
182
- database: auth_db
183
- rabbit: false
184
- - name: bookingms
185
- port: 8082
186
- database: booking_db
187
- rabbit: true
188
- # ... routingms / trackingms / handlingms / billingms
189
- ```
190
-
191
- `templates/microservices.yaml`(抜粋):
192
-
193
- ```yaml
194
- {{- range .Values.services }}
195
- apiVersion: apps/v1
196
- kind: Deployment
197
- metadata:
198
- name: {{ .name }}
199
- spec:
200
- template:
201
- spec:
202
- containers:
203
- - name: {{ .name }}
204
- image: cargo2-{{ .name }}:{{ $.Values.imageTag }}
205
- env:
206
- - name: DB_URL
207
- value: jdbc:postgresql://postgres:5432/{{ .database }}
208
- {{- if .rabbit }}
209
- - name: RABBITMQ_HOST
210
- value: rabbitmq
211
- {{- end }}
212
- ports:
213
- - { name: http, containerPort: {{ .port }} }
214
- ---
215
- # ... Service も同じループ内で生成
216
- {{- end }}
217
- ```
218
-
219
- サービスを 1 つ増やすときは、Kustomize では新しいファイルを追加して `resources` と `images` に登録しますが、Helm では `values.yaml` のリストに 1 エントリ追加するだけで済みます。RabbitMQ の要否のような条件分岐も `{{- if .rabbit }}` で表現できます。
220
-
221
- ### 検証とデプロイ
222
-
223
- ```bash
224
- helm lint apps/case-studies/case-2-event-driven/helm/cargo-event
225
- # 1 chart(s) linted, 0 chart(s) failed
226
-
227
- helm template cargo-event apps/case-studies/case-2-event-driven/helm/cargo-event | grep -c '^kind:'
228
- # 24 (Kustomize の 25 から Namespace を除いた数。Helm は --create-namespace で名前空間を作る)
229
-
230
- helm install cargo-event apps/case-studies/case-2-event-driven/helm/cargo-event \
231
- --namespace cargo-event --create-namespace
232
- ```
233
-
234
- Helm 版も同様に 10 Pod が `1/1 Running` になり、ゲートウェイ経由の疎通(health UP、`/api/...` が 401)を確認できました。Helm はさらに**リリース管理**を提供します。
235
-
236
- ```bash
237
- helm history cargo-event -n cargo-event
238
- # REVISION STATUS CHART DESCRIPTION
239
- # 1 deployed cargo-event-0.1.0 Install complete
240
-
241
- helm uninstall cargo-event -n cargo-event
242
- ```
243
-
244
- `helm upgrade` でリビジョンが増え、`helm rollback` で以前のリビジョンに戻せます。Kustomize(`kubectl apply`)にはこの世代管理がありません。
245
-
246
- ---
247
-
248
- ## 4. ロギング基盤(EFK + DaemonSet)
249
-
250
- [第 9 章](09-container-operations.md) の **EFK(Elasticsearch + Fluentd + Kibana)+ DaemonSet** によるログ集約パターンを、本ケースにも実装として組み込んでいます([第 13 章](13-case-monolith-compose-vs-kustomize.md) と同じ構成)。各 Pod は標準出力にログを出すだけで、各ノードに常駐する Fluentd がノード上の全 Pod のログを収集し、Elasticsearch に蓄積、Kibana で可視化します。
251
-
252
- `k8s/kustomize/base/logging/` に 4 ファイルを置き、`kustomization.yaml` の `resources` に追加しています。
253
-
254
- ```
255
- logging/
256
- ├── elasticsearch.yaml # ConfigMap + PVC + Service + Deployment(単一ノード)
257
- ├── fluentd-daemonset.yaml # ServiceAccount + ClusterRole/Binding + DaemonSet
258
- ├── kibana.yaml # Deployment + Service(NodePort 30052)
259
- └── kibana-setup-job.yaml # index pattern logstash-* を自動作成する Job
260
- ```
261
-
262
- 実装上の勘所は第 13 章と共通です。
263
-
264
- - **Fluentd**: `hostPath` で `/var/log/containers` を読み取る。containerd の CRI ログ形式に合わせて `FLUENT_CONTAINER_TAIL_PARSER_TYPE` を指定(既定の json だと不一致)。ClusterRole はケース間で衝突しないよう `fluentd-cargo-event` に修飾
265
- - **Elasticsearch**: RWO PVC のため `strategy: Recreate`、heap の 3〜4 倍(2Gi)のメモリ上限で OOM を回避
266
- - **Kibana**: `kibana-setup` Job が index pattern と既定ビュー(Discover)を自動設定し、開いたらすぐ使える
267
-
268
- マイクロサービス構成では、Fluentd を 1 つの DaemonSet として常駐させるだけで、authms・bookingms・routingms… といった多数のサービスや RabbitMQ・PostgreSQL のログを、横断的に 1 か所(Kibana)で追えるのが利点です。
269
-
270
- ```bash
271
- # アプリと同時にデプロイされる(kubectl apply -k k8s/kustomize/base)
272
- kubectl -n cargo-event get pods -l app.kubernetes.io/component=logging
273
- kubectl -n cargo-event exec deploy/elasticsearch -- curl -s 'http://localhost:9200/logstash-*/_count'
274
- # Kibana を開く(kind では NodePort が localhost に出ないため port-forward が確実)
275
- kubectl -n cargo-event port-forward svc/kibana 18081:5601 # → http://localhost:18081/
276
- ```
277
-
278
- ---
279
-
280
- ## 5. 比較考察
281
-
282
- イベント駆動マイクロサービス(8 アプリ + 2 インフラ)という構成で、両手段の差は前章のモノリスより明確になります。
283
-
284
- | 観点 | Kustomize | Helm |
285
- |------|-----------|------|
286
- | 似た構造の扱い | サービスごとにファイルを書き下す(6 ファイル) | `values` のリスト + ループで 1 定義に集約 |
287
- | サービス追加 | ファイル追加 + `resources`/`images` 登録 | `values.yaml` に 1 エントリ追加 |
288
- | 条件分岐 | パッチ/別ファイルで表現 | `{{- if }}` で表現 |
289
- | パラメータ化 | overlay でフィールド上書き | `values.yaml` + `--set` |
290
- | 配布 | Git リポジトリ | チャートのパッケージ配布 |
291
- | リリース管理 | なし | リビジョン履歴・`rollback` |
292
- | 学習コスト | 低〜中(YAML + パッチの理解) | 中(テンプレート言語の理解) |
293
- | 透明性 | 生 YAML に近く読みやすい | テンプレートは `helm template` で展開して確認 |
294
-
295
- **Kustomize の強み**は、生の YAML に近く「何がデプロイされるか」が直感的に分かる点です。少数のサービスや、環境差分が主に「値の上書き」で済む場合に向きます。
296
-
297
- **Helm の強み**は、**似た構造の繰り返しをテンプレート化して重複を排除**できる点と、**リリース管理(バージョン・ロールバック)**です。マイクロサービスのように同型のコンポーネントが多数あり、チャートとして配布・バージョン管理したい場合に効果を発揮します。
298
-
299
- 本ケースでは、6 つの同型サービスをテンプレートのループ 1 つにまとめられた点が Helm の価値を最もよく示しています。一方、Kustomize の冗長さは「明示的で読みやすい」という長所の裏返しでもあり、どちらが優れているかは構成の規模とチームの運用方針によります。
300
-
301
- ---
302
-
303
- ## まとめ
304
-
305
- - イベント駆動マイクロサービス版 Cargo Tracker(8 アプリ + PostgreSQL + RabbitMQ)を Kustomize と Helm の両方でデプロイし、いずれも 10 Pod が `1/1 Running` になり、ゲートウェイ経由の疎通を確認しました
306
- - Kustomize は同型サービスを個別ファイルで明示的に書き下し、Helm は `values` のリスト + テンプレートのループで重複を排除します
307
- - Helm はリリース管理(リビジョン・ロールバック)を提供し、Kustomize は生 YAML に近い透明性を提供します
308
- - 第 9 章の EFK + DaemonSet を本ケースにも組み込み、Fluentd(DaemonSet)が多数のサービスのログを横断的に収集して Kibana で観測できるようにしました
309
- - 次章では、同じドメインを ES/CQRS(Axon)で実装した case-3 を題材に、引き続き Kustomize と Helm を比較します
310
-
311
- ---
312
-
313
- - 前の章: [第 13 章 モノリスのデプロイ — Docker Compose 対 Kustomize](13-case-monolith-compose-vs-kustomize.md)
314
- - 次の章: [第 15 章 ES/CQRS マイクロサービス(Axon)のデプロイ — Kustomize 対 Helm](15-case-escqrs-axon-kustomize-vs-helm.md)
315
- - シリーズ目次: [Docker/Kubernetes 実践コンテナ解説](index.md)
1
+ ---
2
+ type: Article
3
+ title: "第 14 章 イベント駆動マイクロサービスのデプロイ — Kustomize 対 Helm"
4
+ description: "前章では構成要素の少ないモノリスを題材に、Docker Compose と Kustomize を比較しました。"
5
+ tags: [article, getting-start-docker-kubernetes]
6
+ status: stable
7
+ generated: { by: human:kakimomokuri, at: 2026-06-26T00:29:42Z }
8
+ ---
9
+
10
+ # 第 14 章 イベント駆動マイクロサービスのデプロイ — Kustomize 対 Helm
11
+
12
+ ## はじめに
13
+
14
+ 前章では構成要素の少ないモノリスを題材に、Docker Compose と Kustomize を比較しました。この章では、同じ国際貨物輸送システム(Cargo Tracker)を**イベント駆動マイクロサービス**として実装した版(case-2)を取り上げます。構成要素が一気に増えるため、デプロイ手段の選択がより本質的な意味を持ちます。
15
+
16
+ ここでの比較軸は **Kustomize 対 Helm** です。多数の似た構造を持つマイクロサービスを、どちらがどのように扱うかを実装と動作検証を通じて確認します。
17
+
18
+ 実装は [`apps/case-studies/case-2-event-driven/`](https://github.com/k2works/getting-started-docker-kubernetes/tree/main/apps/case-studies/case-2-event-driven) にあります。バックエンド(Gradle マルチプロジェクト)とフロントエンドのソースを同梱しており、リポジトリ単体でビルド・デプロイを再現できます。
19
+
20
+ ---
21
+
22
+ ## 1. アーキテクチャ概要
23
+
24
+ イベント駆動版は、貨物追跡の業務をドメインごとのマイクロサービスに分割し、API ゲートウェイで束ね、サービス間の連携を RabbitMQ のイベントで行う構成です。
25
+
26
+ ```plantuml
27
+ @startuml
28
+ title イベント駆動マイクロサービス版 Cargo Tracker
29
+
30
+ actor 利用者
31
+ node "frontend\n(nginx, SPA)" as fe
32
+ node "gatewayms\n(Spring Cloud Gateway, :8080)" as gw
33
+ node "authms :8081" as auth
34
+ node "bookingms :8082" as booking
35
+ node "routingms :8083" as routing
36
+ node "trackingms :8084" as tracking
37
+ node "billingms :8086" as billing
38
+ queue "RabbitMQ" as mq
39
+ database "PostgreSQL\n(6 DB)" as db
40
+
41
+ 利用者 --> fe
42
+ fe --> gw : /api/...
43
+ gw --> auth
44
+ gw --> booking
45
+ gw --> routing
46
+ gw --> tracking
47
+ gw --> billing
48
+ booking ..> mq : publish
49
+ tracking ..> mq : subscribe
50
+ auth --> db
51
+ booking --> db
52
+ routing --> db
53
+ tracking --> db
54
+ billing --> db
55
+ @enduml
56
+ ```
57
+
58
+ 構成要素は次のとおりです。
59
+
60
+ - **gatewayms**(8080): `/api/v1/auth/**` → authms、`/api/booking/**` → bookingms などのパスベースルーティング
61
+ - **6 つのマイクロサービス**: authms(8081)・bookingms(8082)・routingms(8083)・trackingms(8084)・handlingms(8085)・billingms(8086)
62
+ - **frontend**: SPA を配信し `/api/` を gateway へプロキシ
63
+ - **PostgreSQL**: 1 インスタンスに 6 データベース(`auth_db`・`booking_db` …)
64
+ - **RabbitMQ**: bookingms・trackingms 間のイベント連携
65
+
66
+ モノリスが「アプリ 1 + DB 1」だったのに対し、こちらは **アプリ 8 + インフラ 2(PostgreSQL・RabbitMQ)= 10 個のワークロード**になります。
67
+
68
+ ### イメージのビルド
69
+
70
+ バックエンドは Gradle マルチプロジェクトです。一度のビルドで全サービスの jar を生成し、各サービスをイメージ化します。
71
+
72
+ ```bash
73
+ cd apps/case-studies/case-2-event-driven/backend
74
+ ./gradlew bootJar -x test
75
+ for s in gatewayms authms bookingms routingms trackingms handlingms billingms; do
76
+ docker build -t "cargo2-$s:0.0.1" "$s"
77
+ done
78
+ cd ../frontend && docker build -t cargo2-frontend:0.0.1 .
79
+ ```
80
+
81
+ ---
82
+
83
+ ## 2. Kustomize による実装
84
+
85
+ Kustomize では、リソースを種別・コンポーネントごとのファイルに分割します。`apps/case-studies/case-2-event-driven/k8s/kustomize/base/` の構成は次のとおりです。
86
+
87
+ ```
88
+ base/
89
+ ├── kustomization.yaml # 束ねる定義 + configMapGenerator + images
90
+ ├── namespace.yaml
91
+ ├── secret.yaml # DB 認証
92
+ ├── init-databases.sql # 6 DB 作成(ConfigMap 化)
93
+ ├── postgres.yaml
94
+ ├── rabbitmq.yaml
95
+ ├── authms.yaml # ┐
96
+ ├── bookingms.yaml # │ サービスごとに Deployment + Service を記述
97
+ ├── routingms.yaml # │
98
+ ├── trackingms.yaml # │
99
+ ├── handlingms.yaml # │
100
+ ├── billingms.yaml # ┘
101
+ ├── gatewayms.yaml
102
+ ├── frontend.yaml
103
+ └── ingress.yaml
104
+ ```
105
+
106
+ 注目すべきは、**6 つのバックエンドサービスがほぼ同じ構造の Deployment + Service を持つ**点です。違いは名前・ポート・接続先データベース・RabbitMQ の要否だけですが、Kustomize ではそれぞれを個別のファイルとして書き下します。例として `bookingms.yaml` の要点は次のとおりです。
107
+
108
+ ```yaml
109
+ env:
110
+ - name: SPRING_PROFILES_ACTIVE
111
+ value: local-prod
112
+ - name: DB_URL
113
+ value: jdbc:postgresql://postgres:5432/booking_db
114
+ - name: DB_USERNAME
115
+ valueFrom:
116
+ secretKeyRef: { name: db-credentials, key: DB_USERNAME }
117
+ - name: DB_PASSWORD
118
+ valueFrom:
119
+ secretKeyRef: { name: db-credentials, key: DB_PASSWORD }
120
+ - name: RABBITMQ_HOST
121
+ value: rabbitmq
122
+ ```
123
+
124
+ `kustomization.yaml` では、6 DB の初期化 SQL を `configMapGenerator` で ConfigMap 化し、イメージタグを `images` で集中管理します。
125
+
126
+ ```yaml
127
+ configMapGenerator:
128
+ - name: postgres-init
129
+ files:
130
+ - init-databases.sql=init-databases.sql
131
+
132
+ images:
133
+ - name: cargo2-authms
134
+ newTag: 0.0.1
135
+ # ... 8 イメージ分
136
+ ```
137
+
138
+ ### デプロイと動作確認
139
+
140
+ ```bash
141
+ kubectl apply -k apps/case-studies/case-2-event-driven/k8s/kustomize/base
142
+ ```
143
+
144
+ 10 個の Pod がすべて `1/1 Running` になります(DB 起動待ちで一部 Pod に再起動が入りますが、`readinessProbe` の範囲で復帰します)。
145
+
146
+ ```bash
147
+ kubectl -n cargo-event get pods
148
+ # authms / billingms / bookingms / frontend / gatewayms / handlingms /
149
+ # postgres / rabbitmq / routingms / trackingms — すべて 1/1 Running
150
+ ```
151
+
152
+ ゲートウェイ経由の疎通を確認します。
153
+
154
+ ```bash
155
+ kubectl -n cargo-event port-forward svc/gatewayms 18090:8080
156
+ curl http://localhost:18090/actuator/health
157
+ # {"groups":["liveness","readiness"],"status":"UP"}
158
+
159
+ curl -s -o /dev/null -w '%{http_code}\n' http://localhost:18090/api/v1/auth/
160
+ # 401 ← ゲートウェイが authms に到達し、認証が要求された(疎通成功)
161
+ ```
162
+
163
+ `/api/...` が各サービスで `401`(認証要求)を返すことは、ゲートウェイがバックエンドへ正しくルーティングできている証拠です(バックエンド停止なら 502/503 になります)。フロントエンドも `HTTP 200` で SPA を配信します。
164
+
165
+ ---
166
+
167
+ ## 3. Helm による実装
168
+
169
+ Helm は Go テンプレートでマニフェストを生成します。`apps/case-studies/case-2-event-driven/helm/cargo-event/` の構成は次のとおりです。
170
+
171
+ ```
172
+ helm/cargo-event/
173
+ ├── Chart.yaml
174
+ ├── values.yaml # 設定値(サービス一覧・認証・ポート)
175
+ └── templates/
176
+ ├── infra.yaml # secret + postgres-init + postgres + rabbitmq
177
+ ├── microservices.yaml # 6 サービスをループで生成
178
+ ├── gateway.yaml
179
+ ├── frontend.yaml
180
+ └── ingress.yaml
181
+ ```
182
+
183
+ 最大の違いは、Kustomize で 6 ファイルに分かれていたバックエンドサービスが、**`values.yaml` のリスト + テンプレートのループ 1 つ**に集約される点です。
184
+
185
+ `values.yaml`:
186
+
187
+ ```yaml
188
+ services:
189
+ - name: authms
190
+ port: 8081
191
+ database: auth_db
192
+ rabbit: false
193
+ - name: bookingms
194
+ port: 8082
195
+ database: booking_db
196
+ rabbit: true
197
+ # ... routingms / trackingms / handlingms / billingms
198
+ ```
199
+
200
+ `templates/microservices.yaml`(抜粋):
201
+
202
+ ```yaml
203
+ {{- range .Values.services }}
204
+ apiVersion: apps/v1
205
+ kind: Deployment
206
+ metadata:
207
+ name: {{ .name }}
208
+ spec:
209
+ template:
210
+ spec:
211
+ containers:
212
+ - name: {{ .name }}
213
+ image: cargo2-{{ .name }}:{{ $.Values.imageTag }}
214
+ env:
215
+ - name: DB_URL
216
+ value: jdbc:postgresql://postgres:5432/{{ .database }}
217
+ {{- if .rabbit }}
218
+ - name: RABBITMQ_HOST
219
+ value: rabbitmq
220
+ {{- end }}
221
+ ports:
222
+ - { name: http, containerPort: {{ .port }} }
223
+ ---
224
+ # ... Service も同じループ内で生成
225
+ {{- end }}
226
+ ```
227
+
228
+ サービスを 1 つ増やすときは、Kustomize では新しいファイルを追加して `resources` と `images` に登録しますが、Helm では `values.yaml` のリストに 1 エントリ追加するだけで済みます。RabbitMQ の要否のような条件分岐も `{{- if .rabbit }}` で表現できます。
229
+
230
+ ### 検証とデプロイ
231
+
232
+ ```bash
233
+ helm lint apps/case-studies/case-2-event-driven/helm/cargo-event
234
+ # 1 chart(s) linted, 0 chart(s) failed
235
+
236
+ helm template cargo-event apps/case-studies/case-2-event-driven/helm/cargo-event | grep -c '^kind:'
237
+ # 24 (Kustomize の 25 から Namespace を除いた数。Helm は --create-namespace で名前空間を作る)
238
+
239
+ helm install cargo-event apps/case-studies/case-2-event-driven/helm/cargo-event \
240
+ --namespace cargo-event --create-namespace
241
+ ```
242
+
243
+ Helm 版も同様に 10 Pod が `1/1 Running` になり、ゲートウェイ経由の疎通(health UP、`/api/...` が 401)を確認できました。Helm はさらに**リリース管理**を提供します。
244
+
245
+ ```bash
246
+ helm history cargo-event -n cargo-event
247
+ # REVISION STATUS CHART DESCRIPTION
248
+ # 1 deployed cargo-event-0.1.0 Install complete
249
+
250
+ helm uninstall cargo-event -n cargo-event
251
+ ```
252
+
253
+ `helm upgrade` でリビジョンが増え、`helm rollback` で以前のリビジョンに戻せます。Kustomize(`kubectl apply`)にはこの世代管理がありません。
254
+
255
+ ---
256
+
257
+ ## 4. ロギング基盤(EFK + DaemonSet)
258
+
259
+ [第 9 章](09-container-operations.md) の **EFK(Elasticsearch + Fluentd + Kibana)+ DaemonSet** によるログ集約パターンを、本ケースにも実装として組み込んでいます([第 13 章](13-case-monolith-compose-vs-kustomize.md) と同じ構成)。各 Pod は標準出力にログを出すだけで、各ノードに常駐する Fluentd がノード上の全 Pod のログを収集し、Elasticsearch に蓄積、Kibana で可視化します。
260
+
261
+ `k8s/kustomize/base/logging/` に 4 ファイルを置き、`kustomization.yaml` の `resources` に追加しています。
262
+
263
+ ```
264
+ logging/
265
+ ├── elasticsearch.yaml # ConfigMap + PVC + Service + Deployment(単一ノード)
266
+ ├── fluentd-daemonset.yaml # ServiceAccount + ClusterRole/Binding + DaemonSet
267
+ ├── kibana.yaml # Deployment + Service(NodePort 30052)
268
+ └── kibana-setup-job.yaml # index pattern logstash-* を自動作成する Job
269
+ ```
270
+
271
+ 実装上の勘所は第 13 章と共通です。
272
+
273
+ - **Fluentd**: `hostPath` で `/var/log/containers` を読み取る。containerd の CRI ログ形式に合わせて `FLUENT_CONTAINER_TAIL_PARSER_TYPE` を指定(既定の json だと不一致)。ClusterRole はケース間で衝突しないよう `fluentd-cargo-event` に修飾
274
+ - **Elasticsearch**: RWO PVC のため `strategy: Recreate`、heap の 3〜4 倍(2Gi)のメモリ上限で OOM を回避
275
+ - **Kibana**: `kibana-setup` Job が index pattern と既定ビュー(Discover)を自動設定し、開いたらすぐ使える
276
+
277
+ マイクロサービス構成では、Fluentd を 1 つの DaemonSet として常駐させるだけで、authms・bookingms・routingms… といった多数のサービスや RabbitMQ・PostgreSQL のログを、横断的に 1 か所(Kibana)で追えるのが利点です。
278
+
279
+ ```bash
280
+ # アプリと同時にデプロイされる(kubectl apply -k k8s/kustomize/base)
281
+ kubectl -n cargo-event get pods -l app.kubernetes.io/component=logging
282
+ kubectl -n cargo-event exec deploy/elasticsearch -- curl -s 'http://localhost:9200/logstash-*/_count'
283
+ # Kibana を開く(kind では NodePort が localhost に出ないため port-forward が確実)
284
+ kubectl -n cargo-event port-forward svc/kibana 18081:5601 # → http://localhost:18081/
285
+ ```
286
+
287
+ ---
288
+
289
+ ## 5. 比較考察
290
+
291
+ イベント駆動マイクロサービス(8 アプリ + 2 インフラ)という構成で、両手段の差は前章のモノリスより明確になります。
292
+
293
+ | 観点 | Kustomize | Helm |
294
+ |------|-----------|------|
295
+ | 似た構造の扱い | サービスごとにファイルを書き下す(6 ファイル) | `values` のリスト + ループで 1 定義に集約 |
296
+ | サービス追加 | ファイル追加 + `resources`/`images` 登録 | `values.yaml` に 1 エントリ追加 |
297
+ | 条件分岐 | パッチ/別ファイルで表現 | `{{- if }}` で表現 |
298
+ | パラメータ化 | overlay でフィールド上書き | `values.yaml` + `--set` |
299
+ | 配布 | Git リポジトリ | チャートのパッケージ配布 |
300
+ | リリース管理 | なし | リビジョン履歴・`rollback` |
301
+ | 学習コスト | 低〜中(YAML + パッチの理解) | 中(テンプレート言語の理解) |
302
+ | 透明性 | 生 YAML に近く読みやすい | テンプレートは `helm template` で展開して確認 |
303
+
304
+ **Kustomize の強み**は、生の YAML に近く「何がデプロイされるか」が直感的に分かる点です。少数のサービスや、環境差分が主に「値の上書き」で済む場合に向きます。
305
+
306
+ **Helm の強み**は、**似た構造の繰り返しをテンプレート化して重複を排除**できる点と、**リリース管理(バージョン・ロールバック)**です。マイクロサービスのように同型のコンポーネントが多数あり、チャートとして配布・バージョン管理したい場合に効果を発揮します。
307
+
308
+ 本ケースでは、6 つの同型サービスをテンプレートのループ 1 つにまとめられた点が Helm の価値を最もよく示しています。一方、Kustomize の冗長さは「明示的で読みやすい」という長所の裏返しでもあり、どちらが優れているかは構成の規模とチームの運用方針によります。
309
+
310
+ ---
311
+
312
+ ## まとめ
313
+
314
+ - イベント駆動マイクロサービス版 Cargo Tracker(8 アプリ + PostgreSQL + RabbitMQ)を Kustomize と Helm の両方でデプロイし、いずれも 10 Pod が `1/1 Running` になり、ゲートウェイ経由の疎通を確認しました
315
+ - Kustomize は同型サービスを個別ファイルで明示的に書き下し、Helm は `values` のリスト + テンプレートのループで重複を排除します
316
+ - Helm はリリース管理(リビジョン・ロールバック)を提供し、Kustomize は生 YAML に近い透明性を提供します
317
+ - 第 9 章の EFK + DaemonSet を本ケースにも組み込み、Fluentd(DaemonSet)が多数のサービスのログを横断的に収集して Kibana で観測できるようにしました
318
+ - 次章では、同じドメインを ES/CQRS(Axon)で実装した case-3 を題材に、引き続き Kustomize と Helm を比較します
319
+
320
+ ---
321
+
322
+ - 前の章: [第 13 章 モノリスのデプロイ — Docker Compose 対 Kustomize](13-case-monolith-compose-vs-kustomize.md)
323
+ - 次の章: [第 15 章 ES/CQRS マイクロサービス(Axon)のデプロイ — Kustomize 対 Helm](15-case-escqrs-axon-kustomize-vs-helm.md)
324
+ - シリーズ目次: [Docker/Kubernetes 実践コンテナ解説](index.md)