@k2works/claude-code-booster 4.7.0 → 4.9.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 (745) 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 +275 -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/.claude/skills/validating-operating-setup/SKILL.md +118 -0
  68. package/lib/assets/.devcontainer/devcontainer.json +37 -37
  69. package/lib/assets/.env.example +17 -17
  70. package/lib/assets/.gitattributes +4 -4
  71. package/lib/assets/.github/workflows/docker-publish.yml +77 -77
  72. package/lib/assets/.github/workflows/mkdocs.yml +39 -39
  73. package/lib/assets/AGENTS.md +94 -94
  74. package/lib/assets/CLAUDE.md +193 -193
  75. package/lib/assets/README.md +291 -291
  76. package/lib/assets/docker-compose.yml +33 -33
  77. package/lib/assets/docs/adr/index.md +10 -10
  78. package/lib/assets/docs/article/functional-desgin-ppp/all/01-immutability-and-data-transformation.md +475 -475
  79. package/lib/assets/docs/article/functional-desgin-ppp/all/02-function-composition.md +519 -519
  80. package/lib/assets/docs/article/functional-desgin-ppp/all/03-polymorphism.md +537 -537
  81. package/lib/assets/docs/article/functional-desgin-ppp/all/04-data-validation.md +300 -300
  82. package/lib/assets/docs/article/functional-desgin-ppp/all/05-property-based-testing.md +320 -320
  83. package/lib/assets/docs/article/functional-desgin-ppp/all/06-tdd-and-functional.md +498 -498
  84. package/lib/assets/docs/article/functional-desgin-ppp/all/07-composite-pattern.md +298 -298
  85. package/lib/assets/docs/article/functional-desgin-ppp/all/08-decorator-pattern.md +291 -291
  86. package/lib/assets/docs/article/functional-desgin-ppp/all/09-adapter-pattern.md +336 -336
  87. package/lib/assets/docs/article/functional-desgin-ppp/all/10-strategy-pattern.md +303 -303
  88. package/lib/assets/docs/article/functional-desgin-ppp/all/11-command-pattern.md +286 -286
  89. package/lib/assets/docs/article/functional-desgin-ppp/all/12-visitor-pattern.md +322 -322
  90. package/lib/assets/docs/article/functional-desgin-ppp/all/13-abstract-factory-pattern.md +319 -319
  91. package/lib/assets/docs/article/functional-desgin-ppp/all/14-abstract-server-pattern.md +365 -365
  92. package/lib/assets/docs/article/functional-desgin-ppp/all/15-gossiping-bus-drivers.md +156 -156
  93. package/lib/assets/docs/article/functional-desgin-ppp/all/16-payroll-system.md +178 -178
  94. package/lib/assets/docs/article/functional-desgin-ppp/all/17-video-rental-system.md +312 -312
  95. package/lib/assets/docs/article/functional-desgin-ppp/all/18-concurrency-system.md +287 -287
  96. package/lib/assets/docs/article/functional-desgin-ppp/all/19-wa-tor-simulation.md +286 -286
  97. package/lib/assets/docs/article/functional-desgin-ppp/all/20-pattern-interactions.md +274 -274
  98. package/lib/assets/docs/article/functional-desgin-ppp/all/21-best-practices.md +294 -294
  99. package/lib/assets/docs/article/functional-desgin-ppp/all/22-oo-to-fp-migration.md +337 -337
  100. package/lib/assets/docs/article/functional-desgin-ppp/all/index.md +388 -388
  101. package/lib/assets/docs/article/functional-desgin-ppp/clojure/01-immutability-and-data-transformation.md +273 -273
  102. package/lib/assets/docs/article/functional-desgin-ppp/clojure/02-function-composition.md +380 -380
  103. package/lib/assets/docs/article/functional-desgin-ppp/clojure/03-polymorphism.md +384 -384
  104. package/lib/assets/docs/article/functional-desgin-ppp/clojure/04-clojure-spec.md +350 -350
  105. package/lib/assets/docs/article/functional-desgin-ppp/clojure/05-property-based-testing.md +352 -352
  106. package/lib/assets/docs/article/functional-desgin-ppp/clojure/06-tdd-in-functional.md +383 -383
  107. package/lib/assets/docs/article/functional-desgin-ppp/clojure/07-composite-pattern.md +529 -529
  108. package/lib/assets/docs/article/functional-desgin-ppp/clojure/08-decorator-pattern.md +395 -395
  109. package/lib/assets/docs/article/functional-desgin-ppp/clojure/09-adapter-pattern.md +399 -399
  110. package/lib/assets/docs/article/functional-desgin-ppp/clojure/10-strategy-pattern.md +485 -485
  111. package/lib/assets/docs/article/functional-desgin-ppp/clojure/11-command-pattern.md +566 -566
  112. package/lib/assets/docs/article/functional-desgin-ppp/clojure/12-visitor-pattern.md +567 -567
  113. package/lib/assets/docs/article/functional-desgin-ppp/clojure/13-abstract-factory-pattern.md +475 -475
  114. package/lib/assets/docs/article/functional-desgin-ppp/clojure/14-abstract-server-pattern.md +462 -462
  115. package/lib/assets/docs/article/functional-desgin-ppp/clojure/15-gossiping-bus-drivers.md +325 -325
  116. package/lib/assets/docs/article/functional-desgin-ppp/clojure/16-payroll-system.md +401 -401
  117. package/lib/assets/docs/article/functional-desgin-ppp/clojure/17-video-rental-system.md +450 -450
  118. package/lib/assets/docs/article/functional-desgin-ppp/clojure/18-concurrency-system.md +475 -475
  119. package/lib/assets/docs/article/functional-desgin-ppp/clojure/19-wator-simulation.md +739 -739
  120. package/lib/assets/docs/article/functional-desgin-ppp/clojure/20-pattern-interactions.md +567 -567
  121. package/lib/assets/docs/article/functional-desgin-ppp/clojure/21-best-practices.md +518 -518
  122. package/lib/assets/docs/article/functional-desgin-ppp/clojure/22-oo-to-fp-migration.md +532 -532
  123. package/lib/assets/docs/article/functional-desgin-ppp/clojure/index.md +241 -241
  124. package/lib/assets/docs/article/functional-desgin-ppp/elixir/01-immutability-and-data-transformation.md +383 -383
  125. package/lib/assets/docs/article/functional-desgin-ppp/elixir/02-function-composition.md +374 -374
  126. package/lib/assets/docs/article/functional-desgin-ppp/elixir/03-polymorphism.md +375 -375
  127. package/lib/assets/docs/article/functional-desgin-ppp/elixir/04-data-validation.md +195 -195
  128. package/lib/assets/docs/article/functional-desgin-ppp/elixir/05-property-based-testing.md +268 -268
  129. package/lib/assets/docs/article/functional-desgin-ppp/elixir/06-tdd-and-fp.md +294 -294
  130. package/lib/assets/docs/article/functional-desgin-ppp/elixir/07-effects-and-pure-functions.md +164 -164
  131. package/lib/assets/docs/article/functional-desgin-ppp/elixir/08-error-handling-strategies.md +168 -168
  132. package/lib/assets/docs/article/functional-desgin-ppp/elixir/09-io-and-external-systems.md +254 -254
  133. package/lib/assets/docs/article/functional-desgin-ppp/elixir/10-concurrency-patterns.md +269 -269
  134. package/lib/assets/docs/article/functional-desgin-ppp/elixir/11-command-pattern.md +148 -148
  135. package/lib/assets/docs/article/functional-desgin-ppp/elixir/12-visitor-pattern.md +176 -176
  136. package/lib/assets/docs/article/functional-desgin-ppp/elixir/13-abstract-factory-pattern.md +604 -604
  137. package/lib/assets/docs/article/functional-desgin-ppp/elixir/14-abstract-server-pattern.md +729 -729
  138. package/lib/assets/docs/article/functional-desgin-ppp/elixir/15-gossiping-bus-drivers.md +291 -291
  139. package/lib/assets/docs/article/functional-desgin-ppp/elixir/16-payroll-system.md +420 -420
  140. package/lib/assets/docs/article/functional-desgin-ppp/elixir/17-video-rental-system.md +319 -319
  141. package/lib/assets/docs/article/functional-desgin-ppp/elixir/18-concurrency-system.md +466 -466
  142. package/lib/assets/docs/article/functional-desgin-ppp/elixir/19-wator-simulation.md +523 -523
  143. package/lib/assets/docs/article/functional-desgin-ppp/elixir/20-pattern-interactions.md +287 -287
  144. package/lib/assets/docs/article/functional-desgin-ppp/elixir/21-best-practices.md +340 -340
  145. package/lib/assets/docs/article/functional-desgin-ppp/elixir/22-oo-to-fp-migration.md +395 -395
  146. package/lib/assets/docs/article/functional-desgin-ppp/elixir/index.md +248 -248
  147. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/01-immutability-and-data-transformation.md +384 -384
  148. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/02-function-composition.md +452 -452
  149. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/03-polymorphism.md +495 -495
  150. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/04-data-validation.md +416 -416
  151. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/05-property-based-testing.md +382 -382
  152. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/06-tdd-functional.md +687 -687
  153. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/07-composite-pattern.md +442 -442
  154. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/08-decorator-pattern.md +479 -479
  155. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/09-adapter-pattern.md +479 -479
  156. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/10-strategy-pattern.md +427 -427
  157. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/11-command-pattern.md +428 -428
  158. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/12-visitor-pattern.md +339 -339
  159. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/13-abstract-factory-pattern.md +309 -309
  160. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/14-abstract-server-pattern.md +596 -596
  161. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/15-gossiping-bus-drivers.md +355 -355
  162. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/16-payroll-system.md +350 -350
  163. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/17-video-rental-system.md +414 -414
  164. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/18-concurrency-system.md +367 -367
  165. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/19-wator-simulation.md +403 -403
  166. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/20-pattern-interactions.md +291 -291
  167. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/21-best-practices.md +324 -324
  168. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/22-oo-to-fp-migration.md +332 -332
  169. package/lib/assets/docs/article/functional-desgin-ppp/fsharp/index.md +274 -274
  170. package/lib/assets/docs/article/functional-desgin-ppp/haskell/01-immutability-and-data-transformation.md +298 -298
  171. package/lib/assets/docs/article/functional-desgin-ppp/haskell/02-function-composition.md +304 -304
  172. package/lib/assets/docs/article/functional-desgin-ppp/haskell/03-polymorphism.md +362 -362
  173. package/lib/assets/docs/article/functional-desgin-ppp/haskell/04-data-validation.md +257 -257
  174. package/lib/assets/docs/article/functional-desgin-ppp/haskell/05-property-based-testing.md +254 -254
  175. package/lib/assets/docs/article/functional-desgin-ppp/haskell/06-tdd-functional.md +283 -283
  176. package/lib/assets/docs/article/functional-desgin-ppp/haskell/07-composite-pattern.md +395 -395
  177. package/lib/assets/docs/article/functional-desgin-ppp/haskell/08-decorator-pattern.md +319 -319
  178. package/lib/assets/docs/article/functional-desgin-ppp/haskell/09-adapter-pattern.md +382 -382
  179. package/lib/assets/docs/article/functional-desgin-ppp/haskell/10-strategy-pattern.md +287 -287
  180. package/lib/assets/docs/article/functional-desgin-ppp/haskell/11-command-pattern.md +303 -303
  181. package/lib/assets/docs/article/functional-desgin-ppp/haskell/12-visitor-pattern.md +326 -326
  182. package/lib/assets/docs/article/functional-desgin-ppp/haskell/13-abstract-factory-pattern.md +332 -332
  183. package/lib/assets/docs/article/functional-desgin-ppp/haskell/14-abstract-server-pattern.md +379 -379
  184. package/lib/assets/docs/article/functional-desgin-ppp/haskell/15-gossiping-bus-drivers.md +177 -177
  185. package/lib/assets/docs/article/functional-desgin-ppp/haskell/16-payroll-system.md +219 -219
  186. package/lib/assets/docs/article/functional-desgin-ppp/haskell/17-video-rental-system.md +244 -244
  187. package/lib/assets/docs/article/functional-desgin-ppp/haskell/18-concurrency-system.md +363 -363
  188. package/lib/assets/docs/article/functional-desgin-ppp/haskell/19-wator-simulation.md +438 -438
  189. package/lib/assets/docs/article/functional-desgin-ppp/haskell/20-pattern-interactions.md +325 -325
  190. package/lib/assets/docs/article/functional-desgin-ppp/haskell/21-best-practices.md +403 -403
  191. package/lib/assets/docs/article/functional-desgin-ppp/haskell/22-oo-to-fp-migration.md +469 -469
  192. package/lib/assets/docs/article/functional-desgin-ppp/haskell/index.md +174 -174
  193. package/lib/assets/docs/article/functional-desgin-ppp/index.md +90 -90
  194. package/lib/assets/docs/article/functional-desgin-ppp/rust/01-immutability-and-data-transformation.md +450 -450
  195. package/lib/assets/docs/article/functional-desgin-ppp/rust/02-function-composition.md +463 -463
  196. package/lib/assets/docs/article/functional-desgin-ppp/rust/03-polymorphism.md +425 -425
  197. package/lib/assets/docs/article/functional-desgin-ppp/rust/04-data-validation.md +273 -273
  198. package/lib/assets/docs/article/functional-desgin-ppp/rust/05-property-based-testing.md +247 -247
  199. package/lib/assets/docs/article/functional-desgin-ppp/rust/06-tdd-and-functional.md +841 -841
  200. package/lib/assets/docs/article/functional-desgin-ppp/rust/07-composite-pattern.md +384 -384
  201. package/lib/assets/docs/article/functional-desgin-ppp/rust/08-decorator-pattern.md +383 -383
  202. package/lib/assets/docs/article/functional-desgin-ppp/rust/09-adapter-pattern.md +339 -339
  203. package/lib/assets/docs/article/functional-desgin-ppp/rust/10-strategy-pattern.md +331 -331
  204. package/lib/assets/docs/article/functional-desgin-ppp/rust/11-command-pattern.md +356 -356
  205. package/lib/assets/docs/article/functional-desgin-ppp/rust/12-visitor-pattern.md +379 -379
  206. package/lib/assets/docs/article/functional-desgin-ppp/rust/13-abstract-factory-pattern.md +361 -361
  207. package/lib/assets/docs/article/functional-desgin-ppp/rust/14-abstract-server-pattern.md +392 -392
  208. package/lib/assets/docs/article/functional-desgin-ppp/rust/15-gossiping-bus-drivers.md +300 -300
  209. package/lib/assets/docs/article/functional-desgin-ppp/rust/16-payroll-system.md +297 -297
  210. package/lib/assets/docs/article/functional-desgin-ppp/rust/17-video-rental-system.md +304 -304
  211. package/lib/assets/docs/article/functional-desgin-ppp/rust/18-concurrency-system.md +315 -315
  212. package/lib/assets/docs/article/functional-desgin-ppp/rust/19-wator-simulation.md +311 -311
  213. package/lib/assets/docs/article/functional-desgin-ppp/rust/20-pattern-interactions.md +304 -304
  214. package/lib/assets/docs/article/functional-desgin-ppp/rust/21-best-practices.md +336 -336
  215. package/lib/assets/docs/article/functional-desgin-ppp/rust/22-oo-to-fp-migration.md +349 -349
  216. package/lib/assets/docs/article/functional-desgin-ppp/rust/index.md +243 -243
  217. package/lib/assets/docs/article/functional-desgin-ppp/scala/01-immutability-and-data-transformation.md +328 -328
  218. package/lib/assets/docs/article/functional-desgin-ppp/scala/02-function-composition.md +348 -348
  219. package/lib/assets/docs/article/functional-desgin-ppp/scala/03-polymorphism.md +357 -357
  220. package/lib/assets/docs/article/functional-desgin-ppp/scala/04-data-validation.md +364 -364
  221. package/lib/assets/docs/article/functional-desgin-ppp/scala/05-property-based-testing.md +515 -515
  222. package/lib/assets/docs/article/functional-desgin-ppp/scala/06-tdd-functional.md +557 -557
  223. package/lib/assets/docs/article/functional-desgin-ppp/scala/07-composite-pattern.md +363 -363
  224. package/lib/assets/docs/article/functional-desgin-ppp/scala/08-decorator-pattern.md +327 -327
  225. package/lib/assets/docs/article/functional-desgin-ppp/scala/09-adapter-pattern.md +517 -517
  226. package/lib/assets/docs/article/functional-desgin-ppp/scala/10-strategy-pattern.md +441 -441
  227. package/lib/assets/docs/article/functional-desgin-ppp/scala/11-command-pattern.md +407 -407
  228. package/lib/assets/docs/article/functional-desgin-ppp/scala/12-visitor-pattern.md +379 -379
  229. package/lib/assets/docs/article/functional-desgin-ppp/scala/13-abstract-factory-pattern.md +398 -398
  230. package/lib/assets/docs/article/functional-desgin-ppp/scala/14-abstract-server-pattern.md +476 -476
  231. package/lib/assets/docs/article/functional-desgin-ppp/scala/15-gossiping-bus-drivers.md +391 -391
  232. package/lib/assets/docs/article/functional-desgin-ppp/scala/16-payroll-system.md +342 -342
  233. package/lib/assets/docs/article/functional-desgin-ppp/scala/17-video-rental-system.md +324 -324
  234. package/lib/assets/docs/article/functional-desgin-ppp/scala/18-concurrency-system.md +730 -730
  235. package/lib/assets/docs/article/functional-desgin-ppp/scala/19-wator-simulation.md +624 -624
  236. package/lib/assets/docs/article/functional-desgin-ppp/scala/20-pattern-interactions.md +512 -512
  237. package/lib/assets/docs/article/functional-desgin-ppp/scala/21-best-practices.md +433 -433
  238. package/lib/assets/docs/article/functional-desgin-ppp/scala/22-oo-to-fp-migration.md +688 -688
  239. package/lib/assets/docs/article/functional-desgin-ppp/scala/index.md +243 -243
  240. package/lib/assets/docs/article/getting-start-tdd/clojure/01-todo-list-and-first-test.md +166 -166
  241. package/lib/assets/docs/article/getting-start-tdd/clojure/02-fake-it-and-triangulation.md +162 -162
  242. package/lib/assets/docs/article/getting-start-tdd/clojure/03-obvious-implementation-and-refactoring.md +135 -135
  243. package/lib/assets/docs/article/getting-start-tdd/clojure/04-version-control-and-conventional-commits.md +88 -88
  244. package/lib/assets/docs/article/getting-start-tdd/clojure/05-package-management-and-static-analysis.md +299 -299
  245. package/lib/assets/docs/article/getting-start-tdd/clojure/06-task-runner-and-ci-cd.md +241 -241
  246. package/lib/assets/docs/article/getting-start-tdd/clojure/07-protocols-and-records.md +131 -131
  247. package/lib/assets/docs/article/getting-start-tdd/clojure/08-multimethods-and-design-patterns.md +130 -130
  248. package/lib/assets/docs/article/getting-start-tdd/clojure/09-namespaces-and-module-design.md +127 -127
  249. package/lib/assets/docs/article/getting-start-tdd/clojure/10-higher-order-functions-and-composition.md +114 -114
  250. package/lib/assets/docs/article/getting-start-tdd/clojure/11-persistent-data-and-pipeline.md +138 -138
  251. package/lib/assets/docs/article/getting-start-tdd/clojure/12-error-handling-and-spec.md +161 -161
  252. package/lib/assets/docs/article/getting-start-tdd/clojure/index.md +65 -65
  253. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter01.md +232 -232
  254. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter02.md +244 -244
  255. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter03.md +202 -202
  256. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter04.md +92 -92
  257. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter05.md +256 -256
  258. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter06.md +195 -195
  259. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter07.md +214 -214
  260. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter08.md +249 -249
  261. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter09.md +174 -174
  262. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter10.md +166 -166
  263. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter11.md +192 -192
  264. package/lib/assets/docs/article/getting-start-tdd/csharp/chapter12.md +211 -211
  265. package/lib/assets/docs/article/getting-start-tdd/csharp/index.md +83 -83
  266. package/lib/assets/docs/article/getting-start-tdd/elixir/01-todo-list-and-first-test.md +87 -87
  267. package/lib/assets/docs/article/getting-start-tdd/elixir/02-fake-it-and-triangulation.md +95 -95
  268. package/lib/assets/docs/article/getting-start-tdd/elixir/03-obvious-implementation-and-refactoring.md +109 -109
  269. package/lib/assets/docs/article/getting-start-tdd/elixir/04-version-control-and-conventional-commits.md +96 -96
  270. package/lib/assets/docs/article/getting-start-tdd/elixir/05-package-management-and-static-analysis.md +88 -88
  271. package/lib/assets/docs/article/getting-start-tdd/elixir/06-task-runner-and-ci-cd.md +71 -71
  272. package/lib/assets/docs/article/getting-start-tdd/elixir/07-structs-and-protocols.md +110 -110
  273. package/lib/assets/docs/article/getting-start-tdd/elixir/08-pattern-matching-and-guards.md +108 -108
  274. package/lib/assets/docs/article/getting-start-tdd/elixir/09-module-design-and-behaviours.md +104 -104
  275. package/lib/assets/docs/article/getting-start-tdd/elixir/10-higher-order-functions-and-pipeline.md +178 -178
  276. package/lib/assets/docs/article/getting-start-tdd/elixir/11-stream-and-lazy-evaluation.md +142 -142
  277. package/lib/assets/docs/article/getting-start-tdd/elixir/12-error-handling-and-with.md +145 -145
  278. package/lib/assets/docs/article/getting-start-tdd/elixir/index.md +35 -35
  279. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter01.md +202 -202
  280. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter02.md +246 -246
  281. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter03.md +218 -218
  282. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter04.md +179 -179
  283. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter05.md +267 -267
  284. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter06.md +190 -190
  285. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter07.md +161 -161
  286. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter08.md +175 -175
  287. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter09.md +222 -222
  288. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter10.md +189 -189
  289. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter11.md +212 -212
  290. package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter12.md +215 -215
  291. package/lib/assets/docs/article/getting-start-tdd/fsharp/index.md +71 -71
  292. package/lib/assets/docs/article/getting-start-tdd/go/01-todo-list-and-first-test.md +213 -213
  293. package/lib/assets/docs/article/getting-start-tdd/go/02-fake-it-and-triangulation.md +302 -302
  294. package/lib/assets/docs/article/getting-start-tdd/go/03-obvious-implementation-and-refactoring.md +339 -339
  295. package/lib/assets/docs/article/getting-start-tdd/go/04-version-control-and-conventional-commits.md +112 -112
  296. package/lib/assets/docs/article/getting-start-tdd/go/05-package-management-and-static-analysis.md +272 -272
  297. package/lib/assets/docs/article/getting-start-tdd/go/06-task-runner-and-ci-cd.md +233 -233
  298. package/lib/assets/docs/article/getting-start-tdd/go/07-encapsulation-and-polymorphism.md +394 -394
  299. package/lib/assets/docs/article/getting-start-tdd/go/08-design-patterns.md +422 -422
  300. package/lib/assets/docs/article/getting-start-tdd/go/09-solid-principles-and-module-design.md +400 -400
  301. package/lib/assets/docs/article/getting-start-tdd/go/10-higher-order-functions-and-composition.md +226 -226
  302. package/lib/assets/docs/article/getting-start-tdd/go/11-immutable-data-and-pipeline.md +296 -296
  303. package/lib/assets/docs/article/getting-start-tdd/go/12-error-handling-and-type-safety.md +411 -411
  304. package/lib/assets/docs/article/getting-start-tdd/go/index.md +83 -83
  305. package/lib/assets/docs/article/getting-start-tdd/haskell/01-todo-list-and-first-test.md +279 -279
  306. package/lib/assets/docs/article/getting-start-tdd/haskell/02-fake-it-and-triangulation.md +337 -337
  307. package/lib/assets/docs/article/getting-start-tdd/haskell/03-obvious-implementation-and-refactoring.md +257 -257
  308. package/lib/assets/docs/article/getting-start-tdd/haskell/04-version-control-and-conventional-commits.md +182 -182
  309. package/lib/assets/docs/article/getting-start-tdd/haskell/05-package-management-and-static-analysis.md +313 -313
  310. package/lib/assets/docs/article/getting-start-tdd/haskell/06-task-runner-and-ci-cd.md +309 -309
  311. package/lib/assets/docs/article/getting-start-tdd/haskell/07-algebraic-data-types-and-type-classes.md +412 -412
  312. package/lib/assets/docs/article/getting-start-tdd/haskell/08-pattern-matching-and-guards.md +390 -390
  313. package/lib/assets/docs/article/getting-start-tdd/haskell/09-module-design-and-smart-constructors.md +461 -461
  314. package/lib/assets/docs/article/getting-start-tdd/haskell/10-higher-order-functions-and-currying.md +434 -434
  315. package/lib/assets/docs/article/getting-start-tdd/haskell/11-function-composition-and-point-free.md +392 -392
  316. package/lib/assets/docs/article/getting-start-tdd/haskell/12-monad-and-error-handling.md +631 -631
  317. package/lib/assets/docs/article/getting-start-tdd/haskell/index.md +49 -49
  318. package/lib/assets/docs/article/getting-start-tdd/index.md +93 -93
  319. package/lib/assets/docs/article/getting-start-tdd/integration/01-language-overview.md +375 -375
  320. package/lib/assets/docs/article/getting-start-tdd/integration/02-test-framework-comparison.md +349 -349
  321. package/lib/assets/docs/article/getting-start-tdd/integration/03-tdd-pattern-comparison.md +445 -445
  322. package/lib/assets/docs/article/getting-start-tdd/integration/04-type-system-comparison.md +409 -409
  323. package/lib/assets/docs/article/getting-start-tdd/integration/05-dev-environment-comparison.md +330 -330
  324. package/lib/assets/docs/article/getting-start-tdd/integration/06-learning-roadmap.md +290 -290
  325. package/lib/assets/docs/article/getting-start-tdd/integration/index.md +69 -69
  326. package/lib/assets/docs/article/getting-start-tdd/java/01-todo-list-and-first-test.md +234 -234
  327. package/lib/assets/docs/article/getting-start-tdd/java/02-fake-it-and-triangulation.md +261 -261
  328. package/lib/assets/docs/article/getting-start-tdd/java/03-obvious-implementation-and-refactoring.md +185 -185
  329. package/lib/assets/docs/article/getting-start-tdd/java/04-version-control-and-conventional-commits.md +115 -115
  330. package/lib/assets/docs/article/getting-start-tdd/java/05-package-management-and-static-analysis.md +382 -382
  331. package/lib/assets/docs/article/getting-start-tdd/java/06-task-runner-and-ci-cd.md +272 -272
  332. package/lib/assets/docs/article/getting-start-tdd/java/07-encapsulation-and-polymorphism.md +626 -626
  333. package/lib/assets/docs/article/getting-start-tdd/java/08-design-patterns.md +393 -393
  334. package/lib/assets/docs/article/getting-start-tdd/java/09-solid-principles-and-module-design.md +310 -310
  335. package/lib/assets/docs/article/getting-start-tdd/java/10-higher-order-functions-and-composition.md +188 -188
  336. package/lib/assets/docs/article/getting-start-tdd/java/11-immutable-data-and-pipeline.md +167 -167
  337. package/lib/assets/docs/article/getting-start-tdd/java/12-error-handling-and-type-safety.md +205 -205
  338. package/lib/assets/docs/article/getting-start-tdd/java/index.md +61 -61
  339. package/lib/assets/docs/article/getting-start-tdd/node/01-todo-list-and-first-test.md +244 -244
  340. package/lib/assets/docs/article/getting-start-tdd/node/02-fake-it-and-triangulation.md +262 -262
  341. package/lib/assets/docs/article/getting-start-tdd/node/03-obvious-implementation-and-refactoring.md +169 -169
  342. package/lib/assets/docs/article/getting-start-tdd/node/04-version-control-and-conventional-commits.md +112 -112
  343. package/lib/assets/docs/article/getting-start-tdd/node/05-package-management-and-static-analysis.md +314 -314
  344. package/lib/assets/docs/article/getting-start-tdd/node/06-task-runner-and-ci-cd.md +235 -235
  345. package/lib/assets/docs/article/getting-start-tdd/node/07-encapsulation-and-polymorphism.md +327 -327
  346. package/lib/assets/docs/article/getting-start-tdd/node/08-design-patterns.md +322 -322
  347. package/lib/assets/docs/article/getting-start-tdd/node/09-solid-principles-and-module-design.md +285 -285
  348. package/lib/assets/docs/article/getting-start-tdd/node/10-higher-order-functions-and-composition.md +199 -199
  349. package/lib/assets/docs/article/getting-start-tdd/node/11-immutable-data-and-pipeline.md +207 -207
  350. package/lib/assets/docs/article/getting-start-tdd/node/12-error-handling-and-type-safety.md +295 -295
  351. package/lib/assets/docs/article/getting-start-tdd/node/index.md +56 -56
  352. package/lib/assets/docs/article/getting-start-tdd/php/01-todo-list-and-first-test.md +259 -259
  353. package/lib/assets/docs/article/getting-start-tdd/php/02-fake-it-and-triangulation.md +200 -200
  354. package/lib/assets/docs/article/getting-start-tdd/php/03-obvious-implementation-and-refactoring.md +248 -248
  355. package/lib/assets/docs/article/getting-start-tdd/php/04-version-control-and-conventional-commits.md +141 -141
  356. package/lib/assets/docs/article/getting-start-tdd/php/05-package-management-and-static-analysis.md +410 -410
  357. package/lib/assets/docs/article/getting-start-tdd/php/06-task-runner-and-ci-cd.md +321 -321
  358. package/lib/assets/docs/article/getting-start-tdd/php/07-encapsulation-and-polymorphism.md +372 -372
  359. package/lib/assets/docs/article/getting-start-tdd/php/08-design-patterns.md +453 -453
  360. package/lib/assets/docs/article/getting-start-tdd/php/09-solid-principles-and-module-design.md +460 -460
  361. package/lib/assets/docs/article/getting-start-tdd/php/10-higher-order-functions-and-composition.md +182 -182
  362. package/lib/assets/docs/article/getting-start-tdd/php/11-immutable-data-and-pipeline.md +266 -266
  363. package/lib/assets/docs/article/getting-start-tdd/php/12-error-handling-and-type-safety.md +308 -308
  364. package/lib/assets/docs/article/getting-start-tdd/php/index.md +84 -84
  365. package/lib/assets/docs/article/getting-start-tdd/python/01-todo-list-and-first-test.md +201 -201
  366. package/lib/assets/docs/article/getting-start-tdd/python/02-fake-it-and-triangulation.md +247 -247
  367. package/lib/assets/docs/article/getting-start-tdd/python/03-obvious-implementation-and-refactoring.md +199 -199
  368. package/lib/assets/docs/article/getting-start-tdd/python/04-version-control-and-conventional-commits.md +87 -87
  369. package/lib/assets/docs/article/getting-start-tdd/python/05-package-management-and-static-analysis.md +274 -274
  370. package/lib/assets/docs/article/getting-start-tdd/python/06-task-runner-and-ci-cd.md +190 -190
  371. package/lib/assets/docs/article/getting-start-tdd/python/07-encapsulation-and-polymorphism.md +208 -208
  372. package/lib/assets/docs/article/getting-start-tdd/python/08-design-patterns.md +172 -172
  373. package/lib/assets/docs/article/getting-start-tdd/python/09-solid-principles-and-module-design.md +130 -130
  374. package/lib/assets/docs/article/getting-start-tdd/python/10-higher-order-functions-and-composition.md +122 -122
  375. package/lib/assets/docs/article/getting-start-tdd/python/11-immutable-data-and-pipeline.md +116 -116
  376. package/lib/assets/docs/article/getting-start-tdd/python/12-error-handling-and-type-safety.md +126 -126
  377. package/lib/assets/docs/article/getting-start-tdd/python/index.md +55 -55
  378. package/lib/assets/docs/article/getting-start-tdd/ruby/01-todo-list-and-first-test.md +231 -231
  379. package/lib/assets/docs/article/getting-start-tdd/ruby/02-fake-it-and-triangulation.md +238 -238
  380. package/lib/assets/docs/article/getting-start-tdd/ruby/03-obvious-implementation-and-refactoring.md +228 -228
  381. package/lib/assets/docs/article/getting-start-tdd/ruby/04-version-control-and-conventional-commits.md +112 -112
  382. package/lib/assets/docs/article/getting-start-tdd/ruby/05-package-management-and-static-analysis.md +287 -287
  383. package/lib/assets/docs/article/getting-start-tdd/ruby/06-task-runner-and-ci-cd.md +248 -248
  384. package/lib/assets/docs/article/getting-start-tdd/ruby/07-encapsulation-and-polymorphism.md +279 -279
  385. package/lib/assets/docs/article/getting-start-tdd/ruby/08-design-patterns.md +329 -329
  386. package/lib/assets/docs/article/getting-start-tdd/ruby/09-solid-principles-and-module-design.md +196 -196
  387. package/lib/assets/docs/article/getting-start-tdd/ruby/10-higher-order-functions-and-composition.md +175 -175
  388. package/lib/assets/docs/article/getting-start-tdd/ruby/11-immutable-data-and-pipeline.md +237 -237
  389. package/lib/assets/docs/article/getting-start-tdd/ruby/12-error-handling-and-type-safety.md +398 -398
  390. package/lib/assets/docs/article/getting-start-tdd/ruby/index.md +83 -83
  391. package/lib/assets/docs/article/getting-start-tdd/rust/01-todo-list-and-first-test.md +211 -211
  392. package/lib/assets/docs/article/getting-start-tdd/rust/02-fake-it-and-triangulation.md +264 -264
  393. package/lib/assets/docs/article/getting-start-tdd/rust/03-obvious-implementation-and-refactoring.md +233 -233
  394. package/lib/assets/docs/article/getting-start-tdd/rust/04-version-control-and-conventional-commits.md +92 -92
  395. package/lib/assets/docs/article/getting-start-tdd/rust/05-package-management-and-static-analysis.md +212 -212
  396. package/lib/assets/docs/article/getting-start-tdd/rust/06-task-runner-and-ci-cd.md +164 -164
  397. package/lib/assets/docs/article/getting-start-tdd/rust/07-encapsulation-and-polymorphism.md +142 -142
  398. package/lib/assets/docs/article/getting-start-tdd/rust/08-design-patterns.md +145 -145
  399. package/lib/assets/docs/article/getting-start-tdd/rust/09-solid-principles-and-module-design.md +110 -110
  400. package/lib/assets/docs/article/getting-start-tdd/rust/10-higher-order-functions-and-composition.md +94 -94
  401. package/lib/assets/docs/article/getting-start-tdd/rust/11-immutable-data-and-pipeline.md +105 -105
  402. package/lib/assets/docs/article/getting-start-tdd/rust/12-error-handling-and-type-safety.md +112 -112
  403. package/lib/assets/docs/article/getting-start-tdd/rust/index.md +83 -83
  404. package/lib/assets/docs/article/getting-start-tdd/scala/01-todo-list-and-first-test.md +111 -111
  405. package/lib/assets/docs/article/getting-start-tdd/scala/02-fake-it-and-triangulation.md +107 -107
  406. package/lib/assets/docs/article/getting-start-tdd/scala/03-obvious-implementation-and-refactoring.md +99 -99
  407. package/lib/assets/docs/article/getting-start-tdd/scala/04-version-control-and-conventional-commits.md +123 -123
  408. package/lib/assets/docs/article/getting-start-tdd/scala/05-package-management-and-static-analysis.md +196 -196
  409. package/lib/assets/docs/article/getting-start-tdd/scala/06-task-runner-and-ci-cd.md +186 -186
  410. package/lib/assets/docs/article/getting-start-tdd/scala/07-case-classes-and-traits.md +139 -139
  411. package/lib/assets/docs/article/getting-start-tdd/scala/08-pattern-matching-and-sealed-traits.md +106 -106
  412. package/lib/assets/docs/article/getting-start-tdd/scala/09-packages-and-module-design.md +75 -75
  413. package/lib/assets/docs/article/getting-start-tdd/scala/10-higher-order-functions-and-composition.md +104 -104
  414. package/lib/assets/docs/article/getting-start-tdd/scala/11-collections-and-lazy-evaluation.md +94 -94
  415. package/lib/assets/docs/article/getting-start-tdd/scala/12-error-handling-and-type-safety.md +92 -92
  416. package/lib/assets/docs/article/getting-start-tdd/scala/index.md +65 -65
  417. package/lib/assets/docs/article/grokking-concurrency/all/index.md +404 -404
  418. package/lib/assets/docs/article/grokking-concurrency/all/part-1-ch02-sequential.md +554 -554
  419. package/lib/assets/docs/article/grokking-concurrency/all/part-2-ch04-05-threads.md +469 -469
  420. package/lib/assets/docs/article/grokking-concurrency/all/part-3-ch06-multitasking.md +520 -520
  421. package/lib/assets/docs/article/grokking-concurrency/all/part-4-ch07-parallel-patterns.md +420 -420
  422. package/lib/assets/docs/article/grokking-concurrency/all/part-5-ch08-09-synchronization.md +510 -510
  423. package/lib/assets/docs/article/grokking-concurrency/all/part-6-ch10-11-nonblocking-io.md +435 -435
  424. package/lib/assets/docs/article/grokking-concurrency/all/part-7-ch12-async.md +465 -465
  425. package/lib/assets/docs/article/grokking-concurrency/all/part-8-ch13-mapreduce.md +377 -377
  426. package/lib/assets/docs/article/grokking-concurrency/clojure/index.md +116 -116
  427. package/lib/assets/docs/article/grokking-concurrency/clojure/part-1.md +108 -108
  428. package/lib/assets/docs/article/grokking-concurrency/clojure/part-2.md +101 -101
  429. package/lib/assets/docs/article/grokking-concurrency/clojure/part-3.md +122 -122
  430. package/lib/assets/docs/article/grokking-concurrency/clojure/part-4.md +123 -123
  431. package/lib/assets/docs/article/grokking-concurrency/clojure/part-5.md +118 -118
  432. package/lib/assets/docs/article/grokking-concurrency/clojure/part-6.md +89 -89
  433. package/lib/assets/docs/article/grokking-concurrency/clojure/part-7.md +100 -100
  434. package/lib/assets/docs/article/grokking-concurrency/clojure/part-8.md +120 -120
  435. package/lib/assets/docs/article/grokking-concurrency/csharp/index.md +101 -101
  436. package/lib/assets/docs/article/grokking-concurrency/csharp/part-1.md +97 -97
  437. package/lib/assets/docs/article/grokking-concurrency/csharp/part-2.md +123 -123
  438. package/lib/assets/docs/article/grokking-concurrency/csharp/part-3.md +101 -101
  439. package/lib/assets/docs/article/grokking-concurrency/csharp/part-4.md +112 -112
  440. package/lib/assets/docs/article/grokking-concurrency/csharp/part-5.md +99 -99
  441. package/lib/assets/docs/article/grokking-concurrency/csharp/part-6.md +61 -61
  442. package/lib/assets/docs/article/grokking-concurrency/csharp/part-7.md +84 -84
  443. package/lib/assets/docs/article/grokking-concurrency/csharp/part-8.md +92 -92
  444. package/lib/assets/docs/article/grokking-concurrency/fsharp/index.md +65 -65
  445. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-1.md +80 -80
  446. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-2.md +103 -103
  447. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-3.md +94 -94
  448. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-4.md +110 -110
  449. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-5.md +104 -104
  450. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-6.md +93 -93
  451. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-7.md +121 -121
  452. package/lib/assets/docs/article/grokking-concurrency/fsharp/part-8.md +107 -107
  453. package/lib/assets/docs/article/grokking-concurrency/haskell/index.md +248 -248
  454. package/lib/assets/docs/article/grokking-concurrency/haskell/part-1.md +96 -96
  455. package/lib/assets/docs/article/grokking-concurrency/haskell/part-2.md +96 -96
  456. package/lib/assets/docs/article/grokking-concurrency/haskell/part-3.md +91 -91
  457. package/lib/assets/docs/article/grokking-concurrency/haskell/part-4.md +106 -106
  458. package/lib/assets/docs/article/grokking-concurrency/haskell/part-5.md +99 -99
  459. package/lib/assets/docs/article/grokking-concurrency/haskell/part-6.md +95 -95
  460. package/lib/assets/docs/article/grokking-concurrency/haskell/part-7.md +111 -111
  461. package/lib/assets/docs/article/grokking-concurrency/haskell/part-8.md +118 -118
  462. package/lib/assets/docs/article/grokking-concurrency/index.md +66 -66
  463. package/lib/assets/docs/article/grokking-concurrency/java/index.md +102 -102
  464. package/lib/assets/docs/article/grokking-concurrency/java/part-1.md +308 -308
  465. package/lib/assets/docs/article/grokking-concurrency/java/part-2.md +334 -334
  466. package/lib/assets/docs/article/grokking-concurrency/java/part-3.md +221 -221
  467. package/lib/assets/docs/article/grokking-concurrency/java/part-4.md +213 -213
  468. package/lib/assets/docs/article/grokking-concurrency/java/part-5.md +112 -112
  469. package/lib/assets/docs/article/grokking-concurrency/java/part-6.md +69 -69
  470. package/lib/assets/docs/article/grokking-concurrency/java/part-7.md +101 -101
  471. package/lib/assets/docs/article/grokking-concurrency/java/part-8.md +101 -101
  472. package/lib/assets/docs/article/grokking-concurrency/python/index.md +313 -313
  473. package/lib/assets/docs/article/grokking-concurrency/python/part-1.md +239 -239
  474. package/lib/assets/docs/article/grokking-concurrency/python/part-2.md +418 -418
  475. package/lib/assets/docs/article/grokking-concurrency/python/part-3.md +227 -227
  476. package/lib/assets/docs/article/grokking-concurrency/python/part-4.md +299 -299
  477. package/lib/assets/docs/article/grokking-concurrency/python/part-5.md +315 -315
  478. package/lib/assets/docs/article/grokking-concurrency/python/part-6.md +297 -297
  479. package/lib/assets/docs/article/grokking-concurrency/python/part-7.md +314 -314
  480. package/lib/assets/docs/article/grokking-concurrency/python/part-8.md +360 -360
  481. package/lib/assets/docs/article/grokking-concurrency/rust/index.md +270 -270
  482. package/lib/assets/docs/article/grokking-concurrency/rust/part-1.md +108 -108
  483. package/lib/assets/docs/article/grokking-concurrency/rust/part-2.md +120 -120
  484. package/lib/assets/docs/article/grokking-concurrency/rust/part-3.md +126 -126
  485. package/lib/assets/docs/article/grokking-concurrency/rust/part-4.md +175 -175
  486. package/lib/assets/docs/article/grokking-concurrency/rust/part-5.md +158 -158
  487. package/lib/assets/docs/article/grokking-concurrency/rust/part-6.md +94 -94
  488. package/lib/assets/docs/article/grokking-concurrency/rust/part-7.md +133 -133
  489. package/lib/assets/docs/article/grokking-concurrency/rust/part-8.md +155 -155
  490. package/lib/assets/docs/article/grokking-concurrency/scala/index.md +69 -69
  491. package/lib/assets/docs/article/grokking-concurrency/scala/part-1.md +78 -78
  492. package/lib/assets/docs/article/grokking-concurrency/scala/part-2.md +112 -112
  493. package/lib/assets/docs/article/grokking-concurrency/scala/part-3.md +93 -93
  494. package/lib/assets/docs/article/grokking-concurrency/scala/part-4.md +110 -110
  495. package/lib/assets/docs/article/grokking-concurrency/scala/part-5.md +119 -119
  496. package/lib/assets/docs/article/grokking-concurrency/scala/part-6.md +83 -83
  497. package/lib/assets/docs/article/grokking-concurrency/scala/part-7.md +131 -131
  498. package/lib/assets/docs/article/grokking-concurrency/scala/part-8.md +129 -129
  499. package/lib/assets/docs/article/grokkingfp/all/index.md +368 -368
  500. package/lib/assets/docs/article/grokkingfp/all/part-1-ch01-fp-introduction.md +530 -530
  501. package/lib/assets/docs/article/grokkingfp/all/part-1-ch02-pure-functions.md +923 -923
  502. package/lib/assets/docs/article/grokkingfp/all/part-2-ch03-immutable-data.md +1128 -1128
  503. package/lib/assets/docs/article/grokkingfp/all/part-2-ch04-higher-order-functions.md +1104 -1104
  504. package/lib/assets/docs/article/grokkingfp/all/part-2-ch05-flatmap.md +1026 -1026
  505. package/lib/assets/docs/article/grokkingfp/all/part-3-ch06-option.md +785 -785
  506. package/lib/assets/docs/article/grokkingfp/all/part-3-ch07-either-adt.md +871 -871
  507. package/lib/assets/docs/article/grokkingfp/all/part-4-ch08-io-monad.md +972 -972
  508. package/lib/assets/docs/article/grokkingfp/all/part-4-ch09-streams.md +926 -926
  509. package/lib/assets/docs/article/grokkingfp/all/part-5-ch10-concurrency.md +870 -870
  510. package/lib/assets/docs/article/grokkingfp/all/part-6-ch11-application.md +715 -715
  511. package/lib/assets/docs/article/grokkingfp/all/part-6-ch12-testing.md +626 -626
  512. package/lib/assets/docs/article/grokkingfp/all/writing-plan.md +712 -712
  513. package/lib/assets/docs/article/grokkingfp/clojure/index.md +276 -276
  514. package/lib/assets/docs/article/grokkingfp/clojure/part-1.md +667 -667
  515. package/lib/assets/docs/article/grokkingfp/clojure/part-2.md +643 -643
  516. package/lib/assets/docs/article/grokkingfp/clojure/part-3.md +620 -620
  517. package/lib/assets/docs/article/grokkingfp/clojure/part-4.md +697 -697
  518. package/lib/assets/docs/article/grokkingfp/clojure/part-5.md +751 -751
  519. package/lib/assets/docs/article/grokkingfp/clojure/part-6.md +721 -721
  520. package/lib/assets/docs/article/grokkingfp/csharp/index.md +246 -246
  521. package/lib/assets/docs/article/grokkingfp/csharp/part-1.md +811 -811
  522. package/lib/assets/docs/article/grokkingfp/csharp/part-2.md +971 -971
  523. package/lib/assets/docs/article/grokkingfp/csharp/part-3.md +981 -981
  524. package/lib/assets/docs/article/grokkingfp/csharp/part-4.md +949 -949
  525. package/lib/assets/docs/article/grokkingfp/csharp/part-5.md +947 -947
  526. package/lib/assets/docs/article/grokkingfp/csharp/part-6.md +739 -739
  527. package/lib/assets/docs/article/grokkingfp/elixir/index.md +203 -203
  528. package/lib/assets/docs/article/grokkingfp/elixir/part-1.md +712 -712
  529. package/lib/assets/docs/article/grokkingfp/elixir/part-2.md +838 -838
  530. package/lib/assets/docs/article/grokkingfp/elixir/part-3.md +985 -985
  531. package/lib/assets/docs/article/grokkingfp/elixir/part-4.md +974 -974
  532. package/lib/assets/docs/article/grokkingfp/elixir/part-5.md +1286 -1286
  533. package/lib/assets/docs/article/grokkingfp/elixir/part-6.md +1049 -1049
  534. package/lib/assets/docs/article/grokkingfp/fsharp/index.md +210 -210
  535. package/lib/assets/docs/article/grokkingfp/fsharp/part-1.md +714 -714
  536. package/lib/assets/docs/article/grokkingfp/fsharp/part-2.md +961 -961
  537. package/lib/assets/docs/article/grokkingfp/fsharp/part-3.md +972 -972
  538. package/lib/assets/docs/article/grokkingfp/fsharp/part-4.md +832 -832
  539. package/lib/assets/docs/article/grokkingfp/fsharp/part-5.md +911 -911
  540. package/lib/assets/docs/article/grokkingfp/fsharp/part-6.md +922 -922
  541. package/lib/assets/docs/article/grokkingfp/haskell/index.md +234 -234
  542. package/lib/assets/docs/article/grokkingfp/haskell/part-1.md +591 -591
  543. package/lib/assets/docs/article/grokkingfp/haskell/part-2.md +866 -866
  544. package/lib/assets/docs/article/grokkingfp/haskell/part-3.md +915 -915
  545. package/lib/assets/docs/article/grokkingfp/haskell/part-4.md +878 -878
  546. package/lib/assets/docs/article/grokkingfp/haskell/part-5.md +845 -845
  547. package/lib/assets/docs/article/grokkingfp/haskell/part-6.md +844 -844
  548. package/lib/assets/docs/article/grokkingfp/index.md +143 -143
  549. package/lib/assets/docs/article/grokkingfp/java/index.md +211 -211
  550. package/lib/assets/docs/article/grokkingfp/java/part-1.md +648 -648
  551. package/lib/assets/docs/article/grokkingfp/java/part-2.md +675 -675
  552. package/lib/assets/docs/article/grokkingfp/java/part-3.md +672 -672
  553. package/lib/assets/docs/article/grokkingfp/java/part-4.md +771 -771
  554. package/lib/assets/docs/article/grokkingfp/java/part-5.md +959 -959
  555. package/lib/assets/docs/article/grokkingfp/java/part-6.md +1328 -1328
  556. package/lib/assets/docs/article/grokkingfp/python/index.md +258 -258
  557. package/lib/assets/docs/article/grokkingfp/python/part-1.md +443 -443
  558. package/lib/assets/docs/article/grokkingfp/python/part-2.md +958 -958
  559. package/lib/assets/docs/article/grokkingfp/python/part-3.md +1004 -1004
  560. package/lib/assets/docs/article/grokkingfp/python/part-4.md +765 -765
  561. package/lib/assets/docs/article/grokkingfp/python/part-5.md +747 -747
  562. package/lib/assets/docs/article/grokkingfp/python/part-6.md +861 -861
  563. package/lib/assets/docs/article/grokkingfp/ruby/index.md +330 -330
  564. package/lib/assets/docs/article/grokkingfp/ruby/part-1.md +755 -755
  565. package/lib/assets/docs/article/grokkingfp/ruby/part-2.md +938 -938
  566. package/lib/assets/docs/article/grokkingfp/ruby/part-3.md +946 -946
  567. package/lib/assets/docs/article/grokkingfp/ruby/part-4.md +921 -921
  568. package/lib/assets/docs/article/grokkingfp/ruby/part-5.md +908 -908
  569. package/lib/assets/docs/article/grokkingfp/ruby/part-6.md +1412 -1412
  570. package/lib/assets/docs/article/grokkingfp/rust/index.md +242 -242
  571. package/lib/assets/docs/article/grokkingfp/rust/part-1.md +634 -634
  572. package/lib/assets/docs/article/grokkingfp/rust/part-2.md +1060 -1060
  573. package/lib/assets/docs/article/grokkingfp/rust/part-3.md +994 -994
  574. package/lib/assets/docs/article/grokkingfp/rust/part-4.md +573 -573
  575. package/lib/assets/docs/article/grokkingfp/rust/part-5.md +705 -705
  576. package/lib/assets/docs/article/grokkingfp/rust/part-6.md +508 -508
  577. package/lib/assets/docs/article/grokkingfp/scala/index.md +171 -171
  578. package/lib/assets/docs/article/grokkingfp/scala/part-1.md +543 -543
  579. package/lib/assets/docs/article/grokkingfp/scala/part-2.md +946 -946
  580. package/lib/assets/docs/article/grokkingfp/scala/part-3.md +919 -919
  581. package/lib/assets/docs/article/grokkingfp/scala/part-4.md +742 -742
  582. package/lib/assets/docs/article/grokkingfp/scala/part-5.md +722 -722
  583. package/lib/assets/docs/article/grokkingfp/scala/part-6.md +867 -867
  584. package/lib/assets/docs/article/grokkingfp/typescript/index.md +273 -273
  585. package/lib/assets/docs/article/grokkingfp/typescript/part-1.md +561 -561
  586. package/lib/assets/docs/article/grokkingfp/typescript/part-2.md +1129 -1129
  587. package/lib/assets/docs/article/grokkingfp/typescript/part-3.md +842 -842
  588. package/lib/assets/docs/article/grokkingfp/typescript/part-4.md +1087 -1087
  589. package/lib/assets/docs/article/grokkingfp/typescript/part-5.md +717 -717
  590. package/lib/assets/docs/article/grokkingfp/typescript/part-6.md +982 -982
  591. package/lib/assets/docs/article/index.md +41 -41
  592. package/lib/assets/docs/article/practical-database-design/index.md +121 -121
  593. package/lib/assets/docs/article/practical-database-design/part1/chapter01.md +288 -288
  594. package/lib/assets/docs/article/practical-database-design/part1/chapter02.md +518 -518
  595. package/lib/assets/docs/article/practical-database-design/part1/chapter03.md +557 -557
  596. package/lib/assets/docs/article/practical-database-design/part2/chapter04.md +924 -924
  597. package/lib/assets/docs/article/practical-database-design/part2/chapter05.md +1627 -1627
  598. package/lib/assets/docs/article/practical-database-design/part2/chapter06.md +2716 -2716
  599. package/lib/assets/docs/article/practical-database-design/part2/chapter07.md +2082 -2082
  600. package/lib/assets/docs/article/practical-database-design/part2/chapter08.md +2105 -2105
  601. package/lib/assets/docs/article/practical-database-design/part2/chapter09.md +2031 -2031
  602. package/lib/assets/docs/article/practical-database-design/part2/chapter10.md +1387 -1387
  603. package/lib/assets/docs/article/practical-database-design/part2/chapter11.md +1677 -1677
  604. package/lib/assets/docs/article/practical-database-design/part2/chapter12.md +1417 -1417
  605. package/lib/assets/docs/article/practical-database-design/part2/chapter13.md +1434 -1434
  606. package/lib/assets/docs/article/practical-database-design/part3/chapter14.md +667 -667
  607. package/lib/assets/docs/article/practical-database-design/part3/chapter15.md +1625 -1625
  608. package/lib/assets/docs/article/practical-database-design/part3/chapter16.md +1915 -1915
  609. package/lib/assets/docs/article/practical-database-design/part3/chapter17.md +1708 -1708
  610. package/lib/assets/docs/article/practical-database-design/part3/chapter18.md +2095 -2095
  611. package/lib/assets/docs/article/practical-database-design/part3/chapter19.md +1123 -1123
  612. package/lib/assets/docs/article/practical-database-design/part3/chapter20.md +1031 -1031
  613. package/lib/assets/docs/article/practical-database-design/part3/chapter21.md +1382 -1382
  614. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter14-orm.md +991 -991
  615. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter15-orm.md +1300 -1300
  616. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter16-orm.md +1166 -1166
  617. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter17-orm.md +1584 -1584
  618. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter18-orm.md +1183 -1183
  619. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter19-orm.md +1016 -1016
  620. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter20-orm.md +1753 -1753
  621. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter21-orm.md +1447 -1447
  622. package/lib/assets/docs/article/practical-database-design/part3-orm/chapter22-orm.md +1878 -1878
  623. package/lib/assets/docs/article/practical-database-design/part4/chapter22.md +965 -965
  624. package/lib/assets/docs/article/practical-database-design/part4/chapter23.md +2069 -2069
  625. package/lib/assets/docs/article/practical-database-design/part4/chapter24.md +2439 -2439
  626. package/lib/assets/docs/article/practical-database-design/part4/chapter25.md +3661 -3661
  627. package/lib/assets/docs/article/practical-database-design/part4/chapter26.md +2916 -2916
  628. package/lib/assets/docs/article/practical-database-design/part4/chapter27.md +3105 -3105
  629. package/lib/assets/docs/article/practical-database-design/part4/chapter28.md +2697 -2697
  630. package/lib/assets/docs/article/practical-database-design/part4/chapter29.md +2544 -2544
  631. package/lib/assets/docs/article/practical-database-design/part4/chapter30.md +2180 -2180
  632. package/lib/assets/docs/article/practical-database-design/part4/chapter31.md +1192 -1192
  633. package/lib/assets/docs/article/practical-database-design/part4/chapter32.md +2101 -2101
  634. package/lib/assets/docs/article/practical-database-design/part5/chapter33.md +1032 -1032
  635. package/lib/assets/docs/article/practical-database-design/part5/chapter34.md +1609 -1609
  636. package/lib/assets/docs/article/practical-database-design/part5/chapter35.md +1453 -1453
  637. package/lib/assets/docs/article/practical-database-design/part5/chapter36.md +1292 -1292
  638. package/lib/assets/docs/article/practical-database-design/part5/chapter37.md +1470 -1470
  639. package/lib/assets/docs/article/practical-database-design/part5/chapter38.md +1698 -1698
  640. package/lib/assets/docs/article/practical-database-design/part5/chapter39.md +2334 -2334
  641. package/lib/assets/docs/article/practical-database-design/study/study2-1.md +1693 -1693
  642. package/lib/assets/docs/article/practical-database-design/study/study2-2.md +1347 -1347
  643. package/lib/assets/docs/article/practical-database-design/study/study2-3.md +2044 -2044
  644. package/lib/assets/docs/article/practical-database-design/study/study2-4.md +2229 -2229
  645. package/lib/assets/docs/article/practical-database-design/study/study2-5.md +2418 -2418
  646. package/lib/assets/docs/article/practical-database-design/study/study3-1.md +2205 -2205
  647. package/lib/assets/docs/article/practical-database-design/study/study3-2.md +2221 -2221
  648. package/lib/assets/docs/article/practical-database-design/study/study3-3.md +2253 -2253
  649. package/lib/assets/docs/article/practical-database-design/study/study3-4.md +2106 -2106
  650. package/lib/assets/docs/article/practical-database-design/study/study3-5.md +2507 -2507
  651. package/lib/assets/docs/article/practical-database-design/study/study4-1.md +2587 -2587
  652. package/lib/assets/docs/article/practical-database-design/study/study4-2.md +2075 -2075
  653. package/lib/assets/docs/article/practical-database-design/study/study4-3.md +1805 -1805
  654. package/lib/assets/docs/article/practical-database-design/study/study4-4.md +1895 -1895
  655. package/lib/assets/docs/article/practical-database-design/study/study4-5.md +2878 -2878
  656. package/lib/assets/docs/assets/css/extra.css +29 -29
  657. package/lib/assets/docs/assets/js/extra.js +44 -44
  658. package/lib/assets/docs/design/index.md +44 -44
  659. package/lib/assets/docs/development/index.md +39 -39
  660. package/lib/assets/docs/index.md +33 -33
  661. package/lib/assets/docs/operation/index.md +27 -27
  662. 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
  663. 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
  664. 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
  665. 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
  666. 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
  667. package/lib/assets/docs/reference/UI/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +450 -450
  668. package/lib/assets/docs/reference/images/Ansoff.drawio.svg +3 -3
  669. package/lib/assets/docs/reference/images/BMC.drawio.svg +3 -3
  670. package/lib/assets/docs/reference/images/BrandBasicStrategy.drawio.svg +3 -3
  671. package/lib/assets/docs/reference/images/BrandCategorization.drawio.svg +3 -3
  672. package/lib/assets/docs/reference/images/BrandRecurutementStrategy.drawio.svg +3 -3
  673. package/lib/assets/docs/reference/images/BrandValue.drawio.svg +3 -3
  674. package/lib/assets/docs/reference/images/BusinessActivitiy.svg +3 -3
  675. package/lib/assets/docs/reference/images/HRM.drawio.svg +3 -3
  676. package/lib/assets/docs/reference/images/MarketingStructure.drawio.svg +3 -3
  677. package/lib/assets/docs/reference/images/OrganizationElemnts.svg +3 -3
  678. package/lib/assets/docs/reference/images/PPM.drawio.svg +3 -3
  679. package/lib/assets/docs/reference/images/PositioningMap.drawio.svg +3 -3
  680. package/lib/assets/docs/reference/images/ProductLayer.drawio.svg +3 -3
  681. package/lib/assets/docs/reference/images/ProductMix.drawio.svg +3 -3
  682. package/lib/assets/docs/reference/images/SWOT.drawio.svg +3 -3
  683. package/lib/assets/docs/reference/images/TargetMarket.drawio.svg +3 -3
  684. package/lib/assets/docs/reference/images/ThreeGenericStrategies.drawio.svg +3 -3
  685. package/lib/assets/docs/reference/images/VRIO.drawio.svg +3 -3
  686. package/lib/assets/docs/reference/images/ValueChain.drawio.svg +3 -3
  687. package/lib/assets/docs/reference/index.md +53 -53
  688. 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
  689. 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
  690. 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
  691. 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
  692. 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
  693. 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
  694. 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
  695. 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
  696. 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
  697. 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
  698. 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
  699. 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
  700. 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
  701. package/lib/assets/docs/reference//344/274/201/346/245/255/347/265/214/345/226/266/350/253/226.md +2637 -2637
  702. 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
  703. 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
  704. 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
  705. 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
  706. package/lib/assets/docs/reference//351/201/213/345/226/266/347/256/241/347/220/206.md +1482 -1482
  707. 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
  708. 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
  709. package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +305 -305
  710. 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
  711. package/lib/assets/docs/requirements/index.md +17 -17
  712. package/lib/assets/docs/review/index.md +5 -5
  713. package/lib/assets/docs/strategy/index.md +17 -17
  714. package/lib/assets/docs/template/ADR.md +30 -30
  715. 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
  716. 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
  717. package/lib/assets/docs/template/README.md +50 -50
  718. package/lib/assets/docs/template/index.md +24 -24
  719. 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
  720. 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
  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/345/256/214/344/272/206/345/240/261/345/221/212/346/233/270.md +58 -58
  722. 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
  723. 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
  724. 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
  725. 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
  726. package/lib/assets/docs/template//344/272/213/344/276/213/345/210/206/346/236/220.md +513 -513
  727. package/lib/assets/docs/template//344/274/201/346/245/255/345/210/206/346/236/220.md +573 -573
  728. 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
  729. package/lib/assets/docs/template//350/246/201/344/273/266/345/256/232/347/276/251.md +669 -669
  730. package/lib/assets/docs/template//350/250/255/350/250/210.md +173 -173
  731. 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
  732. package/lib/assets/gulpfile.js +25 -25
  733. package/lib/assets/mkdocs.yml +139 -139
  734. package/lib/assets/ops/docker/mkdoc/Dockerfile +19 -19
  735. package/lib/assets/ops/docker/sonarqube-local/docker-compose.yml +57 -57
  736. package/lib/assets/ops/scripts/journal.js +180 -180
  737. package/lib/assets/ops/scripts/mkdocs.js +82 -82
  738. package/lib/assets/ops/scripts/release.js +431 -431
  739. package/lib/assets/ops/scripts/sonar_local.js +726 -726
  740. package/lib/assets/ops/scripts/ssh.js +190 -190
  741. package/lib/assets/ops/scripts/vault.js +299 -299
  742. package/lib/assets/package-lock.json +1653 -1653
  743. package/lib/assets/package.json +40 -40
  744. package/lib/gulpfile.js +37 -37
  745. package/package.json +41 -41
@@ -1,665 +1,665 @@
1
- # 環境変数管理ガイド
2
-
3
- このドキュメントでは、プロジェクトで使用する環境変数について説明します。
4
-
5
- ## dotenv とは
6
-
7
- ### 概要
8
-
9
- **dotenv** は、環境変数を `.env` ファイルから読み込むためのライブラリです。アプリケーションの設定値をソースコードから分離し、環境ごとに異なる設定を簡単に管理できます。
10
-
11
- ### なぜ dotenv を使うのか
12
-
13
- 1. **セキュリティ**: パスワードや API キーをソースコードにハードコーディングせず、Git 管理外のファイルで管理
14
- 2. **環境の分離**: 開発・ステージング・本番環境で異なる設定を簡単に切り替え
15
- 3. **チーム開発**: 各開発者が自分の環境に合わせた設定を使用可能
16
- 4. **12-Factor App**: [The Twelve-Factor App](https://12factor.net/ja/config) の設定管理ベストプラクティスに準拠
17
-
18
- ### 仕組み
19
-
20
- ```plantuml
21
- @startuml
22
- title dotenv による環境変数読み込みの流れ
23
-
24
- skinparam rectangle {
25
- BackgroundColor #f5f5f5
26
- BorderColor #333333
27
- }
28
-
29
- rectangle ".env ファイル" as env
30
- rectangle "process.env (Node.js)" as process
31
- rectangle "アプリケーションコード" as app
32
-
33
- env -down-> process : dotenv が読み込み
34
- process -down-> app : アプリケーションで使用
35
-
36
- note right of env
37
- MKDOCS_PORT=8000
38
- DOCKER_HOST=npipe:////./pipe/docker_engine
39
- end note
40
-
41
- note right of process
42
- process.env.MKDOCS_PORT
43
- process.env.DOCKER_HOST
44
- end note
45
-
46
- note right of app
47
- const port = process.env.MKDOCS_PORT;
48
- end note
49
-
50
- @enduml
51
- ```
52
-
53
- ## セットアップ方法
54
-
55
- ### 1. パッケージのインストール
56
-
57
- ```bash
58
- npm install dotenv
59
- ```
60
-
61
- ### 2. .env ファイルの作成
62
-
63
- ```bash
64
- # テンプレートからコピー
65
- cp .env.example .env
66
-
67
- # または新規作成
68
- touch .env
69
- ```
70
-
71
- ### 3. .env ファイルの編集
72
-
73
- ```bash
74
- # プロジェクトルート/.env
75
- MKDOCS_PORT=8000
76
- ```
77
-
78
- ### 4. アプリケーションでの読み込み
79
-
80
- ```javascript
81
- // 方法1: エントリーポイントの先頭でインポート(推奨)
82
- import 'dotenv/config';
83
-
84
- // 方法2: 明示的に config() を呼び出し
85
- import * as dotenv from 'dotenv';
86
- dotenv.config();
87
-
88
- // 環境変数を使用
89
- const port = process.env.MKDOCS_PORT || 8000;
90
- ```
91
-
92
- ### 5. .gitignore に追加
93
-
94
- ```gitignore
95
- # .gitignore
96
- .env
97
- .env.local
98
- .env.*.local
99
- ```
100
-
101
- ## 環境変数ファイル一覧
102
-
103
- | ファイル | 用途 | Git 管理 |
104
- |---------|------|----------|
105
- | `.env` | ローカル開発用設定 | ✗ |
106
- | `.env.example` | 設定テンプレート | ✓ |
107
-
108
- ## プロジェクト環境変数
109
-
110
- ### Docker 設定
111
-
112
- | 変数名 | 説明 | デフォルト値 |
113
- |--------|------|-------------|
114
- | `DOCKER_HOST` | Docker デーモンへの接続先 | (システム依存) |
115
-
116
- ### MkDocs 設定
117
-
118
- | 変数名 | 説明 | デフォルト値 |
119
- |--------|------|-------------|
120
- | `MKDOCS_PORT` | MkDocs サーバーのポート番号 | `8000` |
121
-
122
- ## 重要な注意事項
123
-
124
- ### DOCKER_HOST 環境変数について
125
-
126
- Docker Desktop 使用時に `DOCKER_HOST` 環境変数が不正に設定されていると接続エラーが発生します。
127
-
128
- ```
129
- ERROR: error during connect: Head "http://.%2Fpipe%2Fdocker_engine/_ping":
130
- open ./pipe/docker_engine: The system cannot find the path specified.
131
- ```
132
-
133
- **Windows 環境での正しい設定:**
134
-
135
- ```bash
136
- # 正しい形式
137
- DOCKER_HOST=npipe:////./pipe/docker_engine
138
-
139
- # 誤った形式(エラーになる)
140
- DOCKER_HOST=npipe://./pipe/docker_engine
141
- ```
142
-
143
- **解決方法:**
144
-
145
- ```bash
146
- # 環境変数を削除(Docker Desktop が自動設定する)
147
- unset DOCKER_HOST
148
- ```
149
-
150
- > **注意**: 本プロジェクトの gulp タスクは Windows 環境で自動的に `DOCKER_HOST` を正規化します。
151
-
152
- ### セキュリティに関する注意
153
-
154
- - `.env` ファイルは Git にコミットしないでください
155
- - 機密情報(API キー、パスワード等)は `.env` ファイルで管理してください
156
- - 本番環境では環境変数を直接設定することを推奨します
157
-
158
- ## .env ファイルの読み込み優先順位
159
-
160
- ```plantuml
161
- @startuml
162
- title Node.js (dotenv) 読み込み優先順位
163
-
164
- skinparam defaultTextAlignment center
165
-
166
- rectangle "1. シェル環境変数\n(最優先)" as shell #ff9999
167
- rectangle "2. .env.local\n(Git 管理外)" as local #ffcc99
168
- rectangle "3. .env\n(ローカル設定)" as env #99ff99
169
-
170
- shell -[hidden]down-> local
171
- local -[hidden]down-> env
172
-
173
- note right of shell : 既存の環境変数は上書きされない
174
- note right of local : ローカル固有の設定
175
- note right of env : デフォルト値
176
-
177
- @enduml
178
- ```
179
-
180
- ## .env ファイルの書き方
181
-
182
- ```bash
183
- # コメントは # で始める
184
-
185
- # 基本的な書き方
186
- KEY=value
187
-
188
- # 値にスペースを含む場合はクォートで囲む
189
- MESSAGE="Hello World"
190
-
191
- # 変数の展開(dotenv-expand が必要)
192
- BASE_URL=http://localhost
193
- API_URL=${BASE_URL}/api
194
- ```
195
-
196
- ## ベストプラクティス
197
-
198
- | Do | Don't |
199
- |----|-------|
200
- | `.env.example` をテンプレートとして Git 管理 | `.env` を Git にコミット |
201
- | 本番環境では環境変数を直接設定 | 本番環境で `.env` ファイルを使用 |
202
- | 変数名は `SCREAMING_SNAKE_CASE` を使用 | 小文字や camelCase を使用 |
203
- | デフォルト値をコードで設定 | `.env` ファイルのみに依存 |
204
-
205
- ```javascript
206
- // デフォルト値の設定例
207
- const port = process.env.MKDOCS_PORT || 8000;
208
- const nodeEnv = process.env.NODE_ENV || 'development';
209
- ```
210
-
211
- ## Vault(暗号化・復号化)
212
-
213
- ### 概要
214
-
215
- Vault は `.env` ファイルを安全に暗号化・復号化するためのツールです。暗号化されたファイル(`.env.vault`)は Git にコミットでき、チームメンバー間で安全に環境変数を共有できます。
216
-
217
- ### なぜ Vault を使うのか
218
-
219
- 1. **チーム間での秘密情報共有**: `.env` を直接共有せず、暗号化して Git 管理
220
- 2. **環境の再現性**: 新しいメンバーがすぐに開発環境を構築可能
221
- 3. **セキュリティ**: AES-256-GCM による強力な暗号化
222
- 4. **シンプルさ**: 外部サービス不要、パスワードのみで運用
223
-
224
- ### 暗号化仕様
225
-
226
- ```plantuml
227
- @startuml
228
- title Vault 暗号化の仕組み
229
-
230
- skinparam rectangle {
231
- BackgroundColor #f5f5f5
232
- BorderColor #333333
233
- }
234
-
235
- rectangle "パスワード" as password
236
- rectangle "ソルト\n(32バイト乱数)" as salt
237
- rectangle "PBKDF2\n(SHA-512, 100,000回)" as pbkdf2
238
- rectangle "暗号化キー\n(256ビット)" as key
239
- rectangle "IV\n(16バイト乱数)" as iv
240
- rectangle "AES-256-GCM" as aes
241
- rectangle ".env\n(平文)" as plaintext
242
- rectangle ".env.vault\n(暗号文)" as ciphertext
243
-
244
- password -down-> pbkdf2
245
- salt -down-> pbkdf2
246
- pbkdf2 -down-> key
247
- key -down-> aes
248
- iv -down-> aes
249
- plaintext -right-> aes
250
- aes -down-> ciphertext
251
-
252
- note right of pbkdf2
253
- 100,000回のイテレーションで
254
- ブルートフォース攻撃を困難に
255
- end note
256
-
257
- note right of aes
258
- 認証付き暗号(AEAD)
259
- 改ざん検知機能付き
260
- end note
261
-
262
- @enduml
263
- ```
264
-
265
- | 項目 | 値 |
266
- |------|-----|
267
- | 暗号化アルゴリズム | AES-256-GCM(認証付き暗号) |
268
- | 鍵導出関数 | PBKDF2-SHA512 |
269
- | イテレーション回数 | 100,000 回 |
270
- | ソルト長 | 32 バイト(毎回ランダム生成) |
271
- | IV(初期化ベクトル)長 | 16 バイト(毎回ランダム生成) |
272
- | 認証タグ長 | 16 バイト |
273
-
274
- ### .env.vault ファイル形式
275
-
276
- 暗号化されたファイルはバイナリ形式で、以下の構造を持ちます:
277
-
278
- ```
279
- +------------------+
280
- | Salt (32 bytes) |
281
- +------------------+
282
- | IV (16 bytes) |
283
- +------------------+
284
- | AuthTag (16 bytes)|
285
- +------------------+
286
- | Ciphertext |
287
- | (可変長) |
288
- +------------------+
289
- ```
290
-
291
- ### コマンド詳細
292
-
293
- #### vault:encrypt
294
-
295
- `.env` ファイルを暗号化して `.env.vault` を作成します。
296
-
297
- ```bash
298
- npm run vault:encrypt
299
- ```
300
-
301
- **動作フロー:**
302
-
303
- ```plantuml
304
- @startuml
305
- title vault:encrypt の動作フロー
306
-
307
- start
308
- :.env ファイルの存在確認;
309
-
310
- if (.env が存在する?) then (yes)
311
- :パスワード入力を要求;
312
- :パスワード確認入力を要求;
313
-
314
- if (パスワードが一致?) then (yes)
315
- if (8文字以上?) then (yes)
316
- :ソルトを生成(32バイト乱数);
317
- :PBKDF2で暗号化キーを導出;
318
- :IVを生成(16バイト乱数);
319
- :AES-256-GCMで暗号化;
320
- :.env.vault を出力;
321
- :成功メッセージを表示;
322
- else (no)
323
- :エラー: パスワードが短すぎる;
324
- stop
325
- endif
326
- else (no)
327
- :エラー: パスワードが一致しない;
328
- stop
329
- endif
330
- else (no)
331
- :エラー: .env が見つからない;
332
- stop
333
- endif
334
-
335
- stop
336
- @enduml
337
- ```
338
-
339
- **オプション:**
340
-
341
- | 環境変数 | 説明 |
342
- |---------|------|
343
- | `VAULT_PASSWORD` | パスワードを事前に指定(対話入力をスキップ) |
344
-
345
- **例:**
346
-
347
- ```bash
348
- # 対話的にパスワードを入力
349
- npm run vault:encrypt
350
-
351
- # 環境変数でパスワードを指定(CI/CD 用)
352
- VAULT_PASSWORD=my-secret-password npm run vault:encrypt
353
- ```
354
-
355
- ---
356
-
357
- #### vault:decrypt
358
-
359
- `.env.vault` ファイルを復号化して `.env` を復元します。
360
-
361
- ```bash
362
- npm run vault:decrypt
363
- ```
364
-
365
- **動作フロー:**
366
-
367
- ```plantuml
368
- @startuml
369
- title vault:decrypt の動作フロー
370
-
371
- start
372
- :.env.vault ファイルの存在確認;
373
-
374
- if (.env.vault が存在する?) then (yes)
375
- if (.env が既に存在する?) then (yes)
376
- :上書き確認を表示;
377
- if (上書きを許可?) then (yes)
378
- else (no)
379
- :処理を中止;
380
- stop
381
- endif
382
- endif
383
-
384
- :パスワード入力を要求;
385
- :暗号化ファイルを読み込み;
386
- :ソルト・IV・認証タグを抽出;
387
- :PBKDF2で暗号化キーを導出;
388
-
389
- if (復号化成功?) then (yes)
390
- :.env を出力;
391
- :成功メッセージを表示;
392
- else (no)
393
- :エラー: パスワードが正しくない;
394
- stop
395
- endif
396
- else (no)
397
- :エラー: .env.vault が見つからない;
398
- stop
399
- endif
400
-
401
- stop
402
- @enduml
403
- ```
404
-
405
- **例:**
406
-
407
- ```bash
408
- # 対話的にパスワードを入力
409
- npm run vault:decrypt
410
-
411
- # 環境変数でパスワードを指定
412
- VAULT_PASSWORD=my-secret-password npm run vault:decrypt
413
- ```
414
-
415
- ---
416
-
417
- #### vault:view
418
-
419
- `.env.vault` の内容を復号化して表示します。ファイルは作成されません。
420
-
421
- ```bash
422
- npm run vault:view
423
- ```
424
-
425
- **用途:**
426
-
427
- - 暗号化された内容を確認したいが、`.env` ファイルを作成したくない場合
428
- - CI/CD パイプラインでのデバッグ
429
- - 復号化前の内容確認
430
-
431
- **例:**
432
-
433
- ```bash
434
- # 内容を確認
435
- npm run vault:view
436
-
437
- # 出力例:
438
- # --- .env.vault contents ---
439
- #
440
- # DATABASE_URL=mysql://user:pass@localhost:3306/mydb
441
- # API_KEY=sk-xxxxxxxxxxxx
442
- #
443
- # --- end ---
444
- ```
445
-
446
- ---
447
-
448
- #### vault:rekey
449
-
450
- 現在のパスワードで復号化し、新しいパスワードで再暗号化します。
451
-
452
- ```bash
453
- npm run vault:rekey
454
- ```
455
-
456
- **動作フロー:**
457
-
458
- ```plantuml
459
- @startuml
460
- title vault:rekey の動作フロー
461
-
462
- start
463
- :.env.vault ファイルの存在確認;
464
-
465
- if (.env.vault が存在する?) then (yes)
466
- :現在のパスワード入力を要求;
467
-
468
- if (復号化成功?) then (yes)
469
- :新しいパスワード入力を要求;
470
- :新しいパスワード確認入力を要求;
471
-
472
- if (パスワードが一致 & 8文字以上?) then (yes)
473
- :新しいソルト・IVを生成;
474
- :新しいパスワードで再暗号化;
475
- :.env.vault を上書き;
476
- :成功メッセージを表示;
477
- else (no)
478
- :エラー: パスワード要件を満たさない;
479
- stop
480
- endif
481
- else (no)
482
- :エラー: 現在のパスワードが正しくない;
483
- stop
484
- endif
485
- else (no)
486
- :エラー: .env.vault が見つからない;
487
- stop
488
- endif
489
-
490
- stop
491
- @enduml
492
- ```
493
-
494
- **用途:**
495
-
496
- - 定期的なパスワードローテーション
497
- - チームメンバーの退職時
498
- - パスワード漏洩の疑いがある場合
499
-
500
- ### 使い方
501
-
502
- #### 初回セットアップ(暗号化)
503
-
504
- ```bash
505
- # 1. .env ファイルを作成・編集
506
- cp .env.example .env
507
- vim .env
508
-
509
- # 2. 暗号化(パスワード入力を求められる)
510
- npm run vault:encrypt
511
- # New vault password: ********
512
- # Confirm vault password: ********
513
- # Encrypted .env -> .env.vault
514
-
515
- # 3. 暗号化ファイルをコミット
516
- git add .env.vault
517
- git commit -m "Add encrypted environment file"
518
- ```
519
-
520
- #### 別の環境での復元(復号化)
521
-
522
- ```bash
523
- # 1. リポジトリをクローン
524
- git clone <repository>
525
- cd <project>
526
-
527
- # 2. 依存関係をインストール
528
- npm install
529
-
530
- # 3. 暗号化ファイルを復号化(パスワード入力を求められる)
531
- npm run vault:decrypt
532
- # Vault password: ********
533
- # Decrypted .env.vault -> .env
534
- ```
535
-
536
- #### CI/CD での使用
537
-
538
- ```yaml
539
- # GitHub Actions の例
540
- jobs:
541
- deploy:
542
- runs-on: ubuntu-latest
543
- steps:
544
- - uses: actions/checkout@v4
545
- - uses: actions/setup-node@v4
546
- with:
547
- node-version: '20'
548
- - run: npm install
549
- - run: npm run vault:decrypt
550
- env:
551
- VAULT_PASSWORD: ${{ secrets.VAULT_PASSWORD }}
552
- - run: npm run deploy
553
- ```
554
-
555
- #### パスワードの変更
556
-
557
- ```bash
558
- # 現在のパスワードと新しいパスワードを入力
559
- npm run vault:rekey
560
- # Enter current password:
561
- # Current vault password: ********
562
- #
563
- # Enter new password:
564
- # New vault password: ********
565
- # Confirm vault password: ********
566
- # Re-encrypted .env.vault with new password.
567
- ```
568
-
569
- ### ワークフロー
570
-
571
- ```plantuml
572
- @startuml
573
- title Vault ワークフロー
574
-
575
- actor 開発者A as devA
576
- actor 開発者B as devB
577
- database Git as git
578
-
579
- devA -> devA: .env を編集
580
- devA -> devA: npm run vault:encrypt
581
- devA -> git: .env.vault をコミット
582
-
583
- git -> devB: git pull
584
- devB -> devB: npm run vault:decrypt
585
- devB -> devB: .env が復元される
586
-
587
- note right of devA
588
- パスワードは安全な方法で
589
- チームに共有
590
- end note
591
-
592
- @enduml
593
- ```
594
-
595
- ### セキュリティのベストプラクティス
596
-
597
- | Do | Don't |
598
- |----|-------|
599
- | 8 文字以上の強力なパスワードを使用 | 短い・推測しやすいパスワードを使用 |
600
- | パスワードを安全な方法で共有(1Password など) | パスワードを Slack やメールで送信 |
601
- | `.env.vault` を Git にコミット | `.env` を Git にコミット |
602
- | 定期的にパスワードを変更(vault:rekey) | 同じパスワードを長期間使用 |
603
- | CI/CD では Secrets 機能を使用 | CI/CD ログにパスワードを出力 |
604
-
605
- ### 注意事項
606
-
607
- - パスワードを忘れると復号化できなくなります(復旧不可)
608
- - `.env.vault` を Git に追加しても `.env` は `.gitignore` で除外されています
609
- - CI/CD 環境では `VAULT_PASSWORD` 環境変数を使用してください
610
- - 同じ内容でも暗号化するたびに異なる出力になります(ソルトとIVがランダム)
611
-
612
- ### Vault トラブルシューティング
613
-
614
- #### 復号化に失敗する
615
-
616
- ```
617
- Error: Invalid password
618
- ```
619
-
620
- **原因:** パスワードが正しくない
621
-
622
- **解決策:**
623
-
624
- 1. パスワードを再確認
625
- 2. Caps Lock がオフになっているか確認
626
- 3. パスワードマネージャーから正しいパスワードをコピー
627
-
628
- #### .env.vault が見つからない
629
-
630
- ```
631
- Error: .env.vault not found
632
- ```
633
-
634
- **原因:** 暗号化ファイルが存在しない
635
-
636
- **解決策:**
637
-
638
- 1. `git pull` で最新を取得
639
- 2. `.env.vault` がコミットされているか確認
640
- 3. まだ暗号化されていない場合は `vault:encrypt` を実行
641
-
642
- #### パスワードが短すぎる
643
-
644
- ```
645
- Error: Password must be at least 8 characters
646
- ```
647
-
648
- **原因:** 8 文字未満のパスワードを入力
649
-
650
- **解決策:**
651
- 8 文字以上のパスワードを使用してください。推奨は 12 文字以上。
652
-
653
- ## トラブルシューティング
654
-
655
- ### 環境変数が読み込まれない
656
-
657
- 1. `.env` ファイルがプロジェクトルートにあるか確認
658
- 2. `dotenv/config` がエントリーポイントの先頭でインポートされているか確認
659
- 3. 変数名にタイポがないか確認
660
-
661
- ### Docker 接続エラー
662
-
663
- 1. Docker Desktop が起動しているか確認
664
- 2. `DOCKER_HOST` 環境変数が正しく設定されているか確認
665
- 3. 必要に応じて `unset DOCKER_HOST` を実行
1
+ # 環境変数管理ガイド
2
+
3
+ このドキュメントでは、プロジェクトで使用する環境変数について説明します。
4
+
5
+ ## dotenv とは
6
+
7
+ ### 概要
8
+
9
+ **dotenv** は、環境変数を `.env` ファイルから読み込むためのライブラリです。アプリケーションの設定値をソースコードから分離し、環境ごとに異なる設定を簡単に管理できます。
10
+
11
+ ### なぜ dotenv を使うのか
12
+
13
+ 1. **セキュリティ**: パスワードや API キーをソースコードにハードコーディングせず、Git 管理外のファイルで管理
14
+ 2. **環境の分離**: 開発・ステージング・本番環境で異なる設定を簡単に切り替え
15
+ 3. **チーム開発**: 各開発者が自分の環境に合わせた設定を使用可能
16
+ 4. **12-Factor App**: [The Twelve-Factor App](https://12factor.net/ja/config) の設定管理ベストプラクティスに準拠
17
+
18
+ ### 仕組み
19
+
20
+ ```plantuml
21
+ @startuml
22
+ title dotenv による環境変数読み込みの流れ
23
+
24
+ skinparam rectangle {
25
+ BackgroundColor #f5f5f5
26
+ BorderColor #333333
27
+ }
28
+
29
+ rectangle ".env ファイル" as env
30
+ rectangle "process.env (Node.js)" as process
31
+ rectangle "アプリケーションコード" as app
32
+
33
+ env -down-> process : dotenv が読み込み
34
+ process -down-> app : アプリケーションで使用
35
+
36
+ note right of env
37
+ MKDOCS_PORT=8000
38
+ DOCKER_HOST=npipe:////./pipe/docker_engine
39
+ end note
40
+
41
+ note right of process
42
+ process.env.MKDOCS_PORT
43
+ process.env.DOCKER_HOST
44
+ end note
45
+
46
+ note right of app
47
+ const port = process.env.MKDOCS_PORT;
48
+ end note
49
+
50
+ @enduml
51
+ ```
52
+
53
+ ## セットアップ方法
54
+
55
+ ### 1. パッケージのインストール
56
+
57
+ ```bash
58
+ npm install dotenv
59
+ ```
60
+
61
+ ### 2. .env ファイルの作成
62
+
63
+ ```bash
64
+ # テンプレートからコピー
65
+ cp .env.example .env
66
+
67
+ # または新規作成
68
+ touch .env
69
+ ```
70
+
71
+ ### 3. .env ファイルの編集
72
+
73
+ ```bash
74
+ # プロジェクトルート/.env
75
+ MKDOCS_PORT=8000
76
+ ```
77
+
78
+ ### 4. アプリケーションでの読み込み
79
+
80
+ ```javascript
81
+ // 方法1: エントリーポイントの先頭でインポート(推奨)
82
+ import 'dotenv/config';
83
+
84
+ // 方法2: 明示的に config() を呼び出し
85
+ import * as dotenv from 'dotenv';
86
+ dotenv.config();
87
+
88
+ // 環境変数を使用
89
+ const port = process.env.MKDOCS_PORT || 8000;
90
+ ```
91
+
92
+ ### 5. .gitignore に追加
93
+
94
+ ```gitignore
95
+ # .gitignore
96
+ .env
97
+ .env.local
98
+ .env.*.local
99
+ ```
100
+
101
+ ## 環境変数ファイル一覧
102
+
103
+ | ファイル | 用途 | Git 管理 |
104
+ |---------|------|----------|
105
+ | `.env` | ローカル開発用設定 | ✗ |
106
+ | `.env.example` | 設定テンプレート | ✓ |
107
+
108
+ ## プロジェクト環境変数
109
+
110
+ ### Docker 設定
111
+
112
+ | 変数名 | 説明 | デフォルト値 |
113
+ |--------|------|-------------|
114
+ | `DOCKER_HOST` | Docker デーモンへの接続先 | (システム依存) |
115
+
116
+ ### MkDocs 設定
117
+
118
+ | 変数名 | 説明 | デフォルト値 |
119
+ |--------|------|-------------|
120
+ | `MKDOCS_PORT` | MkDocs サーバーのポート番号 | `8000` |
121
+
122
+ ## 重要な注意事項
123
+
124
+ ### DOCKER_HOST 環境変数について
125
+
126
+ Docker Desktop 使用時に `DOCKER_HOST` 環境変数が不正に設定されていると接続エラーが発生します。
127
+
128
+ ```
129
+ ERROR: error during connect: Head "http://.%2Fpipe%2Fdocker_engine/_ping":
130
+ open ./pipe/docker_engine: The system cannot find the path specified.
131
+ ```
132
+
133
+ **Windows 環境での正しい設定:**
134
+
135
+ ```bash
136
+ # 正しい形式
137
+ DOCKER_HOST=npipe:////./pipe/docker_engine
138
+
139
+ # 誤った形式(エラーになる)
140
+ DOCKER_HOST=npipe://./pipe/docker_engine
141
+ ```
142
+
143
+ **解決方法:**
144
+
145
+ ```bash
146
+ # 環境変数を削除(Docker Desktop が自動設定する)
147
+ unset DOCKER_HOST
148
+ ```
149
+
150
+ > **注意**: 本プロジェクトの gulp タスクは Windows 環境で自動的に `DOCKER_HOST` を正規化します。
151
+
152
+ ### セキュリティに関する注意
153
+
154
+ - `.env` ファイルは Git にコミットしないでください
155
+ - 機密情報(API キー、パスワード等)は `.env` ファイルで管理してください
156
+ - 本番環境では環境変数を直接設定することを推奨します
157
+
158
+ ## .env ファイルの読み込み優先順位
159
+
160
+ ```plantuml
161
+ @startuml
162
+ title Node.js (dotenv) 読み込み優先順位
163
+
164
+ skinparam defaultTextAlignment center
165
+
166
+ rectangle "1. シェル環境変数\n(最優先)" as shell #ff9999
167
+ rectangle "2. .env.local\n(Git 管理外)" as local #ffcc99
168
+ rectangle "3. .env\n(ローカル設定)" as env #99ff99
169
+
170
+ shell -[hidden]down-> local
171
+ local -[hidden]down-> env
172
+
173
+ note right of shell : 既存の環境変数は上書きされない
174
+ note right of local : ローカル固有の設定
175
+ note right of env : デフォルト値
176
+
177
+ @enduml
178
+ ```
179
+
180
+ ## .env ファイルの書き方
181
+
182
+ ```bash
183
+ # コメントは # で始める
184
+
185
+ # 基本的な書き方
186
+ KEY=value
187
+
188
+ # 値にスペースを含む場合はクォートで囲む
189
+ MESSAGE="Hello World"
190
+
191
+ # 変数の展開(dotenv-expand が必要)
192
+ BASE_URL=http://localhost
193
+ API_URL=${BASE_URL}/api
194
+ ```
195
+
196
+ ## ベストプラクティス
197
+
198
+ | Do | Don't |
199
+ |----|-------|
200
+ | `.env.example` をテンプレートとして Git 管理 | `.env` を Git にコミット |
201
+ | 本番環境では環境変数を直接設定 | 本番環境で `.env` ファイルを使用 |
202
+ | 変数名は `SCREAMING_SNAKE_CASE` を使用 | 小文字や camelCase を使用 |
203
+ | デフォルト値をコードで設定 | `.env` ファイルのみに依存 |
204
+
205
+ ```javascript
206
+ // デフォルト値の設定例
207
+ const port = process.env.MKDOCS_PORT || 8000;
208
+ const nodeEnv = process.env.NODE_ENV || 'development';
209
+ ```
210
+
211
+ ## Vault(暗号化・復号化)
212
+
213
+ ### 概要
214
+
215
+ Vault は `.env` ファイルを安全に暗号化・復号化するためのツールです。暗号化されたファイル(`.env.vault`)は Git にコミットでき、チームメンバー間で安全に環境変数を共有できます。
216
+
217
+ ### なぜ Vault を使うのか
218
+
219
+ 1. **チーム間での秘密情報共有**: `.env` を直接共有せず、暗号化して Git 管理
220
+ 2. **環境の再現性**: 新しいメンバーがすぐに開発環境を構築可能
221
+ 3. **セキュリティ**: AES-256-GCM による強力な暗号化
222
+ 4. **シンプルさ**: 外部サービス不要、パスワードのみで運用
223
+
224
+ ### 暗号化仕様
225
+
226
+ ```plantuml
227
+ @startuml
228
+ title Vault 暗号化の仕組み
229
+
230
+ skinparam rectangle {
231
+ BackgroundColor #f5f5f5
232
+ BorderColor #333333
233
+ }
234
+
235
+ rectangle "パスワード" as password
236
+ rectangle "ソルト\n(32バイト乱数)" as salt
237
+ rectangle "PBKDF2\n(SHA-512, 100,000回)" as pbkdf2
238
+ rectangle "暗号化キー\n(256ビット)" as key
239
+ rectangle "IV\n(16バイト乱数)" as iv
240
+ rectangle "AES-256-GCM" as aes
241
+ rectangle ".env\n(平文)" as plaintext
242
+ rectangle ".env.vault\n(暗号文)" as ciphertext
243
+
244
+ password -down-> pbkdf2
245
+ salt -down-> pbkdf2
246
+ pbkdf2 -down-> key
247
+ key -down-> aes
248
+ iv -down-> aes
249
+ plaintext -right-> aes
250
+ aes -down-> ciphertext
251
+
252
+ note right of pbkdf2
253
+ 100,000回のイテレーションで
254
+ ブルートフォース攻撃を困難に
255
+ end note
256
+
257
+ note right of aes
258
+ 認証付き暗号(AEAD)
259
+ 改ざん検知機能付き
260
+ end note
261
+
262
+ @enduml
263
+ ```
264
+
265
+ | 項目 | 値 |
266
+ |------|-----|
267
+ | 暗号化アルゴリズム | AES-256-GCM(認証付き暗号) |
268
+ | 鍵導出関数 | PBKDF2-SHA512 |
269
+ | イテレーション回数 | 100,000 回 |
270
+ | ソルト長 | 32 バイト(毎回ランダム生成) |
271
+ | IV(初期化ベクトル)長 | 16 バイト(毎回ランダム生成) |
272
+ | 認証タグ長 | 16 バイト |
273
+
274
+ ### .env.vault ファイル形式
275
+
276
+ 暗号化されたファイルはバイナリ形式で、以下の構造を持ちます:
277
+
278
+ ```
279
+ +------------------+
280
+ | Salt (32 bytes) |
281
+ +------------------+
282
+ | IV (16 bytes) |
283
+ +------------------+
284
+ | AuthTag (16 bytes)|
285
+ +------------------+
286
+ | Ciphertext |
287
+ | (可変長) |
288
+ +------------------+
289
+ ```
290
+
291
+ ### コマンド詳細
292
+
293
+ #### vault:encrypt
294
+
295
+ `.env` ファイルを暗号化して `.env.vault` を作成します。
296
+
297
+ ```bash
298
+ npm run vault:encrypt
299
+ ```
300
+
301
+ **動作フロー:**
302
+
303
+ ```plantuml
304
+ @startuml
305
+ title vault:encrypt の動作フロー
306
+
307
+ start
308
+ :.env ファイルの存在確認;
309
+
310
+ if (.env が存在する?) then (yes)
311
+ :パスワード入力を要求;
312
+ :パスワード確認入力を要求;
313
+
314
+ if (パスワードが一致?) then (yes)
315
+ if (8文字以上?) then (yes)
316
+ :ソルトを生成(32バイト乱数);
317
+ :PBKDF2で暗号化キーを導出;
318
+ :IVを生成(16バイト乱数);
319
+ :AES-256-GCMで暗号化;
320
+ :.env.vault を出力;
321
+ :成功メッセージを表示;
322
+ else (no)
323
+ :エラー: パスワードが短すぎる;
324
+ stop
325
+ endif
326
+ else (no)
327
+ :エラー: パスワードが一致しない;
328
+ stop
329
+ endif
330
+ else (no)
331
+ :エラー: .env が見つからない;
332
+ stop
333
+ endif
334
+
335
+ stop
336
+ @enduml
337
+ ```
338
+
339
+ **オプション:**
340
+
341
+ | 環境変数 | 説明 |
342
+ |---------|------|
343
+ | `VAULT_PASSWORD` | パスワードを事前に指定(対話入力をスキップ) |
344
+
345
+ **例:**
346
+
347
+ ```bash
348
+ # 対話的にパスワードを入力
349
+ npm run vault:encrypt
350
+
351
+ # 環境変数でパスワードを指定(CI/CD 用)
352
+ VAULT_PASSWORD=my-secret-password npm run vault:encrypt
353
+ ```
354
+
355
+ ---
356
+
357
+ #### vault:decrypt
358
+
359
+ `.env.vault` ファイルを復号化して `.env` を復元します。
360
+
361
+ ```bash
362
+ npm run vault:decrypt
363
+ ```
364
+
365
+ **動作フロー:**
366
+
367
+ ```plantuml
368
+ @startuml
369
+ title vault:decrypt の動作フロー
370
+
371
+ start
372
+ :.env.vault ファイルの存在確認;
373
+
374
+ if (.env.vault が存在する?) then (yes)
375
+ if (.env が既に存在する?) then (yes)
376
+ :上書き確認を表示;
377
+ if (上書きを許可?) then (yes)
378
+ else (no)
379
+ :処理を中止;
380
+ stop
381
+ endif
382
+ endif
383
+
384
+ :パスワード入力を要求;
385
+ :暗号化ファイルを読み込み;
386
+ :ソルト・IV・認証タグを抽出;
387
+ :PBKDF2で暗号化キーを導出;
388
+
389
+ if (復号化成功?) then (yes)
390
+ :.env を出力;
391
+ :成功メッセージを表示;
392
+ else (no)
393
+ :エラー: パスワードが正しくない;
394
+ stop
395
+ endif
396
+ else (no)
397
+ :エラー: .env.vault が見つからない;
398
+ stop
399
+ endif
400
+
401
+ stop
402
+ @enduml
403
+ ```
404
+
405
+ **例:**
406
+
407
+ ```bash
408
+ # 対話的にパスワードを入力
409
+ npm run vault:decrypt
410
+
411
+ # 環境変数でパスワードを指定
412
+ VAULT_PASSWORD=my-secret-password npm run vault:decrypt
413
+ ```
414
+
415
+ ---
416
+
417
+ #### vault:view
418
+
419
+ `.env.vault` の内容を復号化して表示します。ファイルは作成されません。
420
+
421
+ ```bash
422
+ npm run vault:view
423
+ ```
424
+
425
+ **用途:**
426
+
427
+ - 暗号化された内容を確認したいが、`.env` ファイルを作成したくない場合
428
+ - CI/CD パイプラインでのデバッグ
429
+ - 復号化前の内容確認
430
+
431
+ **例:**
432
+
433
+ ```bash
434
+ # 内容を確認
435
+ npm run vault:view
436
+
437
+ # 出力例:
438
+ # --- .env.vault contents ---
439
+ #
440
+ # DATABASE_URL=mysql://user:pass@localhost:3306/mydb
441
+ # API_KEY=sk-xxxxxxxxxxxx
442
+ #
443
+ # --- end ---
444
+ ```
445
+
446
+ ---
447
+
448
+ #### vault:rekey
449
+
450
+ 現在のパスワードで復号化し、新しいパスワードで再暗号化します。
451
+
452
+ ```bash
453
+ npm run vault:rekey
454
+ ```
455
+
456
+ **動作フロー:**
457
+
458
+ ```plantuml
459
+ @startuml
460
+ title vault:rekey の動作フロー
461
+
462
+ start
463
+ :.env.vault ファイルの存在確認;
464
+
465
+ if (.env.vault が存在する?) then (yes)
466
+ :現在のパスワード入力を要求;
467
+
468
+ if (復号化成功?) then (yes)
469
+ :新しいパスワード入力を要求;
470
+ :新しいパスワード確認入力を要求;
471
+
472
+ if (パスワードが一致 & 8文字以上?) then (yes)
473
+ :新しいソルト・IVを生成;
474
+ :新しいパスワードで再暗号化;
475
+ :.env.vault を上書き;
476
+ :成功メッセージを表示;
477
+ else (no)
478
+ :エラー: パスワード要件を満たさない;
479
+ stop
480
+ endif
481
+ else (no)
482
+ :エラー: 現在のパスワードが正しくない;
483
+ stop
484
+ endif
485
+ else (no)
486
+ :エラー: .env.vault が見つからない;
487
+ stop
488
+ endif
489
+
490
+ stop
491
+ @enduml
492
+ ```
493
+
494
+ **用途:**
495
+
496
+ - 定期的なパスワードローテーション
497
+ - チームメンバーの退職時
498
+ - パスワード漏洩の疑いがある場合
499
+
500
+ ### 使い方
501
+
502
+ #### 初回セットアップ(暗号化)
503
+
504
+ ```bash
505
+ # 1. .env ファイルを作成・編集
506
+ cp .env.example .env
507
+ vim .env
508
+
509
+ # 2. 暗号化(パスワード入力を求められる)
510
+ npm run vault:encrypt
511
+ # New vault password: ********
512
+ # Confirm vault password: ********
513
+ # Encrypted .env -> .env.vault
514
+
515
+ # 3. 暗号化ファイルをコミット
516
+ git add .env.vault
517
+ git commit -m "Add encrypted environment file"
518
+ ```
519
+
520
+ #### 別の環境での復元(復号化)
521
+
522
+ ```bash
523
+ # 1. リポジトリをクローン
524
+ git clone <repository>
525
+ cd <project>
526
+
527
+ # 2. 依存関係をインストール
528
+ npm install
529
+
530
+ # 3. 暗号化ファイルを復号化(パスワード入力を求められる)
531
+ npm run vault:decrypt
532
+ # Vault password: ********
533
+ # Decrypted .env.vault -> .env
534
+ ```
535
+
536
+ #### CI/CD での使用
537
+
538
+ ```yaml
539
+ # GitHub Actions の例
540
+ jobs:
541
+ deploy:
542
+ runs-on: ubuntu-latest
543
+ steps:
544
+ - uses: actions/checkout@v4
545
+ - uses: actions/setup-node@v4
546
+ with:
547
+ node-version: '20'
548
+ - run: npm install
549
+ - run: npm run vault:decrypt
550
+ env:
551
+ VAULT_PASSWORD: ${{ secrets.VAULT_PASSWORD }}
552
+ - run: npm run deploy
553
+ ```
554
+
555
+ #### パスワードの変更
556
+
557
+ ```bash
558
+ # 現在のパスワードと新しいパスワードを入力
559
+ npm run vault:rekey
560
+ # Enter current password:
561
+ # Current vault password: ********
562
+ #
563
+ # Enter new password:
564
+ # New vault password: ********
565
+ # Confirm vault password: ********
566
+ # Re-encrypted .env.vault with new password.
567
+ ```
568
+
569
+ ### ワークフロー
570
+
571
+ ```plantuml
572
+ @startuml
573
+ title Vault ワークフロー
574
+
575
+ actor 開発者A as devA
576
+ actor 開発者B as devB
577
+ database Git as git
578
+
579
+ devA -> devA: .env を編集
580
+ devA -> devA: npm run vault:encrypt
581
+ devA -> git: .env.vault をコミット
582
+
583
+ git -> devB: git pull
584
+ devB -> devB: npm run vault:decrypt
585
+ devB -> devB: .env が復元される
586
+
587
+ note right of devA
588
+ パスワードは安全な方法で
589
+ チームに共有
590
+ end note
591
+
592
+ @enduml
593
+ ```
594
+
595
+ ### セキュリティのベストプラクティス
596
+
597
+ | Do | Don't |
598
+ |----|-------|
599
+ | 8 文字以上の強力なパスワードを使用 | 短い・推測しやすいパスワードを使用 |
600
+ | パスワードを安全な方法で共有(1Password など) | パスワードを Slack やメールで送信 |
601
+ | `.env.vault` を Git にコミット | `.env` を Git にコミット |
602
+ | 定期的にパスワードを変更(vault:rekey) | 同じパスワードを長期間使用 |
603
+ | CI/CD では Secrets 機能を使用 | CI/CD ログにパスワードを出力 |
604
+
605
+ ### 注意事項
606
+
607
+ - パスワードを忘れると復号化できなくなります(復旧不可)
608
+ - `.env.vault` を Git に追加しても `.env` は `.gitignore` で除外されています
609
+ - CI/CD 環境では `VAULT_PASSWORD` 環境変数を使用してください
610
+ - 同じ内容でも暗号化するたびに異なる出力になります(ソルトとIVがランダム)
611
+
612
+ ### Vault トラブルシューティング
613
+
614
+ #### 復号化に失敗する
615
+
616
+ ```
617
+ Error: Invalid password
618
+ ```
619
+
620
+ **原因:** パスワードが正しくない
621
+
622
+ **解決策:**
623
+
624
+ 1. パスワードを再確認
625
+ 2. Caps Lock がオフになっているか確認
626
+ 3. パスワードマネージャーから正しいパスワードをコピー
627
+
628
+ #### .env.vault が見つからない
629
+
630
+ ```
631
+ Error: .env.vault not found
632
+ ```
633
+
634
+ **原因:** 暗号化ファイルが存在しない
635
+
636
+ **解決策:**
637
+
638
+ 1. `git pull` で最新を取得
639
+ 2. `.env.vault` がコミットされているか確認
640
+ 3. まだ暗号化されていない場合は `vault:encrypt` を実行
641
+
642
+ #### パスワードが短すぎる
643
+
644
+ ```
645
+ Error: Password must be at least 8 characters
646
+ ```
647
+
648
+ **原因:** 8 文字未満のパスワードを入力
649
+
650
+ **解決策:**
651
+ 8 文字以上のパスワードを使用してください。推奨は 12 文字以上。
652
+
653
+ ## トラブルシューティング
654
+
655
+ ### 環境変数が読み込まれない
656
+
657
+ 1. `.env` ファイルがプロジェクトルートにあるか確認
658
+ 2. `dotenv/config` がエントリーポイントの先頭でインポートされているか確認
659
+ 3. 変数名にタイポがないか確認
660
+
661
+ ### Docker 接続エラー
662
+
663
+ 1. Docker Desktop が起動しているか確認
664
+ 2. `DOCKER_HOST` 環境変数が正しく設定されているか確認
665
+ 3. 必要に応じて `unset DOCKER_HOST` を実行