@k2works/claude-code-booster 6.3.1 → 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 (292) 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/assets/css/extra.css +29 -29
  84. package/lib/assets/docs/assets/js/extra.js +48 -48
  85. package/lib/assets/docs/assets/js/mathjax.js +27 -27
  86. package/lib/assets/docs/design/index.md +44 -44
  87. package/lib/assets/docs/development/index.md +39 -39
  88. package/lib/assets/docs/index.md +1 -1
  89. package/lib/assets/docs/log.md +3 -0
  90. package/lib/assets/docs/operation/index.md +41 -41
  91. package/lib/assets/docs/reference/BDD/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +766 -0
  92. 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
  93. 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
  94. 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
  95. 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
  96. 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
  97. 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
  98. package/lib/assets/docs/reference/UI/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +460 -460
  99. 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
  100. package/lib/assets/docs/reference/images/Ansoff.drawio.svg +3 -3
  101. package/lib/assets/docs/reference/images/BMC.drawio.svg +3 -3
  102. package/lib/assets/docs/reference/images/BrandBasicStrategy.drawio.svg +3 -3
  103. package/lib/assets/docs/reference/images/BrandCategorization.drawio.svg +3 -3
  104. package/lib/assets/docs/reference/images/BrandRecurutementStrategy.drawio.svg +3 -3
  105. package/lib/assets/docs/reference/images/BrandValue.drawio.svg +3 -3
  106. package/lib/assets/docs/reference/images/BusinessActivitiy.svg +3 -3
  107. package/lib/assets/docs/reference/images/HRM.drawio.svg +3 -3
  108. package/lib/assets/docs/reference/images/MarketingStructure.drawio.svg +3 -3
  109. package/lib/assets/docs/reference/images/OrganizationElemnts.svg +3 -3
  110. package/lib/assets/docs/reference/images/PPM.drawio.svg +3 -3
  111. package/lib/assets/docs/reference/images/PositioningMap.drawio.svg +3 -3
  112. package/lib/assets/docs/reference/images/ProductLayer.drawio.svg +3 -3
  113. package/lib/assets/docs/reference/images/ProductMix.drawio.svg +3 -3
  114. package/lib/assets/docs/reference/images/SWOT.drawio.svg +3 -3
  115. package/lib/assets/docs/reference/images/TargetMarket.drawio.svg +3 -3
  116. package/lib/assets/docs/reference/images/ThreeGenericStrategies.drawio.svg +3 -3
  117. package/lib/assets/docs/reference/images/VRIO.drawio.svg +3 -3
  118. package/lib/assets/docs/reference/images/ValueChain.drawio.svg +3 -3
  119. package/lib/assets/docs/reference/index.md +1 -0
  120. 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
  121. 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
  122. 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
  123. 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
  124. 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
  125. 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
  126. 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
  127. 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
  128. 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
  129. 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
  130. 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
  131. 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
  132. 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
  133. package/lib/assets/docs/reference//344/274/201/346/245/255/347/265/214/345/226/266/350/253/226.md +2647 -2647
  134. 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
  135. 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
  136. 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
  137. 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
  138. package/lib/assets/docs/reference//351/201/213/345/226/266/347/256/241/347/220/206.md +1492 -1492
  139. 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
  140. 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
  141. package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +314 -314
  142. 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
  143. package/lib/assets/docs/requirements/index.md +17 -17
  144. package/lib/assets/docs/review/index.md +5 -5
  145. package/lib/assets/docs/strategy/index.md +17 -17
  146. package/lib/assets/docs/template/ADR.md +39 -39
  147. 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
  148. 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
  149. package/lib/assets/docs/template/README.md +59 -59
  150. package/lib/assets/docs/template/index.md +24 -24
  151. 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
  152. 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
  153. 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
  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/350/250/210/347/224/273.md +336 -336
  155. 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
  156. 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
  157. 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
  158. 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
  159. package/lib/assets/docs/template//344/272/213/344/276/213/345/210/206/346/236/220.md +522 -522
  160. package/lib/assets/docs/template//344/274/201/346/245/255/345/210/206/346/236/220.md +582 -582
  161. 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
  162. package/lib/assets/docs/template//350/246/201/344/273/266/345/256/232/347/276/251.md +669 -669
  163. package/lib/assets/docs/template//350/250/255/350/250/210.md +183 -183
  164. 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
  165. package/lib/assets/gulpfile.js +29 -29
  166. package/lib/assets/mkdocs.yml +147 -138
  167. package/lib/assets/ops/docker/sonarqube-local/docker-compose.yml +57 -57
  168. package/lib/assets/ops/scripts/journal.js +180 -180
  169. package/lib/assets/ops/scripts/mkdocs.js +82 -82
  170. package/lib/assets/ops/scripts/release.js +431 -431
  171. package/lib/assets/ops/scripts/sonar_local.js +726 -726
  172. package/lib/assets/ops/scripts/ssh.js +190 -190
  173. package/lib/assets/ops/scripts/vault.js +299 -299
  174. package/lib/assets/package-lock.json +1673 -1673
  175. package/lib/assets/package.json +45 -45
  176. package/lib/gulpfile.js +37 -37
  177. package/package.json +41 -41
  178. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.json +0 -20
  179. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.md +0 -13
  180. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/eval_metadata.json +0 -14
  181. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/grading.json +0 -39
  182. 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
  183. 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
  184. 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
  185. 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
  186. 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
  187. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/index.md +0 -10
  188. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/log.md +0 -7
  189. 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
  190. 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
  191. 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
  192. 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
  193. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/report.md +0 -76
  194. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/grading.json +0 -39
  195. 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
  196. 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
  197. 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
  198. 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
  199. 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
  200. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/index.md +0 -10
  201. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/log.md +0 -7
  202. 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
  203. 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
  204. 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
  205. 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
  206. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/report.md +0 -22
  207. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/eval_metadata.json +0 -13
  208. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/grading.json +0 -34
  209. 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
  210. 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
  211. 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
  212. 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
  213. 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
  214. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/index.md +0 -10
  215. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/log.md +0 -7
  216. 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
  217. 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
  218. 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
  219. 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
  220. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/report.md +0 -61
  221. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/grading.json +0 -34
  222. 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
  223. 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
  224. 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
  225. 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
  226. 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
  227. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/index.md +0 -10
  228. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/log.md +0 -7
  229. 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
  230. 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
  231. 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
  232. 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
  233. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/report.md +0 -18
  234. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/eval_metadata.json +0 -13
  235. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/grading.json +0 -34
  236. 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
  237. 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
  238. 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
  239. 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
  240. 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
  241. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/index.md +0 -10
  242. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/log.md +0 -7
  243. 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
  244. 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
  245. 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
  246. 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
  247. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/report.md +0 -83
  248. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/grading.json +0 -34
  249. 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
  250. 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
  251. 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
  252. 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
  253. 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
  254. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/index.md +0 -10
  255. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/log.md +0 -7
  256. 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
  257. 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
  258. 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
  259. 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
  260. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/report.md +0 -15
  261. package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/review.html +0 -1325
  262. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.json +0 -20
  263. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.md +0 -13
  264. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/eval_metadata.json +0 -15
  265. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/grading.json +0 -44
  266. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/adr/index.md +0 -10
  267. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/index.md +0 -15
  268. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/log.md +0 -5
  269. 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
  270. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/index.md +0 -6
  271. 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
  272. 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
  273. 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
  274. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/report.md +0 -85
  275. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/grading.json +0 -44
  276. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/adr/index.md +0 -8
  277. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/index.md +0 -11
  278. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/log.md +0 -7
  279. 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
  280. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/index.md +0 -9
  281. 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
  282. 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
  283. 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
  284. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/report.md +0 -49
  285. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/eval_metadata.json +0 -13
  286. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/grading.json +0 -34
  287. 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
  288. 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
  289. 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
  290. 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
  291. package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/report.md +0 -147
  292. 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 等のターミナルマルチプレクサの利用を推奨します。