@k2works/claude-code-booster 6.4.0 → 6.6.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.
- package/LICENSE +21 -21
- package/README.md +61 -61
- package/bin/claude-code-booster +113 -113
- package/lib/assets/.claude/README.md +287 -287
- package/lib/assets/.claude/agents/xp-architect.md +250 -250
- package/lib/assets/.claude/agents/xp-executive.md +207 -207
- package/lib/assets/.claude/agents/xp-interaction-designer.md +239 -239
- package/lib/assets/.claude/agents/xp-product-manager.md +245 -245
- package/lib/assets/.claude/agents/xp-programmer.md +268 -268
- package/lib/assets/.claude/agents/xp-project-manager.md +229 -229
- package/lib/assets/.claude/agents/xp-technical-writer.md +224 -224
- package/lib/assets/.claude/agents/xp-tester.md +265 -265
- package/lib/assets/.claude/agents/xp-user-representative.md +204 -204
- package/lib/assets/.claude/scripts/generate-inception-deck.mjs +911 -911
- package/lib/assets/.claude/settings.json +11 -11
- package/lib/assets/.claude/skills/ai-agent-guidelines/SKILL.md +111 -111
- package/lib/assets/.claude/skills/analyzing-architecture/SKILL.md +83 -83
- package/lib/assets/.claude/skills/analyzing-business-architecture/SKILL.md +122 -122
- package/lib/assets/.claude/skills/analyzing-business-case/SKILL.md +148 -148
- package/lib/assets/.claude/skills/analyzing-business-strategy/SKILL.md +277 -277
- package/lib/assets/.claude/skills/analyzing-data-model/SKILL.md +77 -77
- package/lib/assets/.claude/skills/analyzing-domain-model/SKILL.md +117 -117
- package/lib/assets/.claude/skills/analyzing-inception-deck/SKILL.md +84 -84
- package/lib/assets/.claude/skills/analyzing-non-functional/SKILL.md +95 -95
- package/lib/assets/.claude/skills/analyzing-operation/SKILL.md +95 -95
- package/lib/assets/.claude/skills/analyzing-requirements/SKILL.md +91 -91
- package/lib/assets/.claude/skills/analyzing-review/SKILL.md +174 -174
- package/lib/assets/.claude/skills/analyzing-tech-stack/SKILL.md +101 -101
- package/lib/assets/.claude/skills/analyzing-test-strategy/SKILL.md +89 -89
- package/lib/assets/.claude/skills/analyzing-ui-design/SKILL.md +80 -80
- package/lib/assets/.claude/skills/analyzing-usecases/SKILL.md +72 -72
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.json +20 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.md +13 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/eval_metadata.json +14 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/grading.json +39 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/001-db.md +12 -0
- 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 +20 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/index.md +4 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/data-model.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy-old.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/index.md +4 -0
- 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 +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/report.md +76 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/grading.json +39 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/001-db.md +12 -0
- 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 +20 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/index.md +4 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/data-model.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy-old.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/index.md +4 -0
- 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 +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/report.md +22 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/eval_metadata.json +13 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/grading.json +34 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/001-db.md +12 -0
- 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 +11 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/data-model.md +14 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy-old.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/index.md +4 -0
- 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 +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/report.md +61 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/grading.json +34 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/001-db.md +12 -0
- 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 +11 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/data-model.md +13 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy-old.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/index.md +4 -0
- 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 +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/report.md +18 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/eval_metadata.json +13 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/grading.json +34 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/001-db.md +12 -0
- 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 +11 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/data-model.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy-old.md +13 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/index.md +7 -0
- 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 +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/report.md +83 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/grading.json +34 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/001-db.md +12 -0
- 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 +11 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/data-model.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy-old.md +14 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/index.md +4 -0
- 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 +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/report.md +15 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/review.html +1325 -0
- package/lib/assets/.claude/skills/closing-iteration/SKILL.md +176 -176
- package/lib/assets/.claude/skills/creating-adr/SKILL.md +117 -117
- package/lib/assets/.claude/skills/creating-development-strategy/SKILL.md +187 -151
- package/lib/assets/.claude/skills/creating-iteration-report/SKILL.md +210 -210
- package/lib/assets/.claude/skills/creating-journal/SKILL.md +140 -140
- package/lib/assets/.claude/skills/creating-manual/SKILL.md +199 -199
- package/lib/assets/.claude/skills/creating-release-report/SKILL.md +161 -161
- package/lib/assets/.claude/skills/creating-slides/SKILL.md +86 -86
- package/lib/assets/.claude/skills/creating-slides/agents/openai.yaml +4 -4
- package/lib/assets/.claude/skills/creating-slides/references/manga-css.md +45 -45
- package/lib/assets/.claude/skills/creating-slides/scripts/slide_tools.py +239 -239
- package/lib/assets/.claude/skills/developing-backend/SKILL.md +138 -100
- package/lib/assets/.claude/skills/developing-frontend/SKILL.md +131 -93
- package/lib/assets/.claude/skills/developing-release/SKILL.md +120 -120
- package/lib/assets/.claude/skills/developing-review/SKILL.md +175 -175
- package/lib/assets/.claude/skills/developing-uiux-review/SKILL.md +207 -207
- package/lib/assets/.claude/skills/generating-bmc/SKILL.md +123 -123
- package/lib/assets/.claude/skills/generating-slides/SKILL.md +94 -94
- package/lib/assets/.claude/skills/git-commit/SKILL.md +81 -81
- package/lib/assets/.claude/skills/killing-processes/SKILL.md +44 -44
- package/lib/assets/.claude/skills/migrating-ai-dlc/evals/evals.json +59 -59
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.json +20 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.md +13 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/eval_metadata.json +15 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/grading.json +44 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/adr/index.md +10 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/index.md +15 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/log.md +5 -0
- 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 +966 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/index.md +6 -0
- 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 +261 -0
- 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 +480 -0
- 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 +681 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/report.md +85 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/grading.json +44 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/adr/index.md +8 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/index.md +11 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/log.md +7 -0
- 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 +964 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/index.md +9 -0
- 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 +250 -0
- 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 +469 -0
- 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 +677 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/report.md +49 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/eval_metadata.json +13 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/grading.json +34 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/index.md +7 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/log.md +7 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/metrics/churn.md +9 -0
- 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 +15 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/report.md +147 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/review.html +1325 -0
- package/lib/assets/.claude/skills/opening-iteration/SKILL.md +124 -124
- package/lib/assets/.claude/skills/operating-backup/SKILL.md +59 -59
- package/lib/assets/.claude/skills/operating-cicd/SKILL.md +54 -54
- package/lib/assets/.claude/skills/operating-deploy/SKILL.md +67 -67
- package/lib/assets/.claude/skills/operating-docs/SKILL.md +219 -219
- package/lib/assets/.claude/skills/operating-provision/SKILL.md +77 -77
- package/lib/assets/.claude/skills/operating-qt/SKILL.md +147 -147
- package/lib/assets/.claude/skills/operating-review/SKILL.md +171 -171
- package/lib/assets/.claude/skills/operating-script/SKILL.md +145 -145
- package/lib/assets/.claude/skills/operating-setup/SKILL.md +63 -63
- package/lib/assets/.claude/skills/orchestrating-analysis/SKILL.md +110 -110
- package/lib/assets/.claude/skills/orchestrating-development/SKILL.md +208 -172
- package/lib/assets/.claude/skills/orchestrating-operation/SKILL.md +161 -161
- package/lib/assets/.claude/skills/orchestrating-project/SKILL.md +149 -149
- package/lib/assets/.claude/skills/planning-releases/SKILL.md +121 -121
- package/lib/assets/.claude/skills/practicing-getting-start-tdd/SKILL.md +262 -262
- package/lib/assets/.claude/skills/syncing-github-project/SKILL.md +151 -151
- package/lib/assets/.claude/skills/tracking-progress/SKILL.md +91 -91
- package/lib/assets/.claude/skills/validating-design/SKILL.md +130 -130
- package/lib/assets/.claude/skills/validating-iteration-plan/SKILL.md +238 -238
- package/lib/assets/.claude/skills/validating-operating-setup/SKILL.md +118 -118
- package/lib/assets/.devcontainer/devcontainer.json +37 -37
- package/lib/assets/.env.example +32 -32
- package/lib/assets/.gitattributes +4 -4
- package/lib/assets/.github/workflows/docker-publish.yml +77 -77
- package/lib/assets/.github/workflows/mkdocs.yml +39 -39
- package/lib/assets/AGENTS.md +102 -102
- package/lib/assets/README.md +304 -304
- package/lib/assets/docker-compose.yml +33 -33
- package/lib/assets/docs/adr/index.md +10 -10
- package/lib/assets/docs/article/index.md +8 -6
- package/lib/assets/docs/assets/css/extra.css +29 -29
- package/lib/assets/docs/assets/js/extra.js +48 -48
- package/lib/assets/docs/assets/js/mathjax.js +27 -27
- package/lib/assets/docs/design/index.md +44 -44
- package/lib/assets/docs/development/index.md +39 -39
- package/lib/assets/docs/index.md +37 -37
- package/lib/assets/docs/log.md +28 -28
- package/lib/assets/docs/operation/index.md +41 -41
- package/lib/assets/docs/reference/BDD/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +766 -766
- 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
- 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
- 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
- package/lib/assets/docs/reference/LivingDocumentation/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +400 -0
- 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
- 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
- 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
- package/lib/assets/docs/reference/UI/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +460 -460
- 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
- package/lib/assets/docs/reference/images/Ansoff.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/BMC.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/BrandBasicStrategy.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/BrandCategorization.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/BrandRecurutementStrategy.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/BrandValue.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/BusinessActivitiy.svg +3 -3
- package/lib/assets/docs/reference/images/HRM.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/MarketingStructure.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/OrganizationElemnts.svg +3 -3
- package/lib/assets/docs/reference/images/PPM.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/PositioningMap.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/ProductLayer.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/ProductMix.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/SWOT.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/TargetMarket.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/ThreeGenericStrategies.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/VRIO.drawio.svg +3 -3
- package/lib/assets/docs/reference/images/ValueChain.drawio.svg +3 -3
- package/lib/assets/docs/reference/index.md +66 -62
- 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
- package/lib/assets/docs/reference//343/202/242/343/203/216/343/203/206/343/203/274/343/202/267/343/203/247/343/203/263/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +268 -0
- 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
- 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
- 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
- package/lib/assets/docs/reference//343/202/254/343/202/244/343/203/211/343/203/204/343/202/242/343/203/274/343/203/273/343/202/265/343/202/244/343/203/210/343/202/267/343/203/274/343/202/244/343/203/263/343/202/260/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +192 -0
- 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
- package/lib/assets/docs/reference//343/203/200/343/202/244/343/203/212/343/203/237/343/203/203/343/202/257/343/202/255/343/203/245/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211.md +191 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/lib/assets/docs/reference//344/274/201/346/245/255/347/265/214/345/226/266/350/253/226.md +2647 -2647
- 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
- 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
- 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
- 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
- package/lib/assets/docs/reference//351/201/213/345/226/266/347/256/241/347/220/206.md +1492 -1492
- 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
- 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
- package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +314 -314
- 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
- package/lib/assets/docs/requirements/index.md +17 -17
- package/lib/assets/docs/review/index.md +5 -5
- package/lib/assets/docs/strategy/index.md +17 -17
- package/lib/assets/docs/template/ADR.md +39 -39
- 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
- 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
- package/lib/assets/docs/template/README.md +59 -59
- package/lib/assets/docs/template/index.md +24 -24
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/lib/assets/docs/template//344/272/213/344/276/213/345/210/206/346/236/220.md +522 -522
- package/lib/assets/docs/template//344/274/201/346/245/255/345/210/206/346/236/220.md +582 -582
- 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
- package/lib/assets/docs/template//350/246/201/344/273/266/345/256/232/347/276/251.md +669 -669
- package/lib/assets/docs/template//350/250/255/350/250/210.md +183 -183
- 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
- package/lib/assets/gulpfile.js +29 -29
- package/lib/assets/mkdocs.yml +151 -147
- package/lib/assets/ops/docker/sonarqube-local/docker-compose.yml +57 -57
- package/lib/assets/ops/scripts/journal.js +180 -180
- package/lib/assets/ops/scripts/mkdocs.js +82 -82
- package/lib/assets/ops/scripts/release.js +431 -431
- package/lib/assets/ops/scripts/sonar_local.js +726 -726
- package/lib/assets/ops/scripts/ssh.js +190 -190
- package/lib/assets/ops/scripts/vault.js +299 -299
- package/lib/assets/package-lock.json +1673 -1673
- package/lib/assets/package.json +45 -45
- package/lib/gulpfile.js +37 -37
- package/package.json +41 -41
|
@@ -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 等のターミナルマルチプレクサの利用を推奨します。
|