@k2works/claude-code-booster 6.3.0 → 6.4.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 (293) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +61 -61
  3. package/bin/claude-code-booster +113 -113
  4. package/lib/assets/.claude/README.md +287 -287
  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/closing-iteration/SKILL.md +176 -176
  33. package/lib/assets/.claude/skills/creating-adr/SKILL.md +117 -117
  34. package/lib/assets/.claude/skills/creating-development-strategy/SKILL.md +151 -127
  35. package/lib/assets/.claude/skills/creating-iteration-report/SKILL.md +210 -210
  36. package/lib/assets/.claude/skills/creating-journal/SKILL.md +140 -140
  37. package/lib/assets/.claude/skills/creating-manual/SKILL.md +199 -199
  38. package/lib/assets/.claude/skills/creating-release-report/SKILL.md +161 -161
  39. package/lib/assets/.claude/skills/creating-slides/SKILL.md +86 -86
  40. package/lib/assets/.claude/skills/creating-slides/agents/openai.yaml +4 -4
  41. package/lib/assets/.claude/skills/creating-slides/references/manga-css.md +45 -45
  42. package/lib/assets/.claude/skills/creating-slides/scripts/slide_tools.py +239 -239
  43. package/lib/assets/.claude/skills/developing-backend/SKILL.md +100 -100
  44. package/lib/assets/.claude/skills/developing-frontend/SKILL.md +93 -93
  45. package/lib/assets/.claude/skills/developing-release/SKILL.md +120 -120
  46. package/lib/assets/.claude/skills/developing-review/SKILL.md +175 -175
  47. package/lib/assets/.claude/skills/developing-uiux-review/SKILL.md +207 -207
  48. package/lib/assets/.claude/skills/generating-bmc/SKILL.md +123 -123
  49. package/lib/assets/.claude/skills/generating-slides/SKILL.md +94 -94
  50. package/lib/assets/.claude/skills/git-commit/SKILL.md +81 -81
  51. package/lib/assets/.claude/skills/killing-processes/SKILL.md +44 -44
  52. package/lib/assets/.claude/skills/migrating-ai-dlc/evals/evals.json +59 -59
  53. package/lib/assets/.claude/skills/opening-iteration/SKILL.md +124 -124
  54. package/lib/assets/.claude/skills/operating-backup/SKILL.md +59 -59
  55. package/lib/assets/.claude/skills/operating-cicd/SKILL.md +54 -54
  56. package/lib/assets/.claude/skills/operating-deploy/SKILL.md +67 -67
  57. package/lib/assets/.claude/skills/operating-docs/SKILL.md +219 -219
  58. package/lib/assets/.claude/skills/operating-provision/SKILL.md +77 -77
  59. package/lib/assets/.claude/skills/operating-qt/SKILL.md +147 -147
  60. package/lib/assets/.claude/skills/operating-review/SKILL.md +171 -171
  61. package/lib/assets/.claude/skills/operating-script/SKILL.md +145 -145
  62. package/lib/assets/.claude/skills/operating-setup/SKILL.md +63 -63
  63. package/lib/assets/.claude/skills/orchestrating-analysis/SKILL.md +110 -110
  64. package/lib/assets/.claude/skills/orchestrating-development/SKILL.md +172 -172
  65. package/lib/assets/.claude/skills/orchestrating-operation/SKILL.md +161 -161
  66. package/lib/assets/.claude/skills/orchestrating-project/SKILL.md +149 -149
  67. package/lib/assets/.claude/skills/planning-releases/SKILL.md +121 -121
  68. package/lib/assets/.claude/skills/practicing-getting-start-tdd/SKILL.md +262 -262
  69. package/lib/assets/.claude/skills/syncing-github-project/SKILL.md +151 -151
  70. package/lib/assets/.claude/skills/tracking-progress/SKILL.md +91 -91
  71. package/lib/assets/.claude/skills/validating-design/SKILL.md +130 -130
  72. package/lib/assets/.claude/skills/validating-iteration-plan/SKILL.md +238 -238
  73. package/lib/assets/.claude/skills/validating-operating-setup/SKILL.md +118 -118
  74. package/lib/assets/.devcontainer/devcontainer.json +37 -37
  75. package/lib/assets/.env.example +32 -32
  76. package/lib/assets/.gitattributes +4 -4
  77. package/lib/assets/.github/workflows/docker-publish.yml +77 -77
  78. package/lib/assets/.github/workflows/mkdocs.yml +39 -39
  79. package/lib/assets/AGENTS.md +102 -102
  80. package/lib/assets/README.md +304 -304
  81. package/lib/assets/docker-compose.yml +33 -33
  82. package/lib/assets/docs/adr/index.md +10 -10
  83. package/lib/assets/docs/article/index.md +2 -1
  84. package/lib/assets/docs/assets/css/extra.css +29 -29
  85. package/lib/assets/docs/assets/js/extra.js +48 -48
  86. package/lib/assets/docs/assets/js/mathjax.js +27 -27
  87. package/lib/assets/docs/design/index.md +44 -44
  88. package/lib/assets/docs/development/index.md +39 -39
  89. package/lib/assets/docs/index.md +1 -1
  90. package/lib/assets/docs/log.md +3 -0
  91. package/lib/assets/docs/operation/index.md +41 -41
  92. package/lib/assets/docs/reference/BDD/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +766 -0
  93. 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 +555 -555
  94. 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 +351 -351
  95. 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 +592 -592
  96. package/lib/assets/docs/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -965
  97. 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 +652 -652
  98. 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 +476 -476
  99. package/lib/assets/docs/reference/UI/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +460 -460
  100. package/lib/assets/docs/reference/Vim/346/223/215/344/275/234/343/203/236/343/203/213/343/203/245/343/202/242/343/203/253.md +177 -177
  101. package/lib/assets/docs/reference/images/Ansoff.drawio.svg +3 -3
  102. package/lib/assets/docs/reference/images/BMC.drawio.svg +3 -3
  103. package/lib/assets/docs/reference/images/BrandBasicStrategy.drawio.svg +3 -3
  104. package/lib/assets/docs/reference/images/BrandCategorization.drawio.svg +3 -3
  105. package/lib/assets/docs/reference/images/BrandRecurutementStrategy.drawio.svg +3 -3
  106. package/lib/assets/docs/reference/images/BrandValue.drawio.svg +3 -3
  107. package/lib/assets/docs/reference/images/BusinessActivitiy.svg +3 -3
  108. package/lib/assets/docs/reference/images/HRM.drawio.svg +3 -3
  109. package/lib/assets/docs/reference/images/MarketingStructure.drawio.svg +3 -3
  110. package/lib/assets/docs/reference/images/OrganizationElemnts.svg +3 -3
  111. package/lib/assets/docs/reference/images/PPM.drawio.svg +3 -3
  112. package/lib/assets/docs/reference/images/PositioningMap.drawio.svg +3 -3
  113. package/lib/assets/docs/reference/images/ProductLayer.drawio.svg +3 -3
  114. package/lib/assets/docs/reference/images/ProductMix.drawio.svg +3 -3
  115. package/lib/assets/docs/reference/images/SWOT.drawio.svg +3 -3
  116. package/lib/assets/docs/reference/images/TargetMarket.drawio.svg +3 -3
  117. package/lib/assets/docs/reference/images/ThreeGenericStrategies.drawio.svg +3 -3
  118. package/lib/assets/docs/reference/images/VRIO.drawio.svg +3 -3
  119. package/lib/assets/docs/reference/images/ValueChain.drawio.svg +3 -3
  120. package/lib/assets/docs/reference/index.md +1 -0
  121. 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
  122. 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 +2226 -2226
  123. 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 +1888 -1888
  124. 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 +549 -549
  125. 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 +715 -715
  126. 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 +1323 -1323
  127. 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 +321 -321
  128. 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 +609 -609
  129. 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 +537 -537
  130. 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 +699 -699
  131. 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 +470 -470
  132. 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
  133. 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 +1376 -1376
  134. package/lib/assets/docs/reference//344/274/201/346/245/255/347/265/214/345/226/266/350/253/226.md +2647 -2647
  135. 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 +675 -675
  136. 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 +575 -575
  137. 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 +1258 -1258
  138. 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 +527 -527
  139. package/lib/assets/docs/reference//351/201/213/345/226/266/347/256/241/347/220/206.md +1492 -1492
  140. 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 +430 -430
  141. 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 +402 -402
  142. package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +314 -314
  143. 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 +1246 -1246
  144. package/lib/assets/docs/requirements/index.md +17 -17
  145. package/lib/assets/docs/review/index.md +5 -5
  146. package/lib/assets/docs/strategy/index.md +17 -17
  147. package/lib/assets/docs/template/ADR.md +39 -39
  148. 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 +1375 -1375
  149. 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 +643 -643
  150. package/lib/assets/docs/template/README.md +59 -59
  151. package/lib/assets/docs/template/index.md +24 -24
  152. 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 +21 -21
  153. 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 +556 -556
  154. 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 +68 -68
  155. 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 +336 -336
  156. 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 +22 -22
  157. 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 +388 -388
  158. 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 +284 -284
  159. package/lib/assets/docs/template//343/203/252/343/203/252/343/203/274/343/202/271/350/250/210/347/224/273.md +289 -289
  160. package/lib/assets/docs/template//344/272/213/344/276/213/345/210/206/346/236/220.md +522 -522
  161. package/lib/assets/docs/template//344/274/201/346/245/255/345/210/206/346/236/220.md +582 -582
  162. 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
  163. package/lib/assets/docs/template//350/246/201/344/273/266/345/256/232/347/276/251.md +669 -669
  164. package/lib/assets/docs/template//350/250/255/350/250/210.md +183 -183
  165. 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 +697 -697
  166. package/lib/assets/gulpfile.js +29 -29
  167. package/lib/assets/mkdocs.yml +147 -138
  168. package/lib/assets/ops/docker/sonarqube-local/docker-compose.yml +57 -57
  169. package/lib/assets/ops/scripts/journal.js +180 -180
  170. package/lib/assets/ops/scripts/mkdocs.js +82 -82
  171. package/lib/assets/ops/scripts/release.js +431 -431
  172. package/lib/assets/ops/scripts/sonar_local.js +726 -726
  173. package/lib/assets/ops/scripts/ssh.js +190 -190
  174. package/lib/assets/ops/scripts/vault.js +299 -299
  175. package/lib/assets/package-lock.json +1673 -1673
  176. package/lib/assets/package.json +45 -45
  177. package/lib/gulpfile.js +37 -37
  178. package/package.json +41 -41
  179. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.json +0 -20
  180. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.md +0 -13
  181. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/eval_metadata.json +0 -14
  182. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/grading.json +0 -39
  183. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/001-db.md +0 -12
  184. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/002-cache-strategy.md +0 -20
  185. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/index.md +0 -4
  186. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/data-model.md +0 -12
  187. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/index.md +0 -3
  188. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/index.md +0 -10
  189. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/log.md +0 -7
  190. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy-old.md +0 -12
  191. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy.md +0 -12
  192. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/index.md +0 -4
  193. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +0 -965
  194. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/report.md +0 -76
  195. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/grading.json +0 -39
  196. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/001-db.md +0 -12
  197. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/002-cache-strategy.md +0 -20
  198. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/index.md +0 -4
  199. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/data-model.md +0 -12
  200. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/index.md +0 -3
  201. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/index.md +0 -10
  202. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/log.md +0 -7
  203. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy-old.md +0 -12
  204. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy.md +0 -12
  205. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/index.md +0 -4
  206. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +0 -965
  207. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/report.md +0 -22
  208. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/eval_metadata.json +0 -13
  209. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/grading.json +0 -34
  210. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/001-db.md +0 -12
  211. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/002-cache-strategy.md +0 -11
  212. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/index.md +0 -3
  213. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/data-model.md +0 -14
  214. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/index.md +0 -3
  215. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/index.md +0 -10
  216. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/log.md +0 -7
  217. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy-old.md +0 -12
  218. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy.md +0 -12
  219. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/index.md +0 -4
  220. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +0 -965
  221. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/report.md +0 -61
  222. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/grading.json +0 -34
  223. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/001-db.md +0 -12
  224. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/002-cache-strategy.md +0 -11
  225. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/index.md +0 -3
  226. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/data-model.md +0 -13
  227. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/index.md +0 -3
  228. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/index.md +0 -10
  229. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/log.md +0 -7
  230. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy-old.md +0 -12
  231. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy.md +0 -12
  232. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/index.md +0 -4
  233. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +0 -965
  234. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/report.md +0 -18
  235. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/eval_metadata.json +0 -13
  236. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/grading.json +0 -34
  237. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/001-db.md +0 -12
  238. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/002-cache-strategy.md +0 -11
  239. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/index.md +0 -3
  240. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/data-model.md +0 -12
  241. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/index.md +0 -3
  242. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/index.md +0 -10
  243. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/log.md +0 -7
  244. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy-old.md +0 -13
  245. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy.md +0 -12
  246. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/index.md +0 -7
  247. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +0 -965
  248. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/report.md +0 -83
  249. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/grading.json +0 -34
  250. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/001-db.md +0 -12
  251. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/002-cache-strategy.md +0 -11
  252. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/index.md +0 -3
  253. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/data-model.md +0 -12
  254. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/index.md +0 -3
  255. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/index.md +0 -10
  256. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/log.md +0 -7
  257. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy-old.md +0 -14
  258. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy.md +0 -12
  259. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/index.md +0 -4
  260. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +0 -965
  261. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/report.md +0 -15
  262. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/review.html +0 -1325
  263. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.json +0 -20
  264. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.md +0 -13
  265. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/eval_metadata.json +0 -15
  266. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/grading.json +0 -44
  267. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/adr/index.md +0 -10
  268. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/index.md +0 -15
  269. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/log.md +0 -5
  270. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +0 -966
  271. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/index.md +0 -6
  272. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +0 -261
  273. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +0 -480
  274. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +0 -681
  275. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/report.md +0 -85
  276. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/grading.json +0 -44
  277. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/adr/index.md +0 -8
  278. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/index.md +0 -11
  279. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/log.md +0 -7
  280. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +0 -964
  281. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/index.md +0 -9
  282. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +0 -250
  283. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +0 -469
  284. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +0 -677
  285. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/report.md +0 -49
  286. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/eval_metadata.json +0 -13
  287. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/grading.json +0 -34
  288. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/index.md +0 -7
  289. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/log.md +0 -7
  290. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/metrics/churn.md +0 -9
  291. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/metrics/income-statement.md +0 -15
  292. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/report.md +0 -147
  293. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/review.html +0 -1325
@@ -1,527 +1,527 @@
1
- ---
2
- type: Reference
3
- title: "言語別開発ガイド"
4
- description: "本プロジェクトでは、Nix を使用して各プログラミング言語の開発環境を個別に提供しています。"
5
- tags: [reference]
6
- status: stable
7
- generated: { by: human:kakimomokuri, at: 2026-04-06T03:31:33Z }
8
- ---
9
-
10
- # 言語別開発ガイド
11
-
12
- 本プロジェクトでは、Nix を使用して各プログラミング言語の開発環境を個別に提供しています。各環境は `nix develop .#<言語名>` コマンドで起動でき、必要なツールや LSP、Vim 設定が自動的に適用されます。
13
-
14
- ## ソフトウェア開発の三種の神器
15
-
16
- 開発を効率的に進めるために、以下の3つの要素を重視します。
17
-
18
- ### 1. バージョン管理 (Git)
19
- 全ての変更は Git で管理し、意味のある単位でコミットします。
20
-
21
- - **コミットメッセージ規約(Angular形式)**:
22
-
23
- `type(scope): subject` の形式で記述します。
24
-
25
- - `feat`:
26
-
27
- 新機能
28
-
29
- - `fix`:
30
-
31
- バグ修正
32
-
33
- - `test`:
34
-
35
- テストの追加・修正
36
-
37
- - `refactor`:
38
-
39
- リファクタリング
40
-
41
- - `chore`:
42
-
43
- 雑事(設定変更等)
44
-
45
- ### 2. テスティング (TDD)
46
- テスト駆動開発 (Test-Driven Development) を実践します。
47
-
48
- 1. **Red**:
49
-
50
- 失敗するテストを書く
51
-
52
- 2. **Green**:
53
-
54
- テストを通す最小限の実装を書く
55
-
56
- 3. **Refactor**:
57
-
58
- コードをきれいに整理する
59
-
60
- ### 3. 自動化
61
- コマンド一つでビルド、テスト、静的解析を実行できるようにします。また、ファイル変更を監視して自動的にテストを実行する「継続的テスト」を活用します。
62
-
63
- ---
64
-
65
- ## 共通の開発フロー
66
-
67
- 1. **環境の起動**:
68
-
69
- `nix develop .#<language>`
70
-
71
- 2. **プロジェクトの初期化**:
72
-
73
- 各言語のパッケージマネージャで初期化
74
-
75
- 3. **Git初期化**:
76
-
77
- `git init` (まだの場合)
78
-
79
- 4. **TDDサイクル**:
80
-
81
- 継続的テストを回しながら実装
82
-
83
- 5. **静的解析**:
84
-
85
- リンターやフォーマッタでコード品質をチェック
86
-
87
- 6. **コミット**:
88
-
89
- `git add .` -> `git commit -m '...'`
90
-
91
- ---
92
-
93
- ## 言語別ガイド
94
-
95
- ### 1. Node.js / TypeScript
96
-
97
- - **起動コマンド**:
98
-
99
- `nix develop .#node`
100
-
101
- - **主要ツール**:
102
-
103
- Node.js (v22), npm, TypeScript, ESLint, Prettier
104
-
105
- - **初期化**:
106
-
107
-
108
- ```bash
109
- npm init -y
110
- ```
111
- - **TDDチュートリアル**:
112
- 1. **Red**: `hello.test.js` を作成。
113
- ```javascript
114
- import assert from 'node:assert';
115
- import { test } from 'node:test';
116
- import { hello } from './hello.js';
117
-
118
- test('hello returns greeting', () => {
119
- assert.strictEqual(hello(), 'Hello,World!');
120
- });
121
- ```
122
- 実行(失敗): `node --test hello.test.js`
123
-
124
- 2. **Green**: `hello.js` を実装。
125
- ```javascript
126
- export function hello() {
127
- return "Hello, World!";
128
- }
129
- ```
130
- 3. **Refactor**: 必要に応じてコードを整理。
131
- - **自動化**:
132
- - `node --watch --test hello.test.js` で変更を監視。
133
-
134
- ### 2. Python
135
- - **起動コマンド**: `nix develop .#python`
136
- - **主要ツール**: Python 3.12, uv, pytest, ruff (Linter/Formatter)
137
- - **初期化**:
138
- ```bash
139
- uv init
140
- uv add --dev pytest ruff
141
- ```
142
- - **TDDチュートリアル**:
143
- 1. **Red**: `test_hello.py` を作成。
144
- ```python
145
- from hello import hello
146
- def test_hello():
147
- assert hello() == "Hello, World!"
148
- ```
149
- 実行(失敗): `uv run pytest`
150
-
151
- 2. **Green**: `hello.py` を実装。
152
- ```python
153
- def hello():
154
- return "Hello, World!"
155
- ```
156
- 3. **Refactor**: `uv run ruff check .` や `uv run ruff format .` で品質を整える。
157
- - **自動化**:
158
- - `uv run pytest` を使用。
159
-
160
- ### 3. Go
161
- - **起動コマンド**: `nix develop .#go`
162
- - **主要ツール**: Go, gopls, golangci-lint, delve
163
- - **初期化**:
164
- ```bash
165
- go mod init example.com/hello
166
- ```
167
- - **TDDチュートリアル**:
168
- 1. **Red**: `hello_test.go` を作成。
169
- ```go
170
- package hello
171
- import "testing"
172
- func TestHello(t *testing.T) {
173
- want := "Hello, World!"
174
- if got := Hello(); got != want {
175
- t.Errorf("Hello() = %q, want %q", got, want)
176
- }
177
- }
178
- ```
179
- 実行(失敗): `go test`
180
-
181
- 2. **Green**: `hello.go` を作成。
182
- ```go
183
- package hello
184
- func Hello() string { return "Hello, World!" }
185
- ```
186
- 3. **Refactor**: `go fmt ./...` や `golangci-lint run` を実行。
187
-
188
- ### 4. Rust
189
- - **起動コマンド**: `nix develop .#rust`
190
- - **主要ツール**: cargo, rust-analyzer, clippy, rustfmt
191
- - **初期化**:
192
- ```bash
193
- cargo init
194
- ```
195
- - **TDDチュートリアル**:
196
- 1. **Red**: `src/lib.rs` にテストを記述。
197
- ```rust
198
- pub fn hello() -> String { todo!() }
199
- #[cfg(test)]
200
- mod tests {
201
- use super::*;
202
- #[test]
203
- fn it_works() {
204
- assert_eq!(hello(), "Hello, World!");
205
- }
206
- }
207
- ```
208
- 実行(失敗): `cargo test`
209
-
210
- 2. **Green**: `hello` 関数を実装。
211
- ```rust
212
- pub fn hello() -> String { "Hello, World!".to_string() }
213
- ```
214
- 3. **Refactor**: `cargo clippy` で警告を確認し、`cargo fmt` で整形。
215
- - **自動化**:
216
- - `cargo watch -x test` で変更監視(要インストール)。
217
-
218
- ### 5. Java
219
- - **起動コマンド**: `nix develop .#java`
220
- - **主要ツール**: JDK, Gradle, Maven, Checkstyle, PMD
221
- - **初期化**:
222
- ```bash
223
- gradle init --type java-library --test-framework junit-jupiter
224
- ```
225
- - **TDDチュートリアル**:
226
- 1. **Red**: `src/test/java/LibraryTest.java` にテスト追加.
227
- ```java
228
- @Test
229
- void testGreeting() {
230
- Library classUnderTest = new Library();
231
- assertEquals("Hello, World!", classUnderTest.getGreeting());
232
- }
233
- ```
234
- 実行(失敗): `./gradlew test`
235
-
236
- 2. **Green**: `src/main/java/Library.java` を修正.
237
- ```java
238
- public String getGreeting() { return "Hello, World!"; }
239
- ```
240
- 3. **Refactor**: `./gradlew qualityCheck` (Checkstyle/PMD) を実行.
241
- - **自動化**:
242
- - `./gradlew test --continuous` で継続的テスト.
243
- - **詳細**: [Javaアプリケーション環境構築ガイド](Javaアプリケーション環境構築ガイド.md) を参照.
244
-
245
- ### 6. .NET (C#)
246
- - **起動コマンド**: `nix develop .#dotnet`
247
- - **主要ツール**: .NET SDK, OmniSharp
248
- - **初期化**:
249
- ```bash
250
- # ソリューションの作成
251
- dotnet new sln --name Hello
252
- # ライブラリプロジェクトの作成
253
- dotnet new classlib -o Hello
254
- # テストプロジェクトの作成
255
- dotnet new xunit -o Hello.Tests
256
- # プロジェクトをソリューションに追加
257
- dotnet sln Hello.sln add Hello/Hello.csproj Hello.Tests/Hello.Tests.csproj
258
- # テストプロジェクトからライブラリプロジェクトへの参照を追加
259
- dotnet add Hello.Tests/Hello.Tests.csproj reference Hello/Hello.csproj
260
- ```
261
- - **TDDチュートリアル**:
262
- 1. **Red**: `Hello.Tests/UnitTest1.cs` を修正。
263
- ```csharp
264
- namespace Hello.Tests;
265
- using Xunit;
266
-
267
- public class UnitTest1
268
- {
269
- [Fact]
270
- public void Test1()
271
- {
272
- Assert.Equal("Hello, World!", Hello.Lib.Greet());
273
- }
274
- }
275
- ```
276
- 実行(失敗): `dotnet test`
277
-
278
- 2. **Green**: `Hello/Lib.cs` を実装。
279
- ```csharp
280
- namespace Hello;
281
-
282
- public static class Lib
283
- {
284
- public static string Greet() => "Hello, World!";
285
- }
286
- ```
287
- 3. **Refactor**: `dotnet format` でコードを整形。
288
- - **自動化**:
289
- - `dotnet watch test` で変更を監視し自動テスト実行。
290
-
291
- ### 7. Ruby
292
- - **起動コマンド**: `nix develop .#ruby`
293
- - **主要ツール**: Ruby, Bundler, Minitest, RuboCop
294
- - **初期化**:
295
- ```bash
296
- bundle init
297
- echo 'gem "minitest"' >> Gemfile
298
- bundle install
299
- ```
300
- - **TDDチュートリアル**:
301
- 1. **Red**: `test_hello.rb` を作成.
302
- ```ruby
303
- require 'minitest/autorun'
304
- require_relative 'hello'
305
- class TestHello < Minitest::Test
306
- def test_hello
307
- assert_equal "Hello, World!", hello()
308
- end
309
- end
310
- ```
311
- 実行(失敗): `ruby test_hello.rb`
312
-
313
- 2. **Green**: `hello.rb` を実装.
314
- ```ruby
315
- def hello; "Hello, World!"; end
316
- ```
317
- 3. **Refactor**: `rubocop -a` でコードスタイルを自動修正.
318
-
319
- ### 8. PHP
320
- - **起動コマンド**: `nix develop .#php`
321
- - **主要ツール**: PHP, Composer, PHPUnit, PHP_CodeSniffer
322
- - **初期化**:
323
- ```bash
324
- composer init -n
325
- composer require --dev phpunit/phpunit
326
- ```
327
- - **TDDチュートリアル**:
328
- 1. **Red**: `tests/HelloTest.php` を作成.
329
- ```php
330
- use PHPUnit\Framework\TestCase;
331
- class HelloTest extends TestCase {
332
- public function testHello() {
333
- $this->assertEquals("Hello, World!", hello());
334
- }
335
- }
336
- ```
337
- 実行(失敗): `./vendor/bin/phpunit tests`
338
-
339
- 2. **Green**: `src/hello.php` を実装.
340
- ```php
341
- function hello() { return "Hello, World!"; }
342
- ```
343
- 3. **Refactor**: `./vendor/bin/phpcs src` で規約チェック.
344
-
345
- ### 9. Haskell
346
- - **起動コマンド**: `nix develop .#haskell`
347
- - **主要ツール**: GHC, Stack, Cabal, HLS, hlint, fourmolu
348
- - **初期化**:
349
- ```bash
350
- stack new hello
351
- cd hello
352
- # package.yaml の tests.hello-test.dependencies に hspec を追加
353
- stack test
354
- ```
355
- - **TDDチュートリアル**:
356
- 1. **Red**: `test/Spec.hs` を編集.
357
- ```haskell
358
- module Main (main) where
359
- import Test.Hspec
360
- import Lib (hello)
361
-
362
- main :: IO ()
363
- main = hspec $ do
364
- describe "hello" $ do
365
- it "returns greeting" $ do
366
- hello `shouldBe` "Hello, World!"
367
- ```
368
- 実行(失敗): `stack test`
369
-
370
- 2. **Green**: `src/Lib.hs` を実装.
371
- ```haskell
372
- module Lib (hello) where
373
- hello :: String
374
- hello = "Hello, World!"
375
- ```
376
- 3. **Refactor**:
377
-
378
- - `hlint .` でコードの改善案をチェック.
379
- - `fourmolu -i src/**/*.hs` でコードを整形.
380
- - **自動化**:
381
- - `stack test --file-watch` で変更を監視し自動テスト実行.
382
-
383
- ### 10. Clojure
384
- - **起動コマンド**: `nix develop .#clojure`
385
- - **主要ツール**: Clojure CLI, Leiningen, Babashka, Clojure LSP, clj-kondo (Linter), zprint (Formatter)
386
- - **初期化**:
387
- ```bash
388
- # Clojure CLI を使用する場合
389
- clj -T:build new :name my-app
390
- # または Leiningen を使用する場合
391
- lein new app my-app
392
- ```
393
- - **TDDチュートリアル**:
394
- 1. **Red**: `test/my_app/core_test.clj` を作成。
395
- ```clojure
396
- (ns my-app.core-test
397
- (:require [clojure.test :refer :all]
398
- [my-app.core :refer :all]))
399
-
400
- (deftest hello-test
401
- (testing "Greeting test"
402
- (is (= "Hello, World!" (hello)))))
403
- ```
404
- 実行(失敗): `clj -X:test` または `lein test`
405
-
406
- 2. **Green**: `src/my_app/core.clj` を実装。
407
- ```clojure
408
- (ns my-app.core)
409
-
410
- (defn hello []
411
- "Hello, World!")
412
- ```
413
- 3. **Refactor**:
414
-
415
- - `clj-kondo --lint src` で静的解析を実行。
416
- - `bb -cp $(clojure -Spath) -m zprint.main src` (zprintが利用可能な場合) でコード整形。
417
- - **自動化**:
418
- - `lein test-refresh` で変更を監視し自動テスト実行(要プラグイン設定)。
419
- - Babashka (`bb`) を使用して軽量なタスクランナーを構築可能。
420
-
421
- ### 11. Elixir
422
- - **起動コマンド**: `nix develop .#elixir`
423
- - **主要ツール**: Elixir, Erlang, Mix, Elixir LS
424
- - **初期化**:
425
- ```bash
426
- mix new my_app
427
- cd my_app
428
- ```
429
- - **TDDチュートリアル**:
430
- 1. **Red**: `test/my_app_test.exs` にテストを記述。
431
- ```elixir
432
- defmodule MyAppTest do
433
- use ExUnit.Case
434
- test "greets the world" do
435
- assert MyApp.hello() == "Hello, World!"
436
- end
437
- end
438
- ```
439
- 実行(失敗): `mix test`
440
-
441
- 2. **Green**: `lib/my_app.ex` を実装。
442
- ```elixir
443
- defmodule MyApp do
444
- def hello do
445
- "Hello, World!"
446
- end
447
- end
448
- ```
449
- 3. **Refactor**: `mix format` でコードを整形。
450
- - **自動化**:
451
- - `mix test --watch` (要 `mix_test_watch` パッケージ) で変更を監視。
452
-
453
- ### 12. Scala
454
- - **起動コマンド**: `nix develop .#scala`
455
- - **主要ツール**: Scala 3, sbt, Metals, Scala CLI
456
- - **初期化**:
457
- ```bash
458
- # Scala CLI を使用してプロジェクト構造を作成する場合
459
- mkdir my-app && cd my-app
460
- # または sbt を使用する場合
461
- sbt new scala/scala-seed.g8
462
- ```
463
- - **TDDチュートリアル**:
464
- 1. **Red**: `Hello.test.scala` を作成(Scala CLI + MUnit の例).
465
- ```scala
466
- //> using lib "org.scalameta::munit::0.7.29"
467
- class HelloTest extends munit.FunSuite {
468
- test("hello returns greeting") {
469
- assert(Hello.greeting == "Hello, World!")
470
- }
471
- }
472
- ```
473
- 実行(失敗): `scala-cli test .`
474
-
475
- 2. **Green**: `Hello.scala` を実装.
476
- ```scala
477
- object Hello {
478
- def greeting: String = "Hello, World!"
479
- }
480
- ```
481
- 3. **Refactor**: `scala-cli fmt .` でコードを整形.
482
- - **自動化**:
483
- - `scala-cli test . --watch` で変更を監視し自動テスト実行.
484
-
485
- ### 13. F#
486
- - **起動コマンド**: `nix develop .#dotnet`
487
- - **主要ツール**: .NET SDK, Ionide (LSP), Fantomas (Formatter)
488
- - **初期化**:
489
- ```bash
490
- # ソリューションの作成
491
- dotnet new sln --name Hello
492
- # ライブラリプロジェクトの作成
493
- dotnet new classlib -lang "F#" -o Hello
494
- # テストプロジェクトの作成
495
- dotnet new xunit -lang "F#" -o Hello.Tests
496
- # プロジェクトをソリューションに追加
497
- dotnet sln Hello.sln add Hello/Hello.fsproj Hello.Tests/Hello.Tests.fsproj
498
- # テストプロジェクトからライブラリプロジェクトへの参照を追加
499
- dotnet add Hello.Tests/Hello.Tests.fsproj reference Hello/Hello.fsproj
500
- ```
501
- - **TDDチュートリアル**:
502
- 1. **Red**: `Hello.Tests/Tests.fs` を修正。
503
- ```fsharp
504
- namespace Hello.Tests
505
- open Xunit
506
- module Tests =
507
- [<Fact>]
508
- let ``Hello returns greeting`` () =
509
- Assert.Equal("Hello, World!", Hello.Lib.greet())
510
- ```
511
- 実行(失敗): `dotnet test`
512
-
513
- 2. **Green**: `Hello/Library.fs` を実装。
514
- ```fsharp
515
- namespace Hello
516
- module Lib =
517
- let greet () = "Hello, World!"
518
- ```
519
- 3. **Refactor**: `dotnet fantomas .` (インストール済みの場合) でコードを整形。
520
- - **自動化**:
521
- - `dotnet watch test` で変更を監視し自動テスト実行。
522
-
523
- ---
524
-
525
- ## 環境の切り替え
526
- 別の環境に切り替える場合は、現在のシェルを終了 (`exit`) してから、新しい環境の起動コマンドを実行してください。
527
- 複数の環境を同時に使用したい場合は、新しいターミナルタブを開くか、tmux 等のターミナルマルチプレクサの利用を推奨します。
1
+ ---
2
+ type: Reference
3
+ title: "言語別開発ガイド"
4
+ description: "本プロジェクトでは、Nix を使用して各プログラミング言語の開発環境を個別に提供しています。"
5
+ tags: [reference]
6
+ status: stable
7
+ generated: { by: human:kakimomokuri, at: 2026-04-06T03:31:33Z }
8
+ ---
9
+
10
+ # 言語別開発ガイド
11
+
12
+ 本プロジェクトでは、Nix を使用して各プログラミング言語の開発環境を個別に提供しています。各環境は `nix develop .#<言語名>` コマンドで起動でき、必要なツールや LSP、Vim 設定が自動的に適用されます。
13
+
14
+ ## ソフトウェア開発の三種の神器
15
+
16
+ 開発を効率的に進めるために、以下の3つの要素を重視します。
17
+
18
+ ### 1. バージョン管理 (Git)
19
+ 全ての変更は Git で管理し、意味のある単位でコミットします。
20
+
21
+ - **コミットメッセージ規約(Angular形式)**:
22
+
23
+ `type(scope): subject` の形式で記述します。
24
+
25
+ - `feat`:
26
+
27
+ 新機能
28
+
29
+ - `fix`:
30
+
31
+ バグ修正
32
+
33
+ - `test`:
34
+
35
+ テストの追加・修正
36
+
37
+ - `refactor`:
38
+
39
+ リファクタリング
40
+
41
+ - `chore`:
42
+
43
+ 雑事(設定変更等)
44
+
45
+ ### 2. テスティング (TDD)
46
+ テスト駆動開発 (Test-Driven Development) を実践します。
47
+
48
+ 1. **Red**:
49
+
50
+ 失敗するテストを書く
51
+
52
+ 2. **Green**:
53
+
54
+ テストを通す最小限の実装を書く
55
+
56
+ 3. **Refactor**:
57
+
58
+ コードをきれいに整理する
59
+
60
+ ### 3. 自動化
61
+ コマンド一つでビルド、テスト、静的解析を実行できるようにします。また、ファイル変更を監視して自動的にテストを実行する「継続的テスト」を活用します。
62
+
63
+ ---
64
+
65
+ ## 共通の開発フロー
66
+
67
+ 1. **環境の起動**:
68
+
69
+ `nix develop .#<language>`
70
+
71
+ 2. **プロジェクトの初期化**:
72
+
73
+ 各言語のパッケージマネージャで初期化
74
+
75
+ 3. **Git初期化**:
76
+
77
+ `git init` (まだの場合)
78
+
79
+ 4. **TDDサイクル**:
80
+
81
+ 継続的テストを回しながら実装
82
+
83
+ 5. **静的解析**:
84
+
85
+ リンターやフォーマッタでコード品質をチェック
86
+
87
+ 6. **コミット**:
88
+
89
+ `git add .` -> `git commit -m '...'`
90
+
91
+ ---
92
+
93
+ ## 言語別ガイド
94
+
95
+ ### 1. Node.js / TypeScript
96
+
97
+ - **起動コマンド**:
98
+
99
+ `nix develop .#node`
100
+
101
+ - **主要ツール**:
102
+
103
+ Node.js (v22), npm, TypeScript, ESLint, Prettier
104
+
105
+ - **初期化**:
106
+
107
+
108
+ ```bash
109
+ npm init -y
110
+ ```
111
+ - **TDDチュートリアル**:
112
+ 1. **Red**: `hello.test.js` を作成。
113
+ ```javascript
114
+ import assert from 'node:assert';
115
+ import { test } from 'node:test';
116
+ import { hello } from './hello.js';
117
+
118
+ test('hello returns greeting', () => {
119
+ assert.strictEqual(hello(), 'Hello,World!');
120
+ });
121
+ ```
122
+ 実行(失敗): `node --test hello.test.js`
123
+
124
+ 2. **Green**: `hello.js` を実装。
125
+ ```javascript
126
+ export function hello() {
127
+ return "Hello, World!";
128
+ }
129
+ ```
130
+ 3. **Refactor**: 必要に応じてコードを整理。
131
+ - **自動化**:
132
+ - `node --watch --test hello.test.js` で変更を監視。
133
+
134
+ ### 2. Python
135
+ - **起動コマンド**: `nix develop .#python`
136
+ - **主要ツール**: Python 3.12, uv, pytest, ruff (Linter/Formatter)
137
+ - **初期化**:
138
+ ```bash
139
+ uv init
140
+ uv add --dev pytest ruff
141
+ ```
142
+ - **TDDチュートリアル**:
143
+ 1. **Red**: `test_hello.py` を作成。
144
+ ```python
145
+ from hello import hello
146
+ def test_hello():
147
+ assert hello() == "Hello, World!"
148
+ ```
149
+ 実行(失敗): `uv run pytest`
150
+
151
+ 2. **Green**: `hello.py` を実装。
152
+ ```python
153
+ def hello():
154
+ return "Hello, World!"
155
+ ```
156
+ 3. **Refactor**: `uv run ruff check .` や `uv run ruff format .` で品質を整える。
157
+ - **自動化**:
158
+ - `uv run pytest` を使用。
159
+
160
+ ### 3. Go
161
+ - **起動コマンド**: `nix develop .#go`
162
+ - **主要ツール**: Go, gopls, golangci-lint, delve
163
+ - **初期化**:
164
+ ```bash
165
+ go mod init example.com/hello
166
+ ```
167
+ - **TDDチュートリアル**:
168
+ 1. **Red**: `hello_test.go` を作成。
169
+ ```go
170
+ package hello
171
+ import "testing"
172
+ func TestHello(t *testing.T) {
173
+ want := "Hello, World!"
174
+ if got := Hello(); got != want {
175
+ t.Errorf("Hello() = %q, want %q", got, want)
176
+ }
177
+ }
178
+ ```
179
+ 実行(失敗): `go test`
180
+
181
+ 2. **Green**: `hello.go` を作成。
182
+ ```go
183
+ package hello
184
+ func Hello() string { return "Hello, World!" }
185
+ ```
186
+ 3. **Refactor**: `go fmt ./...` や `golangci-lint run` を実行。
187
+
188
+ ### 4. Rust
189
+ - **起動コマンド**: `nix develop .#rust`
190
+ - **主要ツール**: cargo, rust-analyzer, clippy, rustfmt
191
+ - **初期化**:
192
+ ```bash
193
+ cargo init
194
+ ```
195
+ - **TDDチュートリアル**:
196
+ 1. **Red**: `src/lib.rs` にテストを記述。
197
+ ```rust
198
+ pub fn hello() -> String { todo!() }
199
+ #[cfg(test)]
200
+ mod tests {
201
+ use super::*;
202
+ #[test]
203
+ fn it_works() {
204
+ assert_eq!(hello(), "Hello, World!");
205
+ }
206
+ }
207
+ ```
208
+ 実行(失敗): `cargo test`
209
+
210
+ 2. **Green**: `hello` 関数を実装。
211
+ ```rust
212
+ pub fn hello() -> String { "Hello, World!".to_string() }
213
+ ```
214
+ 3. **Refactor**: `cargo clippy` で警告を確認し、`cargo fmt` で整形。
215
+ - **自動化**:
216
+ - `cargo watch -x test` で変更監視(要インストール)。
217
+
218
+ ### 5. Java
219
+ - **起動コマンド**: `nix develop .#java`
220
+ - **主要ツール**: JDK, Gradle, Maven, Checkstyle, PMD
221
+ - **初期化**:
222
+ ```bash
223
+ gradle init --type java-library --test-framework junit-jupiter
224
+ ```
225
+ - **TDDチュートリアル**:
226
+ 1. **Red**: `src/test/java/LibraryTest.java` にテスト追加.
227
+ ```java
228
+ @Test
229
+ void testGreeting() {
230
+ Library classUnderTest = new Library();
231
+ assertEquals("Hello, World!", classUnderTest.getGreeting());
232
+ }
233
+ ```
234
+ 実行(失敗): `./gradlew test`
235
+
236
+ 2. **Green**: `src/main/java/Library.java` を修正.
237
+ ```java
238
+ public String getGreeting() { return "Hello, World!"; }
239
+ ```
240
+ 3. **Refactor**: `./gradlew qualityCheck` (Checkstyle/PMD) を実行.
241
+ - **自動化**:
242
+ - `./gradlew test --continuous` で継続的テスト.
243
+ - **詳細**: [Javaアプリケーション環境構築ガイド](Javaアプリケーション環境構築ガイド.md) を参照.
244
+
245
+ ### 6. .NET (C#)
246
+ - **起動コマンド**: `nix develop .#dotnet`
247
+ - **主要ツール**: .NET SDK, OmniSharp
248
+ - **初期化**:
249
+ ```bash
250
+ # ソリューションの作成
251
+ dotnet new sln --name Hello
252
+ # ライブラリプロジェクトの作成
253
+ dotnet new classlib -o Hello
254
+ # テストプロジェクトの作成
255
+ dotnet new xunit -o Hello.Tests
256
+ # プロジェクトをソリューションに追加
257
+ dotnet sln Hello.sln add Hello/Hello.csproj Hello.Tests/Hello.Tests.csproj
258
+ # テストプロジェクトからライブラリプロジェクトへの参照を追加
259
+ dotnet add Hello.Tests/Hello.Tests.csproj reference Hello/Hello.csproj
260
+ ```
261
+ - **TDDチュートリアル**:
262
+ 1. **Red**: `Hello.Tests/UnitTest1.cs` を修正。
263
+ ```csharp
264
+ namespace Hello.Tests;
265
+ using Xunit;
266
+
267
+ public class UnitTest1
268
+ {
269
+ [Fact]
270
+ public void Test1()
271
+ {
272
+ Assert.Equal("Hello, World!", Hello.Lib.Greet());
273
+ }
274
+ }
275
+ ```
276
+ 実行(失敗): `dotnet test`
277
+
278
+ 2. **Green**: `Hello/Lib.cs` を実装。
279
+ ```csharp
280
+ namespace Hello;
281
+
282
+ public static class Lib
283
+ {
284
+ public static string Greet() => "Hello, World!";
285
+ }
286
+ ```
287
+ 3. **Refactor**: `dotnet format` でコードを整形。
288
+ - **自動化**:
289
+ - `dotnet watch test` で変更を監視し自動テスト実行。
290
+
291
+ ### 7. Ruby
292
+ - **起動コマンド**: `nix develop .#ruby`
293
+ - **主要ツール**: Ruby, Bundler, Minitest, RuboCop
294
+ - **初期化**:
295
+ ```bash
296
+ bundle init
297
+ echo 'gem "minitest"' >> Gemfile
298
+ bundle install
299
+ ```
300
+ - **TDDチュートリアル**:
301
+ 1. **Red**: `test_hello.rb` を作成.
302
+ ```ruby
303
+ require 'minitest/autorun'
304
+ require_relative 'hello'
305
+ class TestHello < Minitest::Test
306
+ def test_hello
307
+ assert_equal "Hello, World!", hello()
308
+ end
309
+ end
310
+ ```
311
+ 実行(失敗): `ruby test_hello.rb`
312
+
313
+ 2. **Green**: `hello.rb` を実装.
314
+ ```ruby
315
+ def hello; "Hello, World!"; end
316
+ ```
317
+ 3. **Refactor**: `rubocop -a` でコードスタイルを自動修正.
318
+
319
+ ### 8. PHP
320
+ - **起動コマンド**: `nix develop .#php`
321
+ - **主要ツール**: PHP, Composer, PHPUnit, PHP_CodeSniffer
322
+ - **初期化**:
323
+ ```bash
324
+ composer init -n
325
+ composer require --dev phpunit/phpunit
326
+ ```
327
+ - **TDDチュートリアル**:
328
+ 1. **Red**: `tests/HelloTest.php` を作成.
329
+ ```php
330
+ use PHPUnit\Framework\TestCase;
331
+ class HelloTest extends TestCase {
332
+ public function testHello() {
333
+ $this->assertEquals("Hello, World!", hello());
334
+ }
335
+ }
336
+ ```
337
+ 実行(失敗): `./vendor/bin/phpunit tests`
338
+
339
+ 2. **Green**: `src/hello.php` を実装.
340
+ ```php
341
+ function hello() { return "Hello, World!"; }
342
+ ```
343
+ 3. **Refactor**: `./vendor/bin/phpcs src` で規約チェック.
344
+
345
+ ### 9. Haskell
346
+ - **起動コマンド**: `nix develop .#haskell`
347
+ - **主要ツール**: GHC, Stack, Cabal, HLS, hlint, fourmolu
348
+ - **初期化**:
349
+ ```bash
350
+ stack new hello
351
+ cd hello
352
+ # package.yaml の tests.hello-test.dependencies に hspec を追加
353
+ stack test
354
+ ```
355
+ - **TDDチュートリアル**:
356
+ 1. **Red**: `test/Spec.hs` を編集.
357
+ ```haskell
358
+ module Main (main) where
359
+ import Test.Hspec
360
+ import Lib (hello)
361
+
362
+ main :: IO ()
363
+ main = hspec $ do
364
+ describe "hello" $ do
365
+ it "returns greeting" $ do
366
+ hello `shouldBe` "Hello, World!"
367
+ ```
368
+ 実行(失敗): `stack test`
369
+
370
+ 2. **Green**: `src/Lib.hs` を実装.
371
+ ```haskell
372
+ module Lib (hello) where
373
+ hello :: String
374
+ hello = "Hello, World!"
375
+ ```
376
+ 3. **Refactor**:
377
+
378
+ - `hlint .` でコードの改善案をチェック.
379
+ - `fourmolu -i src/**/*.hs` でコードを整形.
380
+ - **自動化**:
381
+ - `stack test --file-watch` で変更を監視し自動テスト実行.
382
+
383
+ ### 10. Clojure
384
+ - **起動コマンド**: `nix develop .#clojure`
385
+ - **主要ツール**: Clojure CLI, Leiningen, Babashka, Clojure LSP, clj-kondo (Linter), zprint (Formatter)
386
+ - **初期化**:
387
+ ```bash
388
+ # Clojure CLI を使用する場合
389
+ clj -T:build new :name my-app
390
+ # または Leiningen を使用する場合
391
+ lein new app my-app
392
+ ```
393
+ - **TDDチュートリアル**:
394
+ 1. **Red**: `test/my_app/core_test.clj` を作成。
395
+ ```clojure
396
+ (ns my-app.core-test
397
+ (:require [clojure.test :refer :all]
398
+ [my-app.core :refer :all]))
399
+
400
+ (deftest hello-test
401
+ (testing "Greeting test"
402
+ (is (= "Hello, World!" (hello)))))
403
+ ```
404
+ 実行(失敗): `clj -X:test` または `lein test`
405
+
406
+ 2. **Green**: `src/my_app/core.clj` を実装。
407
+ ```clojure
408
+ (ns my-app.core)
409
+
410
+ (defn hello []
411
+ "Hello, World!")
412
+ ```
413
+ 3. **Refactor**:
414
+
415
+ - `clj-kondo --lint src` で静的解析を実行。
416
+ - `bb -cp $(clojure -Spath) -m zprint.main src` (zprintが利用可能な場合) でコード整形。
417
+ - **自動化**:
418
+ - `lein test-refresh` で変更を監視し自動テスト実行(要プラグイン設定)。
419
+ - Babashka (`bb`) を使用して軽量なタスクランナーを構築可能。
420
+
421
+ ### 11. Elixir
422
+ - **起動コマンド**: `nix develop .#elixir`
423
+ - **主要ツール**: Elixir, Erlang, Mix, Elixir LS
424
+ - **初期化**:
425
+ ```bash
426
+ mix new my_app
427
+ cd my_app
428
+ ```
429
+ - **TDDチュートリアル**:
430
+ 1. **Red**: `test/my_app_test.exs` にテストを記述。
431
+ ```elixir
432
+ defmodule MyAppTest do
433
+ use ExUnit.Case
434
+ test "greets the world" do
435
+ assert MyApp.hello() == "Hello, World!"
436
+ end
437
+ end
438
+ ```
439
+ 実行(失敗): `mix test`
440
+
441
+ 2. **Green**: `lib/my_app.ex` を実装。
442
+ ```elixir
443
+ defmodule MyApp do
444
+ def hello do
445
+ "Hello, World!"
446
+ end
447
+ end
448
+ ```
449
+ 3. **Refactor**: `mix format` でコードを整形。
450
+ - **自動化**:
451
+ - `mix test --watch` (要 `mix_test_watch` パッケージ) で変更を監視。
452
+
453
+ ### 12. Scala
454
+ - **起動コマンド**: `nix develop .#scala`
455
+ - **主要ツール**: Scala 3, sbt, Metals, Scala CLI
456
+ - **初期化**:
457
+ ```bash
458
+ # Scala CLI を使用してプロジェクト構造を作成する場合
459
+ mkdir my-app && cd my-app
460
+ # または sbt を使用する場合
461
+ sbt new scala/scala-seed.g8
462
+ ```
463
+ - **TDDチュートリアル**:
464
+ 1. **Red**: `Hello.test.scala` を作成(Scala CLI + MUnit の例).
465
+ ```scala
466
+ //> using lib "org.scalameta::munit::0.7.29"
467
+ class HelloTest extends munit.FunSuite {
468
+ test("hello returns greeting") {
469
+ assert(Hello.greeting == "Hello, World!")
470
+ }
471
+ }
472
+ ```
473
+ 実行(失敗): `scala-cli test .`
474
+
475
+ 2. **Green**: `Hello.scala` を実装.
476
+ ```scala
477
+ object Hello {
478
+ def greeting: String = "Hello, World!"
479
+ }
480
+ ```
481
+ 3. **Refactor**: `scala-cli fmt .` でコードを整形.
482
+ - **自動化**:
483
+ - `scala-cli test . --watch` で変更を監視し自動テスト実行.
484
+
485
+ ### 13. F#
486
+ - **起動コマンド**: `nix develop .#dotnet`
487
+ - **主要ツール**: .NET SDK, Ionide (LSP), Fantomas (Formatter)
488
+ - **初期化**:
489
+ ```bash
490
+ # ソリューションの作成
491
+ dotnet new sln --name Hello
492
+ # ライブラリプロジェクトの作成
493
+ dotnet new classlib -lang "F#" -o Hello
494
+ # テストプロジェクトの作成
495
+ dotnet new xunit -lang "F#" -o Hello.Tests
496
+ # プロジェクトをソリューションに追加
497
+ dotnet sln Hello.sln add Hello/Hello.fsproj Hello.Tests/Hello.Tests.fsproj
498
+ # テストプロジェクトからライブラリプロジェクトへの参照を追加
499
+ dotnet add Hello.Tests/Hello.Tests.fsproj reference Hello/Hello.fsproj
500
+ ```
501
+ - **TDDチュートリアル**:
502
+ 1. **Red**: `Hello.Tests/Tests.fs` を修正。
503
+ ```fsharp
504
+ namespace Hello.Tests
505
+ open Xunit
506
+ module Tests =
507
+ [<Fact>]
508
+ let ``Hello returns greeting`` () =
509
+ Assert.Equal("Hello, World!", Hello.Lib.greet())
510
+ ```
511
+ 実行(失敗): `dotnet test`
512
+
513
+ 2. **Green**: `Hello/Library.fs` を実装。
514
+ ```fsharp
515
+ namespace Hello
516
+ module Lib =
517
+ let greet () = "Hello, World!"
518
+ ```
519
+ 3. **Refactor**: `dotnet fantomas .` (インストール済みの場合) でコードを整形。
520
+ - **自動化**:
521
+ - `dotnet watch test` で変更を監視し自動テスト実行。
522
+
523
+ ---
524
+
525
+ ## 環境の切り替え
526
+ 別の環境に切り替える場合は、現在のシェルを終了 (`exit`) してから、新しい環境の起動コマンドを実行してください。
527
+ 複数の環境を同時に使用したい場合は、新しいターミナルタブを開くか、tmux 等のターミナルマルチプレクサの利用を推奨します。