@k2works/claude-code-booster 6.1.0 → 6.3.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 (622) hide show
  1. package/lib/assets/.claude/skills/practicing-getting-start-tdd/SKILL.md +3 -7
  2. package/lib/assets/docs/article/index.md +16 -41
  3. package/lib/assets/docs/assets/js/extra.js +5 -1
  4. package/lib/assets/docs/assets/js/mathjax.js +27 -0
  5. package/lib/assets/docs/index.md +1 -1
  6. package/lib/assets/mkdocs.yml +6 -7
  7. package/lib/assets/ops/docker/mkdoc/Dockerfile +19 -19
  8. package/lib/assets/package.json +1 -1
  9. package/package.json +1 -1
  10. package/lib/assets/docs/article/functional-desgin-ppp/all/01-immutability-and-data-transformation.md +0 -484
  11. package/lib/assets/docs/article/functional-desgin-ppp/all/02-function-composition.md +0 -528
  12. package/lib/assets/docs/article/functional-desgin-ppp/all/03-polymorphism.md +0 -546
  13. package/lib/assets/docs/article/functional-desgin-ppp/all/04-data-validation.md +0 -309
  14. package/lib/assets/docs/article/functional-desgin-ppp/all/05-property-based-testing.md +0 -329
  15. package/lib/assets/docs/article/functional-desgin-ppp/all/06-tdd-and-functional.md +0 -507
  16. package/lib/assets/docs/article/functional-desgin-ppp/all/07-composite-pattern.md +0 -307
  17. package/lib/assets/docs/article/functional-desgin-ppp/all/08-decorator-pattern.md +0 -300
  18. package/lib/assets/docs/article/functional-desgin-ppp/all/09-adapter-pattern.md +0 -345
  19. package/lib/assets/docs/article/functional-desgin-ppp/all/10-strategy-pattern.md +0 -312
  20. package/lib/assets/docs/article/functional-desgin-ppp/all/11-command-pattern.md +0 -295
  21. package/lib/assets/docs/article/functional-desgin-ppp/all/12-visitor-pattern.md +0 -331
  22. package/lib/assets/docs/article/functional-desgin-ppp/all/13-abstract-factory-pattern.md +0 -328
  23. package/lib/assets/docs/article/functional-desgin-ppp/all/14-abstract-server-pattern.md +0 -374
  24. package/lib/assets/docs/article/functional-desgin-ppp/all/15-gossiping-bus-drivers.md +0 -165
  25. package/lib/assets/docs/article/functional-desgin-ppp/all/16-payroll-system.md +0 -187
  26. package/lib/assets/docs/article/functional-desgin-ppp/all/17-video-rental-system.md +0 -321
  27. package/lib/assets/docs/article/functional-desgin-ppp/all/18-concurrency-system.md +0 -296
  28. package/lib/assets/docs/article/functional-desgin-ppp/all/19-wa-tor-simulation.md +0 -295
  29. package/lib/assets/docs/article/functional-desgin-ppp/all/20-pattern-interactions.md +0 -283
  30. package/lib/assets/docs/article/functional-desgin-ppp/all/21-best-practices.md +0 -303
  31. package/lib/assets/docs/article/functional-desgin-ppp/all/22-oo-to-fp-migration.md +0 -346
  32. package/lib/assets/docs/article/functional-desgin-ppp/all/index.md +0 -388
  33. package/lib/assets/docs/article/functional-desgin-ppp/clojure/01-immutability-and-data-transformation.md +0 -282
  34. package/lib/assets/docs/article/functional-desgin-ppp/clojure/02-function-composition.md +0 -389
  35. package/lib/assets/docs/article/functional-desgin-ppp/clojure/03-polymorphism.md +0 -393
  36. package/lib/assets/docs/article/functional-desgin-ppp/clojure/04-clojure-spec.md +0 -359
  37. package/lib/assets/docs/article/functional-desgin-ppp/clojure/05-property-based-testing.md +0 -361
  38. package/lib/assets/docs/article/functional-desgin-ppp/clojure/06-tdd-in-functional.md +0 -392
  39. package/lib/assets/docs/article/functional-desgin-ppp/clojure/07-composite-pattern.md +0 -538
  40. package/lib/assets/docs/article/functional-desgin-ppp/clojure/08-decorator-pattern.md +0 -404
  41. package/lib/assets/docs/article/functional-desgin-ppp/clojure/09-adapter-pattern.md +0 -408
  42. package/lib/assets/docs/article/functional-desgin-ppp/clojure/10-strategy-pattern.md +0 -494
  43. package/lib/assets/docs/article/functional-desgin-ppp/clojure/11-command-pattern.md +0 -575
  44. package/lib/assets/docs/article/functional-desgin-ppp/clojure/12-visitor-pattern.md +0 -576
  45. package/lib/assets/docs/article/functional-desgin-ppp/clojure/13-abstract-factory-pattern.md +0 -484
  46. package/lib/assets/docs/article/functional-desgin-ppp/clojure/14-abstract-server-pattern.md +0 -471
  47. package/lib/assets/docs/article/functional-desgin-ppp/clojure/15-gossiping-bus-drivers.md +0 -334
  48. package/lib/assets/docs/article/functional-desgin-ppp/clojure/16-payroll-system.md +0 -410
  49. package/lib/assets/docs/article/functional-desgin-ppp/clojure/17-video-rental-system.md +0 -459
  50. package/lib/assets/docs/article/functional-desgin-ppp/clojure/18-concurrency-system.md +0 -484
  51. package/lib/assets/docs/article/functional-desgin-ppp/clojure/19-wator-simulation.md +0 -748
  52. package/lib/assets/docs/article/functional-desgin-ppp/clojure/20-pattern-interactions.md +0 -576
  53. package/lib/assets/docs/article/functional-desgin-ppp/clojure/21-best-practices.md +0 -527
  54. package/lib/assets/docs/article/functional-desgin-ppp/clojure/22-oo-to-fp-migration.md +0 -541
  55. package/lib/assets/docs/article/functional-desgin-ppp/clojure/index.md +0 -241
  56. package/lib/assets/docs/article/functional-desgin-ppp/elixir/01-immutability-and-data-transformation.md +0 -392
  57. package/lib/assets/docs/article/functional-desgin-ppp/elixir/02-function-composition.md +0 -383
  58. package/lib/assets/docs/article/functional-desgin-ppp/elixir/03-polymorphism.md +0 -384
  59. package/lib/assets/docs/article/functional-desgin-ppp/elixir/04-data-validation.md +0 -204
  60. package/lib/assets/docs/article/functional-desgin-ppp/elixir/05-property-based-testing.md +0 -277
  61. package/lib/assets/docs/article/functional-desgin-ppp/elixir/06-tdd-and-fp.md +0 -303
  62. package/lib/assets/docs/article/functional-desgin-ppp/elixir/07-effects-and-pure-functions.md +0 -173
  63. package/lib/assets/docs/article/functional-desgin-ppp/elixir/08-error-handling-strategies.md +0 -177
  64. package/lib/assets/docs/article/functional-desgin-ppp/elixir/09-io-and-external-systems.md +0 -263
  65. package/lib/assets/docs/article/functional-desgin-ppp/elixir/10-concurrency-patterns.md +0 -278
  66. package/lib/assets/docs/article/functional-desgin-ppp/elixir/11-command-pattern.md +0 -157
  67. package/lib/assets/docs/article/functional-desgin-ppp/elixir/12-visitor-pattern.md +0 -185
  68. package/lib/assets/docs/article/functional-desgin-ppp/elixir/13-abstract-factory-pattern.md +0 -613
  69. package/lib/assets/docs/article/functional-desgin-ppp/elixir/14-abstract-server-pattern.md +0 -738
  70. package/lib/assets/docs/article/functional-desgin-ppp/elixir/15-gossiping-bus-drivers.md +0 -300
  71. package/lib/assets/docs/article/functional-desgin-ppp/elixir/16-payroll-system.md +0 -429
  72. package/lib/assets/docs/article/functional-desgin-ppp/elixir/17-video-rental-system.md +0 -328
  73. package/lib/assets/docs/article/functional-desgin-ppp/elixir/18-concurrency-system.md +0 -475
  74. package/lib/assets/docs/article/functional-desgin-ppp/elixir/19-wator-simulation.md +0 -532
  75. package/lib/assets/docs/article/functional-desgin-ppp/elixir/20-pattern-interactions.md +0 -296
  76. package/lib/assets/docs/article/functional-desgin-ppp/elixir/21-best-practices.md +0 -349
  77. package/lib/assets/docs/article/functional-desgin-ppp/elixir/22-oo-to-fp-migration.md +0 -404
  78. package/lib/assets/docs/article/functional-desgin-ppp/elixir/index.md +0 -248
  79. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/01-immutability-and-data-transformation.md +0 -393
  80. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/02-function-composition.md +0 -461
  81. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/03-polymorphism.md +0 -504
  82. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/04-data-validation.md +0 -425
  83. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/05-property-based-testing.md +0 -391
  84. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/06-tdd-functional.md +0 -696
  85. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/07-composite-pattern.md +0 -451
  86. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/08-decorator-pattern.md +0 -488
  87. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/09-adapter-pattern.md +0 -488
  88. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/10-strategy-pattern.md +0 -436
  89. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/11-command-pattern.md +0 -437
  90. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/12-visitor-pattern.md +0 -348
  91. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/13-abstract-factory-pattern.md +0 -318
  92. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/14-abstract-server-pattern.md +0 -605
  93. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/15-gossiping-bus-drivers.md +0 -364
  94. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/16-payroll-system.md +0 -359
  95. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/17-video-rental-system.md +0 -423
  96. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/18-concurrency-system.md +0 -376
  97. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/19-wator-simulation.md +0 -412
  98. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/20-pattern-interactions.md +0 -300
  99. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/21-best-practices.md +0 -333
  100. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/22-oo-to-fp-migration.md +0 -341
  101. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/index.md +0 -274
  102. package/lib/assets/docs/article/functional-desgin-ppp/haskell/01-immutability-and-data-transformation.md +0 -307
  103. package/lib/assets/docs/article/functional-desgin-ppp/haskell/02-function-composition.md +0 -313
  104. package/lib/assets/docs/article/functional-desgin-ppp/haskell/03-polymorphism.md +0 -371
  105. package/lib/assets/docs/article/functional-desgin-ppp/haskell/04-data-validation.md +0 -266
  106. package/lib/assets/docs/article/functional-desgin-ppp/haskell/05-property-based-testing.md +0 -263
  107. package/lib/assets/docs/article/functional-desgin-ppp/haskell/06-tdd-functional.md +0 -292
  108. package/lib/assets/docs/article/functional-desgin-ppp/haskell/07-composite-pattern.md +0 -404
  109. package/lib/assets/docs/article/functional-desgin-ppp/haskell/08-decorator-pattern.md +0 -328
  110. package/lib/assets/docs/article/functional-desgin-ppp/haskell/09-adapter-pattern.md +0 -391
  111. package/lib/assets/docs/article/functional-desgin-ppp/haskell/10-strategy-pattern.md +0 -296
  112. package/lib/assets/docs/article/functional-desgin-ppp/haskell/11-command-pattern.md +0 -312
  113. package/lib/assets/docs/article/functional-desgin-ppp/haskell/12-visitor-pattern.md +0 -335
  114. package/lib/assets/docs/article/functional-desgin-ppp/haskell/13-abstract-factory-pattern.md +0 -341
  115. package/lib/assets/docs/article/functional-desgin-ppp/haskell/14-abstract-server-pattern.md +0 -388
  116. package/lib/assets/docs/article/functional-desgin-ppp/haskell/15-gossiping-bus-drivers.md +0 -186
  117. package/lib/assets/docs/article/functional-desgin-ppp/haskell/16-payroll-system.md +0 -228
  118. package/lib/assets/docs/article/functional-desgin-ppp/haskell/17-video-rental-system.md +0 -253
  119. package/lib/assets/docs/article/functional-desgin-ppp/haskell/18-concurrency-system.md +0 -372
  120. package/lib/assets/docs/article/functional-desgin-ppp/haskell/19-wator-simulation.md +0 -447
  121. package/lib/assets/docs/article/functional-desgin-ppp/haskell/20-pattern-interactions.md +0 -334
  122. package/lib/assets/docs/article/functional-desgin-ppp/haskell/21-best-practices.md +0 -412
  123. package/lib/assets/docs/article/functional-desgin-ppp/haskell/22-oo-to-fp-migration.md +0 -478
  124. package/lib/assets/docs/article/functional-desgin-ppp/haskell/index.md +0 -174
  125. package/lib/assets/docs/article/functional-desgin-ppp/index.md +0 -90
  126. package/lib/assets/docs/article/functional-desgin-ppp/rust/01-immutability-and-data-transformation.md +0 -459
  127. package/lib/assets/docs/article/functional-desgin-ppp/rust/02-function-composition.md +0 -472
  128. package/lib/assets/docs/article/functional-desgin-ppp/rust/03-polymorphism.md +0 -434
  129. package/lib/assets/docs/article/functional-desgin-ppp/rust/04-data-validation.md +0 -282
  130. package/lib/assets/docs/article/functional-desgin-ppp/rust/05-property-based-testing.md +0 -256
  131. package/lib/assets/docs/article/functional-desgin-ppp/rust/06-tdd-and-functional.md +0 -850
  132. package/lib/assets/docs/article/functional-desgin-ppp/rust/07-composite-pattern.md +0 -393
  133. package/lib/assets/docs/article/functional-desgin-ppp/rust/08-decorator-pattern.md +0 -392
  134. package/lib/assets/docs/article/functional-desgin-ppp/rust/09-adapter-pattern.md +0 -348
  135. package/lib/assets/docs/article/functional-desgin-ppp/rust/10-strategy-pattern.md +0 -340
  136. package/lib/assets/docs/article/functional-desgin-ppp/rust/11-command-pattern.md +0 -365
  137. package/lib/assets/docs/article/functional-desgin-ppp/rust/12-visitor-pattern.md +0 -388
  138. package/lib/assets/docs/article/functional-desgin-ppp/rust/13-abstract-factory-pattern.md +0 -370
  139. package/lib/assets/docs/article/functional-desgin-ppp/rust/14-abstract-server-pattern.md +0 -401
  140. package/lib/assets/docs/article/functional-desgin-ppp/rust/15-gossiping-bus-drivers.md +0 -309
  141. package/lib/assets/docs/article/functional-desgin-ppp/rust/16-payroll-system.md +0 -306
  142. package/lib/assets/docs/article/functional-desgin-ppp/rust/17-video-rental-system.md +0 -313
  143. package/lib/assets/docs/article/functional-desgin-ppp/rust/18-concurrency-system.md +0 -324
  144. package/lib/assets/docs/article/functional-desgin-ppp/rust/19-wator-simulation.md +0 -320
  145. package/lib/assets/docs/article/functional-desgin-ppp/rust/20-pattern-interactions.md +0 -313
  146. package/lib/assets/docs/article/functional-desgin-ppp/rust/21-best-practices.md +0 -345
  147. package/lib/assets/docs/article/functional-desgin-ppp/rust/22-oo-to-fp-migration.md +0 -358
  148. package/lib/assets/docs/article/functional-desgin-ppp/rust/index.md +0 -243
  149. package/lib/assets/docs/article/functional-desgin-ppp/scala/01-immutability-and-data-transformation.md +0 -337
  150. package/lib/assets/docs/article/functional-desgin-ppp/scala/02-function-composition.md +0 -357
  151. package/lib/assets/docs/article/functional-desgin-ppp/scala/03-polymorphism.md +0 -366
  152. package/lib/assets/docs/article/functional-desgin-ppp/scala/04-data-validation.md +0 -373
  153. package/lib/assets/docs/article/functional-desgin-ppp/scala/05-property-based-testing.md +0 -524
  154. package/lib/assets/docs/article/functional-desgin-ppp/scala/06-tdd-functional.md +0 -566
  155. package/lib/assets/docs/article/functional-desgin-ppp/scala/07-composite-pattern.md +0 -372
  156. package/lib/assets/docs/article/functional-desgin-ppp/scala/08-decorator-pattern.md +0 -336
  157. package/lib/assets/docs/article/functional-desgin-ppp/scala/09-adapter-pattern.md +0 -526
  158. package/lib/assets/docs/article/functional-desgin-ppp/scala/10-strategy-pattern.md +0 -450
  159. package/lib/assets/docs/article/functional-desgin-ppp/scala/11-command-pattern.md +0 -416
  160. package/lib/assets/docs/article/functional-desgin-ppp/scala/12-visitor-pattern.md +0 -388
  161. package/lib/assets/docs/article/functional-desgin-ppp/scala/13-abstract-factory-pattern.md +0 -407
  162. package/lib/assets/docs/article/functional-desgin-ppp/scala/14-abstract-server-pattern.md +0 -485
  163. package/lib/assets/docs/article/functional-desgin-ppp/scala/15-gossiping-bus-drivers.md +0 -400
  164. package/lib/assets/docs/article/functional-desgin-ppp/scala/16-payroll-system.md +0 -351
  165. package/lib/assets/docs/article/functional-desgin-ppp/scala/17-video-rental-system.md +0 -333
  166. package/lib/assets/docs/article/functional-desgin-ppp/scala/18-concurrency-system.md +0 -739
  167. package/lib/assets/docs/article/functional-desgin-ppp/scala/19-wator-simulation.md +0 -633
  168. package/lib/assets/docs/article/functional-desgin-ppp/scala/20-pattern-interactions.md +0 -521
  169. package/lib/assets/docs/article/functional-desgin-ppp/scala/21-best-practices.md +0 -442
  170. package/lib/assets/docs/article/functional-desgin-ppp/scala/22-oo-to-fp-migration.md +0 -697
  171. package/lib/assets/docs/article/functional-desgin-ppp/scala/index.md +0 -243
  172. package/lib/assets/docs/article/getting-start-docker-kubernetes/01-container-and-docker-basics.md +0 -341
  173. package/lib/assets/docs/article/getting-start-docker-kubernetes/02-container-deployment.md +0 -785
  174. package/lib/assets/docs/article/getting-start-docker-kubernetes/03-practical-container-build-deploy.md +0 -466
  175. package/lib/assets/docs/article/getting-start-docker-kubernetes/04-multi-container-application.md +0 -878
  176. package/lib/assets/docs/article/getting-start-docker-kubernetes/05-kubernetes-introduction.md +0 -585
  177. package/lib/assets/docs/article/getting-start-docker-kubernetes/06-kubernetes-deploy-cluster.md +0 -620
  178. package/lib/assets/docs/article/getting-start-docker-kubernetes/07-kubernetes-advanced.md +0 -621
  179. package/lib/assets/docs/article/getting-start-docker-kubernetes/08-kubernetes-packaging.md +0 -518
  180. package/lib/assets/docs/article/getting-start-docker-kubernetes/09-container-operations.md +0 -546
  181. package/lib/assets/docs/article/getting-start-docker-kubernetes/10-optimal-container-image.md +0 -640
  182. package/lib/assets/docs/article/getting-start-docker-kubernetes/11-continuous-delivery.md +0 -607
  183. package/lib/assets/docs/article/getting-start-docker-kubernetes/12-container-use-cases.md +0 -463
  184. package/lib/assets/docs/article/getting-start-docker-kubernetes/13-case-monolith-compose-vs-kustomize.md +0 -346
  185. package/lib/assets/docs/article/getting-start-docker-kubernetes/14-case-event-driven-kustomize-vs-helm.md +0 -324
  186. package/lib/assets/docs/article/getting-start-docker-kubernetes/15-case-escqrs-axon-kustomize-vs-helm.md +0 -297
  187. package/lib/assets/docs/article/getting-start-docker-kubernetes/16-case-escqrs-kafka-kustomize-vs-helm.md +0 -256
  188. package/lib/assets/docs/article/getting-start-docker-kubernetes/17-case-comparison-summary.md +0 -141
  189. package/lib/assets/docs/article/getting-start-docker-kubernetes/18-case-load-testing.md +0 -303
  190. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-a-dev-tools-setup.md +0 -274
  191. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-b-orchestration-environments.md +0 -530
  192. package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-c-tips.md +0 -519
  193. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-01-comic.png +0 -0
  194. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-02-comic.png +0 -0
  195. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-03-comic.png +0 -0
  196. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-04-comic.png +0 -0
  197. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-05-comic.png +0 -0
  198. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-06-comic.png +0 -0
  199. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-07-comic.png +0 -0
  200. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-08-comic.png +0 -0
  201. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-09-comic.png +0 -0
  202. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-10-comic.png +0 -0
  203. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-11-comic.png +0 -0
  204. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-12-comic.png +0 -0
  205. package/lib/assets/docs/article/getting-start-docker-kubernetes/images/overview-comic.png +0 -0
  206. package/lib/assets/docs/article/getting-start-docker-kubernetes/index.md +0 -82
  207. package/lib/assets/docs/article/getting-start-docker-kubernetes/outline.md +0 -220
  208. package/lib/assets/docs/article/getting-start-tdd/clojure/01-todo-list-and-first-test.md +0 -175
  209. package/lib/assets/docs/article/getting-start-tdd/clojure/02-fake-it-and-triangulation.md +0 -171
  210. package/lib/assets/docs/article/getting-start-tdd/clojure/03-obvious-implementation-and-refactoring.md +0 -144
  211. package/lib/assets/docs/article/getting-start-tdd/clojure/04-version-control-and-conventional-commits.md +0 -97
  212. package/lib/assets/docs/article/getting-start-tdd/clojure/05-package-management-and-static-analysis.md +0 -308
  213. package/lib/assets/docs/article/getting-start-tdd/clojure/06-task-runner-and-ci-cd.md +0 -250
  214. package/lib/assets/docs/article/getting-start-tdd/clojure/07-protocols-and-records.md +0 -140
  215. package/lib/assets/docs/article/getting-start-tdd/clojure/08-multimethods-and-design-patterns.md +0 -139
  216. package/lib/assets/docs/article/getting-start-tdd/clojure/09-namespaces-and-module-design.md +0 -136
  217. package/lib/assets/docs/article/getting-start-tdd/clojure/10-higher-order-functions-and-composition.md +0 -123
  218. package/lib/assets/docs/article/getting-start-tdd/clojure/11-persistent-data-and-pipeline.md +0 -147
  219. package/lib/assets/docs/article/getting-start-tdd/clojure/12-error-handling-and-spec.md +0 -170
  220. package/lib/assets/docs/article/getting-start-tdd/clojure/index.md +0 -65
  221. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter01.md +0 -241
  222. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter02.md +0 -253
  223. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter03.md +0 -211
  224. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter04.md +0 -101
  225. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter05.md +0 -265
  226. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter06.md +0 -204
  227. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter07.md +0 -223
  228. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter08.md +0 -258
  229. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter09.md +0 -183
  230. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter10.md +0 -175
  231. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter11.md +0 -201
  232. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter12.md +0 -220
  233. package/lib/assets/docs/article/getting-start-tdd/csharp/index.md +0 -83
  234. package/lib/assets/docs/article/getting-start-tdd/elixir/01-todo-list-and-first-test.md +0 -96
  235. package/lib/assets/docs/article/getting-start-tdd/elixir/02-fake-it-and-triangulation.md +0 -104
  236. package/lib/assets/docs/article/getting-start-tdd/elixir/03-obvious-implementation-and-refactoring.md +0 -118
  237. package/lib/assets/docs/article/getting-start-tdd/elixir/04-version-control-and-conventional-commits.md +0 -105
  238. package/lib/assets/docs/article/getting-start-tdd/elixir/05-package-management-and-static-analysis.md +0 -97
  239. package/lib/assets/docs/article/getting-start-tdd/elixir/06-task-runner-and-ci-cd.md +0 -80
  240. package/lib/assets/docs/article/getting-start-tdd/elixir/07-structs-and-protocols.md +0 -119
  241. package/lib/assets/docs/article/getting-start-tdd/elixir/08-pattern-matching-and-guards.md +0 -117
  242. package/lib/assets/docs/article/getting-start-tdd/elixir/09-module-design-and-behaviours.md +0 -113
  243. package/lib/assets/docs/article/getting-start-tdd/elixir/10-higher-order-functions-and-pipeline.md +0 -187
  244. package/lib/assets/docs/article/getting-start-tdd/elixir/11-stream-and-lazy-evaluation.md +0 -151
  245. package/lib/assets/docs/article/getting-start-tdd/elixir/12-error-handling-and-with.md +0 -154
  246. package/lib/assets/docs/article/getting-start-tdd/elixir/index.md +0 -35
  247. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter01.md +0 -211
  248. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter02.md +0 -255
  249. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter03.md +0 -227
  250. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter04.md +0 -188
  251. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter05.md +0 -276
  252. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter06.md +0 -199
  253. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter07.md +0 -170
  254. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter08.md +0 -184
  255. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter09.md +0 -231
  256. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter10.md +0 -198
  257. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter11.md +0 -221
  258. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter12.md +0 -224
  259. package/lib/assets/docs/article/getting-start-tdd/fsharp/index.md +0 -71
  260. package/lib/assets/docs/article/getting-start-tdd/go/01-todo-list-and-first-test.md +0 -222
  261. package/lib/assets/docs/article/getting-start-tdd/go/02-fake-it-and-triangulation.md +0 -311
  262. package/lib/assets/docs/article/getting-start-tdd/go/03-obvious-implementation-and-refactoring.md +0 -348
  263. package/lib/assets/docs/article/getting-start-tdd/go/04-version-control-and-conventional-commits.md +0 -121
  264. package/lib/assets/docs/article/getting-start-tdd/go/05-package-management-and-static-analysis.md +0 -281
  265. package/lib/assets/docs/article/getting-start-tdd/go/06-task-runner-and-ci-cd.md +0 -242
  266. package/lib/assets/docs/article/getting-start-tdd/go/07-encapsulation-and-polymorphism.md +0 -402
  267. package/lib/assets/docs/article/getting-start-tdd/go/08-design-patterns.md +0 -430
  268. package/lib/assets/docs/article/getting-start-tdd/go/09-solid-principles-and-module-design.md +0 -408
  269. package/lib/assets/docs/article/getting-start-tdd/go/10-higher-order-functions-and-composition.md +0 -234
  270. package/lib/assets/docs/article/getting-start-tdd/go/11-immutable-data-and-pipeline.md +0 -304
  271. package/lib/assets/docs/article/getting-start-tdd/go/12-error-handling-and-type-safety.md +0 -419
  272. package/lib/assets/docs/article/getting-start-tdd/go/index.md +0 -83
  273. package/lib/assets/docs/article/getting-start-tdd/haskell/01-todo-list-and-first-test.md +0 -288
  274. package/lib/assets/docs/article/getting-start-tdd/haskell/02-fake-it-and-triangulation.md +0 -346
  275. package/lib/assets/docs/article/getting-start-tdd/haskell/03-obvious-implementation-and-refactoring.md +0 -266
  276. package/lib/assets/docs/article/getting-start-tdd/haskell/04-version-control-and-conventional-commits.md +0 -191
  277. package/lib/assets/docs/article/getting-start-tdd/haskell/05-package-management-and-static-analysis.md +0 -322
  278. package/lib/assets/docs/article/getting-start-tdd/haskell/06-task-runner-and-ci-cd.md +0 -318
  279. package/lib/assets/docs/article/getting-start-tdd/haskell/07-algebraic-data-types-and-type-classes.md +0 -421
  280. package/lib/assets/docs/article/getting-start-tdd/haskell/08-pattern-matching-and-guards.md +0 -399
  281. package/lib/assets/docs/article/getting-start-tdd/haskell/09-module-design-and-smart-constructors.md +0 -470
  282. package/lib/assets/docs/article/getting-start-tdd/haskell/10-higher-order-functions-and-currying.md +0 -443
  283. package/lib/assets/docs/article/getting-start-tdd/haskell/11-function-composition-and-point-free.md +0 -401
  284. package/lib/assets/docs/article/getting-start-tdd/haskell/12-monad-and-error-handling.md +0 -640
  285. package/lib/assets/docs/article/getting-start-tdd/haskell/index.md +0 -49
  286. package/lib/assets/docs/article/getting-start-tdd/index.md +0 -93
  287. package/lib/assets/docs/article/getting-start-tdd/integration/01-language-overview.md +0 -384
  288. package/lib/assets/docs/article/getting-start-tdd/integration/02-test-framework-comparison.md +0 -358
  289. package/lib/assets/docs/article/getting-start-tdd/integration/03-tdd-pattern-comparison.md +0 -454
  290. package/lib/assets/docs/article/getting-start-tdd/integration/04-type-system-comparison.md +0 -418
  291. package/lib/assets/docs/article/getting-start-tdd/integration/05-dev-environment-comparison.md +0 -339
  292. package/lib/assets/docs/article/getting-start-tdd/integration/06-learning-roadmap.md +0 -299
  293. package/lib/assets/docs/article/getting-start-tdd/integration/index.md +0 -69
  294. package/lib/assets/docs/article/getting-start-tdd/java/01-todo-list-and-first-test.md +0 -243
  295. package/lib/assets/docs/article/getting-start-tdd/java/02-fake-it-and-triangulation.md +0 -270
  296. package/lib/assets/docs/article/getting-start-tdd/java/03-obvious-implementation-and-refactoring.md +0 -194
  297. package/lib/assets/docs/article/getting-start-tdd/java/04-version-control-and-conventional-commits.md +0 -124
  298. package/lib/assets/docs/article/getting-start-tdd/java/05-package-management-and-static-analysis.md +0 -391
  299. package/lib/assets/docs/article/getting-start-tdd/java/06-task-runner-and-ci-cd.md +0 -281
  300. package/lib/assets/docs/article/getting-start-tdd/java/07-encapsulation-and-polymorphism.md +0 -635
  301. package/lib/assets/docs/article/getting-start-tdd/java/08-design-patterns.md +0 -402
  302. package/lib/assets/docs/article/getting-start-tdd/java/09-solid-principles-and-module-design.md +0 -319
  303. package/lib/assets/docs/article/getting-start-tdd/java/10-higher-order-functions-and-composition.md +0 -197
  304. package/lib/assets/docs/article/getting-start-tdd/java/11-immutable-data-and-pipeline.md +0 -176
  305. package/lib/assets/docs/article/getting-start-tdd/java/12-error-handling-and-type-safety.md +0 -214
  306. package/lib/assets/docs/article/getting-start-tdd/java/index.md +0 -61
  307. package/lib/assets/docs/article/getting-start-tdd/node/01-todo-list-and-first-test.md +0 -253
  308. package/lib/assets/docs/article/getting-start-tdd/node/02-fake-it-and-triangulation.md +0 -271
  309. package/lib/assets/docs/article/getting-start-tdd/node/03-obvious-implementation-and-refactoring.md +0 -178
  310. package/lib/assets/docs/article/getting-start-tdd/node/04-version-control-and-conventional-commits.md +0 -121
  311. package/lib/assets/docs/article/getting-start-tdd/node/05-package-management-and-static-analysis.md +0 -323
  312. package/lib/assets/docs/article/getting-start-tdd/node/06-task-runner-and-ci-cd.md +0 -244
  313. package/lib/assets/docs/article/getting-start-tdd/node/07-encapsulation-and-polymorphism.md +0 -336
  314. package/lib/assets/docs/article/getting-start-tdd/node/08-design-patterns.md +0 -331
  315. package/lib/assets/docs/article/getting-start-tdd/node/09-solid-principles-and-module-design.md +0 -294
  316. package/lib/assets/docs/article/getting-start-tdd/node/10-higher-order-functions-and-composition.md +0 -208
  317. package/lib/assets/docs/article/getting-start-tdd/node/11-immutable-data-and-pipeline.md +0 -216
  318. package/lib/assets/docs/article/getting-start-tdd/node/12-error-handling-and-type-safety.md +0 -304
  319. package/lib/assets/docs/article/getting-start-tdd/node/index.md +0 -56
  320. package/lib/assets/docs/article/getting-start-tdd/php/01-todo-list-and-first-test.md +0 -268
  321. package/lib/assets/docs/article/getting-start-tdd/php/02-fake-it-and-triangulation.md +0 -209
  322. package/lib/assets/docs/article/getting-start-tdd/php/03-obvious-implementation-and-refactoring.md +0 -257
  323. package/lib/assets/docs/article/getting-start-tdd/php/04-version-control-and-conventional-commits.md +0 -150
  324. package/lib/assets/docs/article/getting-start-tdd/php/05-package-management-and-static-analysis.md +0 -419
  325. package/lib/assets/docs/article/getting-start-tdd/php/06-task-runner-and-ci-cd.md +0 -330
  326. package/lib/assets/docs/article/getting-start-tdd/php/07-encapsulation-and-polymorphism.md +0 -380
  327. package/lib/assets/docs/article/getting-start-tdd/php/08-design-patterns.md +0 -461
  328. package/lib/assets/docs/article/getting-start-tdd/php/09-solid-principles-and-module-design.md +0 -468
  329. package/lib/assets/docs/article/getting-start-tdd/php/10-higher-order-functions-and-composition.md +0 -190
  330. package/lib/assets/docs/article/getting-start-tdd/php/11-immutable-data-and-pipeline.md +0 -274
  331. package/lib/assets/docs/article/getting-start-tdd/php/12-error-handling-and-type-safety.md +0 -316
  332. package/lib/assets/docs/article/getting-start-tdd/php/index.md +0 -84
  333. package/lib/assets/docs/article/getting-start-tdd/python/01-todo-list-and-first-test.md +0 -210
  334. package/lib/assets/docs/article/getting-start-tdd/python/02-fake-it-and-triangulation.md +0 -256
  335. package/lib/assets/docs/article/getting-start-tdd/python/03-obvious-implementation-and-refactoring.md +0 -208
  336. package/lib/assets/docs/article/getting-start-tdd/python/04-version-control-and-conventional-commits.md +0 -96
  337. package/lib/assets/docs/article/getting-start-tdd/python/05-package-management-and-static-analysis.md +0 -283
  338. package/lib/assets/docs/article/getting-start-tdd/python/06-task-runner-and-ci-cd.md +0 -199
  339. package/lib/assets/docs/article/getting-start-tdd/python/07-encapsulation-and-polymorphism.md +0 -217
  340. package/lib/assets/docs/article/getting-start-tdd/python/08-design-patterns.md +0 -181
  341. package/lib/assets/docs/article/getting-start-tdd/python/09-solid-principles-and-module-design.md +0 -139
  342. package/lib/assets/docs/article/getting-start-tdd/python/10-higher-order-functions-and-composition.md +0 -131
  343. package/lib/assets/docs/article/getting-start-tdd/python/11-immutable-data-and-pipeline.md +0 -125
  344. package/lib/assets/docs/article/getting-start-tdd/python/12-error-handling-and-type-safety.md +0 -135
  345. package/lib/assets/docs/article/getting-start-tdd/python/index.md +0 -55
  346. package/lib/assets/docs/article/getting-start-tdd/ruby/01-todo-list-and-first-test.md +0 -240
  347. package/lib/assets/docs/article/getting-start-tdd/ruby/02-fake-it-and-triangulation.md +0 -247
  348. package/lib/assets/docs/article/getting-start-tdd/ruby/03-obvious-implementation-and-refactoring.md +0 -237
  349. package/lib/assets/docs/article/getting-start-tdd/ruby/04-version-control-and-conventional-commits.md +0 -121
  350. package/lib/assets/docs/article/getting-start-tdd/ruby/05-package-management-and-static-analysis.md +0 -296
  351. package/lib/assets/docs/article/getting-start-tdd/ruby/06-task-runner-and-ci-cd.md +0 -257
  352. package/lib/assets/docs/article/getting-start-tdd/ruby/07-encapsulation-and-polymorphism.md +0 -288
  353. package/lib/assets/docs/article/getting-start-tdd/ruby/08-design-patterns.md +0 -338
  354. package/lib/assets/docs/article/getting-start-tdd/ruby/09-solid-principles-and-module-design.md +0 -205
  355. package/lib/assets/docs/article/getting-start-tdd/ruby/10-higher-order-functions-and-composition.md +0 -184
  356. package/lib/assets/docs/article/getting-start-tdd/ruby/11-immutable-data-and-pipeline.md +0 -246
  357. package/lib/assets/docs/article/getting-start-tdd/ruby/12-error-handling-and-type-safety.md +0 -407
  358. package/lib/assets/docs/article/getting-start-tdd/ruby/index.md +0 -83
  359. package/lib/assets/docs/article/getting-start-tdd/rust/01-todo-list-and-first-test.md +0 -220
  360. package/lib/assets/docs/article/getting-start-tdd/rust/02-fake-it-and-triangulation.md +0 -273
  361. package/lib/assets/docs/article/getting-start-tdd/rust/03-obvious-implementation-and-refactoring.md +0 -242
  362. package/lib/assets/docs/article/getting-start-tdd/rust/04-version-control-and-conventional-commits.md +0 -101
  363. package/lib/assets/docs/article/getting-start-tdd/rust/05-package-management-and-static-analysis.md +0 -221
  364. package/lib/assets/docs/article/getting-start-tdd/rust/06-task-runner-and-ci-cd.md +0 -173
  365. package/lib/assets/docs/article/getting-start-tdd/rust/07-encapsulation-and-polymorphism.md +0 -151
  366. package/lib/assets/docs/article/getting-start-tdd/rust/08-design-patterns.md +0 -154
  367. package/lib/assets/docs/article/getting-start-tdd/rust/09-solid-principles-and-module-design.md +0 -119
  368. package/lib/assets/docs/article/getting-start-tdd/rust/10-higher-order-functions-and-composition.md +0 -103
  369. package/lib/assets/docs/article/getting-start-tdd/rust/11-immutable-data-and-pipeline.md +0 -114
  370. package/lib/assets/docs/article/getting-start-tdd/rust/12-error-handling-and-type-safety.md +0 -121
  371. package/lib/assets/docs/article/getting-start-tdd/rust/index.md +0 -83
  372. package/lib/assets/docs/article/getting-start-tdd/scala/01-todo-list-and-first-test.md +0 -120
  373. package/lib/assets/docs/article/getting-start-tdd/scala/02-fake-it-and-triangulation.md +0 -116
  374. package/lib/assets/docs/article/getting-start-tdd/scala/03-obvious-implementation-and-refactoring.md +0 -108
  375. package/lib/assets/docs/article/getting-start-tdd/scala/04-version-control-and-conventional-commits.md +0 -132
  376. package/lib/assets/docs/article/getting-start-tdd/scala/05-package-management-and-static-analysis.md +0 -205
  377. package/lib/assets/docs/article/getting-start-tdd/scala/06-task-runner-and-ci-cd.md +0 -195
  378. package/lib/assets/docs/article/getting-start-tdd/scala/07-case-classes-and-traits.md +0 -148
  379. package/lib/assets/docs/article/getting-start-tdd/scala/08-pattern-matching-and-sealed-traits.md +0 -115
  380. package/lib/assets/docs/article/getting-start-tdd/scala/09-packages-and-module-design.md +0 -84
  381. package/lib/assets/docs/article/getting-start-tdd/scala/10-higher-order-functions-and-composition.md +0 -113
  382. package/lib/assets/docs/article/getting-start-tdd/scala/11-collections-and-lazy-evaluation.md +0 -103
  383. package/lib/assets/docs/article/getting-start-tdd/scala/12-error-handling-and-type-safety.md +0 -101
  384. package/lib/assets/docs/article/getting-start-tdd/scala/index.md +0 -65
  385. package/lib/assets/docs/article/grokking-concurrency/all/index.md +0 -403
  386. package/lib/assets/docs/article/grokking-concurrency/all/part-1-ch02-sequential.md +0 -563
  387. package/lib/assets/docs/article/grokking-concurrency/all/part-2-ch04-05-threads.md +0 -478
  388. package/lib/assets/docs/article/grokking-concurrency/all/part-3-ch06-multitasking.md +0 -529
  389. package/lib/assets/docs/article/grokking-concurrency/all/part-4-ch07-parallel-patterns.md +0 -429
  390. package/lib/assets/docs/article/grokking-concurrency/all/part-5-ch08-09-synchronization.md +0 -519
  391. package/lib/assets/docs/article/grokking-concurrency/all/part-6-ch10-11-nonblocking-io.md +0 -444
  392. package/lib/assets/docs/article/grokking-concurrency/all/part-7-ch12-async.md +0 -474
  393. package/lib/assets/docs/article/grokking-concurrency/all/part-8-ch13-mapreduce.md +0 -386
  394. package/lib/assets/docs/article/grokking-concurrency/clojure/index.md +0 -106
  395. package/lib/assets/docs/article/grokking-concurrency/clojure/part-1.md +0 -107
  396. package/lib/assets/docs/article/grokking-concurrency/clojure/part-2.md +0 -100
  397. package/lib/assets/docs/article/grokking-concurrency/clojure/part-3.md +0 -121
  398. package/lib/assets/docs/article/grokking-concurrency/clojure/part-4.md +0 -122
  399. package/lib/assets/docs/article/grokking-concurrency/clojure/part-5.md +0 -117
  400. package/lib/assets/docs/article/grokking-concurrency/clojure/part-6.md +0 -88
  401. package/lib/assets/docs/article/grokking-concurrency/clojure/part-7.md +0 -99
  402. package/lib/assets/docs/article/grokking-concurrency/clojure/part-8.md +0 -119
  403. package/lib/assets/docs/article/grokking-concurrency/csharp/index.md +0 -91
  404. package/lib/assets/docs/article/grokking-concurrency/csharp/part-1.md +0 -96
  405. package/lib/assets/docs/article/grokking-concurrency/csharp/part-2.md +0 -122
  406. package/lib/assets/docs/article/grokking-concurrency/csharp/part-3.md +0 -100
  407. package/lib/assets/docs/article/grokking-concurrency/csharp/part-4.md +0 -111
  408. package/lib/assets/docs/article/grokking-concurrency/csharp/part-5.md +0 -98
  409. package/lib/assets/docs/article/grokking-concurrency/csharp/part-6.md +0 -60
  410. package/lib/assets/docs/article/grokking-concurrency/csharp/part-7.md +0 -83
  411. package/lib/assets/docs/article/grokking-concurrency/csharp/part-8.md +0 -91
  412. package/lib/assets/docs/article/grokking-concurrency/fsharp/index.md +0 -55
  413. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-1.md +0 -79
  414. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-2.md +0 -102
  415. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-3.md +0 -93
  416. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-4.md +0 -109
  417. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-5.md +0 -103
  418. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-6.md +0 -92
  419. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-7.md +0 -120
  420. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-8.md +0 -106
  421. package/lib/assets/docs/article/grokking-concurrency/haskell/index.md +0 -238
  422. package/lib/assets/docs/article/grokking-concurrency/haskell/part-1.md +0 -95
  423. package/lib/assets/docs/article/grokking-concurrency/haskell/part-2.md +0 -95
  424. package/lib/assets/docs/article/grokking-concurrency/haskell/part-3.md +0 -90
  425. package/lib/assets/docs/article/grokking-concurrency/haskell/part-4.md +0 -105
  426. package/lib/assets/docs/article/grokking-concurrency/haskell/part-5.md +0 -98
  427. package/lib/assets/docs/article/grokking-concurrency/haskell/part-6.md +0 -94
  428. package/lib/assets/docs/article/grokking-concurrency/haskell/part-7.md +0 -110
  429. package/lib/assets/docs/article/grokking-concurrency/haskell/part-8.md +0 -117
  430. package/lib/assets/docs/article/grokking-concurrency/index.md +0 -66
  431. package/lib/assets/docs/article/grokking-concurrency/java/index.md +0 -92
  432. package/lib/assets/docs/article/grokking-concurrency/java/part-1.md +0 -307
  433. package/lib/assets/docs/article/grokking-concurrency/java/part-2.md +0 -333
  434. package/lib/assets/docs/article/grokking-concurrency/java/part-3.md +0 -220
  435. package/lib/assets/docs/article/grokking-concurrency/java/part-4.md +0 -212
  436. package/lib/assets/docs/article/grokking-concurrency/java/part-5.md +0 -111
  437. package/lib/assets/docs/article/grokking-concurrency/java/part-6.md +0 -68
  438. package/lib/assets/docs/article/grokking-concurrency/java/part-7.md +0 -100
  439. package/lib/assets/docs/article/grokking-concurrency/java/part-8.md +0 -100
  440. package/lib/assets/docs/article/grokking-concurrency/python/index.md +0 -303
  441. package/lib/assets/docs/article/grokking-concurrency/python/part-1.md +0 -238
  442. package/lib/assets/docs/article/grokking-concurrency/python/part-2.md +0 -417
  443. package/lib/assets/docs/article/grokking-concurrency/python/part-3.md +0 -226
  444. package/lib/assets/docs/article/grokking-concurrency/python/part-4.md +0 -298
  445. package/lib/assets/docs/article/grokking-concurrency/python/part-5.md +0 -314
  446. package/lib/assets/docs/article/grokking-concurrency/python/part-6.md +0 -296
  447. package/lib/assets/docs/article/grokking-concurrency/python/part-7.md +0 -313
  448. package/lib/assets/docs/article/grokking-concurrency/python/part-8.md +0 -359
  449. package/lib/assets/docs/article/grokking-concurrency/rust/index.md +0 -260
  450. package/lib/assets/docs/article/grokking-concurrency/rust/part-1.md +0 -107
  451. package/lib/assets/docs/article/grokking-concurrency/rust/part-2.md +0 -119
  452. package/lib/assets/docs/article/grokking-concurrency/rust/part-3.md +0 -125
  453. package/lib/assets/docs/article/grokking-concurrency/rust/part-4.md +0 -174
  454. package/lib/assets/docs/article/grokking-concurrency/rust/part-5.md +0 -157
  455. package/lib/assets/docs/article/grokking-concurrency/rust/part-6.md +0 -93
  456. package/lib/assets/docs/article/grokking-concurrency/rust/part-7.md +0 -132
  457. package/lib/assets/docs/article/grokking-concurrency/rust/part-8.md +0 -154
  458. package/lib/assets/docs/article/grokking-concurrency/scala/index.md +0 -59
  459. package/lib/assets/docs/article/grokking-concurrency/scala/part-1.md +0 -77
  460. package/lib/assets/docs/article/grokking-concurrency/scala/part-2.md +0 -111
  461. package/lib/assets/docs/article/grokking-concurrency/scala/part-3.md +0 -92
  462. package/lib/assets/docs/article/grokking-concurrency/scala/part-4.md +0 -109
  463. package/lib/assets/docs/article/grokking-concurrency/scala/part-5.md +0 -118
  464. package/lib/assets/docs/article/grokking-concurrency/scala/part-6.md +0 -82
  465. package/lib/assets/docs/article/grokking-concurrency/scala/part-7.md +0 -130
  466. package/lib/assets/docs/article/grokking-concurrency/scala/part-8.md +0 -128
  467. package/lib/assets/docs/article/grokkingfp/all/index.md +0 -368
  468. package/lib/assets/docs/article/grokkingfp/all/part-1-ch01-fp-introduction.md +0 -539
  469. package/lib/assets/docs/article/grokkingfp/all/part-1-ch02-pure-functions.md +0 -932
  470. package/lib/assets/docs/article/grokkingfp/all/part-2-ch03-immutable-data.md +0 -1137
  471. package/lib/assets/docs/article/grokkingfp/all/part-2-ch04-higher-order-functions.md +0 -1113
  472. package/lib/assets/docs/article/grokkingfp/all/part-2-ch05-flatmap.md +0 -1035
  473. package/lib/assets/docs/article/grokkingfp/all/part-3-ch06-option.md +0 -794
  474. package/lib/assets/docs/article/grokkingfp/all/part-3-ch07-either-adt.md +0 -880
  475. package/lib/assets/docs/article/grokkingfp/all/part-4-ch08-io-monad.md +0 -981
  476. package/lib/assets/docs/article/grokkingfp/all/part-4-ch09-streams.md +0 -935
  477. package/lib/assets/docs/article/grokkingfp/all/part-5-ch10-concurrency.md +0 -879
  478. package/lib/assets/docs/article/grokkingfp/all/part-6-ch11-application.md +0 -724
  479. package/lib/assets/docs/article/grokkingfp/all/part-6-ch12-testing.md +0 -635
  480. package/lib/assets/docs/article/grokkingfp/all/writing-plan.md +0 -721
  481. package/lib/assets/docs/article/grokkingfp/clojure/index.md +0 -276
  482. package/lib/assets/docs/article/grokkingfp/clojure/part-1.md +0 -676
  483. package/lib/assets/docs/article/grokkingfp/clojure/part-2.md +0 -652
  484. package/lib/assets/docs/article/grokkingfp/clojure/part-3.md +0 -629
  485. package/lib/assets/docs/article/grokkingfp/clojure/part-4.md +0 -706
  486. package/lib/assets/docs/article/grokkingfp/clojure/part-5.md +0 -760
  487. package/lib/assets/docs/article/grokkingfp/clojure/part-6.md +0 -730
  488. package/lib/assets/docs/article/grokkingfp/csharp/index.md +0 -246
  489. package/lib/assets/docs/article/grokkingfp/csharp/part-1.md +0 -820
  490. package/lib/assets/docs/article/grokkingfp/csharp/part-2.md +0 -980
  491. package/lib/assets/docs/article/grokkingfp/csharp/part-3.md +0 -990
  492. package/lib/assets/docs/article/grokkingfp/csharp/part-4.md +0 -958
  493. package/lib/assets/docs/article/grokkingfp/csharp/part-5.md +0 -956
  494. package/lib/assets/docs/article/grokkingfp/csharp/part-6.md +0 -748
  495. package/lib/assets/docs/article/grokkingfp/elixir/index.md +0 -203
  496. package/lib/assets/docs/article/grokkingfp/elixir/part-1.md +0 -721
  497. package/lib/assets/docs/article/grokkingfp/elixir/part-2.md +0 -847
  498. package/lib/assets/docs/article/grokkingfp/elixir/part-3.md +0 -994
  499. package/lib/assets/docs/article/grokkingfp/elixir/part-4.md +0 -983
  500. package/lib/assets/docs/article/grokkingfp/elixir/part-5.md +0 -1295
  501. package/lib/assets/docs/article/grokkingfp/elixir/part-6.md +0 -1058
  502. package/lib/assets/docs/article/grokkingfp/fsharp/index.md +0 -210
  503. package/lib/assets/docs/article/grokkingfp/fsharp/part-1.md +0 -723
  504. package/lib/assets/docs/article/grokkingfp/fsharp/part-2.md +0 -970
  505. package/lib/assets/docs/article/grokkingfp/fsharp/part-3.md +0 -981
  506. package/lib/assets/docs/article/grokkingfp/fsharp/part-4.md +0 -841
  507. package/lib/assets/docs/article/grokkingfp/fsharp/part-5.md +0 -920
  508. package/lib/assets/docs/article/grokkingfp/fsharp/part-6.md +0 -931
  509. package/lib/assets/docs/article/grokkingfp/haskell/index.md +0 -234
  510. package/lib/assets/docs/article/grokkingfp/haskell/part-1.md +0 -600
  511. package/lib/assets/docs/article/grokkingfp/haskell/part-2.md +0 -875
  512. package/lib/assets/docs/article/grokkingfp/haskell/part-3.md +0 -924
  513. package/lib/assets/docs/article/grokkingfp/haskell/part-4.md +0 -887
  514. package/lib/assets/docs/article/grokkingfp/haskell/part-5.md +0 -854
  515. package/lib/assets/docs/article/grokkingfp/haskell/part-6.md +0 -853
  516. package/lib/assets/docs/article/grokkingfp/index.md +0 -143
  517. package/lib/assets/docs/article/grokkingfp/java/index.md +0 -211
  518. package/lib/assets/docs/article/grokkingfp/java/part-1.md +0 -657
  519. package/lib/assets/docs/article/grokkingfp/java/part-2.md +0 -684
  520. package/lib/assets/docs/article/grokkingfp/java/part-3.md +0 -681
  521. package/lib/assets/docs/article/grokkingfp/java/part-4.md +0 -780
  522. package/lib/assets/docs/article/grokkingfp/java/part-5.md +0 -968
  523. package/lib/assets/docs/article/grokkingfp/java/part-6.md +0 -1337
  524. package/lib/assets/docs/article/grokkingfp/python/index.md +0 -258
  525. package/lib/assets/docs/article/grokkingfp/python/part-1.md +0 -452
  526. package/lib/assets/docs/article/grokkingfp/python/part-2.md +0 -967
  527. package/lib/assets/docs/article/grokkingfp/python/part-3.md +0 -1013
  528. package/lib/assets/docs/article/grokkingfp/python/part-4.md +0 -774
  529. package/lib/assets/docs/article/grokkingfp/python/part-5.md +0 -756
  530. package/lib/assets/docs/article/grokkingfp/python/part-6.md +0 -870
  531. package/lib/assets/docs/article/grokkingfp/ruby/index.md +0 -330
  532. package/lib/assets/docs/article/grokkingfp/ruby/part-1.md +0 -764
  533. package/lib/assets/docs/article/grokkingfp/ruby/part-2.md +0 -947
  534. package/lib/assets/docs/article/grokkingfp/ruby/part-3.md +0 -955
  535. package/lib/assets/docs/article/grokkingfp/ruby/part-4.md +0 -930
  536. package/lib/assets/docs/article/grokkingfp/ruby/part-5.md +0 -917
  537. package/lib/assets/docs/article/grokkingfp/ruby/part-6.md +0 -1421
  538. package/lib/assets/docs/article/grokkingfp/rust/index.md +0 -242
  539. package/lib/assets/docs/article/grokkingfp/rust/part-1.md +0 -643
  540. package/lib/assets/docs/article/grokkingfp/rust/part-2.md +0 -1069
  541. package/lib/assets/docs/article/grokkingfp/rust/part-3.md +0 -1003
  542. package/lib/assets/docs/article/grokkingfp/rust/part-4.md +0 -582
  543. package/lib/assets/docs/article/grokkingfp/rust/part-5.md +0 -714
  544. package/lib/assets/docs/article/grokkingfp/rust/part-6.md +0 -517
  545. package/lib/assets/docs/article/grokkingfp/scala/index.md +0 -171
  546. package/lib/assets/docs/article/grokkingfp/scala/part-1.md +0 -552
  547. package/lib/assets/docs/article/grokkingfp/scala/part-2.md +0 -955
  548. package/lib/assets/docs/article/grokkingfp/scala/part-3.md +0 -928
  549. package/lib/assets/docs/article/grokkingfp/scala/part-4.md +0 -751
  550. package/lib/assets/docs/article/grokkingfp/scala/part-5.md +0 -731
  551. package/lib/assets/docs/article/grokkingfp/scala/part-6.md +0 -876
  552. package/lib/assets/docs/article/grokkingfp/typescript/index.md +0 -273
  553. package/lib/assets/docs/article/grokkingfp/typescript/part-1.md +0 -570
  554. package/lib/assets/docs/article/grokkingfp/typescript/part-2.md +0 -1138
  555. package/lib/assets/docs/article/grokkingfp/typescript/part-3.md +0 -851
  556. package/lib/assets/docs/article/grokkingfp/typescript/part-4.md +0 -1096
  557. package/lib/assets/docs/article/grokkingfp/typescript/part-5.md +0 -726
  558. package/lib/assets/docs/article/grokkingfp/typescript/part-6.md +0 -991
  559. package/lib/assets/docs/article/practical-database-design/index.md +0 -121
  560. package/lib/assets/docs/article/practical-database-design/part1/chapter01.md +0 -297
  561. package/lib/assets/docs/article/practical-database-design/part1/chapter02.md +0 -527
  562. package/lib/assets/docs/article/practical-database-design/part1/chapter03.md +0 -566
  563. package/lib/assets/docs/article/practical-database-design/part2/chapter04.md +0 -933
  564. package/lib/assets/docs/article/practical-database-design/part2/chapter05.md +0 -1636
  565. package/lib/assets/docs/article/practical-database-design/part2/chapter06.md +0 -2725
  566. package/lib/assets/docs/article/practical-database-design/part2/chapter07.md +0 -2091
  567. package/lib/assets/docs/article/practical-database-design/part2/chapter08.md +0 -2114
  568. package/lib/assets/docs/article/practical-database-design/part2/chapter09.md +0 -2040
  569. package/lib/assets/docs/article/practical-database-design/part2/chapter10.md +0 -1396
  570. package/lib/assets/docs/article/practical-database-design/part2/chapter11.md +0 -1686
  571. package/lib/assets/docs/article/practical-database-design/part2/chapter12.md +0 -1426
  572. package/lib/assets/docs/article/practical-database-design/part2/chapter13.md +0 -1443
  573. package/lib/assets/docs/article/practical-database-design/part3/chapter14.md +0 -676
  574. package/lib/assets/docs/article/practical-database-design/part3/chapter15.md +0 -1634
  575. package/lib/assets/docs/article/practical-database-design/part3/chapter16.md +0 -1924
  576. package/lib/assets/docs/article/practical-database-design/part3/chapter17.md +0 -1717
  577. package/lib/assets/docs/article/practical-database-design/part3/chapter18.md +0 -2104
  578. package/lib/assets/docs/article/practical-database-design/part3/chapter19.md +0 -1132
  579. package/lib/assets/docs/article/practical-database-design/part3/chapter20.md +0 -1040
  580. package/lib/assets/docs/article/practical-database-design/part3/chapter21.md +0 -1391
  581. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter14-orm.md +0 -1000
  582. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter15-orm.md +0 -1309
  583. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter16-orm.md +0 -1175
  584. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter17-orm.md +0 -1593
  585. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter18-orm.md +0 -1192
  586. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter19-orm.md +0 -1025
  587. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter20-orm.md +0 -1762
  588. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter21-orm.md +0 -1456
  589. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter22-orm.md +0 -1887
  590. package/lib/assets/docs/article/practical-database-design/part4/chapter22.md +0 -974
  591. package/lib/assets/docs/article/practical-database-design/part4/chapter23.md +0 -2078
  592. package/lib/assets/docs/article/practical-database-design/part4/chapter24.md +0 -2448
  593. package/lib/assets/docs/article/practical-database-design/part4/chapter25.md +0 -3670
  594. package/lib/assets/docs/article/practical-database-design/part4/chapter26.md +0 -2925
  595. package/lib/assets/docs/article/practical-database-design/part4/chapter27.md +0 -3114
  596. package/lib/assets/docs/article/practical-database-design/part4/chapter28.md +0 -2706
  597. package/lib/assets/docs/article/practical-database-design/part4/chapter29.md +0 -2552
  598. package/lib/assets/docs/article/practical-database-design/part4/chapter30.md +0 -2188
  599. package/lib/assets/docs/article/practical-database-design/part4/chapter31.md +0 -1200
  600. package/lib/assets/docs/article/practical-database-design/part4/chapter32.md +0 -2109
  601. package/lib/assets/docs/article/practical-database-design/part5/chapter33.md +0 -1041
  602. package/lib/assets/docs/article/practical-database-design/part5/chapter34.md +0 -1618
  603. package/lib/assets/docs/article/practical-database-design/part5/chapter35.md +0 -1462
  604. package/lib/assets/docs/article/practical-database-design/part5/chapter36.md +0 -1301
  605. package/lib/assets/docs/article/practical-database-design/part5/chapter37.md +0 -1479
  606. package/lib/assets/docs/article/practical-database-design/part5/chapter38.md +0 -1707
  607. package/lib/assets/docs/article/practical-database-design/part5/chapter39.md +0 -2343
  608. package/lib/assets/docs/article/practical-database-design/study/study2-1.md +0 -1702
  609. package/lib/assets/docs/article/practical-database-design/study/study2-2.md +0 -1356
  610. package/lib/assets/docs/article/practical-database-design/study/study2-3.md +0 -2053
  611. package/lib/assets/docs/article/practical-database-design/study/study2-4.md +0 -2238
  612. package/lib/assets/docs/article/practical-database-design/study/study2-5.md +0 -2427
  613. package/lib/assets/docs/article/practical-database-design/study/study3-1.md +0 -2214
  614. package/lib/assets/docs/article/practical-database-design/study/study3-2.md +0 -2230
  615. package/lib/assets/docs/article/practical-database-design/study/study3-3.md +0 -2262
  616. package/lib/assets/docs/article/practical-database-design/study/study3-4.md +0 -2115
  617. package/lib/assets/docs/article/practical-database-design/study/study3-5.md +0 -2516
  618. package/lib/assets/docs/article/practical-database-design/study/study4-1.md +0 -2596
  619. package/lib/assets/docs/article/practical-database-design/study/study4-2.md +0 -2084
  620. package/lib/assets/docs/article/practical-database-design/study/study4-3.md +0 -1814
  621. package/lib/assets/docs/article/practical-database-design/study/study4-4.md +0 -1904
  622. package/lib/assets/docs/article/practical-database-design/study/study4-5.md +0 -2887
@@ -1,103 +0,0 @@
1
- ---
2
- type: Article
3
- title: "第 11 章: コレクション処理と遅延評価"
4
- description: "Scala の強みの 1 つは、表現力の高いコレクションライブラリです。"
5
- tags: [article, getting-start-tdd, scala]
6
- status: stable
7
- generated: { by: human:kakimomokuri, at: 2026-03-24T05:22:28Z }
8
- ---
9
-
10
- # 第 11 章: コレクション処理と遅延評価
11
-
12
- ## 11.1 はじめに
13
-
14
- Scala の強みの 1 つは、表現力の高いコレクションライブラリです。`List` や `Vector` を使った宣言的な処理により、ループ中心の実装より意図を明確に書けます。
15
-
16
- ここで重要なのが評価戦略です。
17
-
18
- - 正格評価(eager evaluation): すぐに計算する
19
- - 遅延評価(lazy evaluation): 必要になるまで計算しない
20
-
21
- ## 11.2 イミュータブルコレクション
22
-
23
- Scala の標準コレクションは、デフォルトでイミュータブルを前提に設計されています。
24
-
25
- - `List`: 連結リスト。先頭追加や再帰的処理と相性がよい
26
- - `Vector`: ランダムアクセスに強い
27
- - `Map`: キーと値の対応
28
- - `Set`: 重複しない集合
29
-
30
- イミュータブルな設計により、副作用を抑えやすくなり、テストしやすいコードになります。
31
-
32
- ## 11.3 コレクション操作の連鎖
33
-
34
- `map`、`flatMap`、`filter`、`foldLeft` を連鎖させると、データ変換の流れを自然に表現できます。
35
-
36
- ```scala
37
- val numbers = (1 to 20).toList
38
- val result = numbers
39
- .map(FizzBuzz.generate)
40
- .filter(_ != "FizzBuzz")
41
- .foldLeft(List.empty[String])((acc, v) => acc :+ v)
42
- ```
43
-
44
- for 内包表記も同じ考え方で使えます。
45
-
46
- ```scala
47
- val result = for
48
- n <- 1 to 100
49
- value = FizzBuzz.generate(n)
50
- if value != n.toString
51
- yield value
52
- ```
53
-
54
- for 内包表記は、`map`、`flatMap`、`filter` の組み合わせを読みやすく書くための構文糖衣です。
55
-
56
- ## 11.4 LazyList による遅延評価
57
-
58
- FizzBuzz では無限シーケンスを `LazyList` で表現できます。
59
-
60
- ```scala
61
- def lazyList: LazyList[String] =
62
- LazyList.from(1).map(generate)
63
- ```
64
-
65
- `LazyList.from(1)` は 1 から始まる無限列です。`map(generate)` を付けても、実際の計算は要素を取り出すまで実行されません。
66
-
67
- ```scala
68
- val firstFive = FizzBuzz.lazyList.take(5).toList
69
- // List("1", "2", "Fizz", "4", "Buzz")
70
- ```
71
-
72
- 遅延評価の利点は次のとおりです。
73
-
74
- - 必要な分だけ計算するため無駄が少ない
75
- - 無限リストを安全に表現できる
76
- - `take`、`drop`、`filter` を組み合わせた逐次処理を書きやすい
77
-
78
- ## 11.5 テスト
79
-
80
- `LazyList` は「必要なときだけ評価される」ことを確認するテストが重要です。
81
-
82
- ```scala
83
- test("lazyList: 遅延リストから最初の 5 要素を取得する") {
84
- val result = FizzBuzz.lazyList.take(5).toList
85
- assert(result === List("1", "2", "Fizz", "4", "Buzz"))
86
- }
87
-
88
- test("lazyList: 遅延リストから 15 番目の要素を取得する") {
89
- assert(FizzBuzz.lazyList(14) === "FizzBuzz")
90
- }
91
- ```
92
-
93
- 先頭数件だけを取り出すテストと、任意の位置の要素を直接参照するテストを組み合わせると、遅延シーケンスの振る舞いを網羅できます。
94
-
95
- ## 11.6 まとめ
96
-
97
- この章では、Scala のコレクション処理と遅延評価を確認しました。
98
-
99
- - イミュータブルコレクションを前提に実装する
100
- - `map`、`flatMap`、`filter`、`foldLeft` を連鎖して処理を記述する
101
- - `LazyList` で無限シーケンスと必要時評価を実現する
102
-
103
- 次章では、`Option` や `Either` を使った型安全なエラーハンドリングを扱います。
@@ -1,101 +0,0 @@
1
- ---
2
- type: Article
3
- title: "第 12 章: エラーハンドリングと型安全性"
4
- description: "Scala では、例外を多用するよりも型でエラー可能性を表現する設計が推奨されます。"
5
- tags: [article, getting-start-tdd, scala]
6
- status: stable
7
- generated: { by: human:kakimomokuri, at: 2026-03-24T05:22:28Z }
8
- ---
9
-
10
- # 第 12 章: エラーハンドリングと型安全性
11
-
12
- ## 12.1 はじめに
13
-
14
- Scala では、例外を多用するよりも型でエラー可能性を表現する設計が推奨されます。コンパイル時に考慮漏れを減らせるためです。
15
-
16
- この章では `Option`、`Either`、`Try`、`require` を使い、型安全なエラーハンドリングを整理します。
17
-
18
- ## 12.2 Option 型
19
-
20
- `Option` は「値があるかもしれないし、ないかもしれない」を表現します。
21
-
22
- ```scala
23
- def safeGenerate(number: Int): Option[String] =
24
- if number > 0 then Some(generate(number))
25
- else None
26
- ```
27
-
28
- - `Some(value)`: 値あり
29
- - `None`: 値なし
30
-
31
- `Option` は `map`、`flatMap`、`getOrElse` と相性がよく、null チェックを置き換えられます。
32
-
33
- ```scala
34
- val message = FizzBuzz.safeGenerate(3)
35
- .map(v => s"結果: $v")
36
- .getOrElse("入力が不正です")
37
- ```
38
-
39
- ## 12.3 Either 型
40
-
41
- `Either` は成功と失敗のどちらかを保持します。
42
-
43
- ```scala
44
- def generateEither(number: Int): Either[String, String] =
45
- if number > 0 then Right(generate(number))
46
- else Left(s"正の整数が必要です: $number")
47
- ```
48
-
49
- - `Right`: 成功値
50
- - `Left`: エラー情報
51
-
52
- `Either` を使うと、エラーを文字列やドメイン型で返せるため、例外より制御しやすくなります。複数処理の連鎖では for 内包表記も利用できます。
53
-
54
- ```scala
55
- val result = for
56
- a <- FizzBuzz.generateEither(3)
57
- b <- FizzBuzz.generateEither(5)
58
- yield s"$a, $b"
59
- ```
60
-
61
- ## 12.4 Try 型
62
-
63
- `Try` は例外を値として扱う型です。例外が起きうる処理を安全に包めます。
64
-
65
- ```scala
66
- import scala.util.Try
67
-
68
- val parsed: Try[Int] = Try("42".toInt)
69
- ```
70
-
71
- `Try` は `Success` / `Failure` の 2 形です。`map` や `recover` と組み合わせると、例外処理を宣言的に記述できます。
72
-
73
- ## 12.5 require による事前条件
74
-
75
- ドメインモデルの入力検証には `require` が使えます。
76
-
77
- ```scala
78
- case class FizzBuzzValue(number: Int, value: String):
79
- require(number > 0, s"数値は正の整数でなければなりません: $number")
80
- ```
81
-
82
- 不正な値でオブジェクトが作られることを防ぎ、ドメイン不変条件をコンストラクタ境界で守れます。
83
-
84
- ## 12.6 型安全な設計のまとめ
85
-
86
- - `Option`: 値の有無を型で表現する
87
- - `Either`: 成功 / 失敗の分岐を型で表現する
88
- - `Try`: 例外を値として安全に扱う
89
- - `require`: 事前条件を明示し、不正状態を早期に排除する
90
-
91
- ## 12.7 シリーズのまとめ
92
-
93
- 全 12 章を通して、FizzBuzz を題材に TDD と Scala の設計原則を段階的に学びました。
94
-
95
- - TDD の基本サイクル(Red-Green-Refactor)
96
- - 開発環境の自動化
97
- - オブジェクト指向設計(ケースクラス、トレイト、パターンマッチ)
98
- - 関数型プログラミング(高階関数、コレクション、型安全なエラーハンドリング)
99
- - Scala の OOP と FP の統合
100
-
101
- 小さな題材でも、設計・テスト・リファクタリングを繰り返すことで、実務で使える設計力を着実に伸ばせます。
@@ -1,65 +0,0 @@
1
- # テスト駆動開発から始める Scala 入門
2
-
3
- ## 概要
4
-
5
- 本シリーズでは、テスト駆動開発(TDD)の実践を通じて Scala の特徴を学びます。FizzBuzz 問題を題材に、Red-Green-Refactor サイクルを体験しながら、Scala のオブジェクト指向と関数型プログラミングの両方を段階的に習得します。
6
-
7
- ## 対象読者
8
-
9
- - プログラミングの基礎知識を持つ方
10
- - TDD に興味がある方
11
- - Scala や JVM 上の関数型プログラミングに興味がある方
12
-
13
- ## 前提条件
14
-
15
- - Scala 3.x、sbt がインストールされていること
16
- - テキストエディタまたは IDE が利用可能であること
17
- - Git の基本操作ができること
18
-
19
- ## Scala の特徴
20
-
21
- | 特徴 | 説明 |
22
- |------|------|
23
- | OOP と FP の統合 | オブジェクト指向と関数型プログラミングを自然に組み合わせ可能 |
24
- | 型推論 | 強力な型推論により型アノテーションを最小限に抑制 |
25
- | ケースクラス | 不変の値オブジェクトを簡潔に定義 |
26
- | パターンマッチ | 網羅的で型安全な分岐処理 |
27
- | トレイト | 柔軟なミックスインによるコード再利用 |
28
- | コレクションライブラリ | 統一的な API による豊富なコレクション操作 |
29
- | JVM 互換 | Java エコシステムとの完全な相互運用性 |
30
-
31
- ## 開発ツール
32
-
33
- | ツール | 用途 |
34
- |--------|------|
35
- | sbt | ビルドツール・パッケージマネージャ |
36
- | ScalaTest | テスティングフレームワーク |
37
- | scalafmt | コードフォーマッタ |
38
- | WartRemover | 静的解析(コード品質チェック) |
39
- | Metals | Language Server Protocol 実装 |
40
-
41
- ## 目次
42
-
43
- ### 第 1 部: TDD の基本サイクル
44
-
45
- 1. [第 1 章: TODO リストと最初のテスト](./01-todo-list-and-first-test.md)
46
- 2. [第 2 章: 仮実装と三角測量](./02-fake-it-and-triangulation.md)
47
- 3. [第 3 章: 明白な実装とリファクタリング](./03-obvious-implementation-and-refactoring.md)
48
-
49
- ### 第 2 部: 開発環境と自動化
50
-
51
- 4. [第 4 章: バージョン管理と Conventional Commits](./04-version-control-and-conventional-commits.md)
52
- 5. [第 5 章: パッケージ管理と静的解析](./05-package-management-and-static-analysis.md)
53
- 6. [第 6 章: タスクランナーと CI/CD](./06-task-runner-and-ci-cd.md)
54
-
55
- ### 第 3 部: オブジェクト指向設計
56
-
57
- 7. [第 7 章: ケースクラスとトレイトによるポリモーフィズム](./07-case-classes-and-traits.md)
58
- 8. [第 8 章: パターンマッチとシールドトレイト](./08-pattern-matching-and-sealed-traits.md)
59
- 9. [第 9 章: パッケージとモジュール設計](./09-packages-and-module-design.md)
60
-
61
- ### 第 4 部: 関数型プログラミング
62
-
63
- 10. [第 10 章: 高階関数と関数合成](./10-higher-order-functions-and-composition.md)
64
- 11. [第 11 章: コレクション処理と遅延評価](./11-collections-and-lazy-evaluation.md)
65
- 12. [第 12 章: エラーハンドリングと型安全性](./12-error-handling-and-type-safety.md)
@@ -1,403 +0,0 @@
1
- # Grokking Concurrency:多言語統合解説
2
-
3
- 本記事シリーズは、8 つの言語(Python, Java, C#, Scala, F#, Rust, Haskell, Clojure)での実装を横断的に比較し、並行処理プログラミングの**本質**と**言語固有の表現**を統合的に解説します。
4
-
5
- ## 本シリーズの目的
6
-
7
- 各言語の個別記事は「その言語でどう実装するか」に焦点を当てています。本統合記事は、それらを横断して以下を明らかにします:
8
-
9
- - **共通の本質**: 言語を超えて成り立つ並行処理の原則
10
- - **言語間の差異**: ランタイム、メモリモデル、並行処理プリミティブの違いが実装にどう影響するか
11
- - **選択の指針**: どの言語・ライブラリがどの並行処理パターンに適しているか
12
-
13
- ## 言語特性マトリクス
14
-
15
- ### 言語分類
16
-
17
- | グループ | 言語 | 特徴 |
18
- |---------|------|------|
19
- | 関数型ファースト | Haskell, Clojure | 不変性・STM による安全な並行処理 |
20
- | マルチパラダイム(静的) | Scala, Rust, F# | 型システムを活用した並行処理の安全性保証 |
21
- | OOP ファースト + 並行処理ライブラリ | Java, C#, Python | プラットフォームの並行処理 API を活用 |
22
-
23
- ### 特性比較
24
-
25
- | 特性 | Python | Java | C# | Scala | F# | Rust | Haskell | Clojure |
26
- |------|--------|------|-----|-------|-----|------|---------|---------|
27
- | 実行環境 | CPython | JVM | .NET (CLR) | JVM | .NET (CLR) | ネイティブ | GHC | JVM |
28
- | スレッドモデル | OS スレッド (GIL) | OS スレッド + Virtual Thread | OS スレッド + Task | OS スレッド + Future | OS スレッド + Async | OS スレッド | Green Thread | OS スレッド (JVM) |
29
- | 軽量タスク | asyncio Task | Virtual Thread (21+) | Task (TPL) | Future | Async ワークフロー | tokio Task | forkIO | core.async go ブロック |
30
- | 排他制御 | threading.Lock | synchronized / ReentrantLock | lock / Monitor | synchronized | MailboxProcessor | Mutex / RwLock | MVar / TVar | atom / ref |
31
- | 共有状態管理 | Lock + 変数 | synchronized | lock + volatile | synchronized | Agent / MailboxProcessor | Arc\<Mutex\<T\>\> | STM / TVar | atom / ref / STM |
32
- | チャネル / メッセージ | queue.Queue | BlockingQueue | Channel | なし(標準) | MailboxProcessor | mpsc / crossbeam | Chan / TChan | core.async chan |
33
- | 非同期 I/O | asyncio | NIO / CompletableFuture | async/await (Task) | Future | Async ワークフロー | tokio (async/await) | async ライブラリ | core.async |
34
- | 並列イテレータ | multiprocessing.Pool | parallelStream | Parallel LINQ | .par | Array.Parallel | Rayon par_iter | par (parallel) | pmap / reducers |
35
- | メモリ安全性 | ランタイム (GIL) | ランタイム (JVM) | ランタイム (CLR) | ランタイム (JVM) | ランタイム (CLR) | コンパイル時 (所有権) | ランタイム (GC) | ランタイム (JVM) |
36
- | データ競合防止 | GIL(部分的) | ランタイム検出 | ランタイム検出 | ランタイム検出 | 型レベル(部分的) | コンパイル時 (Send/Sync) | 型レベル (STM) | 不変データ + STM |
37
-
38
- ## 記事構成
39
-
40
- ### Part I: 並行処理の基礎(第 2 章)
41
-
42
- | Part | 統合記事 | テーマ | 比較のポイント |
43
- |------|---------|--------|---------------|
44
- | I | [並行処理の基礎](./part-1-ch02-sequential.md) | 逐次処理、パスワードクラッキング | 各言語の基本構文、イテレーション、ハッシュ計算の表現スタイル |
45
-
46
- #### 主な言語間比較テーマ
47
-
48
- - **基本構文**: 各言語のループ・イテレーション表現(for vs イテレータ vs 再帰)
49
- - **ハッシュ計算**: 標準ライブラリ vs サードパーティ(sha2 crate vs MessageDigest vs hashlib)
50
- - **パフォーマンス計測**: 各言語のベンチマーク手法の違い
51
-
52
- ### Part II: プロセスとスレッド(第 4-5 章)
53
-
54
- | Part | 統合記事 | テーマ | 比較のポイント |
55
- |------|---------|--------|---------------|
56
- | II | [プロセスとスレッド](./part-2-ch04-05-threads.md) | プロセス、スレッド、スレッドプール | スレッド生成 API、ライフサイクル管理、IPC の違い |
57
-
58
- #### 主な言語間比較テーマ
59
-
60
- - **スレッド生成**: `std::thread::spawn` vs `Thread()` vs `threading.Thread` vs `forkIO` vs `future`
61
- - **スレッドプール**: Rayon vs ExecutorService vs ThreadPoolExecutor vs Async ワークフロー
62
- - **所有権とスレッド**: Rust の `Send`/`Sync` トレイト vs 他言語のランタイム保護
63
-
64
- ### Part III: マルチタスキングとスケジューリング(第 6 章)
65
-
66
- | Part | 統合記事 | テーマ | 比較のポイント |
67
- |------|---------|--------|---------------|
68
- | III | [マルチタスキング](./part-3-ch06-multitasking.md) | タイムシェアリング、ゲームループ | イベントループ、条件変数、協調的マルチタスキングの実現方法 |
69
-
70
- #### 主な言語間比較テーマ
71
-
72
- - **ゲームループ**: Condvar (Rust) vs wait/notify (Java) vs Monitor (C#) vs MVar (Haskell)
73
- - **協調的スケジューリング**: asyncio (Python) vs core.async (Clojure) vs Async (F#)
74
- - **プリエンプティブ vs 協調的**: 各言語ランタイムのスケジューリングモデル
75
-
76
- ### Part IV: タスク分解と並列パターン(第 7 章)
77
-
78
- | Part | 統合記事 | テーマ | 比較のポイント |
79
- |------|---------|--------|---------------|
80
- | IV | [並列パターン](./part-4-ch07-parallel-patterns.md) | Fork/Join、パイプライン、データ並列 | 並列パターンのイディオム、チャネル vs ストリーム |
81
-
82
- #### 主な言語間比較テーマ
83
-
84
- - **Fork/Join**: ForkJoinPool (Java/Scala) vs Rayon (Rust) vs parallel (Haskell) vs pmap (Clojure)
85
- - **パイプライン**: mpsc (Rust) vs BlockingQueue (Java) vs Channel (C#) vs core.async pipeline (Clojure)
86
- - **データ並列**: parallelStream (Java) vs par_iter (Rust) vs Array.Parallel (F#) vs pmap (Clojure)
87
-
88
- ### Part V: 同期と排他制御(第 8-9 章)
89
-
90
- | Part | 統合記事 | テーマ | 比較のポイント |
91
- |------|---------|--------|---------------|
92
- | V | [同期と排他制御](./part-5-ch08-09-synchronization.md) | Race Condition、Lock、Semaphore、デッドロック | 排他制御の抽象度、デッドロック防止策の違い |
93
-
94
- #### 主な言語間比較テーマ
95
-
96
- - **排他制御**: `Mutex<T>` (Rust) vs `synchronized` (Java) vs `lock` (C#) vs STM (Haskell/Clojure)
97
- - **デッドロック回避**: Rust のコンパイル時検出 vs Haskell STM の楽観的並行制御 vs ロック順序規約
98
- - **不変性による回避**: Clojure の永続データ構造 + atom vs Haskell の純粋性による副作用分離
99
-
100
- ### Part VI: ノンブロッキング I/O(第 10-11 章)
101
-
102
- | Part | 統合記事 | テーマ | 比較のポイント |
103
- |------|---------|--------|---------------|
104
- | VI | [ノンブロッキング I/O](./part-6-ch10-11-nonblocking-io.md) | ブロッキング vs ノンブロッキング、イベントループ、Reactor パターン | I/O モデル、イベントループ実装、Reactor パターンの表現 |
105
-
106
- #### 主な言語間比較テーマ
107
-
108
- - **I/O モデル**: NIO (Java) vs async I/O (Python) vs tokio (Rust) vs async ワークフロー (F#)
109
- - **イベントループ**: asyncio (Python) vs libuv 相当 (tokio) vs GHC I/O マネージャ (Haskell)
110
- - **Reactor パターン**: Selector (Java) vs epoll/kqueue ラッパー (Rust) vs 各言語の抽象化レベル
111
-
112
- ### Part VII: 非同期プログラミング(第 12 章)
113
-
114
- | Part | 統合記事 | テーマ | 比較のポイント |
115
- |------|---------|--------|---------------|
116
- | VII | [非同期プログラミング](./part-7-ch12-async.md) | Future、Coroutine、async/await | async/await の意味論、Future/Promise の型表現 |
117
-
118
- #### 主な言語間比較テーマ
119
-
120
- - **async/await**: Rust (ゼロコスト Future) vs Python (コルーチン) vs C# (Task ベース) vs Scala (Future)
121
- - **コルーチン**: Python ジェネレータ vs Clojure go ブロック vs Haskell 軽量スレッド
122
- - **Future の型表現**: `Future<Output=T>` (Rust) vs `CompletableFuture<T>` (Java) vs `Task<T>` (C#) vs `Async<'a>` (F#)
123
-
124
- ### Part VIII: 分散並列処理(第 13 章)
125
-
126
- | Part | 統合記事 | テーマ | 比較のポイント |
127
- |------|---------|--------|---------------|
128
- | VIII | [分散並列処理](./part-8-ch13-mapreduce.md) | MapReduce、ワードカウント、行列乗算 | MapReduce の関数型的表現、並列コレクション |
129
-
130
- #### 主な言語間比較テーマ
131
-
132
- - **MapReduce**: parallelStream (Java) vs par_iter (Rust) vs pmap/reducers (Clojure) vs parMap (Haskell)
133
- - **並列コレクション**: Scala `.par` vs Rayon vs Array.Parallel (F#) vs multiprocessing.Pool (Python)
134
- - **関数型的表現**: map/reduce の合成、不変データ構造上での並列演算
135
-
136
- ## 各章の統合記事構成テンプレート
137
-
138
- 各統合記事は以下の構成で執筆します:
139
-
140
- ```
141
- 1. はじめに
142
- - テーマの概要と並行処理での意義
143
-
144
- 2. 共通の本質
145
- - 言語を超えて成り立つ並行処理の原則
146
-
147
- 3. 言語別実装比較
148
- - 8 言語の代表的なコードを並べて比較
149
- - 各言語のイディオムを活かした実装の違い
150
- - 言語グループ別の傾向分析
151
-
152
- 4. 比較分析
153
- - ランタイムとメモリモデルの影響
154
- - 安全性保証のアプローチ(コンパイル時 vs ランタイム)
155
- - 表現力と安全性のトレードオフ
156
-
157
- 5. 実践的な選択指針
158
- - どの言語特性がこのテーマに最も適しているか
159
- - ユースケースに応じた選択基準
160
-
161
- 6. まとめ
162
- - 言語横断的な学び
163
- - 各言語の個別記事へのリンク
164
- ```
165
-
166
- ## 執筆ルール
167
-
168
- ### 1. 執筆フォーマット
169
-
170
- ````markdown
171
- # Part N: パートタイトル
172
-
173
- ## N.1 セクションタイトル
174
-
175
- 本文...
176
-
177
- ### 言語別実装比較
178
-
179
- #### 関数型ファースト言語
180
-
181
- <details>
182
- <summary>Haskell 実装</summary>
183
-
184
- ```haskell
185
- -- コード例
186
- ```
187
-
188
- </details>
189
-
190
- <details>
191
- <summary>Clojure 実装</summary>
192
-
193
- ```clojure
194
- ;; コード例
195
- ```
196
-
197
- </details>
198
-
199
- #### マルチパラダイム言語
200
-
201
- <details>
202
- <summary>Scala 実装</summary>
203
-
204
- ```scala
205
- // コード例
206
- ```
207
-
208
- </details>
209
-
210
- <details>
211
- <summary>Rust 実装</summary>
212
-
213
- ```rust
214
- // コード例
215
- ```
216
-
217
- </details>
218
-
219
- <details>
220
- <summary>F# 実装</summary>
221
-
222
- ```fsharp
223
- // コード例
224
- ```
225
-
226
- </details>
227
-
228
- #### OOP + 並行処理ライブラリ言語
229
-
230
- <details>
231
- <summary>Java 実装</summary>
232
-
233
- ```java
234
- // コード例
235
- ```
236
-
237
- </details>
238
-
239
- <details>
240
- <summary>C# 実装</summary>
241
-
242
- ```csharp
243
- // コード例
244
- ```
245
-
246
- </details>
247
-
248
- <details>
249
- <summary>Python 実装</summary>
250
-
251
- ```python
252
- # コード例
253
- ```
254
-
255
- </details>
256
- ````
257
-
258
- ### 2. リスト記述ルール
259
-
260
- タスク項目やリスト項目は、ラベル行の後に **1 行空けて** から記述します。
261
-
262
- **OK**:
263
-
264
- ```markdown
265
- **比較ポイント**:
266
-
267
- - 排他制御の抽象度
268
- - パフォーマンス特性
269
- - 安全性保証
270
- ```
271
-
272
- ### 3. 言語グループ別の整理
273
-
274
- コード比較では 8 言語を以下のグループに分けて提示します:
275
-
276
- 1. **関数型ファースト**: Haskell → Clojure
277
- 2. **マルチパラダイム(静的)**: Scala → Rust → F#
278
- 3. **OOP + 並行処理ライブラリ**: Java → C# → Python
279
-
280
- ## 執筆計画
281
-
282
- ### 概要
283
-
284
- 全 8 Part の統合記事を、Part ごとの統合難易度に基づき 3 つのイテレーションで執筆します。
285
-
286
- - **総ソース量**: 8 言語 × 8 Part = 64 ファイル
287
- - **統合記事数**: 8 本
288
- - **各記事の想定規模**: 500〜1,000 行
289
-
290
- ### 難易度分類
291
-
292
- | 難易度 | Part 数 | 特徴 |
293
- |--------|---------|------|
294
- | Low | 3 Part(I-III) | 全言語で構造が一貫、基礎概念で統合しやすい |
295
- | Medium | 3 Part(IV, VII, VIII) | パターンの表現方法に言語差があるが共通構造あり |
296
- | High | 2 Part(V, VI) | 同期モデル・I/O モデルが言語ごとに根本的に異なる |
297
-
298
- ### イテレーション 1: 基礎と並行処理入門(Low 難易度)
299
-
300
- **対象**: Part I + Part II + Part III(第 2, 4-6 章)
301
-
302
- 全言語で概念構造が一貫しており、統合が最も容易です。
303
-
304
- | Part | タイトル | 難易度 | 統合方針 |
305
- |------|---------|--------|---------|
306
- | I | 並行処理の基礎 | Low | 逐次処理の表現を全言語で横断比較 |
307
- | II | プロセスとスレッド | Low | スレッド生成・管理の API を言語別に比較 |
308
- | III | マルチタスキング | Low | ゲームループ実装を通じたイベント駆動モデルの比較 |
309
-
310
- **執筆順序**: I → II → III
311
-
312
- **完了条件**:
313
-
314
- - [ ] 各 Part が統合記事構成テンプレートに準拠
315
- - [ ] 8 言語すべてのコード例を含む
316
- - [ ] 言語グループ別の傾向分析を含む
317
-
318
- ### イテレーション 2: 並列パターンと非同期(Medium 難易度)
319
-
320
- **対象**: Part IV + Part VII + Part VIII(第 7, 12, 13 章)
321
-
322
- 並列パターンの表現差が大きいが、共通のアルゴリズム構造を軸に統合可能です。
323
-
324
- | Part | タイトル | 難易度 | 統合方針 |
325
- |------|---------|--------|---------|
326
- | IV | タスク分解と並列パターン | Medium | Fork/Join・パイプラインの構造を軸に言語別実装を比較 |
327
- | VII | 非同期プログラミング | Medium | async/await と Future/Promise の型表現を比較 |
328
- | VIII | 分散並列処理 | Medium | MapReduce の関数型的表現と並列コレクションを比較 |
329
-
330
- **執筆順序**: IV → VIII → VII
331
-
332
- **完了条件**:
333
-
334
- - [ ] Fork/Join パターンの 8 言語比較表を含む
335
- - [ ] async/await の意味論の違いを図解
336
- - [ ] MapReduce のパフォーマンス特性の比較を含む
337
-
338
- ### イテレーション 3: 同期と I/O モデル(High 難易度)
339
-
340
- **対象**: Part V + Part VI(第 8-11 章)
341
-
342
- 同期モデルと I/O モデルが言語ごとに根本的に異なり、最難関です。
343
-
344
- | Part | タイトル | 難易度 | 統合方針 |
345
- |------|---------|--------|---------|
346
- | V | 同期と排他制御 | High | Lock/STM/所有権の根本的な違いを言語別に深掘り |
347
- | VI | ノンブロッキング I/O | High | Reactor パターンと I/O モデルの違いを言語別に解説 |
348
-
349
- **執筆順序**: V → VI
350
-
351
- **完了条件**:
352
-
353
- - [ ] 排他制御モデル(Lock vs STM vs 所有権)の比較表を含む
354
- - [ ] I/O モデル(ブロッキング vs ノンブロッキング vs 非同期)の比較表を含む
355
- - [ ] デッドロック防止策の言語別アプローチを比較
356
-
357
- ### 全体スケジュール
358
-
359
- | イテレーション | Part 数 | 難易度構成 | 主な課題 |
360
- |---------------|---------|-----------|---------|
361
- | 1 | 3 Part(I-III) | Low × 3 | ウォームアップ、8 言語比較のフォーマット確立 |
362
- | 2 | 3 Part(IV, VII, VIII) | Medium × 3 | 並列パターンの表現差の整理、async モデルの比較 |
363
- | 3 | 2 Part(V, VI) | High × 2 | 同期モデル・I/O モデルの根本的差異への対応 |
364
-
365
- ### 進捗管理
366
-
367
- | Part | タイトル | イテレーション | 難易度 | 状態 |
368
- |------|---------|---------------|--------|------|
369
- | I | 並行処理の基礎 | 1 | Low | 完了 |
370
- | II | プロセスとスレッド | 1 | Low | 完了 |
371
- | III | マルチタスキング | 1 | Low | 完了 |
372
- | IV | タスク分解と並列パターン | 2 | Medium | 完了 |
373
- | V | 同期と排他制御 | 3 | High | 完了 |
374
- | VI | ノンブロッキング I/O | 3 | High | 完了 |
375
- | VII | 非同期プログラミング | 2 | Medium | 完了 |
376
- | VIII | 分散並列処理 | 2 | Medium | 完了 |
377
-
378
- ## 言語別個別記事へのリンク
379
-
380
- | 言語 | 並行処理ライブラリ | 個別記事一覧 |
381
- |------|-------------------|-------------|
382
- | Python | threading, asyncio, multiprocessing | [全 8 Part](../python/index.md) |
383
- | Java | ExecutorService, CompletableFuture, Virtual Thread | [全 8 Part](../java/index.md) |
384
- | C# | Task (TPL), async/await, Channel | [全 8 Part](../csharp/index.md) |
385
- | Scala | Future, synchronized, Parallel Collections | [全 8 Part](../scala/index.md) |
386
- | F# | Async ワークフロー, MailboxProcessor, Agent | [全 8 Part](../fsharp/index.md) |
387
- | Rust | std::thread, Rayon, tokio | [全 8 Part](../rust/index.md) |
388
- | Haskell | forkIO, async, STM | [全 8 Part](../haskell/index.md) |
389
- | Clojure | atom, ref/STM, core.async | [全 8 Part](../clojure/index.md) |
390
-
391
- ## 参照
392
-
393
- - 「Grokking Concurrency」Kirill Bobrov, Manning Publications
394
- - [Python threading ドキュメント](https://docs.python.org/3/library/threading.html)
395
- - [Java Concurrency in Practice](https://jcip.net/)
396
- - [C# 非同期プログラミング](https://docs.microsoft.com/ja-jp/dotnet/csharp/async)
397
- - [Scala 並行処理ドキュメント](https://docs.scala-lang.org/overviews/core/futures.html)
398
- - [F# 非同期プログラミング](https://docs.microsoft.com/ja-jp/dotnet/fsharp/tutorials/async)
399
- - [Rust Fearless Concurrency](https://doc.rust-lang.org/book/ch16-00-concurrency.html)
400
- - [Haskell Concurrency](https://wiki.haskell.org/Concurrency)
401
- - [Clojure Concurrency](https://clojure.org/about/concurrent_programming)
402
- - [Rayon](https://github.com/rayon-rs/rayon)
403
- - [Tokio](https://tokio.rs/)