@k2works/claude-code-booster 4.7.0 → 4.8.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 (744) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +42 -42
  3. package/bin/claude-code-booster +90 -90
  4. package/lib/assets/.claude/README.md +271 -269
  5. package/lib/assets/.claude/agents/xp-architect.md +250 -250
  6. package/lib/assets/.claude/agents/xp-executive.md +207 -207
  7. package/lib/assets/.claude/agents/xp-interaction-designer.md +239 -239
  8. package/lib/assets/.claude/agents/xp-product-manager.md +245 -245
  9. package/lib/assets/.claude/agents/xp-programmer.md +268 -268
  10. package/lib/assets/.claude/agents/xp-project-manager.md +229 -229
  11. package/lib/assets/.claude/agents/xp-technical-writer.md +224 -224
  12. package/lib/assets/.claude/agents/xp-tester.md +265 -265
  13. package/lib/assets/.claude/agents/xp-user-representative.md +204 -204
  14. package/lib/assets/.claude/scripts/generate-inception-deck.mjs +911 -911
  15. package/lib/assets/.claude/settings.json +11 -11
  16. package/lib/assets/.claude/skills/ai-agent-guidelines/SKILL.md +111 -111
  17. package/lib/assets/.claude/skills/analyzing-architecture/SKILL.md +83 -83
  18. package/lib/assets/.claude/skills/analyzing-business-architecture/SKILL.md +122 -122
  19. package/lib/assets/.claude/skills/analyzing-business-case/SKILL.md +148 -148
  20. package/lib/assets/.claude/skills/analyzing-business-strategy/SKILL.md +277 -277
  21. package/lib/assets/.claude/skills/analyzing-data-model/SKILL.md +77 -77
  22. package/lib/assets/.claude/skills/analyzing-domain-model/SKILL.md +117 -117
  23. package/lib/assets/.claude/skills/analyzing-inception-deck/SKILL.md +84 -84
  24. package/lib/assets/.claude/skills/analyzing-non-functional/SKILL.md +95 -95
  25. package/lib/assets/.claude/skills/analyzing-operation/SKILL.md +95 -95
  26. package/lib/assets/.claude/skills/analyzing-requirements/SKILL.md +91 -91
  27. package/lib/assets/.claude/skills/analyzing-review/SKILL.md +174 -174
  28. package/lib/assets/.claude/skills/analyzing-tech-stack/SKILL.md +101 -101
  29. package/lib/assets/.claude/skills/analyzing-test-strategy/SKILL.md +89 -89
  30. package/lib/assets/.claude/skills/analyzing-ui-design/SKILL.md +80 -80
  31. package/lib/assets/.claude/skills/analyzing-usecases/SKILL.md +72 -72
  32. package/lib/assets/.claude/skills/creating-adr/SKILL.md +113 -113
  33. package/lib/assets/.claude/skills/creating-iteration-report/SKILL.md +210 -210
  34. package/lib/assets/.claude/skills/creating-journal/SKILL.md +129 -0
  35. package/lib/assets/.claude/skills/creating-release-report/SKILL.md +161 -161
  36. package/lib/assets/.claude/skills/creating-slides/SKILL.md +86 -86
  37. package/lib/assets/.claude/skills/creating-slides/agents/openai.yaml +4 -4
  38. package/lib/assets/.claude/skills/creating-slides/references/manga-css.md +45 -45
  39. package/lib/assets/.claude/skills/creating-slides/scripts/slide_tools.py +239 -239
  40. package/lib/assets/.claude/skills/developing-backend/SKILL.md +100 -100
  41. package/lib/assets/.claude/skills/developing-frontend/SKILL.md +93 -93
  42. package/lib/assets/.claude/skills/developing-release/SKILL.md +120 -120
  43. package/lib/assets/.claude/skills/developing-review/SKILL.md +175 -175
  44. package/lib/assets/.claude/skills/developing-uiux-review/SKILL.md +207 -207
  45. package/lib/assets/.claude/skills/generating-bmc/SKILL.md +123 -123
  46. package/lib/assets/.claude/skills/generating-slides/SKILL.md +94 -94
  47. package/lib/assets/.claude/skills/git-commit/SKILL.md +81 -81
  48. package/lib/assets/.claude/skills/killing-processes/SKILL.md +44 -44
  49. package/lib/assets/.claude/skills/operating-backup/SKILL.md +59 -59
  50. package/lib/assets/.claude/skills/operating-cicd/SKILL.md +54 -54
  51. package/lib/assets/.claude/skills/operating-deploy/SKILL.md +67 -67
  52. package/lib/assets/.claude/skills/operating-docs/SKILL.md +219 -219
  53. package/lib/assets/.claude/skills/operating-provision/SKILL.md +77 -77
  54. package/lib/assets/.claude/skills/operating-qt/SKILL.md +147 -147
  55. package/lib/assets/.claude/skills/operating-review/SKILL.md +171 -171
  56. package/lib/assets/.claude/skills/operating-script/SKILL.md +145 -145
  57. package/lib/assets/.claude/skills/operating-setup/SKILL.md +63 -63
  58. package/lib/assets/.claude/skills/orchestrating-analysis/SKILL.md +104 -104
  59. package/lib/assets/.claude/skills/orchestrating-development/SKILL.md +168 -168
  60. package/lib/assets/.claude/skills/orchestrating-operation/SKILL.md +158 -158
  61. package/lib/assets/.claude/skills/orchestrating-project/SKILL.md +144 -144
  62. package/lib/assets/.claude/skills/planning-releases/SKILL.md +119 -119
  63. package/lib/assets/.claude/skills/practicing-getting-start-tdd/SKILL.md +266 -266
  64. package/lib/assets/.claude/skills/syncing-github-project/SKILL.md +151 -151
  65. package/lib/assets/.claude/skills/tracking-progress/SKILL.md +91 -91
  66. package/lib/assets/.claude/skills/validating-iteration-plan/SKILL.md +238 -238
  67. package/lib/assets/.devcontainer/devcontainer.json +37 -37
  68. package/lib/assets/.env.example +17 -17
  69. package/lib/assets/.gitattributes +4 -4
  70. package/lib/assets/.github/workflows/docker-publish.yml +77 -77
  71. package/lib/assets/.github/workflows/mkdocs.yml +39 -39
  72. package/lib/assets/AGENTS.md +94 -94
  73. package/lib/assets/CLAUDE.md +193 -193
  74. package/lib/assets/README.md +291 -291
  75. package/lib/assets/docker-compose.yml +33 -33
  76. package/lib/assets/docs/adr/index.md +10 -10
  77. package/lib/assets/docs/article/functional-desgin-ppp/all/01-immutability-and-data-transformation.md +475 -475
  78. package/lib/assets/docs/article/functional-desgin-ppp/all/02-function-composition.md +519 -519
  79. package/lib/assets/docs/article/functional-desgin-ppp/all/03-polymorphism.md +537 -537
  80. package/lib/assets/docs/article/functional-desgin-ppp/all/04-data-validation.md +300 -300
  81. package/lib/assets/docs/article/functional-desgin-ppp/all/05-property-based-testing.md +320 -320
  82. package/lib/assets/docs/article/functional-desgin-ppp/all/06-tdd-and-functional.md +498 -498
  83. package/lib/assets/docs/article/functional-desgin-ppp/all/07-composite-pattern.md +298 -298
  84. package/lib/assets/docs/article/functional-desgin-ppp/all/08-decorator-pattern.md +291 -291
  85. package/lib/assets/docs/article/functional-desgin-ppp/all/09-adapter-pattern.md +336 -336
  86. package/lib/assets/docs/article/functional-desgin-ppp/all/10-strategy-pattern.md +303 -303
  87. package/lib/assets/docs/article/functional-desgin-ppp/all/11-command-pattern.md +286 -286
  88. package/lib/assets/docs/article/functional-desgin-ppp/all/12-visitor-pattern.md +322 -322
  89. package/lib/assets/docs/article/functional-desgin-ppp/all/13-abstract-factory-pattern.md +319 -319
  90. package/lib/assets/docs/article/functional-desgin-ppp/all/14-abstract-server-pattern.md +365 -365
  91. package/lib/assets/docs/article/functional-desgin-ppp/all/15-gossiping-bus-drivers.md +156 -156
  92. package/lib/assets/docs/article/functional-desgin-ppp/all/16-payroll-system.md +178 -178
  93. package/lib/assets/docs/article/functional-desgin-ppp/all/17-video-rental-system.md +312 -312
  94. package/lib/assets/docs/article/functional-desgin-ppp/all/18-concurrency-system.md +287 -287
  95. package/lib/assets/docs/article/functional-desgin-ppp/all/19-wa-tor-simulation.md +286 -286
  96. package/lib/assets/docs/article/functional-desgin-ppp/all/20-pattern-interactions.md +274 -274
  97. package/lib/assets/docs/article/functional-desgin-ppp/all/21-best-practices.md +294 -294
  98. package/lib/assets/docs/article/functional-desgin-ppp/all/22-oo-to-fp-migration.md +337 -337
  99. package/lib/assets/docs/article/functional-desgin-ppp/all/index.md +388 -388
  100. package/lib/assets/docs/article/functional-desgin-ppp/clojure/01-immutability-and-data-transformation.md +273 -273
  101. package/lib/assets/docs/article/functional-desgin-ppp/clojure/02-function-composition.md +380 -380
  102. package/lib/assets/docs/article/functional-desgin-ppp/clojure/03-polymorphism.md +384 -384
  103. package/lib/assets/docs/article/functional-desgin-ppp/clojure/04-clojure-spec.md +350 -350
  104. package/lib/assets/docs/article/functional-desgin-ppp/clojure/05-property-based-testing.md +352 -352
  105. package/lib/assets/docs/article/functional-desgin-ppp/clojure/06-tdd-in-functional.md +383 -383
  106. package/lib/assets/docs/article/functional-desgin-ppp/clojure/07-composite-pattern.md +529 -529
  107. package/lib/assets/docs/article/functional-desgin-ppp/clojure/08-decorator-pattern.md +395 -395
  108. package/lib/assets/docs/article/functional-desgin-ppp/clojure/09-adapter-pattern.md +399 -399
  109. package/lib/assets/docs/article/functional-desgin-ppp/clojure/10-strategy-pattern.md +485 -485
  110. package/lib/assets/docs/article/functional-desgin-ppp/clojure/11-command-pattern.md +566 -566
  111. package/lib/assets/docs/article/functional-desgin-ppp/clojure/12-visitor-pattern.md +567 -567
  112. package/lib/assets/docs/article/functional-desgin-ppp/clojure/13-abstract-factory-pattern.md +475 -475
  113. package/lib/assets/docs/article/functional-desgin-ppp/clojure/14-abstract-server-pattern.md +462 -462
  114. package/lib/assets/docs/article/functional-desgin-ppp/clojure/15-gossiping-bus-drivers.md +325 -325
  115. package/lib/assets/docs/article/functional-desgin-ppp/clojure/16-payroll-system.md +401 -401
  116. package/lib/assets/docs/article/functional-desgin-ppp/clojure/17-video-rental-system.md +450 -450
  117. package/lib/assets/docs/article/functional-desgin-ppp/clojure/18-concurrency-system.md +475 -475
  118. package/lib/assets/docs/article/functional-desgin-ppp/clojure/19-wator-simulation.md +739 -739
  119. package/lib/assets/docs/article/functional-desgin-ppp/clojure/20-pattern-interactions.md +567 -567
  120. package/lib/assets/docs/article/functional-desgin-ppp/clojure/21-best-practices.md +518 -518
  121. package/lib/assets/docs/article/functional-desgin-ppp/clojure/22-oo-to-fp-migration.md +532 -532
  122. package/lib/assets/docs/article/functional-desgin-ppp/clojure/index.md +241 -241
  123. package/lib/assets/docs/article/functional-desgin-ppp/elixir/01-immutability-and-data-transformation.md +383 -383
  124. package/lib/assets/docs/article/functional-desgin-ppp/elixir/02-function-composition.md +374 -374
  125. package/lib/assets/docs/article/functional-desgin-ppp/elixir/03-polymorphism.md +375 -375
  126. package/lib/assets/docs/article/functional-desgin-ppp/elixir/04-data-validation.md +195 -195
  127. package/lib/assets/docs/article/functional-desgin-ppp/elixir/05-property-based-testing.md +268 -268
  128. package/lib/assets/docs/article/functional-desgin-ppp/elixir/06-tdd-and-fp.md +294 -294
  129. package/lib/assets/docs/article/functional-desgin-ppp/elixir/07-effects-and-pure-functions.md +164 -164
  130. package/lib/assets/docs/article/functional-desgin-ppp/elixir/08-error-handling-strategies.md +168 -168
  131. package/lib/assets/docs/article/functional-desgin-ppp/elixir/09-io-and-external-systems.md +254 -254
  132. package/lib/assets/docs/article/functional-desgin-ppp/elixir/10-concurrency-patterns.md +269 -269
  133. package/lib/assets/docs/article/functional-desgin-ppp/elixir/11-command-pattern.md +148 -148
  134. package/lib/assets/docs/article/functional-desgin-ppp/elixir/12-visitor-pattern.md +176 -176
  135. package/lib/assets/docs/article/functional-desgin-ppp/elixir/13-abstract-factory-pattern.md +604 -604
  136. package/lib/assets/docs/article/functional-desgin-ppp/elixir/14-abstract-server-pattern.md +729 -729
  137. package/lib/assets/docs/article/functional-desgin-ppp/elixir/15-gossiping-bus-drivers.md +291 -291
  138. package/lib/assets/docs/article/functional-desgin-ppp/elixir/16-payroll-system.md +420 -420
  139. package/lib/assets/docs/article/functional-desgin-ppp/elixir/17-video-rental-system.md +319 -319
  140. package/lib/assets/docs/article/functional-desgin-ppp/elixir/18-concurrency-system.md +466 -466
  141. package/lib/assets/docs/article/functional-desgin-ppp/elixir/19-wator-simulation.md +523 -523
  142. package/lib/assets/docs/article/functional-desgin-ppp/elixir/20-pattern-interactions.md +287 -287
  143. package/lib/assets/docs/article/functional-desgin-ppp/elixir/21-best-practices.md +340 -340
  144. package/lib/assets/docs/article/functional-desgin-ppp/elixir/22-oo-to-fp-migration.md +395 -395
  145. package/lib/assets/docs/article/functional-desgin-ppp/elixir/index.md +248 -248
  146. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/01-immutability-and-data-transformation.md +384 -384
  147. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/02-function-composition.md +452 -452
  148. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/03-polymorphism.md +495 -495
  149. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/04-data-validation.md +416 -416
  150. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/05-property-based-testing.md +382 -382
  151. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/06-tdd-functional.md +687 -687
  152. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/07-composite-pattern.md +442 -442
  153. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/08-decorator-pattern.md +479 -479
  154. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/09-adapter-pattern.md +479 -479
  155. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/10-strategy-pattern.md +427 -427
  156. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/11-command-pattern.md +428 -428
  157. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/12-visitor-pattern.md +339 -339
  158. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/13-abstract-factory-pattern.md +309 -309
  159. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/14-abstract-server-pattern.md +596 -596
  160. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/15-gossiping-bus-drivers.md +355 -355
  161. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/16-payroll-system.md +350 -350
  162. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/17-video-rental-system.md +414 -414
  163. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/18-concurrency-system.md +367 -367
  164. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/19-wator-simulation.md +403 -403
  165. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/20-pattern-interactions.md +291 -291
  166. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/21-best-practices.md +324 -324
  167. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/22-oo-to-fp-migration.md +332 -332
  168. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/index.md +274 -274
  169. package/lib/assets/docs/article/functional-desgin-ppp/haskell/01-immutability-and-data-transformation.md +298 -298
  170. package/lib/assets/docs/article/functional-desgin-ppp/haskell/02-function-composition.md +304 -304
  171. package/lib/assets/docs/article/functional-desgin-ppp/haskell/03-polymorphism.md +362 -362
  172. package/lib/assets/docs/article/functional-desgin-ppp/haskell/04-data-validation.md +257 -257
  173. package/lib/assets/docs/article/functional-desgin-ppp/haskell/05-property-based-testing.md +254 -254
  174. package/lib/assets/docs/article/functional-desgin-ppp/haskell/06-tdd-functional.md +283 -283
  175. package/lib/assets/docs/article/functional-desgin-ppp/haskell/07-composite-pattern.md +395 -395
  176. package/lib/assets/docs/article/functional-desgin-ppp/haskell/08-decorator-pattern.md +319 -319
  177. package/lib/assets/docs/article/functional-desgin-ppp/haskell/09-adapter-pattern.md +382 -382
  178. package/lib/assets/docs/article/functional-desgin-ppp/haskell/10-strategy-pattern.md +287 -287
  179. package/lib/assets/docs/article/functional-desgin-ppp/haskell/11-command-pattern.md +303 -303
  180. package/lib/assets/docs/article/functional-desgin-ppp/haskell/12-visitor-pattern.md +326 -326
  181. package/lib/assets/docs/article/functional-desgin-ppp/haskell/13-abstract-factory-pattern.md +332 -332
  182. package/lib/assets/docs/article/functional-desgin-ppp/haskell/14-abstract-server-pattern.md +379 -379
  183. package/lib/assets/docs/article/functional-desgin-ppp/haskell/15-gossiping-bus-drivers.md +177 -177
  184. package/lib/assets/docs/article/functional-desgin-ppp/haskell/16-payroll-system.md +219 -219
  185. package/lib/assets/docs/article/functional-desgin-ppp/haskell/17-video-rental-system.md +244 -244
  186. package/lib/assets/docs/article/functional-desgin-ppp/haskell/18-concurrency-system.md +363 -363
  187. package/lib/assets/docs/article/functional-desgin-ppp/haskell/19-wator-simulation.md +438 -438
  188. package/lib/assets/docs/article/functional-desgin-ppp/haskell/20-pattern-interactions.md +325 -325
  189. package/lib/assets/docs/article/functional-desgin-ppp/haskell/21-best-practices.md +403 -403
  190. package/lib/assets/docs/article/functional-desgin-ppp/haskell/22-oo-to-fp-migration.md +469 -469
  191. package/lib/assets/docs/article/functional-desgin-ppp/haskell/index.md +174 -174
  192. package/lib/assets/docs/article/functional-desgin-ppp/index.md +90 -90
  193. package/lib/assets/docs/article/functional-desgin-ppp/rust/01-immutability-and-data-transformation.md +450 -450
  194. package/lib/assets/docs/article/functional-desgin-ppp/rust/02-function-composition.md +463 -463
  195. package/lib/assets/docs/article/functional-desgin-ppp/rust/03-polymorphism.md +425 -425
  196. package/lib/assets/docs/article/functional-desgin-ppp/rust/04-data-validation.md +273 -273
  197. package/lib/assets/docs/article/functional-desgin-ppp/rust/05-property-based-testing.md +247 -247
  198. package/lib/assets/docs/article/functional-desgin-ppp/rust/06-tdd-and-functional.md +841 -841
  199. package/lib/assets/docs/article/functional-desgin-ppp/rust/07-composite-pattern.md +384 -384
  200. package/lib/assets/docs/article/functional-desgin-ppp/rust/08-decorator-pattern.md +383 -383
  201. package/lib/assets/docs/article/functional-desgin-ppp/rust/09-adapter-pattern.md +339 -339
  202. package/lib/assets/docs/article/functional-desgin-ppp/rust/10-strategy-pattern.md +331 -331
  203. package/lib/assets/docs/article/functional-desgin-ppp/rust/11-command-pattern.md +356 -356
  204. package/lib/assets/docs/article/functional-desgin-ppp/rust/12-visitor-pattern.md +379 -379
  205. package/lib/assets/docs/article/functional-desgin-ppp/rust/13-abstract-factory-pattern.md +361 -361
  206. package/lib/assets/docs/article/functional-desgin-ppp/rust/14-abstract-server-pattern.md +392 -392
  207. package/lib/assets/docs/article/functional-desgin-ppp/rust/15-gossiping-bus-drivers.md +300 -300
  208. package/lib/assets/docs/article/functional-desgin-ppp/rust/16-payroll-system.md +297 -297
  209. package/lib/assets/docs/article/functional-desgin-ppp/rust/17-video-rental-system.md +304 -304
  210. package/lib/assets/docs/article/functional-desgin-ppp/rust/18-concurrency-system.md +315 -315
  211. package/lib/assets/docs/article/functional-desgin-ppp/rust/19-wator-simulation.md +311 -311
  212. package/lib/assets/docs/article/functional-desgin-ppp/rust/20-pattern-interactions.md +304 -304
  213. package/lib/assets/docs/article/functional-desgin-ppp/rust/21-best-practices.md +336 -336
  214. package/lib/assets/docs/article/functional-desgin-ppp/rust/22-oo-to-fp-migration.md +349 -349
  215. package/lib/assets/docs/article/functional-desgin-ppp/rust/index.md +243 -243
  216. package/lib/assets/docs/article/functional-desgin-ppp/scala/01-immutability-and-data-transformation.md +328 -328
  217. package/lib/assets/docs/article/functional-desgin-ppp/scala/02-function-composition.md +348 -348
  218. package/lib/assets/docs/article/functional-desgin-ppp/scala/03-polymorphism.md +357 -357
  219. package/lib/assets/docs/article/functional-desgin-ppp/scala/04-data-validation.md +364 -364
  220. package/lib/assets/docs/article/functional-desgin-ppp/scala/05-property-based-testing.md +515 -515
  221. package/lib/assets/docs/article/functional-desgin-ppp/scala/06-tdd-functional.md +557 -557
  222. package/lib/assets/docs/article/functional-desgin-ppp/scala/07-composite-pattern.md +363 -363
  223. package/lib/assets/docs/article/functional-desgin-ppp/scala/08-decorator-pattern.md +327 -327
  224. package/lib/assets/docs/article/functional-desgin-ppp/scala/09-adapter-pattern.md +517 -517
  225. package/lib/assets/docs/article/functional-desgin-ppp/scala/10-strategy-pattern.md +441 -441
  226. package/lib/assets/docs/article/functional-desgin-ppp/scala/11-command-pattern.md +407 -407
  227. package/lib/assets/docs/article/functional-desgin-ppp/scala/12-visitor-pattern.md +379 -379
  228. package/lib/assets/docs/article/functional-desgin-ppp/scala/13-abstract-factory-pattern.md +398 -398
  229. package/lib/assets/docs/article/functional-desgin-ppp/scala/14-abstract-server-pattern.md +476 -476
  230. package/lib/assets/docs/article/functional-desgin-ppp/scala/15-gossiping-bus-drivers.md +391 -391
  231. package/lib/assets/docs/article/functional-desgin-ppp/scala/16-payroll-system.md +342 -342
  232. package/lib/assets/docs/article/functional-desgin-ppp/scala/17-video-rental-system.md +324 -324
  233. package/lib/assets/docs/article/functional-desgin-ppp/scala/18-concurrency-system.md +730 -730
  234. package/lib/assets/docs/article/functional-desgin-ppp/scala/19-wator-simulation.md +624 -624
  235. package/lib/assets/docs/article/functional-desgin-ppp/scala/20-pattern-interactions.md +512 -512
  236. package/lib/assets/docs/article/functional-desgin-ppp/scala/21-best-practices.md +433 -433
  237. package/lib/assets/docs/article/functional-desgin-ppp/scala/22-oo-to-fp-migration.md +688 -688
  238. package/lib/assets/docs/article/functional-desgin-ppp/scala/index.md +243 -243
  239. package/lib/assets/docs/article/getting-start-tdd/clojure/01-todo-list-and-first-test.md +166 -166
  240. package/lib/assets/docs/article/getting-start-tdd/clojure/02-fake-it-and-triangulation.md +162 -162
  241. package/lib/assets/docs/article/getting-start-tdd/clojure/03-obvious-implementation-and-refactoring.md +135 -135
  242. package/lib/assets/docs/article/getting-start-tdd/clojure/04-version-control-and-conventional-commits.md +88 -88
  243. package/lib/assets/docs/article/getting-start-tdd/clojure/05-package-management-and-static-analysis.md +299 -299
  244. package/lib/assets/docs/article/getting-start-tdd/clojure/06-task-runner-and-ci-cd.md +241 -241
  245. package/lib/assets/docs/article/getting-start-tdd/clojure/07-protocols-and-records.md +131 -131
  246. package/lib/assets/docs/article/getting-start-tdd/clojure/08-multimethods-and-design-patterns.md +130 -130
  247. package/lib/assets/docs/article/getting-start-tdd/clojure/09-namespaces-and-module-design.md +127 -127
  248. package/lib/assets/docs/article/getting-start-tdd/clojure/10-higher-order-functions-and-composition.md +114 -114
  249. package/lib/assets/docs/article/getting-start-tdd/clojure/11-persistent-data-and-pipeline.md +138 -138
  250. package/lib/assets/docs/article/getting-start-tdd/clojure/12-error-handling-and-spec.md +161 -161
  251. package/lib/assets/docs/article/getting-start-tdd/clojure/index.md +65 -65
  252. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter01.md +232 -232
  253. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter02.md +244 -244
  254. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter03.md +202 -202
  255. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter04.md +92 -92
  256. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter05.md +256 -256
  257. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter06.md +195 -195
  258. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter07.md +214 -214
  259. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter08.md +249 -249
  260. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter09.md +174 -174
  261. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter10.md +166 -166
  262. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter11.md +192 -192
  263. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter12.md +211 -211
  264. package/lib/assets/docs/article/getting-start-tdd/csharp/index.md +83 -83
  265. package/lib/assets/docs/article/getting-start-tdd/elixir/01-todo-list-and-first-test.md +87 -87
  266. package/lib/assets/docs/article/getting-start-tdd/elixir/02-fake-it-and-triangulation.md +95 -95
  267. package/lib/assets/docs/article/getting-start-tdd/elixir/03-obvious-implementation-and-refactoring.md +109 -109
  268. package/lib/assets/docs/article/getting-start-tdd/elixir/04-version-control-and-conventional-commits.md +96 -96
  269. package/lib/assets/docs/article/getting-start-tdd/elixir/05-package-management-and-static-analysis.md +88 -88
  270. package/lib/assets/docs/article/getting-start-tdd/elixir/06-task-runner-and-ci-cd.md +71 -71
  271. package/lib/assets/docs/article/getting-start-tdd/elixir/07-structs-and-protocols.md +110 -110
  272. package/lib/assets/docs/article/getting-start-tdd/elixir/08-pattern-matching-and-guards.md +108 -108
  273. package/lib/assets/docs/article/getting-start-tdd/elixir/09-module-design-and-behaviours.md +104 -104
  274. package/lib/assets/docs/article/getting-start-tdd/elixir/10-higher-order-functions-and-pipeline.md +178 -178
  275. package/lib/assets/docs/article/getting-start-tdd/elixir/11-stream-and-lazy-evaluation.md +142 -142
  276. package/lib/assets/docs/article/getting-start-tdd/elixir/12-error-handling-and-with.md +145 -145
  277. package/lib/assets/docs/article/getting-start-tdd/elixir/index.md +35 -35
  278. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter01.md +202 -202
  279. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter02.md +246 -246
  280. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter03.md +218 -218
  281. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter04.md +179 -179
  282. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter05.md +267 -267
  283. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter06.md +190 -190
  284. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter07.md +161 -161
  285. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter08.md +175 -175
  286. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter09.md +222 -222
  287. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter10.md +189 -189
  288. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter11.md +212 -212
  289. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter12.md +215 -215
  290. package/lib/assets/docs/article/getting-start-tdd/fsharp/index.md +71 -71
  291. package/lib/assets/docs/article/getting-start-tdd/go/01-todo-list-and-first-test.md +213 -213
  292. package/lib/assets/docs/article/getting-start-tdd/go/02-fake-it-and-triangulation.md +302 -302
  293. package/lib/assets/docs/article/getting-start-tdd/go/03-obvious-implementation-and-refactoring.md +339 -339
  294. package/lib/assets/docs/article/getting-start-tdd/go/04-version-control-and-conventional-commits.md +112 -112
  295. package/lib/assets/docs/article/getting-start-tdd/go/05-package-management-and-static-analysis.md +272 -272
  296. package/lib/assets/docs/article/getting-start-tdd/go/06-task-runner-and-ci-cd.md +233 -233
  297. package/lib/assets/docs/article/getting-start-tdd/go/07-encapsulation-and-polymorphism.md +394 -394
  298. package/lib/assets/docs/article/getting-start-tdd/go/08-design-patterns.md +422 -422
  299. package/lib/assets/docs/article/getting-start-tdd/go/09-solid-principles-and-module-design.md +400 -400
  300. package/lib/assets/docs/article/getting-start-tdd/go/10-higher-order-functions-and-composition.md +226 -226
  301. package/lib/assets/docs/article/getting-start-tdd/go/11-immutable-data-and-pipeline.md +296 -296
  302. package/lib/assets/docs/article/getting-start-tdd/go/12-error-handling-and-type-safety.md +411 -411
  303. package/lib/assets/docs/article/getting-start-tdd/go/index.md +83 -83
  304. package/lib/assets/docs/article/getting-start-tdd/haskell/01-todo-list-and-first-test.md +279 -279
  305. package/lib/assets/docs/article/getting-start-tdd/haskell/02-fake-it-and-triangulation.md +337 -337
  306. package/lib/assets/docs/article/getting-start-tdd/haskell/03-obvious-implementation-and-refactoring.md +257 -257
  307. package/lib/assets/docs/article/getting-start-tdd/haskell/04-version-control-and-conventional-commits.md +182 -182
  308. package/lib/assets/docs/article/getting-start-tdd/haskell/05-package-management-and-static-analysis.md +313 -313
  309. package/lib/assets/docs/article/getting-start-tdd/haskell/06-task-runner-and-ci-cd.md +309 -309
  310. package/lib/assets/docs/article/getting-start-tdd/haskell/07-algebraic-data-types-and-type-classes.md +412 -412
  311. package/lib/assets/docs/article/getting-start-tdd/haskell/08-pattern-matching-and-guards.md +390 -390
  312. package/lib/assets/docs/article/getting-start-tdd/haskell/09-module-design-and-smart-constructors.md +461 -461
  313. package/lib/assets/docs/article/getting-start-tdd/haskell/10-higher-order-functions-and-currying.md +434 -434
  314. package/lib/assets/docs/article/getting-start-tdd/haskell/11-function-composition-and-point-free.md +392 -392
  315. package/lib/assets/docs/article/getting-start-tdd/haskell/12-monad-and-error-handling.md +631 -631
  316. package/lib/assets/docs/article/getting-start-tdd/haskell/index.md +49 -49
  317. package/lib/assets/docs/article/getting-start-tdd/index.md +93 -93
  318. package/lib/assets/docs/article/getting-start-tdd/integration/01-language-overview.md +375 -375
  319. package/lib/assets/docs/article/getting-start-tdd/integration/02-test-framework-comparison.md +349 -349
  320. package/lib/assets/docs/article/getting-start-tdd/integration/03-tdd-pattern-comparison.md +445 -445
  321. package/lib/assets/docs/article/getting-start-tdd/integration/04-type-system-comparison.md +409 -409
  322. package/lib/assets/docs/article/getting-start-tdd/integration/05-dev-environment-comparison.md +330 -330
  323. package/lib/assets/docs/article/getting-start-tdd/integration/06-learning-roadmap.md +290 -290
  324. package/lib/assets/docs/article/getting-start-tdd/integration/index.md +69 -69
  325. package/lib/assets/docs/article/getting-start-tdd/java/01-todo-list-and-first-test.md +234 -234
  326. package/lib/assets/docs/article/getting-start-tdd/java/02-fake-it-and-triangulation.md +261 -261
  327. package/lib/assets/docs/article/getting-start-tdd/java/03-obvious-implementation-and-refactoring.md +185 -185
  328. package/lib/assets/docs/article/getting-start-tdd/java/04-version-control-and-conventional-commits.md +115 -115
  329. package/lib/assets/docs/article/getting-start-tdd/java/05-package-management-and-static-analysis.md +382 -382
  330. package/lib/assets/docs/article/getting-start-tdd/java/06-task-runner-and-ci-cd.md +272 -272
  331. package/lib/assets/docs/article/getting-start-tdd/java/07-encapsulation-and-polymorphism.md +626 -626
  332. package/lib/assets/docs/article/getting-start-tdd/java/08-design-patterns.md +393 -393
  333. package/lib/assets/docs/article/getting-start-tdd/java/09-solid-principles-and-module-design.md +310 -310
  334. package/lib/assets/docs/article/getting-start-tdd/java/10-higher-order-functions-and-composition.md +188 -188
  335. package/lib/assets/docs/article/getting-start-tdd/java/11-immutable-data-and-pipeline.md +167 -167
  336. package/lib/assets/docs/article/getting-start-tdd/java/12-error-handling-and-type-safety.md +205 -205
  337. package/lib/assets/docs/article/getting-start-tdd/java/index.md +61 -61
  338. package/lib/assets/docs/article/getting-start-tdd/node/01-todo-list-and-first-test.md +244 -244
  339. package/lib/assets/docs/article/getting-start-tdd/node/02-fake-it-and-triangulation.md +262 -262
  340. package/lib/assets/docs/article/getting-start-tdd/node/03-obvious-implementation-and-refactoring.md +169 -169
  341. package/lib/assets/docs/article/getting-start-tdd/node/04-version-control-and-conventional-commits.md +112 -112
  342. package/lib/assets/docs/article/getting-start-tdd/node/05-package-management-and-static-analysis.md +314 -314
  343. package/lib/assets/docs/article/getting-start-tdd/node/06-task-runner-and-ci-cd.md +235 -235
  344. package/lib/assets/docs/article/getting-start-tdd/node/07-encapsulation-and-polymorphism.md +327 -327
  345. package/lib/assets/docs/article/getting-start-tdd/node/08-design-patterns.md +322 -322
  346. package/lib/assets/docs/article/getting-start-tdd/node/09-solid-principles-and-module-design.md +285 -285
  347. package/lib/assets/docs/article/getting-start-tdd/node/10-higher-order-functions-and-composition.md +199 -199
  348. package/lib/assets/docs/article/getting-start-tdd/node/11-immutable-data-and-pipeline.md +207 -207
  349. package/lib/assets/docs/article/getting-start-tdd/node/12-error-handling-and-type-safety.md +295 -295
  350. package/lib/assets/docs/article/getting-start-tdd/node/index.md +56 -56
  351. package/lib/assets/docs/article/getting-start-tdd/php/01-todo-list-and-first-test.md +259 -259
  352. package/lib/assets/docs/article/getting-start-tdd/php/02-fake-it-and-triangulation.md +200 -200
  353. package/lib/assets/docs/article/getting-start-tdd/php/03-obvious-implementation-and-refactoring.md +248 -248
  354. package/lib/assets/docs/article/getting-start-tdd/php/04-version-control-and-conventional-commits.md +141 -141
  355. package/lib/assets/docs/article/getting-start-tdd/php/05-package-management-and-static-analysis.md +410 -410
  356. package/lib/assets/docs/article/getting-start-tdd/php/06-task-runner-and-ci-cd.md +321 -321
  357. package/lib/assets/docs/article/getting-start-tdd/php/07-encapsulation-and-polymorphism.md +372 -372
  358. package/lib/assets/docs/article/getting-start-tdd/php/08-design-patterns.md +453 -453
  359. package/lib/assets/docs/article/getting-start-tdd/php/09-solid-principles-and-module-design.md +460 -460
  360. package/lib/assets/docs/article/getting-start-tdd/php/10-higher-order-functions-and-composition.md +182 -182
  361. package/lib/assets/docs/article/getting-start-tdd/php/11-immutable-data-and-pipeline.md +266 -266
  362. package/lib/assets/docs/article/getting-start-tdd/php/12-error-handling-and-type-safety.md +308 -308
  363. package/lib/assets/docs/article/getting-start-tdd/php/index.md +84 -84
  364. package/lib/assets/docs/article/getting-start-tdd/python/01-todo-list-and-first-test.md +201 -201
  365. package/lib/assets/docs/article/getting-start-tdd/python/02-fake-it-and-triangulation.md +247 -247
  366. package/lib/assets/docs/article/getting-start-tdd/python/03-obvious-implementation-and-refactoring.md +199 -199
  367. package/lib/assets/docs/article/getting-start-tdd/python/04-version-control-and-conventional-commits.md +87 -87
  368. package/lib/assets/docs/article/getting-start-tdd/python/05-package-management-and-static-analysis.md +274 -274
  369. package/lib/assets/docs/article/getting-start-tdd/python/06-task-runner-and-ci-cd.md +190 -190
  370. package/lib/assets/docs/article/getting-start-tdd/python/07-encapsulation-and-polymorphism.md +208 -208
  371. package/lib/assets/docs/article/getting-start-tdd/python/08-design-patterns.md +172 -172
  372. package/lib/assets/docs/article/getting-start-tdd/python/09-solid-principles-and-module-design.md +130 -130
  373. package/lib/assets/docs/article/getting-start-tdd/python/10-higher-order-functions-and-composition.md +122 -122
  374. package/lib/assets/docs/article/getting-start-tdd/python/11-immutable-data-and-pipeline.md +116 -116
  375. package/lib/assets/docs/article/getting-start-tdd/python/12-error-handling-and-type-safety.md +126 -126
  376. package/lib/assets/docs/article/getting-start-tdd/python/index.md +55 -55
  377. package/lib/assets/docs/article/getting-start-tdd/ruby/01-todo-list-and-first-test.md +231 -231
  378. package/lib/assets/docs/article/getting-start-tdd/ruby/02-fake-it-and-triangulation.md +238 -238
  379. package/lib/assets/docs/article/getting-start-tdd/ruby/03-obvious-implementation-and-refactoring.md +228 -228
  380. package/lib/assets/docs/article/getting-start-tdd/ruby/04-version-control-and-conventional-commits.md +112 -112
  381. package/lib/assets/docs/article/getting-start-tdd/ruby/05-package-management-and-static-analysis.md +287 -287
  382. package/lib/assets/docs/article/getting-start-tdd/ruby/06-task-runner-and-ci-cd.md +248 -248
  383. package/lib/assets/docs/article/getting-start-tdd/ruby/07-encapsulation-and-polymorphism.md +279 -279
  384. package/lib/assets/docs/article/getting-start-tdd/ruby/08-design-patterns.md +329 -329
  385. package/lib/assets/docs/article/getting-start-tdd/ruby/09-solid-principles-and-module-design.md +196 -196
  386. package/lib/assets/docs/article/getting-start-tdd/ruby/10-higher-order-functions-and-composition.md +175 -175
  387. package/lib/assets/docs/article/getting-start-tdd/ruby/11-immutable-data-and-pipeline.md +237 -237
  388. package/lib/assets/docs/article/getting-start-tdd/ruby/12-error-handling-and-type-safety.md +398 -398
  389. package/lib/assets/docs/article/getting-start-tdd/ruby/index.md +83 -83
  390. package/lib/assets/docs/article/getting-start-tdd/rust/01-todo-list-and-first-test.md +211 -211
  391. package/lib/assets/docs/article/getting-start-tdd/rust/02-fake-it-and-triangulation.md +264 -264
  392. package/lib/assets/docs/article/getting-start-tdd/rust/03-obvious-implementation-and-refactoring.md +233 -233
  393. package/lib/assets/docs/article/getting-start-tdd/rust/04-version-control-and-conventional-commits.md +92 -92
  394. package/lib/assets/docs/article/getting-start-tdd/rust/05-package-management-and-static-analysis.md +212 -212
  395. package/lib/assets/docs/article/getting-start-tdd/rust/06-task-runner-and-ci-cd.md +164 -164
  396. package/lib/assets/docs/article/getting-start-tdd/rust/07-encapsulation-and-polymorphism.md +142 -142
  397. package/lib/assets/docs/article/getting-start-tdd/rust/08-design-patterns.md +145 -145
  398. package/lib/assets/docs/article/getting-start-tdd/rust/09-solid-principles-and-module-design.md +110 -110
  399. package/lib/assets/docs/article/getting-start-tdd/rust/10-higher-order-functions-and-composition.md +94 -94
  400. package/lib/assets/docs/article/getting-start-tdd/rust/11-immutable-data-and-pipeline.md +105 -105
  401. package/lib/assets/docs/article/getting-start-tdd/rust/12-error-handling-and-type-safety.md +112 -112
  402. package/lib/assets/docs/article/getting-start-tdd/rust/index.md +83 -83
  403. package/lib/assets/docs/article/getting-start-tdd/scala/01-todo-list-and-first-test.md +111 -111
  404. package/lib/assets/docs/article/getting-start-tdd/scala/02-fake-it-and-triangulation.md +107 -107
  405. package/lib/assets/docs/article/getting-start-tdd/scala/03-obvious-implementation-and-refactoring.md +99 -99
  406. package/lib/assets/docs/article/getting-start-tdd/scala/04-version-control-and-conventional-commits.md +123 -123
  407. package/lib/assets/docs/article/getting-start-tdd/scala/05-package-management-and-static-analysis.md +196 -196
  408. package/lib/assets/docs/article/getting-start-tdd/scala/06-task-runner-and-ci-cd.md +186 -186
  409. package/lib/assets/docs/article/getting-start-tdd/scala/07-case-classes-and-traits.md +139 -139
  410. package/lib/assets/docs/article/getting-start-tdd/scala/08-pattern-matching-and-sealed-traits.md +106 -106
  411. package/lib/assets/docs/article/getting-start-tdd/scala/09-packages-and-module-design.md +75 -75
  412. package/lib/assets/docs/article/getting-start-tdd/scala/10-higher-order-functions-and-composition.md +104 -104
  413. package/lib/assets/docs/article/getting-start-tdd/scala/11-collections-and-lazy-evaluation.md +94 -94
  414. package/lib/assets/docs/article/getting-start-tdd/scala/12-error-handling-and-type-safety.md +92 -92
  415. package/lib/assets/docs/article/getting-start-tdd/scala/index.md +65 -65
  416. package/lib/assets/docs/article/grokking-concurrency/all/index.md +404 -404
  417. package/lib/assets/docs/article/grokking-concurrency/all/part-1-ch02-sequential.md +554 -554
  418. package/lib/assets/docs/article/grokking-concurrency/all/part-2-ch04-05-threads.md +469 -469
  419. package/lib/assets/docs/article/grokking-concurrency/all/part-3-ch06-multitasking.md +520 -520
  420. package/lib/assets/docs/article/grokking-concurrency/all/part-4-ch07-parallel-patterns.md +420 -420
  421. package/lib/assets/docs/article/grokking-concurrency/all/part-5-ch08-09-synchronization.md +510 -510
  422. package/lib/assets/docs/article/grokking-concurrency/all/part-6-ch10-11-nonblocking-io.md +435 -435
  423. package/lib/assets/docs/article/grokking-concurrency/all/part-7-ch12-async.md +465 -465
  424. package/lib/assets/docs/article/grokking-concurrency/all/part-8-ch13-mapreduce.md +377 -377
  425. package/lib/assets/docs/article/grokking-concurrency/clojure/index.md +116 -116
  426. package/lib/assets/docs/article/grokking-concurrency/clojure/part-1.md +108 -108
  427. package/lib/assets/docs/article/grokking-concurrency/clojure/part-2.md +101 -101
  428. package/lib/assets/docs/article/grokking-concurrency/clojure/part-3.md +122 -122
  429. package/lib/assets/docs/article/grokking-concurrency/clojure/part-4.md +123 -123
  430. package/lib/assets/docs/article/grokking-concurrency/clojure/part-5.md +118 -118
  431. package/lib/assets/docs/article/grokking-concurrency/clojure/part-6.md +89 -89
  432. package/lib/assets/docs/article/grokking-concurrency/clojure/part-7.md +100 -100
  433. package/lib/assets/docs/article/grokking-concurrency/clojure/part-8.md +120 -120
  434. package/lib/assets/docs/article/grokking-concurrency/csharp/index.md +101 -101
  435. package/lib/assets/docs/article/grokking-concurrency/csharp/part-1.md +97 -97
  436. package/lib/assets/docs/article/grokking-concurrency/csharp/part-2.md +123 -123
  437. package/lib/assets/docs/article/grokking-concurrency/csharp/part-3.md +101 -101
  438. package/lib/assets/docs/article/grokking-concurrency/csharp/part-4.md +112 -112
  439. package/lib/assets/docs/article/grokking-concurrency/csharp/part-5.md +99 -99
  440. package/lib/assets/docs/article/grokking-concurrency/csharp/part-6.md +61 -61
  441. package/lib/assets/docs/article/grokking-concurrency/csharp/part-7.md +84 -84
  442. package/lib/assets/docs/article/grokking-concurrency/csharp/part-8.md +92 -92
  443. package/lib/assets/docs/article/grokking-concurrency/fsharp/index.md +65 -65
  444. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-1.md +80 -80
  445. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-2.md +103 -103
  446. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-3.md +94 -94
  447. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-4.md +110 -110
  448. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-5.md +104 -104
  449. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-6.md +93 -93
  450. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-7.md +121 -121
  451. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-8.md +107 -107
  452. package/lib/assets/docs/article/grokking-concurrency/haskell/index.md +248 -248
  453. package/lib/assets/docs/article/grokking-concurrency/haskell/part-1.md +96 -96
  454. package/lib/assets/docs/article/grokking-concurrency/haskell/part-2.md +96 -96
  455. package/lib/assets/docs/article/grokking-concurrency/haskell/part-3.md +91 -91
  456. package/lib/assets/docs/article/grokking-concurrency/haskell/part-4.md +106 -106
  457. package/lib/assets/docs/article/grokking-concurrency/haskell/part-5.md +99 -99
  458. package/lib/assets/docs/article/grokking-concurrency/haskell/part-6.md +95 -95
  459. package/lib/assets/docs/article/grokking-concurrency/haskell/part-7.md +111 -111
  460. package/lib/assets/docs/article/grokking-concurrency/haskell/part-8.md +118 -118
  461. package/lib/assets/docs/article/grokking-concurrency/index.md +66 -66
  462. package/lib/assets/docs/article/grokking-concurrency/java/index.md +102 -102
  463. package/lib/assets/docs/article/grokking-concurrency/java/part-1.md +308 -308
  464. package/lib/assets/docs/article/grokking-concurrency/java/part-2.md +334 -334
  465. package/lib/assets/docs/article/grokking-concurrency/java/part-3.md +221 -221
  466. package/lib/assets/docs/article/grokking-concurrency/java/part-4.md +213 -213
  467. package/lib/assets/docs/article/grokking-concurrency/java/part-5.md +112 -112
  468. package/lib/assets/docs/article/grokking-concurrency/java/part-6.md +69 -69
  469. package/lib/assets/docs/article/grokking-concurrency/java/part-7.md +101 -101
  470. package/lib/assets/docs/article/grokking-concurrency/java/part-8.md +101 -101
  471. package/lib/assets/docs/article/grokking-concurrency/python/index.md +313 -313
  472. package/lib/assets/docs/article/grokking-concurrency/python/part-1.md +239 -239
  473. package/lib/assets/docs/article/grokking-concurrency/python/part-2.md +418 -418
  474. package/lib/assets/docs/article/grokking-concurrency/python/part-3.md +227 -227
  475. package/lib/assets/docs/article/grokking-concurrency/python/part-4.md +299 -299
  476. package/lib/assets/docs/article/grokking-concurrency/python/part-5.md +315 -315
  477. package/lib/assets/docs/article/grokking-concurrency/python/part-6.md +297 -297
  478. package/lib/assets/docs/article/grokking-concurrency/python/part-7.md +314 -314
  479. package/lib/assets/docs/article/grokking-concurrency/python/part-8.md +360 -360
  480. package/lib/assets/docs/article/grokking-concurrency/rust/index.md +270 -270
  481. package/lib/assets/docs/article/grokking-concurrency/rust/part-1.md +108 -108
  482. package/lib/assets/docs/article/grokking-concurrency/rust/part-2.md +120 -120
  483. package/lib/assets/docs/article/grokking-concurrency/rust/part-3.md +126 -126
  484. package/lib/assets/docs/article/grokking-concurrency/rust/part-4.md +175 -175
  485. package/lib/assets/docs/article/grokking-concurrency/rust/part-5.md +158 -158
  486. package/lib/assets/docs/article/grokking-concurrency/rust/part-6.md +94 -94
  487. package/lib/assets/docs/article/grokking-concurrency/rust/part-7.md +133 -133
  488. package/lib/assets/docs/article/grokking-concurrency/rust/part-8.md +155 -155
  489. package/lib/assets/docs/article/grokking-concurrency/scala/index.md +69 -69
  490. package/lib/assets/docs/article/grokking-concurrency/scala/part-1.md +78 -78
  491. package/lib/assets/docs/article/grokking-concurrency/scala/part-2.md +112 -112
  492. package/lib/assets/docs/article/grokking-concurrency/scala/part-3.md +93 -93
  493. package/lib/assets/docs/article/grokking-concurrency/scala/part-4.md +110 -110
  494. package/lib/assets/docs/article/grokking-concurrency/scala/part-5.md +119 -119
  495. package/lib/assets/docs/article/grokking-concurrency/scala/part-6.md +83 -83
  496. package/lib/assets/docs/article/grokking-concurrency/scala/part-7.md +131 -131
  497. package/lib/assets/docs/article/grokking-concurrency/scala/part-8.md +129 -129
  498. package/lib/assets/docs/article/grokkingfp/all/index.md +368 -368
  499. package/lib/assets/docs/article/grokkingfp/all/part-1-ch01-fp-introduction.md +530 -530
  500. package/lib/assets/docs/article/grokkingfp/all/part-1-ch02-pure-functions.md +923 -923
  501. package/lib/assets/docs/article/grokkingfp/all/part-2-ch03-immutable-data.md +1128 -1128
  502. package/lib/assets/docs/article/grokkingfp/all/part-2-ch04-higher-order-functions.md +1104 -1104
  503. package/lib/assets/docs/article/grokkingfp/all/part-2-ch05-flatmap.md +1026 -1026
  504. package/lib/assets/docs/article/grokkingfp/all/part-3-ch06-option.md +785 -785
  505. package/lib/assets/docs/article/grokkingfp/all/part-3-ch07-either-adt.md +871 -871
  506. package/lib/assets/docs/article/grokkingfp/all/part-4-ch08-io-monad.md +972 -972
  507. package/lib/assets/docs/article/grokkingfp/all/part-4-ch09-streams.md +926 -926
  508. package/lib/assets/docs/article/grokkingfp/all/part-5-ch10-concurrency.md +870 -870
  509. package/lib/assets/docs/article/grokkingfp/all/part-6-ch11-application.md +715 -715
  510. package/lib/assets/docs/article/grokkingfp/all/part-6-ch12-testing.md +626 -626
  511. package/lib/assets/docs/article/grokkingfp/all/writing-plan.md +712 -712
  512. package/lib/assets/docs/article/grokkingfp/clojure/index.md +276 -276
  513. package/lib/assets/docs/article/grokkingfp/clojure/part-1.md +667 -667
  514. package/lib/assets/docs/article/grokkingfp/clojure/part-2.md +643 -643
  515. package/lib/assets/docs/article/grokkingfp/clojure/part-3.md +620 -620
  516. package/lib/assets/docs/article/grokkingfp/clojure/part-4.md +697 -697
  517. package/lib/assets/docs/article/grokkingfp/clojure/part-5.md +751 -751
  518. package/lib/assets/docs/article/grokkingfp/clojure/part-6.md +721 -721
  519. package/lib/assets/docs/article/grokkingfp/csharp/index.md +246 -246
  520. package/lib/assets/docs/article/grokkingfp/csharp/part-1.md +811 -811
  521. package/lib/assets/docs/article/grokkingfp/csharp/part-2.md +971 -971
  522. package/lib/assets/docs/article/grokkingfp/csharp/part-3.md +981 -981
  523. package/lib/assets/docs/article/grokkingfp/csharp/part-4.md +949 -949
  524. package/lib/assets/docs/article/grokkingfp/csharp/part-5.md +947 -947
  525. package/lib/assets/docs/article/grokkingfp/csharp/part-6.md +739 -739
  526. package/lib/assets/docs/article/grokkingfp/elixir/index.md +203 -203
  527. package/lib/assets/docs/article/grokkingfp/elixir/part-1.md +712 -712
  528. package/lib/assets/docs/article/grokkingfp/elixir/part-2.md +838 -838
  529. package/lib/assets/docs/article/grokkingfp/elixir/part-3.md +985 -985
  530. package/lib/assets/docs/article/grokkingfp/elixir/part-4.md +974 -974
  531. package/lib/assets/docs/article/grokkingfp/elixir/part-5.md +1286 -1286
  532. package/lib/assets/docs/article/grokkingfp/elixir/part-6.md +1049 -1049
  533. package/lib/assets/docs/article/grokkingfp/fsharp/index.md +210 -210
  534. package/lib/assets/docs/article/grokkingfp/fsharp/part-1.md +714 -714
  535. package/lib/assets/docs/article/grokkingfp/fsharp/part-2.md +961 -961
  536. package/lib/assets/docs/article/grokkingfp/fsharp/part-3.md +972 -972
  537. package/lib/assets/docs/article/grokkingfp/fsharp/part-4.md +832 -832
  538. package/lib/assets/docs/article/grokkingfp/fsharp/part-5.md +911 -911
  539. package/lib/assets/docs/article/grokkingfp/fsharp/part-6.md +922 -922
  540. package/lib/assets/docs/article/grokkingfp/haskell/index.md +234 -234
  541. package/lib/assets/docs/article/grokkingfp/haskell/part-1.md +591 -591
  542. package/lib/assets/docs/article/grokkingfp/haskell/part-2.md +866 -866
  543. package/lib/assets/docs/article/grokkingfp/haskell/part-3.md +915 -915
  544. package/lib/assets/docs/article/grokkingfp/haskell/part-4.md +878 -878
  545. package/lib/assets/docs/article/grokkingfp/haskell/part-5.md +845 -845
  546. package/lib/assets/docs/article/grokkingfp/haskell/part-6.md +844 -844
  547. package/lib/assets/docs/article/grokkingfp/index.md +143 -143
  548. package/lib/assets/docs/article/grokkingfp/java/index.md +211 -211
  549. package/lib/assets/docs/article/grokkingfp/java/part-1.md +648 -648
  550. package/lib/assets/docs/article/grokkingfp/java/part-2.md +675 -675
  551. package/lib/assets/docs/article/grokkingfp/java/part-3.md +672 -672
  552. package/lib/assets/docs/article/grokkingfp/java/part-4.md +771 -771
  553. package/lib/assets/docs/article/grokkingfp/java/part-5.md +959 -959
  554. package/lib/assets/docs/article/grokkingfp/java/part-6.md +1328 -1328
  555. package/lib/assets/docs/article/grokkingfp/python/index.md +258 -258
  556. package/lib/assets/docs/article/grokkingfp/python/part-1.md +443 -443
  557. package/lib/assets/docs/article/grokkingfp/python/part-2.md +958 -958
  558. package/lib/assets/docs/article/grokkingfp/python/part-3.md +1004 -1004
  559. package/lib/assets/docs/article/grokkingfp/python/part-4.md +765 -765
  560. package/lib/assets/docs/article/grokkingfp/python/part-5.md +747 -747
  561. package/lib/assets/docs/article/grokkingfp/python/part-6.md +861 -861
  562. package/lib/assets/docs/article/grokkingfp/ruby/index.md +330 -330
  563. package/lib/assets/docs/article/grokkingfp/ruby/part-1.md +755 -755
  564. package/lib/assets/docs/article/grokkingfp/ruby/part-2.md +938 -938
  565. package/lib/assets/docs/article/grokkingfp/ruby/part-3.md +946 -946
  566. package/lib/assets/docs/article/grokkingfp/ruby/part-4.md +921 -921
  567. package/lib/assets/docs/article/grokkingfp/ruby/part-5.md +908 -908
  568. package/lib/assets/docs/article/grokkingfp/ruby/part-6.md +1412 -1412
  569. package/lib/assets/docs/article/grokkingfp/rust/index.md +242 -242
  570. package/lib/assets/docs/article/grokkingfp/rust/part-1.md +634 -634
  571. package/lib/assets/docs/article/grokkingfp/rust/part-2.md +1060 -1060
  572. package/lib/assets/docs/article/grokkingfp/rust/part-3.md +994 -994
  573. package/lib/assets/docs/article/grokkingfp/rust/part-4.md +573 -573
  574. package/lib/assets/docs/article/grokkingfp/rust/part-5.md +705 -705
  575. package/lib/assets/docs/article/grokkingfp/rust/part-6.md +508 -508
  576. package/lib/assets/docs/article/grokkingfp/scala/index.md +171 -171
  577. package/lib/assets/docs/article/grokkingfp/scala/part-1.md +543 -543
  578. package/lib/assets/docs/article/grokkingfp/scala/part-2.md +946 -946
  579. package/lib/assets/docs/article/grokkingfp/scala/part-3.md +919 -919
  580. package/lib/assets/docs/article/grokkingfp/scala/part-4.md +742 -742
  581. package/lib/assets/docs/article/grokkingfp/scala/part-5.md +722 -722
  582. package/lib/assets/docs/article/grokkingfp/scala/part-6.md +867 -867
  583. package/lib/assets/docs/article/grokkingfp/typescript/index.md +273 -273
  584. package/lib/assets/docs/article/grokkingfp/typescript/part-1.md +561 -561
  585. package/lib/assets/docs/article/grokkingfp/typescript/part-2.md +1129 -1129
  586. package/lib/assets/docs/article/grokkingfp/typescript/part-3.md +842 -842
  587. package/lib/assets/docs/article/grokkingfp/typescript/part-4.md +1087 -1087
  588. package/lib/assets/docs/article/grokkingfp/typescript/part-5.md +717 -717
  589. package/lib/assets/docs/article/grokkingfp/typescript/part-6.md +982 -982
  590. package/lib/assets/docs/article/index.md +41 -41
  591. package/lib/assets/docs/article/practical-database-design/index.md +121 -121
  592. package/lib/assets/docs/article/practical-database-design/part1/chapter01.md +288 -288
  593. package/lib/assets/docs/article/practical-database-design/part1/chapter02.md +518 -518
  594. package/lib/assets/docs/article/practical-database-design/part1/chapter03.md +557 -557
  595. package/lib/assets/docs/article/practical-database-design/part2/chapter04.md +924 -924
  596. package/lib/assets/docs/article/practical-database-design/part2/chapter05.md +1627 -1627
  597. package/lib/assets/docs/article/practical-database-design/part2/chapter06.md +2716 -2716
  598. package/lib/assets/docs/article/practical-database-design/part2/chapter07.md +2082 -2082
  599. package/lib/assets/docs/article/practical-database-design/part2/chapter08.md +2105 -2105
  600. package/lib/assets/docs/article/practical-database-design/part2/chapter09.md +2031 -2031
  601. package/lib/assets/docs/article/practical-database-design/part2/chapter10.md +1387 -1387
  602. package/lib/assets/docs/article/practical-database-design/part2/chapter11.md +1677 -1677
  603. package/lib/assets/docs/article/practical-database-design/part2/chapter12.md +1417 -1417
  604. package/lib/assets/docs/article/practical-database-design/part2/chapter13.md +1434 -1434
  605. package/lib/assets/docs/article/practical-database-design/part3/chapter14.md +667 -667
  606. package/lib/assets/docs/article/practical-database-design/part3/chapter15.md +1625 -1625
  607. package/lib/assets/docs/article/practical-database-design/part3/chapter16.md +1915 -1915
  608. package/lib/assets/docs/article/practical-database-design/part3/chapter17.md +1708 -1708
  609. package/lib/assets/docs/article/practical-database-design/part3/chapter18.md +2095 -2095
  610. package/lib/assets/docs/article/practical-database-design/part3/chapter19.md +1123 -1123
  611. package/lib/assets/docs/article/practical-database-design/part3/chapter20.md +1031 -1031
  612. package/lib/assets/docs/article/practical-database-design/part3/chapter21.md +1382 -1382
  613. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter14-orm.md +991 -991
  614. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter15-orm.md +1300 -1300
  615. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter16-orm.md +1166 -1166
  616. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter17-orm.md +1584 -1584
  617. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter18-orm.md +1183 -1183
  618. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter19-orm.md +1016 -1016
  619. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter20-orm.md +1753 -1753
  620. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter21-orm.md +1447 -1447
  621. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter22-orm.md +1878 -1878
  622. package/lib/assets/docs/article/practical-database-design/part4/chapter22.md +965 -965
  623. package/lib/assets/docs/article/practical-database-design/part4/chapter23.md +2069 -2069
  624. package/lib/assets/docs/article/practical-database-design/part4/chapter24.md +2439 -2439
  625. package/lib/assets/docs/article/practical-database-design/part4/chapter25.md +3661 -3661
  626. package/lib/assets/docs/article/practical-database-design/part4/chapter26.md +2916 -2916
  627. package/lib/assets/docs/article/practical-database-design/part4/chapter27.md +3105 -3105
  628. package/lib/assets/docs/article/practical-database-design/part4/chapter28.md +2697 -2697
  629. package/lib/assets/docs/article/practical-database-design/part4/chapter29.md +2544 -2544
  630. package/lib/assets/docs/article/practical-database-design/part4/chapter30.md +2180 -2180
  631. package/lib/assets/docs/article/practical-database-design/part4/chapter31.md +1192 -1192
  632. package/lib/assets/docs/article/practical-database-design/part4/chapter32.md +2101 -2101
  633. package/lib/assets/docs/article/practical-database-design/part5/chapter33.md +1032 -1032
  634. package/lib/assets/docs/article/practical-database-design/part5/chapter34.md +1609 -1609
  635. package/lib/assets/docs/article/practical-database-design/part5/chapter35.md +1453 -1453
  636. package/lib/assets/docs/article/practical-database-design/part5/chapter36.md +1292 -1292
  637. package/lib/assets/docs/article/practical-database-design/part5/chapter37.md +1470 -1470
  638. package/lib/assets/docs/article/practical-database-design/part5/chapter38.md +1698 -1698
  639. package/lib/assets/docs/article/practical-database-design/part5/chapter39.md +2334 -2334
  640. package/lib/assets/docs/article/practical-database-design/study/study2-1.md +1693 -1693
  641. package/lib/assets/docs/article/practical-database-design/study/study2-2.md +1347 -1347
  642. package/lib/assets/docs/article/practical-database-design/study/study2-3.md +2044 -2044
  643. package/lib/assets/docs/article/practical-database-design/study/study2-4.md +2229 -2229
  644. package/lib/assets/docs/article/practical-database-design/study/study2-5.md +2418 -2418
  645. package/lib/assets/docs/article/practical-database-design/study/study3-1.md +2205 -2205
  646. package/lib/assets/docs/article/practical-database-design/study/study3-2.md +2221 -2221
  647. package/lib/assets/docs/article/practical-database-design/study/study3-3.md +2253 -2253
  648. package/lib/assets/docs/article/practical-database-design/study/study3-4.md +2106 -2106
  649. package/lib/assets/docs/article/practical-database-design/study/study3-5.md +2507 -2507
  650. package/lib/assets/docs/article/practical-database-design/study/study4-1.md +2587 -2587
  651. package/lib/assets/docs/article/practical-database-design/study/study4-2.md +2075 -2075
  652. package/lib/assets/docs/article/practical-database-design/study/study4-3.md +1805 -1805
  653. package/lib/assets/docs/article/practical-database-design/study/study4-4.md +1895 -1895
  654. package/lib/assets/docs/article/practical-database-design/study/study4-5.md +2878 -2878
  655. package/lib/assets/docs/assets/css/extra.css +29 -29
  656. package/lib/assets/docs/assets/js/extra.js +44 -44
  657. package/lib/assets/docs/design/index.md +44 -44
  658. package/lib/assets/docs/development/index.md +39 -39
  659. package/lib/assets/docs/index.md +33 -33
  660. package/lib/assets/docs/operation/index.md +27 -27
  661. 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 +546 -546
  662. 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 +341 -341
  663. 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 +581 -581
  664. 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 +642 -642
  665. 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 +465 -465
  666. package/lib/assets/docs/reference/UI/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +450 -450
  667. package/lib/assets/docs/reference/images/Ansoff.drawio.svg +3 -3
  668. package/lib/assets/docs/reference/images/BMC.drawio.svg +3 -3
  669. package/lib/assets/docs/reference/images/BrandBasicStrategy.drawio.svg +3 -3
  670. package/lib/assets/docs/reference/images/BrandCategorization.drawio.svg +3 -3
  671. package/lib/assets/docs/reference/images/BrandRecurutementStrategy.drawio.svg +3 -3
  672. package/lib/assets/docs/reference/images/BrandValue.drawio.svg +3 -3
  673. package/lib/assets/docs/reference/images/BusinessActivitiy.svg +3 -3
  674. package/lib/assets/docs/reference/images/HRM.drawio.svg +3 -3
  675. package/lib/assets/docs/reference/images/MarketingStructure.drawio.svg +3 -3
  676. package/lib/assets/docs/reference/images/OrganizationElemnts.svg +3 -3
  677. package/lib/assets/docs/reference/images/PPM.drawio.svg +3 -3
  678. package/lib/assets/docs/reference/images/PositioningMap.drawio.svg +3 -3
  679. package/lib/assets/docs/reference/images/ProductLayer.drawio.svg +3 -3
  680. package/lib/assets/docs/reference/images/ProductMix.drawio.svg +3 -3
  681. package/lib/assets/docs/reference/images/SWOT.drawio.svg +3 -3
  682. package/lib/assets/docs/reference/images/TargetMarket.drawio.svg +3 -3
  683. package/lib/assets/docs/reference/images/ThreeGenericStrategies.drawio.svg +3 -3
  684. package/lib/assets/docs/reference/images/VRIO.drawio.svg +3 -3
  685. package/lib/assets/docs/reference/images/ValueChain.drawio.svg +3 -3
  686. package/lib/assets/docs/reference/index.md +53 -53
  687. 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 +250 -250
  688. 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 +2216 -2216
  689. 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 +1878 -1878
  690. 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 +550 -550
  691. 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 +705 -705
  692. 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 +1313 -1313
  693. 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 +311 -311
  694. 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 +599 -599
  695. 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 +528 -528
  696. 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 +689 -689
  697. 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 +461 -461
  698. 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 +580 -580
  699. 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 +1367 -1367
  700. package/lib/assets/docs/reference//344/274/201/346/245/255/347/265/214/345/226/266/350/253/226.md +2637 -2637
  701. 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 +665 -665
  702. 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 +566 -566
  703. 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 +1248 -1248
  704. 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 +518 -518
  705. package/lib/assets/docs/reference//351/201/213/345/226/266/347/256/241/347/220/206.md +1482 -1482
  706. 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 +421 -421
  707. 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 +392 -392
  708. package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +305 -305
  709. 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 +1236 -1236
  710. package/lib/assets/docs/requirements/index.md +17 -17
  711. package/lib/assets/docs/review/index.md +5 -5
  712. package/lib/assets/docs/strategy/index.md +17 -17
  713. package/lib/assets/docs/template/ADR.md +30 -30
  714. 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 +1366 -1366
  715. 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 +634 -634
  716. package/lib/assets/docs/template/README.md +50 -50
  717. package/lib/assets/docs/template/index.md +24 -24
  718. 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 +12 -12
  719. 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 +547 -547
  720. 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 +58 -58
  721. 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 +327 -327
  722. 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 +13 -13
  723. 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 +379 -379
  724. 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 +275 -275
  725. package/lib/assets/docs/template//344/272/213/344/276/213/345/210/206/346/236/220.md +513 -513
  726. package/lib/assets/docs/template//344/274/201/346/245/255/345/210/206/346/236/220.md +573 -573
  727. 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 +69 -69
  728. package/lib/assets/docs/template//350/246/201/344/273/266/345/256/232/347/276/251.md +669 -669
  729. package/lib/assets/docs/template//350/250/255/350/250/210.md +173 -173
  730. 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 +688 -688
  731. package/lib/assets/gulpfile.js +25 -25
  732. package/lib/assets/mkdocs.yml +139 -139
  733. package/lib/assets/ops/docker/mkdoc/Dockerfile +19 -19
  734. package/lib/assets/ops/docker/sonarqube-local/docker-compose.yml +57 -57
  735. package/lib/assets/ops/scripts/journal.js +180 -180
  736. package/lib/assets/ops/scripts/mkdocs.js +82 -82
  737. package/lib/assets/ops/scripts/release.js +431 -431
  738. package/lib/assets/ops/scripts/sonar_local.js +726 -726
  739. package/lib/assets/ops/scripts/ssh.js +190 -190
  740. package/lib/assets/ops/scripts/vault.js +299 -299
  741. package/lib/assets/package-lock.json +1653 -1653
  742. package/lib/assets/package.json +40 -40
  743. package/lib/gulpfile.js +37 -37
  744. package/package.json +41 -41
@@ -1,1032 +1,1032 @@
1
- # 第33章:システム統合の概要
2
-
3
- 本章から第5部「エンタープライズインテグレーション」の解説に入ります。これまで解説してきた販売管理システム、財務会計システム、生産管理システムを統合し、企業全体として整合性のあるシステムを構築するための考え方とパターンについて解説します。
4
-
5
- ---
6
-
7
- ## 33.1 なぜシステム統合が必要か
8
-
9
- ### サイロ化した基幹業務システムの課題
10
-
11
- 企業の基幹業務システムは、歴史的に各業務部門のニーズに応じて個別に構築されてきました。この結果、システム間の連携が不十分な「サイロ化」した状態に陥りやすくなっています。
12
-
13
- ```plantuml
14
- @startuml
15
- title サイロ化した基幹業務システムの課題
16
-
17
- rectangle "営業部門" as sales_dept {
18
- database "販売管理DB" as sales_db
19
- rectangle "販売管理\nシステム" as sales_sys
20
- }
21
-
22
- rectangle "経理部門" as finance_dept {
23
- database "会計DB" as finance_db
24
- rectangle "財務会計\nシステム" as finance_sys
25
- }
26
-
27
- rectangle "製造部門" as mfg_dept {
28
- database "生産管理DB" as mfg_db
29
- rectangle "生産管理\nシステム" as mfg_sys
30
- }
31
-
32
- sales_sys --> sales_db
33
- finance_sys --> finance_db
34
- mfg_sys --> mfg_db
35
-
36
- note right of sales_dept
37
- ・顧客マスタの重複管理
38
- ・売上データの手動転記
39
- ・在庫情報の不整合
40
- end note
41
-
42
- note right of finance_dept
43
- ・仕訳入力の二重作業
44
- ・月次締めの遅延
45
- ・データ不一致の調整作業
46
- end note
47
-
48
- note right of mfg_dept
49
- ・受注情報の遅延
50
- ・在庫の二重管理
51
- ・原価情報の不正確さ
52
- end note
53
-
54
- @enduml
55
- ```
56
-
57
- サイロ化によって発生する主な課題は以下の通りです。
58
-
59
- | 課題カテゴリ | 具体的な問題 | 影響 |
60
- |------------|------------|------|
61
- | データ重複 | 同じマスタデータが複数システムに存在 | 更新漏れ、データ不整合 |
62
- | 手作業連携 | システム間のデータ転記が手動 | 作業コスト増、転記ミス |
63
- | 整合性欠如 | 各システムのデータが一致しない | 経営判断の遅延、誤り |
64
- | リアルタイム性欠如 | 情報の伝達に時間がかかる | 機会損失、過剰在庫 |
65
-
66
- ### データの一貫性と整合性の確保
67
-
68
- システム統合の最大の目的は、企業全体でのデータの一貫性と整合性を確保することです。
69
-
70
- ```plantuml
71
- @startuml
72
- title データの一貫性確保の全体像
73
-
74
- rectangle "統合された基幹業務システム" {
75
- rectangle "販売管理" as sales
76
- rectangle "財務会計" as finance
77
- rectangle "生産管理" as production
78
-
79
- database "共通マスタ" as master {
80
- rectangle "取引先マスタ"
81
- rectangle "商品/品目マスタ"
82
- rectangle "部門マスタ"
83
- }
84
- }
85
-
86
- rectangle "統合レイヤー" as integration {
87
- rectangle "イベントバス" as events
88
- rectangle "API Gateway" as api
89
- rectangle "MDM" as mdm
90
- }
91
-
92
- sales <--> integration
93
- finance <--> integration
94
- production <--> integration
95
- integration <--> master
96
-
97
- note bottom of integration
98
- ・リアルタイムイベント連携
99
- ・マスタデータの一元管理
100
- ・トランザクション整合性
101
- end note
102
-
103
- @enduml
104
- ```
105
-
106
- #### データ一貫性の3つのレベル
107
-
108
- ```plantuml
109
- @startuml
110
- title データ一貫性のレベル
111
-
112
- package "強い一貫性 (Strong Consistency)" {
113
- note as N1
114
- ・分散トランザクション
115
- ・2フェーズコミット
116
- ・リアルタイム同期
117
-
118
- 適用例:
119
- - 在庫引当と受注確定
120
- - 請求と売掛金計上
121
- end note
122
- }
123
-
124
- package "結果整合性 (Eventual Consistency)" {
125
- note as N2
126
- ・非同期メッセージング
127
- ・補償トランザクション
128
- ・最終的な整合性
129
-
130
- 適用例:
131
- - 売上から仕訳への自動転記
132
- - 実績から原価への集計
133
- end note
134
- }
135
-
136
- package "弱い一貫性 (Weak Consistency)" {
137
- note as N3
138
- ・バッチ処理による同期
139
- ・定期的な突合
140
- ・差異分析と調整
141
-
142
- 適用例:
143
- - 月次締め処理
144
- - マスタ同期バッチ
145
- end note
146
- }
147
-
148
- N1 -[hidden]-> N2
149
- N2 -[hidden]-> N3
150
-
151
- @enduml
152
- ```
153
-
154
- ### リアルタイム連携とバッチ連携
155
-
156
- システム統合における連携方式は、業務要件に応じて適切に選択する必要があります。
157
-
158
- ```plantuml
159
- @startuml
160
- title リアルタイム連携とバッチ連携の比較
161
-
162
- rectangle "リアルタイム連携" as realtime {
163
- rectangle "イベント駆動" as event
164
- rectangle "API 呼び出し" as api
165
- rectangle "メッセージング" as messaging
166
- }
167
-
168
- rectangle "バッチ連携" as batch {
169
- rectangle "ファイル連携" as file
170
- rectangle "ETL 処理" as etl
171
- rectangle "DB 連携" as db
172
- }
173
-
174
- note right of realtime
175
- 【特徴】
176
- ・即座にデータ反映
177
- ・トランザクション単位
178
- ・高い整合性
179
-
180
- 【適用例】
181
- ・受注→在庫引当
182
- ・出荷→売上計上
183
- ・仕入→買掛金計上
184
- end note
185
-
186
- note right of batch
187
- 【特徴】
188
- ・一括処理で効率的
189
- ・大量データに適する
190
- ・システム負荷を分散
191
-
192
- 【適用例】
193
- ・月次締め処理
194
- ・日次集計処理
195
- ・マスタ同期
196
- end note
197
-
198
- @enduml
199
- ```
200
-
201
- #### 連携方式の選択基準
202
-
203
- | 要件 | リアルタイム連携 | バッチ連携 |
204
- |-----|----------------|-----------|
205
- | データ鮮度 | 即座に反映が必要 | 定期的な反映で可 |
206
- | 処理量 | トランザクション単位 | 大量データの一括処理 |
207
- | 可用性要件 | 高可用性が必要 | 一時的な遅延許容可 |
208
- | 整合性要件 | 強い一貫性が必要 | 結果整合性で可 |
209
- | システム負荷 | 常時負荷発生 | 負荷を時間帯で分散 |
210
-
211
- ---
212
-
213
- ## 33.2 境界づけられたコンテキスト
214
-
215
- ### 境界づけられたコンテキスト(Bounded Context)とは
216
-
217
- ドメイン駆動設計(DDD)における「境界づけられたコンテキスト」は、特定のドメインモデルが適用される範囲を明確に定義する概念です。同じ用語でも、コンテキストによって意味や属性が異なることがあります。
218
-
219
- ```plantuml
220
- @startuml
221
- title 境界づけられたコンテキストの概念
222
-
223
- package "販売コンテキスト" as sales_ctx {
224
- class "商品" as sales_product {
225
- +商品コード
226
- +商品名
227
- +販売単価
228
- +在庫数
229
- }
230
- class "顧客" as customer {
231
- +顧客コード
232
- +顧客名
233
- +与信限度額
234
- }
235
- }
236
-
237
- package "生産コンテキスト" as prod_ctx {
238
- class "品目" as item {
239
- +品目コード
240
- +品目名
241
- +製造リードタイム
242
- +安全在庫数
243
- }
244
- class "BOM" as bom {
245
- +親品目
246
- +子品目
247
- +必要量
248
- }
249
- }
250
-
251
- package "会計コンテキスト" as acc_ctx {
252
- class "勘定科目" as account {
253
- +科目コード
254
- +科目名
255
- +BSPL区分
256
- }
257
- class "取引先" as partner {
258
- +取引先コード
259
- +取引先名
260
- +債権債務区分
261
- }
262
- }
263
-
264
- note bottom of sales_ctx
265
- 「商品」は販売価格と
266
- 在庫数で管理
267
- end note
268
-
269
- note bottom of prod_ctx
270
- 「品目」は製造観点で
271
- リードタイムとBOMで管理
272
- end note
273
-
274
- note bottom of acc_ctx
275
- 「取引先」は会計観点で
276
- 債権・債務で管理
277
- end note
278
-
279
- @enduml
280
- ```
281
-
282
- ### 基幹業務システムにおけるコンテキストの識別
283
-
284
- 本書で扱う基幹業務システムは、以下の3つの主要な境界づけられたコンテキストで構成されます。
285
-
286
- ```plantuml
287
- @startuml
288
- title 基幹業務システムのコンテキスト識別
289
-
290
- package "販売コンテキスト (Sales Context)" as sales {
291
- rectangle "受注管理" as order
292
- rectangle "出荷管理" as shipment
293
- rectangle "売上管理" as sales_mgmt
294
- rectangle "債権管理" as receivable
295
- rectangle "調達管理" as procurement
296
- rectangle "在庫管理\n(販売)" as sales_inv
297
- rectangle "債務管理" as payable
298
- }
299
-
300
- package "会計コンテキスト (Accounting Context)" as accounting {
301
- rectangle "勘定科目管理" as account_mgmt
302
- rectangle "仕訳管理" as journal
303
- rectangle "自動仕訳" as auto_journal
304
- rectangle "残高管理" as balance
305
- rectangle "決算処理" as closing
306
- }
307
-
308
- package "生産コンテキスト (Production Context)" as production {
309
- rectangle "生産計画" as plan
310
- rectangle "購買管理" as purchase
311
- rectangle "工程管理" as process
312
- rectangle "在庫管理\n(生産)" as prod_inv
313
- rectangle "品質管理" as quality
314
- rectangle "原価管理" as cost
315
- }
316
-
317
- sales --> accounting : 売上仕訳
318
- sales --> production : 受注情報
319
- production --> accounting : 原価仕訳
320
- production --> sales : 完成品在庫
321
-
322
- @enduml
323
- ```
324
-
325
- #### 販売コンテキスト
326
-
327
- 販売コンテキストは、顧客との取引に関するすべての業務を管理します。
328
-
329
- ```plantuml
330
- @startuml
331
- title 販売コンテキストのドメインモデル
332
-
333
- class "受注" as Order {
334
- +受注番号
335
- +受注日
336
- +顧客コード
337
- +合計金額
338
- +ステータス
339
- --
340
- +受注確定()
341
- +キャンセル()
342
- }
343
-
344
- class "受注明細" as OrderLine {
345
- +行番号
346
- +商品コード
347
- +数量
348
- +単価
349
- +金額
350
- }
351
-
352
- class "出荷指示" as ShipmentOrder {
353
- +出荷番号
354
- +出荷日
355
- +出荷先
356
- +ステータス
357
- --
358
- +出荷確定()
359
- }
360
-
361
- class "売上" as Sales {
362
- +売上番号
363
- +売上日
364
- +売上金額
365
- +消費税額
366
- --
367
- +計上()
368
- +取消()
369
- }
370
-
371
- Order "1" -- "*" OrderLine
372
- Order "1" -- "0..1" ShipmentOrder
373
- ShipmentOrder "1" -- "0..1" Sales
374
-
375
- note right of Order
376
- 集約ルート
377
- 受注全体のライフサイクル管理
378
- end note
379
-
380
- @enduml
381
- ```
382
-
383
- #### 会計コンテキスト
384
-
385
- 会計コンテキストは、企業の財務情報を正確に記録・管理します。
386
-
387
- ```plantuml
388
- @startuml
389
- title 会計コンテキストのドメインモデル
390
-
391
- class "仕訳伝票" as Journal {
392
- +伝票番号
393
- +起票日
394
- +伝票区分
395
- +ステータス
396
- --
397
- +登録()
398
- +承認()
399
- +取消()
400
- }
401
-
402
- class "仕訳明細" as JournalLine {
403
- +行番号
404
- +摘要
405
- }
406
-
407
- class "仕訳貸借明細" as JournalEntry {
408
- +貸借区分
409
- +勘定科目
410
- +金額
411
- +部門
412
- }
413
-
414
- class "勘定科目" as Account {
415
- +科目コード
416
- +科目名
417
- +BSPL区分
418
- +貸借区分
419
- }
420
-
421
- class "月次残高" as MonthlyBalance {
422
- +年月
423
- +科目コード
424
- +借方合計
425
- +貸方合計
426
- +残高
427
- }
428
-
429
- Journal "1" -- "*" JournalLine
430
- JournalLine "1" -- "2..*" JournalEntry
431
- JournalEntry "*" -- "1" Account
432
- Account "1" -- "*" MonthlyBalance
433
-
434
- note right of Journal
435
- 集約ルート
436
- 貸借一致の整合性を保証
437
- end note
438
-
439
- @enduml
440
- ```
441
-
442
- #### 生産コンテキスト
443
-
444
- 生産コンテキストは、製造業務の計画から実績管理までを担当します。
445
-
446
- ```plantuml
447
- @startuml
448
- title 生産コンテキストのドメインモデル
449
-
450
- class "製造オーダ" as WorkOrder {
451
- +オーダ番号
452
- +品目コード
453
- +計画数量
454
- +開始日
455
- +完了日
456
- +ステータス
457
- --
458
- +発行()
459
- +着手()
460
- +完了()
461
- }
462
-
463
- class "作業指示" as WorkInstruction {
464
- +指示番号
465
- +工程コード
466
- +作業日
467
- +計画工数
468
- }
469
-
470
- class "完成実績" as CompletionResult {
471
- +実績番号
472
- +完成数量
473
- +良品数
474
- +不良数
475
- +実績工数
476
- }
477
-
478
- class "品目" as Item {
479
- +品目コード
480
- +品目名
481
- +品目区分
482
- +リードタイム
483
- }
484
-
485
- class "BOM" as BOM {
486
- +親品目
487
- +子品目
488
- +必要量
489
- +歩留率
490
- }
491
-
492
- WorkOrder "1" -- "*" WorkInstruction
493
- WorkInstruction "1" -- "0..1" CompletionResult
494
- WorkOrder "*" -- "1" Item
495
- Item "1" -- "*" BOM : 親品目
496
-
497
- note right of WorkOrder
498
- 集約ルート
499
- 製造ライフサイクル管理
500
- end note
501
-
502
- @enduml
503
- ```
504
-
505
- ### コンテキストマップの作成
506
-
507
- コンテキストマップは、複数の境界づけられたコンテキスト間の関係を視覚化したものです。
508
-
509
- ```plantuml
510
- @startuml
511
- title 基幹業務システムのコンテキストマップ
512
-
513
- skinparam rectangle {
514
- BackgroundColor<<upstream>> LightBlue
515
- BackgroundColor<<downstream>> LightYellow
516
- BackgroundColor<<shared>> LightGreen
517
- }
518
-
519
- rectangle "販売コンテキスト" as sales <<upstream>> {
520
- rectangle "受注" as order
521
- rectangle "売上" as revenue
522
- rectangle "債権" as receivable
523
- }
524
-
525
- rectangle "会計コンテキスト" as accounting <<downstream>> {
526
- rectangle "仕訳" as journal
527
- rectangle "残高" as balance
528
- }
529
-
530
- rectangle "生産コンテキスト" as production <<upstream>> {
531
- rectangle "製造" as manufacturing
532
- rectangle "原価" as cost
533
- }
534
-
535
- rectangle "共有カーネル" as shared <<shared>> {
536
- rectangle "取引先マスタ"
537
- rectangle "部門マスタ"
538
- }
539
-
540
- sales -down-> accounting : "U/D\n自動仕訳\n(Published Language)"
541
- production -down-> accounting : "U/D\n原価仕訳\n(Published Language)"
542
- sales -right-> production : "Customer/Supplier\n受注連携"
543
-
544
- sales --> shared
545
- accounting --> shared
546
- production --> shared
547
-
548
- note right of sales
549
- 【Upstream】
550
- 売上イベントを発行
551
- end note
552
-
553
- note right of accounting
554
- 【Downstream】
555
- 売上/原価イベントを購読
556
- 自動仕訳を生成
557
- end note
558
-
559
- note bottom of shared
560
- 【Shared Kernel】
561
- 全コンテキスト共通の
562
- マスタデータ
563
- end note
564
-
565
- @enduml
566
- ```
567
-
568
- ### コンテキスト間の関係パターン
569
-
570
- ドメイン駆動設計では、コンテキスト間の関係を表す以下のパターンが定義されています。
571
-
572
- #### 共有カーネル(Shared Kernel)
573
-
574
- ```plantuml
575
- @startuml
576
- title 共有カーネルパターン
577
-
578
- package "販売コンテキスト" as sales {
579
- class "販売サービス"
580
- }
581
-
582
- package "生産コンテキスト" as production {
583
- class "生産サービス"
584
- }
585
-
586
- package "共有カーネル" as kernel {
587
- class "取引先" {
588
- +取引先コード
589
- +取引先名
590
- +住所
591
- }
592
- class "部門" {
593
- +部門コード
594
- +部門名
595
- +階層
596
- }
597
- }
598
-
599
- "販売サービス" --> "取引先"
600
- "販売サービス" --> "部門"
601
- "生産サービス" --> "取引先"
602
- "生産サービス" --> "部門"
603
-
604
- note bottom of kernel
605
- 両コンテキストで
606
- 共有するコアモデル
607
- 変更は協調して行う
608
- end note
609
-
610
- @enduml
611
- ```
612
-
613
- #### 顧客/供給者(Customer/Supplier)
614
-
615
- ```plantuml
616
- @startuml
617
- title 顧客/供給者パターン
618
-
619
- package "販売コンテキスト (Upstream/Supplier)" as sales {
620
- class "受注サービス" {
621
- +受注確定()
622
- +受注情報取得()
623
- }
624
- class "受注" {
625
- +受注番号
626
- +商品コード
627
- +数量
628
- +納期
629
- }
630
- }
631
-
632
- package "生産コンテキスト (Downstream/Customer)" as production {
633
- class "生産計画サービス" {
634
- +受注取込()
635
- +計画立案()
636
- }
637
- class "生産計画" {
638
- +計画番号
639
- +品目コード
640
- +計画数量
641
- }
642
- }
643
-
644
- "受注サービス" --> "受注"
645
- "生産計画サービス" --> "受注サービス" : 受注情報取得
646
- "生産計画サービス" --> "生産計画"
647
-
648
- note right of sales
649
- 【Supplier】
650
- 下流の要件を考慮して
651
- インターフェースを提供
652
- end note
653
-
654
- note right of production
655
- 【Customer】
656
- 上流に要件を伝え
657
- 提供されたAPIを利用
658
- end note
659
-
660
- @enduml
661
- ```
662
-
663
- #### 腐敗防止層(Anti-Corruption Layer)
664
-
665
- ```plantuml
666
- @startuml
667
- title 腐敗防止層パターン
668
-
669
- package "会計コンテキスト" as accounting {
670
- class "仕訳サービス" {
671
- +仕訳登録()
672
- }
673
- class "仕訳" {
674
- +伝票番号
675
- +科目コード
676
- +金額
677
- }
678
- }
679
-
680
- package "腐敗防止層 (ACL)" as acl {
681
- class "売上仕訳変換サービス" {
682
- +変換(売上イベント)
683
- }
684
- class "売上仕訳DTO" {
685
- +売上番号
686
- +売上日
687
- +明細リスト
688
- }
689
- }
690
-
691
- package "販売コンテキスト" as sales {
692
- class "売上" {
693
- +売上番号
694
- +売上日
695
- +顧客コード
696
- +商品情報
697
- +金額
698
- }
699
- }
700
-
701
- "仕訳サービス" --> "仕訳"
702
- "仕訳サービス" <-- "売上仕訳変換サービス"
703
- "売上仕訳変換サービス" --> "売上仕訳DTO"
704
- "売上仕訳変換サービス" ..> "売上" : 変換
705
-
706
- note right of acl
707
- 【ACL】
708
- 外部コンテキストのモデルを
709
- 自コンテキストのモデルに変換
710
- 外部の変更から保護
711
- end note
712
-
713
- @enduml
714
- ```
715
-
716
- #### 公開ホストサービス(Open Host Service)
717
-
718
- ```plantuml
719
- @startuml
720
- title 公開ホストサービスパターン
721
-
722
- package "販売コンテキスト" as sales {
723
- class "販売API" <<Open Host Service>> {
724
- +GET /orders/{id}
725
- +POST /orders
726
- +GET /sales/{id}
727
- }
728
-
729
- class "受注リソース" <<Published Language>> {
730
- +orderId: String
731
- +orderDate: Date
732
- +customer: Customer
733
- +lines: List<OrderLine>
734
- }
735
- }
736
-
737
- package "会計コンテキスト" as accounting {
738
- class "自動仕訳サービス"
739
- }
740
-
741
- package "生産コンテキスト" as production {
742
- class "生産計画サービス"
743
- }
744
-
745
- package "外部システム" as external {
746
- class "分析システム"
747
- }
748
-
749
- "販売API" --> "受注リソース"
750
- "自動仕訳サービス" --> "販売API"
751
- "生産計画サービス" --> "販売API"
752
- "分析システム" --> "販売API"
753
-
754
- note right of sales
755
- 【Open Host Service】
756
- 標準化されたAPIを公開
757
-
758
- 【Published Language】
759
- 共通のデータフォーマット
760
- (JSON/XML Schema)
761
- end note
762
-
763
- @enduml
764
- ```
765
-
766
- #### コンテキスト関係パターンの選択ガイド
767
-
768
- | パターン | 適用場面 | メリット | デメリット |
769
- |---------|---------|---------|----------|
770
- | 共有カーネル | 密接に連携するコンテキスト | モデルの一貫性 | 変更の調整が必要 |
771
- | 顧客/供給者 | 上流が下流の要件に対応可能 | 明確な責務分担 | 上流への依存 |
772
- | 適合者 | 上流が変更不可能な場合 | 導入が容易 | 上流に完全依存 |
773
- | 腐敗防止層 | レガシーシステムとの連携 | 独立性確保 | 実装コスト |
774
- | 公開ホストサービス | 複数の消費者が存在 | 再利用性 | API設計・維持コスト |
775
-
776
- ---
777
-
778
- ## 33.3 統合パターンの選択基準
779
-
780
- ### 同期 vs 非同期
781
-
782
- ```plantuml
783
- @startuml
784
- title 同期通信と非同期通信の比較
785
-
786
- rectangle "同期通信" as sync {
787
- actor "クライアント" as client1
788
- rectangle "サービスA" as serviceA1
789
- rectangle "サービスB" as serviceB1
790
-
791
- client1 -> serviceA1 : 1.リクエスト
792
- serviceA1 -> serviceB1 : 2.API呼び出し
793
- serviceB1 -> serviceA1 : 3.レスポンス
794
- serviceA1 -> client1 : 4.レスポンス
795
- }
796
-
797
- rectangle "非同期通信" as async {
798
- actor "クライアント" as client2
799
- rectangle "サービスA" as serviceA2
800
- queue "メッセージ\nキュー" as queue
801
- rectangle "サービスB" as serviceB2
802
-
803
- client2 -> serviceA2 : 1.リクエスト
804
- serviceA2 -> queue : 2.メッセージ発行
805
- serviceA2 -> client2 : 3.即時レスポンス
806
- queue -> serviceB2 : 4.メッセージ購読
807
- }
808
-
809
- note bottom of sync
810
- ・即座に結果を取得
811
- ・強い一貫性
812
- ・カップリングが強い
813
- ・障害伝播のリスク
814
- end note
815
-
816
- note bottom of async
817
- ・疎結合
818
- ・高い回復力
819
- ・スケーラビリティ
820
- ・結果整合性
821
- end note
822
-
823
- @enduml
824
- ```
825
-
826
- #### 選択の判断基準
827
-
828
- | 観点 | 同期を選択 | 非同期を選択 |
829
- |-----|----------|------------|
830
- | 応答要件 | 即座に結果が必要 | 遅延が許容される |
831
- | 一貫性要件 | 強い一貫性が必須 | 結果整合性で可 |
832
- | 可用性要件 | サービス間依存を許容 | 高可用性が必要 |
833
- | 処理量 | 少量のトランザクション | 大量のトランザクション |
834
- | 障害分離 | 障害伝播を許容 | 障害を分離したい |
835
-
836
- ### ポイントツーポイント vs ハブ&スポーク
837
-
838
- ```plantuml
839
- @startuml
840
- title 統合トポロジーの比較
841
-
842
- rectangle "ポイントツーポイント" as p2p {
843
- rectangle "販売" as sales1
844
- rectangle "会計" as acc1
845
- rectangle "生産" as prod1
846
- rectangle "在庫" as inv1
847
-
848
- sales1 <--> acc1
849
- sales1 <--> prod1
850
- sales1 <--> inv1
851
- acc1 <--> prod1
852
- acc1 <--> inv1
853
- prod1 <--> inv1
854
- }
855
-
856
- rectangle "ハブ&スポーク" as hub {
857
- rectangle "販売" as sales2
858
- rectangle "会計" as acc2
859
- rectangle "生産" as prod2
860
- rectangle "在庫" as inv2
861
-
862
- rectangle "統合ハブ\n(ESB/API GW)" as hub_center
863
-
864
- sales2 <--> hub_center
865
- acc2 <--> hub_center
866
- prod2 <--> hub_center
867
- inv2 <--> hub_center
868
- }
869
-
870
- note bottom of p2p
871
- 接続数: n(n-1)/2
872
- 4システムで6接続
873
-
874
- ・シンプルな初期構成
875
- ・システム数増加で複雑化
876
- ・個別の変換ロジック
877
- end note
878
-
879
- note bottom of hub
880
- 接続数: n
881
- 4システムで4接続
882
-
883
- ・一元的な管理
884
- ・変換ロジックの集約
885
- ・ハブが単一障害点
886
- end note
887
-
888
- @enduml
889
- ```
890
-
891
- ### データ統合 vs プロセス統合
892
-
893
- ```plantuml
894
- @startuml
895
- title データ統合とプロセス統合の比較
896
-
897
- rectangle "データ統合" as data_int {
898
- database "販売DB" as sales_db
899
- database "統合DB" as int_db
900
- database "会計DB" as acc_db
901
-
902
- sales_db --> int_db : ETL
903
- int_db --> acc_db : ETL
904
-
905
- note right of int_db
906
- ・データウェアハウス
907
- ・マスタデータ管理
908
- ・データレイク
909
- end note
910
- }
911
-
912
- rectangle "プロセス統合" as proc_int {
913
- rectangle "受注プロセス" as order_proc
914
- rectangle "出荷プロセス" as ship_proc
915
- rectangle "請求プロセス" as bill_proc
916
- rectangle "仕訳プロセス" as journal_proc
917
-
918
- order_proc --> ship_proc : イベント
919
- ship_proc --> bill_proc : イベント
920
- bill_proc --> journal_proc : イベント
921
-
922
- note right of journal_proc
923
- ・ワークフロー
924
- ・サービスオーケストレーション
925
- ・イベント駆動
926
- end note
927
- }
928
-
929
- @enduml
930
- ```
931
-
932
- #### 統合アプローチの比較
933
-
934
- | 観点 | データ統合 | プロセス統合 |
935
- |-----|----------|------------|
936
- | 主な目的 | データの一元化・分析 | 業務プロセスの自動化 |
937
- | 更新頻度 | バッチ(日次/週次) | リアルタイム/準リアルタイム |
938
- | 一貫性モデル | 結果整合性 | トランザクション整合性 |
939
- | 技術要素 | ETL、DWH、MDM | ESB、BPM、イベントバス |
940
- | 適用場面 | BI・レポーティング | 業務自動化・ワークフロー |
941
-
942
- ### 統合パターン選択のフローチャート
943
-
944
- ```plantuml
945
- @startuml
946
- title 統合パターン選択フローチャート
947
-
948
- start
949
-
950
- :連携要件の確認;
951
-
952
- if (即座にデータ反映が必要?) then (はい)
953
- :リアルタイム連携;
954
- if (強い一貫性が必要?) then (はい)
955
- :同期API連携;
956
- :分散トランザクション検討;
957
- else (いいえ)
958
- :非同期メッセージング;
959
- :イベント駆動アーキテクチャ;
960
- endif
961
- else (いいえ)
962
- :バッチ連携;
963
- if (大量データの移動?) then (はい)
964
- :ETL/ファイル連携;
965
- else (いいえ)
966
- :DB直接連携;
967
- endif
968
- endif
969
-
970
- :コンテキスト間関係の確認;
971
-
972
- if (既存システムとの連携?) then (はい)
973
- :腐敗防止層(ACL);
974
- else (いいえ)
975
- if (複数の消費者?) then (はい)
976
- :公開ホストサービス;
977
- :Published Language;
978
- else (いいえ)
979
- :顧客/供給者パターン;
980
- endif
981
- endif
982
-
983
- :統合トポロジーの決定;
984
-
985
- if (システム数が多い?) then (はい)
986
- :ハブ&スポーク;
987
- :API Gateway/ESB;
988
- else (いいえ)
989
- :ポイントツーポイント;
990
- endif
991
-
992
- stop
993
-
994
- @enduml
995
- ```
996
-
997
- ---
998
-
999
- ## 33.4 まとめ
1000
-
1001
- 本章では、エンタープライズインテグレーションの基本概念について解説しました。
1002
-
1003
- ### 学んだこと
1004
-
1005
- 1. **システム統合の必要性**
1006
-
1007
- - サイロ化した基幹業務システムの課題
1008
- - データの一貫性・整合性確保の重要性
1009
- - リアルタイム連携とバッチ連携の使い分け
1010
-
1011
- 2. **境界づけられたコンテキスト**
1012
-
1013
- - 販売・会計・生産の3つのコンテキスト
1014
- - 各コンテキストの責務とドメインモデル
1015
- - コンテキストマップによる関係の可視化
1016
-
1017
- 3. **コンテキスト間の関係パターン**
1018
-
1019
- - 共有カーネル:共通モデルの共有
1020
- - 顧客/供給者:上流・下流の明確な関係
1021
- - 腐敗防止層:外部システムからの保護
1022
- - 公開ホストサービス:標準APIの提供
1023
-
1024
- 4. **統合パターンの選択基準**
1025
-
1026
- - 同期 vs 非同期の判断
1027
- - ポイントツーポイント vs ハブ&スポーク
1028
- - データ統合 vs プロセス統合
1029
-
1030
- ### 次章の予告
1031
-
1032
- 第34章では、メッセージングパターンについて詳しく解説します。メッセージチャネル、ルーティング、変換といったEnterprise Integration Patternsの基本パターンを学び、基幹業務システムへの適用方法を理解します。
1
+ # 第33章:システム統合の概要
2
+
3
+ 本章から第5部「エンタープライズインテグレーション」の解説に入ります。これまで解説してきた販売管理システム、財務会計システム、生産管理システムを統合し、企業全体として整合性のあるシステムを構築するための考え方とパターンについて解説します。
4
+
5
+ ---
6
+
7
+ ## 33.1 なぜシステム統合が必要か
8
+
9
+ ### サイロ化した基幹業務システムの課題
10
+
11
+ 企業の基幹業務システムは、歴史的に各業務部門のニーズに応じて個別に構築されてきました。この結果、システム間の連携が不十分な「サイロ化」した状態に陥りやすくなっています。
12
+
13
+ ```plantuml
14
+ @startuml
15
+ title サイロ化した基幹業務システムの課題
16
+
17
+ rectangle "営業部門" as sales_dept {
18
+ database "販売管理DB" as sales_db
19
+ rectangle "販売管理\nシステム" as sales_sys
20
+ }
21
+
22
+ rectangle "経理部門" as finance_dept {
23
+ database "会計DB" as finance_db
24
+ rectangle "財務会計\nシステム" as finance_sys
25
+ }
26
+
27
+ rectangle "製造部門" as mfg_dept {
28
+ database "生産管理DB" as mfg_db
29
+ rectangle "生産管理\nシステム" as mfg_sys
30
+ }
31
+
32
+ sales_sys --> sales_db
33
+ finance_sys --> finance_db
34
+ mfg_sys --> mfg_db
35
+
36
+ note right of sales_dept
37
+ ・顧客マスタの重複管理
38
+ ・売上データの手動転記
39
+ ・在庫情報の不整合
40
+ end note
41
+
42
+ note right of finance_dept
43
+ ・仕訳入力の二重作業
44
+ ・月次締めの遅延
45
+ ・データ不一致の調整作業
46
+ end note
47
+
48
+ note right of mfg_dept
49
+ ・受注情報の遅延
50
+ ・在庫の二重管理
51
+ ・原価情報の不正確さ
52
+ end note
53
+
54
+ @enduml
55
+ ```
56
+
57
+ サイロ化によって発生する主な課題は以下の通りです。
58
+
59
+ | 課題カテゴリ | 具体的な問題 | 影響 |
60
+ |------------|------------|------|
61
+ | データ重複 | 同じマスタデータが複数システムに存在 | 更新漏れ、データ不整合 |
62
+ | 手作業連携 | システム間のデータ転記が手動 | 作業コスト増、転記ミス |
63
+ | 整合性欠如 | 各システムのデータが一致しない | 経営判断の遅延、誤り |
64
+ | リアルタイム性欠如 | 情報の伝達に時間がかかる | 機会損失、過剰在庫 |
65
+
66
+ ### データの一貫性と整合性の確保
67
+
68
+ システム統合の最大の目的は、企業全体でのデータの一貫性と整合性を確保することです。
69
+
70
+ ```plantuml
71
+ @startuml
72
+ title データの一貫性確保の全体像
73
+
74
+ rectangle "統合された基幹業務システム" {
75
+ rectangle "販売管理" as sales
76
+ rectangle "財務会計" as finance
77
+ rectangle "生産管理" as production
78
+
79
+ database "共通マスタ" as master {
80
+ rectangle "取引先マスタ"
81
+ rectangle "商品/品目マスタ"
82
+ rectangle "部門マスタ"
83
+ }
84
+ }
85
+
86
+ rectangle "統合レイヤー" as integration {
87
+ rectangle "イベントバス" as events
88
+ rectangle "API Gateway" as api
89
+ rectangle "MDM" as mdm
90
+ }
91
+
92
+ sales <--> integration
93
+ finance <--> integration
94
+ production <--> integration
95
+ integration <--> master
96
+
97
+ note bottom of integration
98
+ ・リアルタイムイベント連携
99
+ ・マスタデータの一元管理
100
+ ・トランザクション整合性
101
+ end note
102
+
103
+ @enduml
104
+ ```
105
+
106
+ #### データ一貫性の3つのレベル
107
+
108
+ ```plantuml
109
+ @startuml
110
+ title データ一貫性のレベル
111
+
112
+ package "強い一貫性 (Strong Consistency)" {
113
+ note as N1
114
+ ・分散トランザクション
115
+ ・2フェーズコミット
116
+ ・リアルタイム同期
117
+
118
+ 適用例:
119
+ - 在庫引当と受注確定
120
+ - 請求と売掛金計上
121
+ end note
122
+ }
123
+
124
+ package "結果整合性 (Eventual Consistency)" {
125
+ note as N2
126
+ ・非同期メッセージング
127
+ ・補償トランザクション
128
+ ・最終的な整合性
129
+
130
+ 適用例:
131
+ - 売上から仕訳への自動転記
132
+ - 実績から原価への集計
133
+ end note
134
+ }
135
+
136
+ package "弱い一貫性 (Weak Consistency)" {
137
+ note as N3
138
+ ・バッチ処理による同期
139
+ ・定期的な突合
140
+ ・差異分析と調整
141
+
142
+ 適用例:
143
+ - 月次締め処理
144
+ - マスタ同期バッチ
145
+ end note
146
+ }
147
+
148
+ N1 -[hidden]-> N2
149
+ N2 -[hidden]-> N3
150
+
151
+ @enduml
152
+ ```
153
+
154
+ ### リアルタイム連携とバッチ連携
155
+
156
+ システム統合における連携方式は、業務要件に応じて適切に選択する必要があります。
157
+
158
+ ```plantuml
159
+ @startuml
160
+ title リアルタイム連携とバッチ連携の比較
161
+
162
+ rectangle "リアルタイム連携" as realtime {
163
+ rectangle "イベント駆動" as event
164
+ rectangle "API 呼び出し" as api
165
+ rectangle "メッセージング" as messaging
166
+ }
167
+
168
+ rectangle "バッチ連携" as batch {
169
+ rectangle "ファイル連携" as file
170
+ rectangle "ETL 処理" as etl
171
+ rectangle "DB 連携" as db
172
+ }
173
+
174
+ note right of realtime
175
+ 【特徴】
176
+ ・即座にデータ反映
177
+ ・トランザクション単位
178
+ ・高い整合性
179
+
180
+ 【適用例】
181
+ ・受注→在庫引当
182
+ ・出荷→売上計上
183
+ ・仕入→買掛金計上
184
+ end note
185
+
186
+ note right of batch
187
+ 【特徴】
188
+ ・一括処理で効率的
189
+ ・大量データに適する
190
+ ・システム負荷を分散
191
+
192
+ 【適用例】
193
+ ・月次締め処理
194
+ ・日次集計処理
195
+ ・マスタ同期
196
+ end note
197
+
198
+ @enduml
199
+ ```
200
+
201
+ #### 連携方式の選択基準
202
+
203
+ | 要件 | リアルタイム連携 | バッチ連携 |
204
+ |-----|----------------|-----------|
205
+ | データ鮮度 | 即座に反映が必要 | 定期的な反映で可 |
206
+ | 処理量 | トランザクション単位 | 大量データの一括処理 |
207
+ | 可用性要件 | 高可用性が必要 | 一時的な遅延許容可 |
208
+ | 整合性要件 | 強い一貫性が必要 | 結果整合性で可 |
209
+ | システム負荷 | 常時負荷発生 | 負荷を時間帯で分散 |
210
+
211
+ ---
212
+
213
+ ## 33.2 境界づけられたコンテキスト
214
+
215
+ ### 境界づけられたコンテキスト(Bounded Context)とは
216
+
217
+ ドメイン駆動設計(DDD)における「境界づけられたコンテキスト」は、特定のドメインモデルが適用される範囲を明確に定義する概念です。同じ用語でも、コンテキストによって意味や属性が異なることがあります。
218
+
219
+ ```plantuml
220
+ @startuml
221
+ title 境界づけられたコンテキストの概念
222
+
223
+ package "販売コンテキスト" as sales_ctx {
224
+ class "商品" as sales_product {
225
+ +商品コード
226
+ +商品名
227
+ +販売単価
228
+ +在庫数
229
+ }
230
+ class "顧客" as customer {
231
+ +顧客コード
232
+ +顧客名
233
+ +与信限度額
234
+ }
235
+ }
236
+
237
+ package "生産コンテキスト" as prod_ctx {
238
+ class "品目" as item {
239
+ +品目コード
240
+ +品目名
241
+ +製造リードタイム
242
+ +安全在庫数
243
+ }
244
+ class "BOM" as bom {
245
+ +親品目
246
+ +子品目
247
+ +必要量
248
+ }
249
+ }
250
+
251
+ package "会計コンテキスト" as acc_ctx {
252
+ class "勘定科目" as account {
253
+ +科目コード
254
+ +科目名
255
+ +BSPL区分
256
+ }
257
+ class "取引先" as partner {
258
+ +取引先コード
259
+ +取引先名
260
+ +債権債務区分
261
+ }
262
+ }
263
+
264
+ note bottom of sales_ctx
265
+ 「商品」は販売価格と
266
+ 在庫数で管理
267
+ end note
268
+
269
+ note bottom of prod_ctx
270
+ 「品目」は製造観点で
271
+ リードタイムとBOMで管理
272
+ end note
273
+
274
+ note bottom of acc_ctx
275
+ 「取引先」は会計観点で
276
+ 債権・債務で管理
277
+ end note
278
+
279
+ @enduml
280
+ ```
281
+
282
+ ### 基幹業務システムにおけるコンテキストの識別
283
+
284
+ 本書で扱う基幹業務システムは、以下の3つの主要な境界づけられたコンテキストで構成されます。
285
+
286
+ ```plantuml
287
+ @startuml
288
+ title 基幹業務システムのコンテキスト識別
289
+
290
+ package "販売コンテキスト (Sales Context)" as sales {
291
+ rectangle "受注管理" as order
292
+ rectangle "出荷管理" as shipment
293
+ rectangle "売上管理" as sales_mgmt
294
+ rectangle "債権管理" as receivable
295
+ rectangle "調達管理" as procurement
296
+ rectangle "在庫管理\n(販売)" as sales_inv
297
+ rectangle "債務管理" as payable
298
+ }
299
+
300
+ package "会計コンテキスト (Accounting Context)" as accounting {
301
+ rectangle "勘定科目管理" as account_mgmt
302
+ rectangle "仕訳管理" as journal
303
+ rectangle "自動仕訳" as auto_journal
304
+ rectangle "残高管理" as balance
305
+ rectangle "決算処理" as closing
306
+ }
307
+
308
+ package "生産コンテキスト (Production Context)" as production {
309
+ rectangle "生産計画" as plan
310
+ rectangle "購買管理" as purchase
311
+ rectangle "工程管理" as process
312
+ rectangle "在庫管理\n(生産)" as prod_inv
313
+ rectangle "品質管理" as quality
314
+ rectangle "原価管理" as cost
315
+ }
316
+
317
+ sales --> accounting : 売上仕訳
318
+ sales --> production : 受注情報
319
+ production --> accounting : 原価仕訳
320
+ production --> sales : 完成品在庫
321
+
322
+ @enduml
323
+ ```
324
+
325
+ #### 販売コンテキスト
326
+
327
+ 販売コンテキストは、顧客との取引に関するすべての業務を管理します。
328
+
329
+ ```plantuml
330
+ @startuml
331
+ title 販売コンテキストのドメインモデル
332
+
333
+ class "受注" as Order {
334
+ +受注番号
335
+ +受注日
336
+ +顧客コード
337
+ +合計金額
338
+ +ステータス
339
+ --
340
+ +受注確定()
341
+ +キャンセル()
342
+ }
343
+
344
+ class "受注明細" as OrderLine {
345
+ +行番号
346
+ +商品コード
347
+ +数量
348
+ +単価
349
+ +金額
350
+ }
351
+
352
+ class "出荷指示" as ShipmentOrder {
353
+ +出荷番号
354
+ +出荷日
355
+ +出荷先
356
+ +ステータス
357
+ --
358
+ +出荷確定()
359
+ }
360
+
361
+ class "売上" as Sales {
362
+ +売上番号
363
+ +売上日
364
+ +売上金額
365
+ +消費税額
366
+ --
367
+ +計上()
368
+ +取消()
369
+ }
370
+
371
+ Order "1" -- "*" OrderLine
372
+ Order "1" -- "0..1" ShipmentOrder
373
+ ShipmentOrder "1" -- "0..1" Sales
374
+
375
+ note right of Order
376
+ 集約ルート
377
+ 受注全体のライフサイクル管理
378
+ end note
379
+
380
+ @enduml
381
+ ```
382
+
383
+ #### 会計コンテキスト
384
+
385
+ 会計コンテキストは、企業の財務情報を正確に記録・管理します。
386
+
387
+ ```plantuml
388
+ @startuml
389
+ title 会計コンテキストのドメインモデル
390
+
391
+ class "仕訳伝票" as Journal {
392
+ +伝票番号
393
+ +起票日
394
+ +伝票区分
395
+ +ステータス
396
+ --
397
+ +登録()
398
+ +承認()
399
+ +取消()
400
+ }
401
+
402
+ class "仕訳明細" as JournalLine {
403
+ +行番号
404
+ +摘要
405
+ }
406
+
407
+ class "仕訳貸借明細" as JournalEntry {
408
+ +貸借区分
409
+ +勘定科目
410
+ +金額
411
+ +部門
412
+ }
413
+
414
+ class "勘定科目" as Account {
415
+ +科目コード
416
+ +科目名
417
+ +BSPL区分
418
+ +貸借区分
419
+ }
420
+
421
+ class "月次残高" as MonthlyBalance {
422
+ +年月
423
+ +科目コード
424
+ +借方合計
425
+ +貸方合計
426
+ +残高
427
+ }
428
+
429
+ Journal "1" -- "*" JournalLine
430
+ JournalLine "1" -- "2..*" JournalEntry
431
+ JournalEntry "*" -- "1" Account
432
+ Account "1" -- "*" MonthlyBalance
433
+
434
+ note right of Journal
435
+ 集約ルート
436
+ 貸借一致の整合性を保証
437
+ end note
438
+
439
+ @enduml
440
+ ```
441
+
442
+ #### 生産コンテキスト
443
+
444
+ 生産コンテキストは、製造業務の計画から実績管理までを担当します。
445
+
446
+ ```plantuml
447
+ @startuml
448
+ title 生産コンテキストのドメインモデル
449
+
450
+ class "製造オーダ" as WorkOrder {
451
+ +オーダ番号
452
+ +品目コード
453
+ +計画数量
454
+ +開始日
455
+ +完了日
456
+ +ステータス
457
+ --
458
+ +発行()
459
+ +着手()
460
+ +完了()
461
+ }
462
+
463
+ class "作業指示" as WorkInstruction {
464
+ +指示番号
465
+ +工程コード
466
+ +作業日
467
+ +計画工数
468
+ }
469
+
470
+ class "完成実績" as CompletionResult {
471
+ +実績番号
472
+ +完成数量
473
+ +良品数
474
+ +不良数
475
+ +実績工数
476
+ }
477
+
478
+ class "品目" as Item {
479
+ +品目コード
480
+ +品目名
481
+ +品目区分
482
+ +リードタイム
483
+ }
484
+
485
+ class "BOM" as BOM {
486
+ +親品目
487
+ +子品目
488
+ +必要量
489
+ +歩留率
490
+ }
491
+
492
+ WorkOrder "1" -- "*" WorkInstruction
493
+ WorkInstruction "1" -- "0..1" CompletionResult
494
+ WorkOrder "*" -- "1" Item
495
+ Item "1" -- "*" BOM : 親品目
496
+
497
+ note right of WorkOrder
498
+ 集約ルート
499
+ 製造ライフサイクル管理
500
+ end note
501
+
502
+ @enduml
503
+ ```
504
+
505
+ ### コンテキストマップの作成
506
+
507
+ コンテキストマップは、複数の境界づけられたコンテキスト間の関係を視覚化したものです。
508
+
509
+ ```plantuml
510
+ @startuml
511
+ title 基幹業務システムのコンテキストマップ
512
+
513
+ skinparam rectangle {
514
+ BackgroundColor<<upstream>> LightBlue
515
+ BackgroundColor<<downstream>> LightYellow
516
+ BackgroundColor<<shared>> LightGreen
517
+ }
518
+
519
+ rectangle "販売コンテキスト" as sales <<upstream>> {
520
+ rectangle "受注" as order
521
+ rectangle "売上" as revenue
522
+ rectangle "債権" as receivable
523
+ }
524
+
525
+ rectangle "会計コンテキスト" as accounting <<downstream>> {
526
+ rectangle "仕訳" as journal
527
+ rectangle "残高" as balance
528
+ }
529
+
530
+ rectangle "生産コンテキスト" as production <<upstream>> {
531
+ rectangle "製造" as manufacturing
532
+ rectangle "原価" as cost
533
+ }
534
+
535
+ rectangle "共有カーネル" as shared <<shared>> {
536
+ rectangle "取引先マスタ"
537
+ rectangle "部門マスタ"
538
+ }
539
+
540
+ sales -down-> accounting : "U/D\n自動仕訳\n(Published Language)"
541
+ production -down-> accounting : "U/D\n原価仕訳\n(Published Language)"
542
+ sales -right-> production : "Customer/Supplier\n受注連携"
543
+
544
+ sales --> shared
545
+ accounting --> shared
546
+ production --> shared
547
+
548
+ note right of sales
549
+ 【Upstream】
550
+ 売上イベントを発行
551
+ end note
552
+
553
+ note right of accounting
554
+ 【Downstream】
555
+ 売上/原価イベントを購読
556
+ 自動仕訳を生成
557
+ end note
558
+
559
+ note bottom of shared
560
+ 【Shared Kernel】
561
+ 全コンテキスト共通の
562
+ マスタデータ
563
+ end note
564
+
565
+ @enduml
566
+ ```
567
+
568
+ ### コンテキスト間の関係パターン
569
+
570
+ ドメイン駆動設計では、コンテキスト間の関係を表す以下のパターンが定義されています。
571
+
572
+ #### 共有カーネル(Shared Kernel)
573
+
574
+ ```plantuml
575
+ @startuml
576
+ title 共有カーネルパターン
577
+
578
+ package "販売コンテキスト" as sales {
579
+ class "販売サービス"
580
+ }
581
+
582
+ package "生産コンテキスト" as production {
583
+ class "生産サービス"
584
+ }
585
+
586
+ package "共有カーネル" as kernel {
587
+ class "取引先" {
588
+ +取引先コード
589
+ +取引先名
590
+ +住所
591
+ }
592
+ class "部門" {
593
+ +部門コード
594
+ +部門名
595
+ +階層
596
+ }
597
+ }
598
+
599
+ "販売サービス" --> "取引先"
600
+ "販売サービス" --> "部門"
601
+ "生産サービス" --> "取引先"
602
+ "生産サービス" --> "部門"
603
+
604
+ note bottom of kernel
605
+ 両コンテキストで
606
+ 共有するコアモデル
607
+ 変更は協調して行う
608
+ end note
609
+
610
+ @enduml
611
+ ```
612
+
613
+ #### 顧客/供給者(Customer/Supplier)
614
+
615
+ ```plantuml
616
+ @startuml
617
+ title 顧客/供給者パターン
618
+
619
+ package "販売コンテキスト (Upstream/Supplier)" as sales {
620
+ class "受注サービス" {
621
+ +受注確定()
622
+ +受注情報取得()
623
+ }
624
+ class "受注" {
625
+ +受注番号
626
+ +商品コード
627
+ +数量
628
+ +納期
629
+ }
630
+ }
631
+
632
+ package "生産コンテキスト (Downstream/Customer)" as production {
633
+ class "生産計画サービス" {
634
+ +受注取込()
635
+ +計画立案()
636
+ }
637
+ class "生産計画" {
638
+ +計画番号
639
+ +品目コード
640
+ +計画数量
641
+ }
642
+ }
643
+
644
+ "受注サービス" --> "受注"
645
+ "生産計画サービス" --> "受注サービス" : 受注情報取得
646
+ "生産計画サービス" --> "生産計画"
647
+
648
+ note right of sales
649
+ 【Supplier】
650
+ 下流の要件を考慮して
651
+ インターフェースを提供
652
+ end note
653
+
654
+ note right of production
655
+ 【Customer】
656
+ 上流に要件を伝え
657
+ 提供されたAPIを利用
658
+ end note
659
+
660
+ @enduml
661
+ ```
662
+
663
+ #### 腐敗防止層(Anti-Corruption Layer)
664
+
665
+ ```plantuml
666
+ @startuml
667
+ title 腐敗防止層パターン
668
+
669
+ package "会計コンテキスト" as accounting {
670
+ class "仕訳サービス" {
671
+ +仕訳登録()
672
+ }
673
+ class "仕訳" {
674
+ +伝票番号
675
+ +科目コード
676
+ +金額
677
+ }
678
+ }
679
+
680
+ package "腐敗防止層 (ACL)" as acl {
681
+ class "売上仕訳変換サービス" {
682
+ +変換(売上イベント)
683
+ }
684
+ class "売上仕訳DTO" {
685
+ +売上番号
686
+ +売上日
687
+ +明細リスト
688
+ }
689
+ }
690
+
691
+ package "販売コンテキスト" as sales {
692
+ class "売上" {
693
+ +売上番号
694
+ +売上日
695
+ +顧客コード
696
+ +商品情報
697
+ +金額
698
+ }
699
+ }
700
+
701
+ "仕訳サービス" --> "仕訳"
702
+ "仕訳サービス" <-- "売上仕訳変換サービス"
703
+ "売上仕訳変換サービス" --> "売上仕訳DTO"
704
+ "売上仕訳変換サービス" ..> "売上" : 変換
705
+
706
+ note right of acl
707
+ 【ACL】
708
+ 外部コンテキストのモデルを
709
+ 自コンテキストのモデルに変換
710
+ 外部の変更から保護
711
+ end note
712
+
713
+ @enduml
714
+ ```
715
+
716
+ #### 公開ホストサービス(Open Host Service)
717
+
718
+ ```plantuml
719
+ @startuml
720
+ title 公開ホストサービスパターン
721
+
722
+ package "販売コンテキスト" as sales {
723
+ class "販売API" <<Open Host Service>> {
724
+ +GET /orders/{id}
725
+ +POST /orders
726
+ +GET /sales/{id}
727
+ }
728
+
729
+ class "受注リソース" <<Published Language>> {
730
+ +orderId: String
731
+ +orderDate: Date
732
+ +customer: Customer
733
+ +lines: List<OrderLine>
734
+ }
735
+ }
736
+
737
+ package "会計コンテキスト" as accounting {
738
+ class "自動仕訳サービス"
739
+ }
740
+
741
+ package "生産コンテキスト" as production {
742
+ class "生産計画サービス"
743
+ }
744
+
745
+ package "外部システム" as external {
746
+ class "分析システム"
747
+ }
748
+
749
+ "販売API" --> "受注リソース"
750
+ "自動仕訳サービス" --> "販売API"
751
+ "生産計画サービス" --> "販売API"
752
+ "分析システム" --> "販売API"
753
+
754
+ note right of sales
755
+ 【Open Host Service】
756
+ 標準化されたAPIを公開
757
+
758
+ 【Published Language】
759
+ 共通のデータフォーマット
760
+ (JSON/XML Schema)
761
+ end note
762
+
763
+ @enduml
764
+ ```
765
+
766
+ #### コンテキスト関係パターンの選択ガイド
767
+
768
+ | パターン | 適用場面 | メリット | デメリット |
769
+ |---------|---------|---------|----------|
770
+ | 共有カーネル | 密接に連携するコンテキスト | モデルの一貫性 | 変更の調整が必要 |
771
+ | 顧客/供給者 | 上流が下流の要件に対応可能 | 明確な責務分担 | 上流への依存 |
772
+ | 適合者 | 上流が変更不可能な場合 | 導入が容易 | 上流に完全依存 |
773
+ | 腐敗防止層 | レガシーシステムとの連携 | 独立性確保 | 実装コスト |
774
+ | 公開ホストサービス | 複数の消費者が存在 | 再利用性 | API設計・維持コスト |
775
+
776
+ ---
777
+
778
+ ## 33.3 統合パターンの選択基準
779
+
780
+ ### 同期 vs 非同期
781
+
782
+ ```plantuml
783
+ @startuml
784
+ title 同期通信と非同期通信の比較
785
+
786
+ rectangle "同期通信" as sync {
787
+ actor "クライアント" as client1
788
+ rectangle "サービスA" as serviceA1
789
+ rectangle "サービスB" as serviceB1
790
+
791
+ client1 -> serviceA1 : 1.リクエスト
792
+ serviceA1 -> serviceB1 : 2.API呼び出し
793
+ serviceB1 -> serviceA1 : 3.レスポンス
794
+ serviceA1 -> client1 : 4.レスポンス
795
+ }
796
+
797
+ rectangle "非同期通信" as async {
798
+ actor "クライアント" as client2
799
+ rectangle "サービスA" as serviceA2
800
+ queue "メッセージ\nキュー" as queue
801
+ rectangle "サービスB" as serviceB2
802
+
803
+ client2 -> serviceA2 : 1.リクエスト
804
+ serviceA2 -> queue : 2.メッセージ発行
805
+ serviceA2 -> client2 : 3.即時レスポンス
806
+ queue -> serviceB2 : 4.メッセージ購読
807
+ }
808
+
809
+ note bottom of sync
810
+ ・即座に結果を取得
811
+ ・強い一貫性
812
+ ・カップリングが強い
813
+ ・障害伝播のリスク
814
+ end note
815
+
816
+ note bottom of async
817
+ ・疎結合
818
+ ・高い回復力
819
+ ・スケーラビリティ
820
+ ・結果整合性
821
+ end note
822
+
823
+ @enduml
824
+ ```
825
+
826
+ #### 選択の判断基準
827
+
828
+ | 観点 | 同期を選択 | 非同期を選択 |
829
+ |-----|----------|------------|
830
+ | 応答要件 | 即座に結果が必要 | 遅延が許容される |
831
+ | 一貫性要件 | 強い一貫性が必須 | 結果整合性で可 |
832
+ | 可用性要件 | サービス間依存を許容 | 高可用性が必要 |
833
+ | 処理量 | 少量のトランザクション | 大量のトランザクション |
834
+ | 障害分離 | 障害伝播を許容 | 障害を分離したい |
835
+
836
+ ### ポイントツーポイント vs ハブ&スポーク
837
+
838
+ ```plantuml
839
+ @startuml
840
+ title 統合トポロジーの比較
841
+
842
+ rectangle "ポイントツーポイント" as p2p {
843
+ rectangle "販売" as sales1
844
+ rectangle "会計" as acc1
845
+ rectangle "生産" as prod1
846
+ rectangle "在庫" as inv1
847
+
848
+ sales1 <--> acc1
849
+ sales1 <--> prod1
850
+ sales1 <--> inv1
851
+ acc1 <--> prod1
852
+ acc1 <--> inv1
853
+ prod1 <--> inv1
854
+ }
855
+
856
+ rectangle "ハブ&スポーク" as hub {
857
+ rectangle "販売" as sales2
858
+ rectangle "会計" as acc2
859
+ rectangle "生産" as prod2
860
+ rectangle "在庫" as inv2
861
+
862
+ rectangle "統合ハブ\n(ESB/API GW)" as hub_center
863
+
864
+ sales2 <--> hub_center
865
+ acc2 <--> hub_center
866
+ prod2 <--> hub_center
867
+ inv2 <--> hub_center
868
+ }
869
+
870
+ note bottom of p2p
871
+ 接続数: n(n-1)/2
872
+ 4システムで6接続
873
+
874
+ ・シンプルな初期構成
875
+ ・システム数増加で複雑化
876
+ ・個別の変換ロジック
877
+ end note
878
+
879
+ note bottom of hub
880
+ 接続数: n
881
+ 4システムで4接続
882
+
883
+ ・一元的な管理
884
+ ・変換ロジックの集約
885
+ ・ハブが単一障害点
886
+ end note
887
+
888
+ @enduml
889
+ ```
890
+
891
+ ### データ統合 vs プロセス統合
892
+
893
+ ```plantuml
894
+ @startuml
895
+ title データ統合とプロセス統合の比較
896
+
897
+ rectangle "データ統合" as data_int {
898
+ database "販売DB" as sales_db
899
+ database "統合DB" as int_db
900
+ database "会計DB" as acc_db
901
+
902
+ sales_db --> int_db : ETL
903
+ int_db --> acc_db : ETL
904
+
905
+ note right of int_db
906
+ ・データウェアハウス
907
+ ・マスタデータ管理
908
+ ・データレイク
909
+ end note
910
+ }
911
+
912
+ rectangle "プロセス統合" as proc_int {
913
+ rectangle "受注プロセス" as order_proc
914
+ rectangle "出荷プロセス" as ship_proc
915
+ rectangle "請求プロセス" as bill_proc
916
+ rectangle "仕訳プロセス" as journal_proc
917
+
918
+ order_proc --> ship_proc : イベント
919
+ ship_proc --> bill_proc : イベント
920
+ bill_proc --> journal_proc : イベント
921
+
922
+ note right of journal_proc
923
+ ・ワークフロー
924
+ ・サービスオーケストレーション
925
+ ・イベント駆動
926
+ end note
927
+ }
928
+
929
+ @enduml
930
+ ```
931
+
932
+ #### 統合アプローチの比較
933
+
934
+ | 観点 | データ統合 | プロセス統合 |
935
+ |-----|----------|------------|
936
+ | 主な目的 | データの一元化・分析 | 業務プロセスの自動化 |
937
+ | 更新頻度 | バッチ(日次/週次) | リアルタイム/準リアルタイム |
938
+ | 一貫性モデル | 結果整合性 | トランザクション整合性 |
939
+ | 技術要素 | ETL、DWH、MDM | ESB、BPM、イベントバス |
940
+ | 適用場面 | BI・レポーティング | 業務自動化・ワークフロー |
941
+
942
+ ### 統合パターン選択のフローチャート
943
+
944
+ ```plantuml
945
+ @startuml
946
+ title 統合パターン選択フローチャート
947
+
948
+ start
949
+
950
+ :連携要件の確認;
951
+
952
+ if (即座にデータ反映が必要?) then (はい)
953
+ :リアルタイム連携;
954
+ if (強い一貫性が必要?) then (はい)
955
+ :同期API連携;
956
+ :分散トランザクション検討;
957
+ else (いいえ)
958
+ :非同期メッセージング;
959
+ :イベント駆動アーキテクチャ;
960
+ endif
961
+ else (いいえ)
962
+ :バッチ連携;
963
+ if (大量データの移動?) then (はい)
964
+ :ETL/ファイル連携;
965
+ else (いいえ)
966
+ :DB直接連携;
967
+ endif
968
+ endif
969
+
970
+ :コンテキスト間関係の確認;
971
+
972
+ if (既存システムとの連携?) then (はい)
973
+ :腐敗防止層(ACL);
974
+ else (いいえ)
975
+ if (複数の消費者?) then (はい)
976
+ :公開ホストサービス;
977
+ :Published Language;
978
+ else (いいえ)
979
+ :顧客/供給者パターン;
980
+ endif
981
+ endif
982
+
983
+ :統合トポロジーの決定;
984
+
985
+ if (システム数が多い?) then (はい)
986
+ :ハブ&スポーク;
987
+ :API Gateway/ESB;
988
+ else (いいえ)
989
+ :ポイントツーポイント;
990
+ endif
991
+
992
+ stop
993
+
994
+ @enduml
995
+ ```
996
+
997
+ ---
998
+
999
+ ## 33.4 まとめ
1000
+
1001
+ 本章では、エンタープライズインテグレーションの基本概念について解説しました。
1002
+
1003
+ ### 学んだこと
1004
+
1005
+ 1. **システム統合の必要性**
1006
+
1007
+ - サイロ化した基幹業務システムの課題
1008
+ - データの一貫性・整合性確保の重要性
1009
+ - リアルタイム連携とバッチ連携の使い分け
1010
+
1011
+ 2. **境界づけられたコンテキスト**
1012
+
1013
+ - 販売・会計・生産の3つのコンテキスト
1014
+ - 各コンテキストの責務とドメインモデル
1015
+ - コンテキストマップによる関係の可視化
1016
+
1017
+ 3. **コンテキスト間の関係パターン**
1018
+
1019
+ - 共有カーネル:共通モデルの共有
1020
+ - 顧客/供給者:上流・下流の明確な関係
1021
+ - 腐敗防止層:外部システムからの保護
1022
+ - 公開ホストサービス:標準APIの提供
1023
+
1024
+ 4. **統合パターンの選択基準**
1025
+
1026
+ - 同期 vs 非同期の判断
1027
+ - ポイントツーポイント vs ハブ&スポーク
1028
+ - データ統合 vs プロセス統合
1029
+
1030
+ ### 次章の予告
1031
+
1032
+ 第34章では、メッセージングパターンについて詳しく解説します。メッセージチャネル、ルーティング、変換といったEnterprise Integration Patternsの基本パターンを学び、基幹業務システムへの適用方法を理解します。