@k2works/claude-code-booster 6.1.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/assets/.claude/skills/practicing-getting-start-tdd/SKILL.md +3 -7
- package/lib/assets/docs/article/index.md +16 -41
- package/lib/assets/docs/assets/js/extra.js +5 -1
- package/lib/assets/docs/assets/js/mathjax.js +27 -0
- package/lib/assets/docs/index.md +1 -1
- package/lib/assets/mkdocs.yml +6 -7
- package/lib/assets/ops/docker/mkdoc/Dockerfile +19 -19
- package/lib/assets/package.json +1 -1
- package/package.json +1 -1
- package/lib/assets/docs/article/functional-desgin-ppp/all/01-immutability-and-data-transformation.md +0 -484
- package/lib/assets/docs/article/functional-desgin-ppp/all/02-function-composition.md +0 -528
- package/lib/assets/docs/article/functional-desgin-ppp/all/03-polymorphism.md +0 -546
- package/lib/assets/docs/article/functional-desgin-ppp/all/04-data-validation.md +0 -309
- package/lib/assets/docs/article/functional-desgin-ppp/all/05-property-based-testing.md +0 -329
- package/lib/assets/docs/article/functional-desgin-ppp/all/06-tdd-and-functional.md +0 -507
- package/lib/assets/docs/article/functional-desgin-ppp/all/07-composite-pattern.md +0 -307
- package/lib/assets/docs/article/functional-desgin-ppp/all/08-decorator-pattern.md +0 -300
- package/lib/assets/docs/article/functional-desgin-ppp/all/09-adapter-pattern.md +0 -345
- package/lib/assets/docs/article/functional-desgin-ppp/all/10-strategy-pattern.md +0 -312
- package/lib/assets/docs/article/functional-desgin-ppp/all/11-command-pattern.md +0 -295
- package/lib/assets/docs/article/functional-desgin-ppp/all/12-visitor-pattern.md +0 -331
- package/lib/assets/docs/article/functional-desgin-ppp/all/13-abstract-factory-pattern.md +0 -328
- package/lib/assets/docs/article/functional-desgin-ppp/all/14-abstract-server-pattern.md +0 -374
- package/lib/assets/docs/article/functional-desgin-ppp/all/15-gossiping-bus-drivers.md +0 -165
- package/lib/assets/docs/article/functional-desgin-ppp/all/16-payroll-system.md +0 -187
- package/lib/assets/docs/article/functional-desgin-ppp/all/17-video-rental-system.md +0 -321
- package/lib/assets/docs/article/functional-desgin-ppp/all/18-concurrency-system.md +0 -296
- package/lib/assets/docs/article/functional-desgin-ppp/all/19-wa-tor-simulation.md +0 -295
- package/lib/assets/docs/article/functional-desgin-ppp/all/20-pattern-interactions.md +0 -283
- package/lib/assets/docs/article/functional-desgin-ppp/all/21-best-practices.md +0 -303
- package/lib/assets/docs/article/functional-desgin-ppp/all/22-oo-to-fp-migration.md +0 -346
- package/lib/assets/docs/article/functional-desgin-ppp/all/index.md +0 -388
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/01-immutability-and-data-transformation.md +0 -282
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/02-function-composition.md +0 -389
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/03-polymorphism.md +0 -393
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/04-clojure-spec.md +0 -359
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/05-property-based-testing.md +0 -361
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/06-tdd-in-functional.md +0 -392
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/07-composite-pattern.md +0 -538
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/08-decorator-pattern.md +0 -404
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/09-adapter-pattern.md +0 -408
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/10-strategy-pattern.md +0 -494
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/11-command-pattern.md +0 -575
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/12-visitor-pattern.md +0 -576
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/13-abstract-factory-pattern.md +0 -484
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/14-abstract-server-pattern.md +0 -471
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/15-gossiping-bus-drivers.md +0 -334
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/16-payroll-system.md +0 -410
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/17-video-rental-system.md +0 -459
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/18-concurrency-system.md +0 -484
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/19-wator-simulation.md +0 -748
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/20-pattern-interactions.md +0 -576
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/21-best-practices.md +0 -527
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/22-oo-to-fp-migration.md +0 -541
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/index.md +0 -241
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/01-immutability-and-data-transformation.md +0 -392
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/02-function-composition.md +0 -383
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/03-polymorphism.md +0 -384
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/04-data-validation.md +0 -204
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/05-property-based-testing.md +0 -277
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/06-tdd-and-fp.md +0 -303
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/07-effects-and-pure-functions.md +0 -173
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/08-error-handling-strategies.md +0 -177
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/09-io-and-external-systems.md +0 -263
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/10-concurrency-patterns.md +0 -278
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/11-command-pattern.md +0 -157
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/12-visitor-pattern.md +0 -185
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/13-abstract-factory-pattern.md +0 -613
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/14-abstract-server-pattern.md +0 -738
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/15-gossiping-bus-drivers.md +0 -300
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/16-payroll-system.md +0 -429
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/17-video-rental-system.md +0 -328
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/18-concurrency-system.md +0 -475
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/19-wator-simulation.md +0 -532
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/20-pattern-interactions.md +0 -296
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/21-best-practices.md +0 -349
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/22-oo-to-fp-migration.md +0 -404
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/index.md +0 -248
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/01-immutability-and-data-transformation.md +0 -393
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/02-function-composition.md +0 -461
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/03-polymorphism.md +0 -504
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/04-data-validation.md +0 -425
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/05-property-based-testing.md +0 -391
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/06-tdd-functional.md +0 -696
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/07-composite-pattern.md +0 -451
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/08-decorator-pattern.md +0 -488
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/09-adapter-pattern.md +0 -488
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/10-strategy-pattern.md +0 -436
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/11-command-pattern.md +0 -437
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/12-visitor-pattern.md +0 -348
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/13-abstract-factory-pattern.md +0 -318
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/14-abstract-server-pattern.md +0 -605
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/15-gossiping-bus-drivers.md +0 -364
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/16-payroll-system.md +0 -359
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/17-video-rental-system.md +0 -423
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/18-concurrency-system.md +0 -376
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/19-wator-simulation.md +0 -412
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/20-pattern-interactions.md +0 -300
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/21-best-practices.md +0 -333
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/22-oo-to-fp-migration.md +0 -341
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/index.md +0 -274
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/01-immutability-and-data-transformation.md +0 -307
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/02-function-composition.md +0 -313
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/03-polymorphism.md +0 -371
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/04-data-validation.md +0 -266
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/05-property-based-testing.md +0 -263
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/06-tdd-functional.md +0 -292
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/07-composite-pattern.md +0 -404
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/08-decorator-pattern.md +0 -328
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/09-adapter-pattern.md +0 -391
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/10-strategy-pattern.md +0 -296
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/11-command-pattern.md +0 -312
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/12-visitor-pattern.md +0 -335
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/13-abstract-factory-pattern.md +0 -341
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/14-abstract-server-pattern.md +0 -388
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/15-gossiping-bus-drivers.md +0 -186
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/16-payroll-system.md +0 -228
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/17-video-rental-system.md +0 -253
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/18-concurrency-system.md +0 -372
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/19-wator-simulation.md +0 -447
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/20-pattern-interactions.md +0 -334
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/21-best-practices.md +0 -412
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/22-oo-to-fp-migration.md +0 -478
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/index.md +0 -174
- package/lib/assets/docs/article/functional-desgin-ppp/index.md +0 -90
- package/lib/assets/docs/article/functional-desgin-ppp/rust/01-immutability-and-data-transformation.md +0 -459
- package/lib/assets/docs/article/functional-desgin-ppp/rust/02-function-composition.md +0 -472
- package/lib/assets/docs/article/functional-desgin-ppp/rust/03-polymorphism.md +0 -434
- package/lib/assets/docs/article/functional-desgin-ppp/rust/04-data-validation.md +0 -282
- package/lib/assets/docs/article/functional-desgin-ppp/rust/05-property-based-testing.md +0 -256
- package/lib/assets/docs/article/functional-desgin-ppp/rust/06-tdd-and-functional.md +0 -850
- package/lib/assets/docs/article/functional-desgin-ppp/rust/07-composite-pattern.md +0 -393
- package/lib/assets/docs/article/functional-desgin-ppp/rust/08-decorator-pattern.md +0 -392
- package/lib/assets/docs/article/functional-desgin-ppp/rust/09-adapter-pattern.md +0 -348
- package/lib/assets/docs/article/functional-desgin-ppp/rust/10-strategy-pattern.md +0 -340
- package/lib/assets/docs/article/functional-desgin-ppp/rust/11-command-pattern.md +0 -365
- package/lib/assets/docs/article/functional-desgin-ppp/rust/12-visitor-pattern.md +0 -388
- package/lib/assets/docs/article/functional-desgin-ppp/rust/13-abstract-factory-pattern.md +0 -370
- package/lib/assets/docs/article/functional-desgin-ppp/rust/14-abstract-server-pattern.md +0 -401
- package/lib/assets/docs/article/functional-desgin-ppp/rust/15-gossiping-bus-drivers.md +0 -309
- package/lib/assets/docs/article/functional-desgin-ppp/rust/16-payroll-system.md +0 -306
- package/lib/assets/docs/article/functional-desgin-ppp/rust/17-video-rental-system.md +0 -313
- package/lib/assets/docs/article/functional-desgin-ppp/rust/18-concurrency-system.md +0 -324
- package/lib/assets/docs/article/functional-desgin-ppp/rust/19-wator-simulation.md +0 -320
- package/lib/assets/docs/article/functional-desgin-ppp/rust/20-pattern-interactions.md +0 -313
- package/lib/assets/docs/article/functional-desgin-ppp/rust/21-best-practices.md +0 -345
- package/lib/assets/docs/article/functional-desgin-ppp/rust/22-oo-to-fp-migration.md +0 -358
- package/lib/assets/docs/article/functional-desgin-ppp/rust/index.md +0 -243
- package/lib/assets/docs/article/functional-desgin-ppp/scala/01-immutability-and-data-transformation.md +0 -337
- package/lib/assets/docs/article/functional-desgin-ppp/scala/02-function-composition.md +0 -357
- package/lib/assets/docs/article/functional-desgin-ppp/scala/03-polymorphism.md +0 -366
- package/lib/assets/docs/article/functional-desgin-ppp/scala/04-data-validation.md +0 -373
- package/lib/assets/docs/article/functional-desgin-ppp/scala/05-property-based-testing.md +0 -524
- package/lib/assets/docs/article/functional-desgin-ppp/scala/06-tdd-functional.md +0 -566
- package/lib/assets/docs/article/functional-desgin-ppp/scala/07-composite-pattern.md +0 -372
- package/lib/assets/docs/article/functional-desgin-ppp/scala/08-decorator-pattern.md +0 -336
- package/lib/assets/docs/article/functional-desgin-ppp/scala/09-adapter-pattern.md +0 -526
- package/lib/assets/docs/article/functional-desgin-ppp/scala/10-strategy-pattern.md +0 -450
- package/lib/assets/docs/article/functional-desgin-ppp/scala/11-command-pattern.md +0 -416
- package/lib/assets/docs/article/functional-desgin-ppp/scala/12-visitor-pattern.md +0 -388
- package/lib/assets/docs/article/functional-desgin-ppp/scala/13-abstract-factory-pattern.md +0 -407
- package/lib/assets/docs/article/functional-desgin-ppp/scala/14-abstract-server-pattern.md +0 -485
- package/lib/assets/docs/article/functional-desgin-ppp/scala/15-gossiping-bus-drivers.md +0 -400
- package/lib/assets/docs/article/functional-desgin-ppp/scala/16-payroll-system.md +0 -351
- package/lib/assets/docs/article/functional-desgin-ppp/scala/17-video-rental-system.md +0 -333
- package/lib/assets/docs/article/functional-desgin-ppp/scala/18-concurrency-system.md +0 -739
- package/lib/assets/docs/article/functional-desgin-ppp/scala/19-wator-simulation.md +0 -633
- package/lib/assets/docs/article/functional-desgin-ppp/scala/20-pattern-interactions.md +0 -521
- package/lib/assets/docs/article/functional-desgin-ppp/scala/21-best-practices.md +0 -442
- package/lib/assets/docs/article/functional-desgin-ppp/scala/22-oo-to-fp-migration.md +0 -697
- package/lib/assets/docs/article/functional-desgin-ppp/scala/index.md +0 -243
- package/lib/assets/docs/article/getting-start-docker-kubernetes/01-container-and-docker-basics.md +0 -341
- package/lib/assets/docs/article/getting-start-docker-kubernetes/02-container-deployment.md +0 -785
- package/lib/assets/docs/article/getting-start-docker-kubernetes/03-practical-container-build-deploy.md +0 -466
- package/lib/assets/docs/article/getting-start-docker-kubernetes/04-multi-container-application.md +0 -878
- package/lib/assets/docs/article/getting-start-docker-kubernetes/05-kubernetes-introduction.md +0 -585
- package/lib/assets/docs/article/getting-start-docker-kubernetes/06-kubernetes-deploy-cluster.md +0 -620
- package/lib/assets/docs/article/getting-start-docker-kubernetes/07-kubernetes-advanced.md +0 -621
- package/lib/assets/docs/article/getting-start-docker-kubernetes/08-kubernetes-packaging.md +0 -518
- package/lib/assets/docs/article/getting-start-docker-kubernetes/09-container-operations.md +0 -546
- package/lib/assets/docs/article/getting-start-docker-kubernetes/10-optimal-container-image.md +0 -640
- package/lib/assets/docs/article/getting-start-docker-kubernetes/11-continuous-delivery.md +0 -607
- package/lib/assets/docs/article/getting-start-docker-kubernetes/12-container-use-cases.md +0 -463
- package/lib/assets/docs/article/getting-start-docker-kubernetes/13-case-monolith-compose-vs-kustomize.md +0 -346
- package/lib/assets/docs/article/getting-start-docker-kubernetes/14-case-event-driven-kustomize-vs-helm.md +0 -324
- package/lib/assets/docs/article/getting-start-docker-kubernetes/15-case-escqrs-axon-kustomize-vs-helm.md +0 -297
- package/lib/assets/docs/article/getting-start-docker-kubernetes/16-case-escqrs-kafka-kustomize-vs-helm.md +0 -256
- package/lib/assets/docs/article/getting-start-docker-kubernetes/17-case-comparison-summary.md +0 -141
- package/lib/assets/docs/article/getting-start-docker-kubernetes/18-case-load-testing.md +0 -303
- package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-a-dev-tools-setup.md +0 -274
- package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-b-orchestration-environments.md +0 -530
- package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-c-tips.md +0 -519
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-01-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-02-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-03-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-04-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-05-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-06-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-07-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-08-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-09-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-10-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-11-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/chapter-12-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/images/overview-comic.png +0 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/index.md +0 -82
- package/lib/assets/docs/article/getting-start-docker-kubernetes/outline.md +0 -220
- package/lib/assets/docs/article/getting-start-tdd/clojure/01-todo-list-and-first-test.md +0 -175
- package/lib/assets/docs/article/getting-start-tdd/clojure/02-fake-it-and-triangulation.md +0 -171
- package/lib/assets/docs/article/getting-start-tdd/clojure/03-obvious-implementation-and-refactoring.md +0 -144
- package/lib/assets/docs/article/getting-start-tdd/clojure/04-version-control-and-conventional-commits.md +0 -97
- package/lib/assets/docs/article/getting-start-tdd/clojure/05-package-management-and-static-analysis.md +0 -308
- package/lib/assets/docs/article/getting-start-tdd/clojure/06-task-runner-and-ci-cd.md +0 -250
- package/lib/assets/docs/article/getting-start-tdd/clojure/07-protocols-and-records.md +0 -140
- package/lib/assets/docs/article/getting-start-tdd/clojure/08-multimethods-and-design-patterns.md +0 -139
- package/lib/assets/docs/article/getting-start-tdd/clojure/09-namespaces-and-module-design.md +0 -136
- package/lib/assets/docs/article/getting-start-tdd/clojure/10-higher-order-functions-and-composition.md +0 -123
- package/lib/assets/docs/article/getting-start-tdd/clojure/11-persistent-data-and-pipeline.md +0 -147
- package/lib/assets/docs/article/getting-start-tdd/clojure/12-error-handling-and-spec.md +0 -170
- package/lib/assets/docs/article/getting-start-tdd/clojure/index.md +0 -65
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter01.md +0 -241
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter02.md +0 -253
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter03.md +0 -211
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter04.md +0 -101
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter05.md +0 -265
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter06.md +0 -204
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter07.md +0 -223
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter08.md +0 -258
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter09.md +0 -183
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter10.md +0 -175
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter11.md +0 -201
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter12.md +0 -220
- package/lib/assets/docs/article/getting-start-tdd/csharp/index.md +0 -83
- package/lib/assets/docs/article/getting-start-tdd/elixir/01-todo-list-and-first-test.md +0 -96
- package/lib/assets/docs/article/getting-start-tdd/elixir/02-fake-it-and-triangulation.md +0 -104
- package/lib/assets/docs/article/getting-start-tdd/elixir/03-obvious-implementation-and-refactoring.md +0 -118
- package/lib/assets/docs/article/getting-start-tdd/elixir/04-version-control-and-conventional-commits.md +0 -105
- package/lib/assets/docs/article/getting-start-tdd/elixir/05-package-management-and-static-analysis.md +0 -97
- package/lib/assets/docs/article/getting-start-tdd/elixir/06-task-runner-and-ci-cd.md +0 -80
- package/lib/assets/docs/article/getting-start-tdd/elixir/07-structs-and-protocols.md +0 -119
- package/lib/assets/docs/article/getting-start-tdd/elixir/08-pattern-matching-and-guards.md +0 -117
- package/lib/assets/docs/article/getting-start-tdd/elixir/09-module-design-and-behaviours.md +0 -113
- package/lib/assets/docs/article/getting-start-tdd/elixir/10-higher-order-functions-and-pipeline.md +0 -187
- package/lib/assets/docs/article/getting-start-tdd/elixir/11-stream-and-lazy-evaluation.md +0 -151
- package/lib/assets/docs/article/getting-start-tdd/elixir/12-error-handling-and-with.md +0 -154
- package/lib/assets/docs/article/getting-start-tdd/elixir/index.md +0 -35
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter01.md +0 -211
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter02.md +0 -255
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter03.md +0 -227
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter04.md +0 -188
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter05.md +0 -276
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter06.md +0 -199
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter07.md +0 -170
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter08.md +0 -184
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter09.md +0 -231
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter10.md +0 -198
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter11.md +0 -221
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter12.md +0 -224
- package/lib/assets/docs/article/getting-start-tdd/fsharp/index.md +0 -71
- package/lib/assets/docs/article/getting-start-tdd/go/01-todo-list-and-first-test.md +0 -222
- package/lib/assets/docs/article/getting-start-tdd/go/02-fake-it-and-triangulation.md +0 -311
- package/lib/assets/docs/article/getting-start-tdd/go/03-obvious-implementation-and-refactoring.md +0 -348
- package/lib/assets/docs/article/getting-start-tdd/go/04-version-control-and-conventional-commits.md +0 -121
- package/lib/assets/docs/article/getting-start-tdd/go/05-package-management-and-static-analysis.md +0 -281
- package/lib/assets/docs/article/getting-start-tdd/go/06-task-runner-and-ci-cd.md +0 -242
- package/lib/assets/docs/article/getting-start-tdd/go/07-encapsulation-and-polymorphism.md +0 -402
- package/lib/assets/docs/article/getting-start-tdd/go/08-design-patterns.md +0 -430
- package/lib/assets/docs/article/getting-start-tdd/go/09-solid-principles-and-module-design.md +0 -408
- package/lib/assets/docs/article/getting-start-tdd/go/10-higher-order-functions-and-composition.md +0 -234
- package/lib/assets/docs/article/getting-start-tdd/go/11-immutable-data-and-pipeline.md +0 -304
- package/lib/assets/docs/article/getting-start-tdd/go/12-error-handling-and-type-safety.md +0 -419
- package/lib/assets/docs/article/getting-start-tdd/go/index.md +0 -83
- package/lib/assets/docs/article/getting-start-tdd/haskell/01-todo-list-and-first-test.md +0 -288
- package/lib/assets/docs/article/getting-start-tdd/haskell/02-fake-it-and-triangulation.md +0 -346
- package/lib/assets/docs/article/getting-start-tdd/haskell/03-obvious-implementation-and-refactoring.md +0 -266
- package/lib/assets/docs/article/getting-start-tdd/haskell/04-version-control-and-conventional-commits.md +0 -191
- package/lib/assets/docs/article/getting-start-tdd/haskell/05-package-management-and-static-analysis.md +0 -322
- package/lib/assets/docs/article/getting-start-tdd/haskell/06-task-runner-and-ci-cd.md +0 -318
- package/lib/assets/docs/article/getting-start-tdd/haskell/07-algebraic-data-types-and-type-classes.md +0 -421
- package/lib/assets/docs/article/getting-start-tdd/haskell/08-pattern-matching-and-guards.md +0 -399
- package/lib/assets/docs/article/getting-start-tdd/haskell/09-module-design-and-smart-constructors.md +0 -470
- package/lib/assets/docs/article/getting-start-tdd/haskell/10-higher-order-functions-and-currying.md +0 -443
- package/lib/assets/docs/article/getting-start-tdd/haskell/11-function-composition-and-point-free.md +0 -401
- package/lib/assets/docs/article/getting-start-tdd/haskell/12-monad-and-error-handling.md +0 -640
- package/lib/assets/docs/article/getting-start-tdd/haskell/index.md +0 -49
- package/lib/assets/docs/article/getting-start-tdd/index.md +0 -93
- package/lib/assets/docs/article/getting-start-tdd/integration/01-language-overview.md +0 -384
- package/lib/assets/docs/article/getting-start-tdd/integration/02-test-framework-comparison.md +0 -358
- package/lib/assets/docs/article/getting-start-tdd/integration/03-tdd-pattern-comparison.md +0 -454
- package/lib/assets/docs/article/getting-start-tdd/integration/04-type-system-comparison.md +0 -418
- package/lib/assets/docs/article/getting-start-tdd/integration/05-dev-environment-comparison.md +0 -339
- package/lib/assets/docs/article/getting-start-tdd/integration/06-learning-roadmap.md +0 -299
- package/lib/assets/docs/article/getting-start-tdd/integration/index.md +0 -69
- package/lib/assets/docs/article/getting-start-tdd/java/01-todo-list-and-first-test.md +0 -243
- package/lib/assets/docs/article/getting-start-tdd/java/02-fake-it-and-triangulation.md +0 -270
- package/lib/assets/docs/article/getting-start-tdd/java/03-obvious-implementation-and-refactoring.md +0 -194
- package/lib/assets/docs/article/getting-start-tdd/java/04-version-control-and-conventional-commits.md +0 -124
- package/lib/assets/docs/article/getting-start-tdd/java/05-package-management-and-static-analysis.md +0 -391
- package/lib/assets/docs/article/getting-start-tdd/java/06-task-runner-and-ci-cd.md +0 -281
- package/lib/assets/docs/article/getting-start-tdd/java/07-encapsulation-and-polymorphism.md +0 -635
- package/lib/assets/docs/article/getting-start-tdd/java/08-design-patterns.md +0 -402
- package/lib/assets/docs/article/getting-start-tdd/java/09-solid-principles-and-module-design.md +0 -319
- package/lib/assets/docs/article/getting-start-tdd/java/10-higher-order-functions-and-composition.md +0 -197
- package/lib/assets/docs/article/getting-start-tdd/java/11-immutable-data-and-pipeline.md +0 -176
- package/lib/assets/docs/article/getting-start-tdd/java/12-error-handling-and-type-safety.md +0 -214
- package/lib/assets/docs/article/getting-start-tdd/java/index.md +0 -61
- package/lib/assets/docs/article/getting-start-tdd/node/01-todo-list-and-first-test.md +0 -253
- package/lib/assets/docs/article/getting-start-tdd/node/02-fake-it-and-triangulation.md +0 -271
- package/lib/assets/docs/article/getting-start-tdd/node/03-obvious-implementation-and-refactoring.md +0 -178
- package/lib/assets/docs/article/getting-start-tdd/node/04-version-control-and-conventional-commits.md +0 -121
- package/lib/assets/docs/article/getting-start-tdd/node/05-package-management-and-static-analysis.md +0 -323
- package/lib/assets/docs/article/getting-start-tdd/node/06-task-runner-and-ci-cd.md +0 -244
- package/lib/assets/docs/article/getting-start-tdd/node/07-encapsulation-and-polymorphism.md +0 -336
- package/lib/assets/docs/article/getting-start-tdd/node/08-design-patterns.md +0 -331
- package/lib/assets/docs/article/getting-start-tdd/node/09-solid-principles-and-module-design.md +0 -294
- package/lib/assets/docs/article/getting-start-tdd/node/10-higher-order-functions-and-composition.md +0 -208
- package/lib/assets/docs/article/getting-start-tdd/node/11-immutable-data-and-pipeline.md +0 -216
- package/lib/assets/docs/article/getting-start-tdd/node/12-error-handling-and-type-safety.md +0 -304
- package/lib/assets/docs/article/getting-start-tdd/node/index.md +0 -56
- package/lib/assets/docs/article/getting-start-tdd/php/01-todo-list-and-first-test.md +0 -268
- package/lib/assets/docs/article/getting-start-tdd/php/02-fake-it-and-triangulation.md +0 -209
- package/lib/assets/docs/article/getting-start-tdd/php/03-obvious-implementation-and-refactoring.md +0 -257
- package/lib/assets/docs/article/getting-start-tdd/php/04-version-control-and-conventional-commits.md +0 -150
- package/lib/assets/docs/article/getting-start-tdd/php/05-package-management-and-static-analysis.md +0 -419
- package/lib/assets/docs/article/getting-start-tdd/php/06-task-runner-and-ci-cd.md +0 -330
- package/lib/assets/docs/article/getting-start-tdd/php/07-encapsulation-and-polymorphism.md +0 -380
- package/lib/assets/docs/article/getting-start-tdd/php/08-design-patterns.md +0 -461
- package/lib/assets/docs/article/getting-start-tdd/php/09-solid-principles-and-module-design.md +0 -468
- package/lib/assets/docs/article/getting-start-tdd/php/10-higher-order-functions-and-composition.md +0 -190
- package/lib/assets/docs/article/getting-start-tdd/php/11-immutable-data-and-pipeline.md +0 -274
- package/lib/assets/docs/article/getting-start-tdd/php/12-error-handling-and-type-safety.md +0 -316
- package/lib/assets/docs/article/getting-start-tdd/php/index.md +0 -84
- package/lib/assets/docs/article/getting-start-tdd/python/01-todo-list-and-first-test.md +0 -210
- package/lib/assets/docs/article/getting-start-tdd/python/02-fake-it-and-triangulation.md +0 -256
- package/lib/assets/docs/article/getting-start-tdd/python/03-obvious-implementation-and-refactoring.md +0 -208
- package/lib/assets/docs/article/getting-start-tdd/python/04-version-control-and-conventional-commits.md +0 -96
- package/lib/assets/docs/article/getting-start-tdd/python/05-package-management-and-static-analysis.md +0 -283
- package/lib/assets/docs/article/getting-start-tdd/python/06-task-runner-and-ci-cd.md +0 -199
- package/lib/assets/docs/article/getting-start-tdd/python/07-encapsulation-and-polymorphism.md +0 -217
- package/lib/assets/docs/article/getting-start-tdd/python/08-design-patterns.md +0 -181
- package/lib/assets/docs/article/getting-start-tdd/python/09-solid-principles-and-module-design.md +0 -139
- package/lib/assets/docs/article/getting-start-tdd/python/10-higher-order-functions-and-composition.md +0 -131
- package/lib/assets/docs/article/getting-start-tdd/python/11-immutable-data-and-pipeline.md +0 -125
- package/lib/assets/docs/article/getting-start-tdd/python/12-error-handling-and-type-safety.md +0 -135
- package/lib/assets/docs/article/getting-start-tdd/python/index.md +0 -55
- package/lib/assets/docs/article/getting-start-tdd/ruby/01-todo-list-and-first-test.md +0 -240
- package/lib/assets/docs/article/getting-start-tdd/ruby/02-fake-it-and-triangulation.md +0 -247
- package/lib/assets/docs/article/getting-start-tdd/ruby/03-obvious-implementation-and-refactoring.md +0 -237
- package/lib/assets/docs/article/getting-start-tdd/ruby/04-version-control-and-conventional-commits.md +0 -121
- package/lib/assets/docs/article/getting-start-tdd/ruby/05-package-management-and-static-analysis.md +0 -296
- package/lib/assets/docs/article/getting-start-tdd/ruby/06-task-runner-and-ci-cd.md +0 -257
- package/lib/assets/docs/article/getting-start-tdd/ruby/07-encapsulation-and-polymorphism.md +0 -288
- package/lib/assets/docs/article/getting-start-tdd/ruby/08-design-patterns.md +0 -338
- package/lib/assets/docs/article/getting-start-tdd/ruby/09-solid-principles-and-module-design.md +0 -205
- package/lib/assets/docs/article/getting-start-tdd/ruby/10-higher-order-functions-and-composition.md +0 -184
- package/lib/assets/docs/article/getting-start-tdd/ruby/11-immutable-data-and-pipeline.md +0 -246
- package/lib/assets/docs/article/getting-start-tdd/ruby/12-error-handling-and-type-safety.md +0 -407
- package/lib/assets/docs/article/getting-start-tdd/ruby/index.md +0 -83
- package/lib/assets/docs/article/getting-start-tdd/rust/01-todo-list-and-first-test.md +0 -220
- package/lib/assets/docs/article/getting-start-tdd/rust/02-fake-it-and-triangulation.md +0 -273
- package/lib/assets/docs/article/getting-start-tdd/rust/03-obvious-implementation-and-refactoring.md +0 -242
- package/lib/assets/docs/article/getting-start-tdd/rust/04-version-control-and-conventional-commits.md +0 -101
- package/lib/assets/docs/article/getting-start-tdd/rust/05-package-management-and-static-analysis.md +0 -221
- package/lib/assets/docs/article/getting-start-tdd/rust/06-task-runner-and-ci-cd.md +0 -173
- package/lib/assets/docs/article/getting-start-tdd/rust/07-encapsulation-and-polymorphism.md +0 -151
- package/lib/assets/docs/article/getting-start-tdd/rust/08-design-patterns.md +0 -154
- package/lib/assets/docs/article/getting-start-tdd/rust/09-solid-principles-and-module-design.md +0 -119
- package/lib/assets/docs/article/getting-start-tdd/rust/10-higher-order-functions-and-composition.md +0 -103
- package/lib/assets/docs/article/getting-start-tdd/rust/11-immutable-data-and-pipeline.md +0 -114
- package/lib/assets/docs/article/getting-start-tdd/rust/12-error-handling-and-type-safety.md +0 -121
- package/lib/assets/docs/article/getting-start-tdd/rust/index.md +0 -83
- package/lib/assets/docs/article/getting-start-tdd/scala/01-todo-list-and-first-test.md +0 -120
- package/lib/assets/docs/article/getting-start-tdd/scala/02-fake-it-and-triangulation.md +0 -116
- package/lib/assets/docs/article/getting-start-tdd/scala/03-obvious-implementation-and-refactoring.md +0 -108
- package/lib/assets/docs/article/getting-start-tdd/scala/04-version-control-and-conventional-commits.md +0 -132
- package/lib/assets/docs/article/getting-start-tdd/scala/05-package-management-and-static-analysis.md +0 -205
- package/lib/assets/docs/article/getting-start-tdd/scala/06-task-runner-and-ci-cd.md +0 -195
- package/lib/assets/docs/article/getting-start-tdd/scala/07-case-classes-and-traits.md +0 -148
- package/lib/assets/docs/article/getting-start-tdd/scala/08-pattern-matching-and-sealed-traits.md +0 -115
- package/lib/assets/docs/article/getting-start-tdd/scala/09-packages-and-module-design.md +0 -84
- package/lib/assets/docs/article/getting-start-tdd/scala/10-higher-order-functions-and-composition.md +0 -113
- package/lib/assets/docs/article/getting-start-tdd/scala/11-collections-and-lazy-evaluation.md +0 -103
- package/lib/assets/docs/article/getting-start-tdd/scala/12-error-handling-and-type-safety.md +0 -101
- package/lib/assets/docs/article/getting-start-tdd/scala/index.md +0 -65
- package/lib/assets/docs/article/grokking-concurrency/all/index.md +0 -403
- package/lib/assets/docs/article/grokking-concurrency/all/part-1-ch02-sequential.md +0 -563
- package/lib/assets/docs/article/grokking-concurrency/all/part-2-ch04-05-threads.md +0 -478
- package/lib/assets/docs/article/grokking-concurrency/all/part-3-ch06-multitasking.md +0 -529
- package/lib/assets/docs/article/grokking-concurrency/all/part-4-ch07-parallel-patterns.md +0 -429
- package/lib/assets/docs/article/grokking-concurrency/all/part-5-ch08-09-synchronization.md +0 -519
- package/lib/assets/docs/article/grokking-concurrency/all/part-6-ch10-11-nonblocking-io.md +0 -444
- package/lib/assets/docs/article/grokking-concurrency/all/part-7-ch12-async.md +0 -474
- package/lib/assets/docs/article/grokking-concurrency/all/part-8-ch13-mapreduce.md +0 -386
- package/lib/assets/docs/article/grokking-concurrency/clojure/index.md +0 -106
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-1.md +0 -107
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-2.md +0 -100
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-3.md +0 -121
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-4.md +0 -122
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-5.md +0 -117
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-6.md +0 -88
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-7.md +0 -99
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-8.md +0 -119
- package/lib/assets/docs/article/grokking-concurrency/csharp/index.md +0 -91
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-1.md +0 -96
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-2.md +0 -122
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-3.md +0 -100
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-4.md +0 -111
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-5.md +0 -98
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-6.md +0 -60
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-7.md +0 -83
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-8.md +0 -91
- package/lib/assets/docs/article/grokking-concurrency/fsharp/index.md +0 -55
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-1.md +0 -79
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-2.md +0 -102
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-3.md +0 -93
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-4.md +0 -109
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-5.md +0 -103
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-6.md +0 -92
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-7.md +0 -120
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-8.md +0 -106
- package/lib/assets/docs/article/grokking-concurrency/haskell/index.md +0 -238
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-1.md +0 -95
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-2.md +0 -95
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-3.md +0 -90
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-4.md +0 -105
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-5.md +0 -98
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-6.md +0 -94
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-7.md +0 -110
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-8.md +0 -117
- package/lib/assets/docs/article/grokking-concurrency/index.md +0 -66
- package/lib/assets/docs/article/grokking-concurrency/java/index.md +0 -92
- package/lib/assets/docs/article/grokking-concurrency/java/part-1.md +0 -307
- package/lib/assets/docs/article/grokking-concurrency/java/part-2.md +0 -333
- package/lib/assets/docs/article/grokking-concurrency/java/part-3.md +0 -220
- package/lib/assets/docs/article/grokking-concurrency/java/part-4.md +0 -212
- package/lib/assets/docs/article/grokking-concurrency/java/part-5.md +0 -111
- package/lib/assets/docs/article/grokking-concurrency/java/part-6.md +0 -68
- package/lib/assets/docs/article/grokking-concurrency/java/part-7.md +0 -100
- package/lib/assets/docs/article/grokking-concurrency/java/part-8.md +0 -100
- package/lib/assets/docs/article/grokking-concurrency/python/index.md +0 -303
- package/lib/assets/docs/article/grokking-concurrency/python/part-1.md +0 -238
- package/lib/assets/docs/article/grokking-concurrency/python/part-2.md +0 -417
- package/lib/assets/docs/article/grokking-concurrency/python/part-3.md +0 -226
- package/lib/assets/docs/article/grokking-concurrency/python/part-4.md +0 -298
- package/lib/assets/docs/article/grokking-concurrency/python/part-5.md +0 -314
- package/lib/assets/docs/article/grokking-concurrency/python/part-6.md +0 -296
- package/lib/assets/docs/article/grokking-concurrency/python/part-7.md +0 -313
- package/lib/assets/docs/article/grokking-concurrency/python/part-8.md +0 -359
- package/lib/assets/docs/article/grokking-concurrency/rust/index.md +0 -260
- package/lib/assets/docs/article/grokking-concurrency/rust/part-1.md +0 -107
- package/lib/assets/docs/article/grokking-concurrency/rust/part-2.md +0 -119
- package/lib/assets/docs/article/grokking-concurrency/rust/part-3.md +0 -125
- package/lib/assets/docs/article/grokking-concurrency/rust/part-4.md +0 -174
- package/lib/assets/docs/article/grokking-concurrency/rust/part-5.md +0 -157
- package/lib/assets/docs/article/grokking-concurrency/rust/part-6.md +0 -93
- package/lib/assets/docs/article/grokking-concurrency/rust/part-7.md +0 -132
- package/lib/assets/docs/article/grokking-concurrency/rust/part-8.md +0 -154
- package/lib/assets/docs/article/grokking-concurrency/scala/index.md +0 -59
- package/lib/assets/docs/article/grokking-concurrency/scala/part-1.md +0 -77
- package/lib/assets/docs/article/grokking-concurrency/scala/part-2.md +0 -111
- package/lib/assets/docs/article/grokking-concurrency/scala/part-3.md +0 -92
- package/lib/assets/docs/article/grokking-concurrency/scala/part-4.md +0 -109
- package/lib/assets/docs/article/grokking-concurrency/scala/part-5.md +0 -118
- package/lib/assets/docs/article/grokking-concurrency/scala/part-6.md +0 -82
- package/lib/assets/docs/article/grokking-concurrency/scala/part-7.md +0 -130
- package/lib/assets/docs/article/grokking-concurrency/scala/part-8.md +0 -128
- package/lib/assets/docs/article/grokkingfp/all/index.md +0 -368
- package/lib/assets/docs/article/grokkingfp/all/part-1-ch01-fp-introduction.md +0 -539
- package/lib/assets/docs/article/grokkingfp/all/part-1-ch02-pure-functions.md +0 -932
- package/lib/assets/docs/article/grokkingfp/all/part-2-ch03-immutable-data.md +0 -1137
- package/lib/assets/docs/article/grokkingfp/all/part-2-ch04-higher-order-functions.md +0 -1113
- package/lib/assets/docs/article/grokkingfp/all/part-2-ch05-flatmap.md +0 -1035
- package/lib/assets/docs/article/grokkingfp/all/part-3-ch06-option.md +0 -794
- package/lib/assets/docs/article/grokkingfp/all/part-3-ch07-either-adt.md +0 -880
- package/lib/assets/docs/article/grokkingfp/all/part-4-ch08-io-monad.md +0 -981
- package/lib/assets/docs/article/grokkingfp/all/part-4-ch09-streams.md +0 -935
- package/lib/assets/docs/article/grokkingfp/all/part-5-ch10-concurrency.md +0 -879
- package/lib/assets/docs/article/grokkingfp/all/part-6-ch11-application.md +0 -724
- package/lib/assets/docs/article/grokkingfp/all/part-6-ch12-testing.md +0 -635
- package/lib/assets/docs/article/grokkingfp/all/writing-plan.md +0 -721
- package/lib/assets/docs/article/grokkingfp/clojure/index.md +0 -276
- package/lib/assets/docs/article/grokkingfp/clojure/part-1.md +0 -676
- package/lib/assets/docs/article/grokkingfp/clojure/part-2.md +0 -652
- package/lib/assets/docs/article/grokkingfp/clojure/part-3.md +0 -629
- package/lib/assets/docs/article/grokkingfp/clojure/part-4.md +0 -706
- package/lib/assets/docs/article/grokkingfp/clojure/part-5.md +0 -760
- package/lib/assets/docs/article/grokkingfp/clojure/part-6.md +0 -730
- package/lib/assets/docs/article/grokkingfp/csharp/index.md +0 -246
- package/lib/assets/docs/article/grokkingfp/csharp/part-1.md +0 -820
- package/lib/assets/docs/article/grokkingfp/csharp/part-2.md +0 -980
- package/lib/assets/docs/article/grokkingfp/csharp/part-3.md +0 -990
- package/lib/assets/docs/article/grokkingfp/csharp/part-4.md +0 -958
- package/lib/assets/docs/article/grokkingfp/csharp/part-5.md +0 -956
- package/lib/assets/docs/article/grokkingfp/csharp/part-6.md +0 -748
- package/lib/assets/docs/article/grokkingfp/elixir/index.md +0 -203
- package/lib/assets/docs/article/grokkingfp/elixir/part-1.md +0 -721
- package/lib/assets/docs/article/grokkingfp/elixir/part-2.md +0 -847
- package/lib/assets/docs/article/grokkingfp/elixir/part-3.md +0 -994
- package/lib/assets/docs/article/grokkingfp/elixir/part-4.md +0 -983
- package/lib/assets/docs/article/grokkingfp/elixir/part-5.md +0 -1295
- package/lib/assets/docs/article/grokkingfp/elixir/part-6.md +0 -1058
- package/lib/assets/docs/article/grokkingfp/fsharp/index.md +0 -210
- package/lib/assets/docs/article/grokkingfp/fsharp/part-1.md +0 -723
- package/lib/assets/docs/article/grokkingfp/fsharp/part-2.md +0 -970
- package/lib/assets/docs/article/grokkingfp/fsharp/part-3.md +0 -981
- package/lib/assets/docs/article/grokkingfp/fsharp/part-4.md +0 -841
- package/lib/assets/docs/article/grokkingfp/fsharp/part-5.md +0 -920
- package/lib/assets/docs/article/grokkingfp/fsharp/part-6.md +0 -931
- package/lib/assets/docs/article/grokkingfp/haskell/index.md +0 -234
- package/lib/assets/docs/article/grokkingfp/haskell/part-1.md +0 -600
- package/lib/assets/docs/article/grokkingfp/haskell/part-2.md +0 -875
- package/lib/assets/docs/article/grokkingfp/haskell/part-3.md +0 -924
- package/lib/assets/docs/article/grokkingfp/haskell/part-4.md +0 -887
- package/lib/assets/docs/article/grokkingfp/haskell/part-5.md +0 -854
- package/lib/assets/docs/article/grokkingfp/haskell/part-6.md +0 -853
- package/lib/assets/docs/article/grokkingfp/index.md +0 -143
- package/lib/assets/docs/article/grokkingfp/java/index.md +0 -211
- package/lib/assets/docs/article/grokkingfp/java/part-1.md +0 -657
- package/lib/assets/docs/article/grokkingfp/java/part-2.md +0 -684
- package/lib/assets/docs/article/grokkingfp/java/part-3.md +0 -681
- package/lib/assets/docs/article/grokkingfp/java/part-4.md +0 -780
- package/lib/assets/docs/article/grokkingfp/java/part-5.md +0 -968
- package/lib/assets/docs/article/grokkingfp/java/part-6.md +0 -1337
- package/lib/assets/docs/article/grokkingfp/python/index.md +0 -258
- package/lib/assets/docs/article/grokkingfp/python/part-1.md +0 -452
- package/lib/assets/docs/article/grokkingfp/python/part-2.md +0 -967
- package/lib/assets/docs/article/grokkingfp/python/part-3.md +0 -1013
- package/lib/assets/docs/article/grokkingfp/python/part-4.md +0 -774
- package/lib/assets/docs/article/grokkingfp/python/part-5.md +0 -756
- package/lib/assets/docs/article/grokkingfp/python/part-6.md +0 -870
- package/lib/assets/docs/article/grokkingfp/ruby/index.md +0 -330
- package/lib/assets/docs/article/grokkingfp/ruby/part-1.md +0 -764
- package/lib/assets/docs/article/grokkingfp/ruby/part-2.md +0 -947
- package/lib/assets/docs/article/grokkingfp/ruby/part-3.md +0 -955
- package/lib/assets/docs/article/grokkingfp/ruby/part-4.md +0 -930
- package/lib/assets/docs/article/grokkingfp/ruby/part-5.md +0 -917
- package/lib/assets/docs/article/grokkingfp/ruby/part-6.md +0 -1421
- package/lib/assets/docs/article/grokkingfp/rust/index.md +0 -242
- package/lib/assets/docs/article/grokkingfp/rust/part-1.md +0 -643
- package/lib/assets/docs/article/grokkingfp/rust/part-2.md +0 -1069
- package/lib/assets/docs/article/grokkingfp/rust/part-3.md +0 -1003
- package/lib/assets/docs/article/grokkingfp/rust/part-4.md +0 -582
- package/lib/assets/docs/article/grokkingfp/rust/part-5.md +0 -714
- package/lib/assets/docs/article/grokkingfp/rust/part-6.md +0 -517
- package/lib/assets/docs/article/grokkingfp/scala/index.md +0 -171
- package/lib/assets/docs/article/grokkingfp/scala/part-1.md +0 -552
- package/lib/assets/docs/article/grokkingfp/scala/part-2.md +0 -955
- package/lib/assets/docs/article/grokkingfp/scala/part-3.md +0 -928
- package/lib/assets/docs/article/grokkingfp/scala/part-4.md +0 -751
- package/lib/assets/docs/article/grokkingfp/scala/part-5.md +0 -731
- package/lib/assets/docs/article/grokkingfp/scala/part-6.md +0 -876
- package/lib/assets/docs/article/grokkingfp/typescript/index.md +0 -273
- package/lib/assets/docs/article/grokkingfp/typescript/part-1.md +0 -570
- package/lib/assets/docs/article/grokkingfp/typescript/part-2.md +0 -1138
- package/lib/assets/docs/article/grokkingfp/typescript/part-3.md +0 -851
- package/lib/assets/docs/article/grokkingfp/typescript/part-4.md +0 -1096
- package/lib/assets/docs/article/grokkingfp/typescript/part-5.md +0 -726
- package/lib/assets/docs/article/grokkingfp/typescript/part-6.md +0 -991
- package/lib/assets/docs/article/practical-database-design/index.md +0 -121
- package/lib/assets/docs/article/practical-database-design/part1/chapter01.md +0 -297
- package/lib/assets/docs/article/practical-database-design/part1/chapter02.md +0 -527
- package/lib/assets/docs/article/practical-database-design/part1/chapter03.md +0 -566
- package/lib/assets/docs/article/practical-database-design/part2/chapter04.md +0 -933
- package/lib/assets/docs/article/practical-database-design/part2/chapter05.md +0 -1636
- package/lib/assets/docs/article/practical-database-design/part2/chapter06.md +0 -2725
- package/lib/assets/docs/article/practical-database-design/part2/chapter07.md +0 -2091
- package/lib/assets/docs/article/practical-database-design/part2/chapter08.md +0 -2114
- package/lib/assets/docs/article/practical-database-design/part2/chapter09.md +0 -2040
- package/lib/assets/docs/article/practical-database-design/part2/chapter10.md +0 -1396
- package/lib/assets/docs/article/practical-database-design/part2/chapter11.md +0 -1686
- package/lib/assets/docs/article/practical-database-design/part2/chapter12.md +0 -1426
- package/lib/assets/docs/article/practical-database-design/part2/chapter13.md +0 -1443
- package/lib/assets/docs/article/practical-database-design/part3/chapter14.md +0 -676
- package/lib/assets/docs/article/practical-database-design/part3/chapter15.md +0 -1634
- package/lib/assets/docs/article/practical-database-design/part3/chapter16.md +0 -1924
- package/lib/assets/docs/article/practical-database-design/part3/chapter17.md +0 -1717
- package/lib/assets/docs/article/practical-database-design/part3/chapter18.md +0 -2104
- package/lib/assets/docs/article/practical-database-design/part3/chapter19.md +0 -1132
- package/lib/assets/docs/article/practical-database-design/part3/chapter20.md +0 -1040
- package/lib/assets/docs/article/practical-database-design/part3/chapter21.md +0 -1391
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter14-orm.md +0 -1000
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter15-orm.md +0 -1309
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter16-orm.md +0 -1175
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter17-orm.md +0 -1593
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter18-orm.md +0 -1192
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter19-orm.md +0 -1025
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter20-orm.md +0 -1762
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter21-orm.md +0 -1456
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter22-orm.md +0 -1887
- package/lib/assets/docs/article/practical-database-design/part4/chapter22.md +0 -974
- package/lib/assets/docs/article/practical-database-design/part4/chapter23.md +0 -2078
- package/lib/assets/docs/article/practical-database-design/part4/chapter24.md +0 -2448
- package/lib/assets/docs/article/practical-database-design/part4/chapter25.md +0 -3670
- package/lib/assets/docs/article/practical-database-design/part4/chapter26.md +0 -2925
- package/lib/assets/docs/article/practical-database-design/part4/chapter27.md +0 -3114
- package/lib/assets/docs/article/practical-database-design/part4/chapter28.md +0 -2706
- package/lib/assets/docs/article/practical-database-design/part4/chapter29.md +0 -2552
- package/lib/assets/docs/article/practical-database-design/part4/chapter30.md +0 -2188
- package/lib/assets/docs/article/practical-database-design/part4/chapter31.md +0 -1200
- package/lib/assets/docs/article/practical-database-design/part4/chapter32.md +0 -2109
- package/lib/assets/docs/article/practical-database-design/part5/chapter33.md +0 -1041
- package/lib/assets/docs/article/practical-database-design/part5/chapter34.md +0 -1618
- package/lib/assets/docs/article/practical-database-design/part5/chapter35.md +0 -1462
- package/lib/assets/docs/article/practical-database-design/part5/chapter36.md +0 -1301
- package/lib/assets/docs/article/practical-database-design/part5/chapter37.md +0 -1479
- package/lib/assets/docs/article/practical-database-design/part5/chapter38.md +0 -1707
- package/lib/assets/docs/article/practical-database-design/part5/chapter39.md +0 -2343
- package/lib/assets/docs/article/practical-database-design/study/study2-1.md +0 -1702
- package/lib/assets/docs/article/practical-database-design/study/study2-2.md +0 -1356
- package/lib/assets/docs/article/practical-database-design/study/study2-3.md +0 -2053
- package/lib/assets/docs/article/practical-database-design/study/study2-4.md +0 -2238
- package/lib/assets/docs/article/practical-database-design/study/study2-5.md +0 -2427
- package/lib/assets/docs/article/practical-database-design/study/study3-1.md +0 -2214
- package/lib/assets/docs/article/practical-database-design/study/study3-2.md +0 -2230
- package/lib/assets/docs/article/practical-database-design/study/study3-3.md +0 -2262
- package/lib/assets/docs/article/practical-database-design/study/study3-4.md +0 -2115
- package/lib/assets/docs/article/practical-database-design/study/study3-5.md +0 -2516
- package/lib/assets/docs/article/practical-database-design/study/study4-1.md +0 -2596
- package/lib/assets/docs/article/practical-database-design/study/study4-2.md +0 -2084
- package/lib/assets/docs/article/practical-database-design/study/study4-3.md +0 -1814
- package/lib/assets/docs/article/practical-database-design/study/study4-4.md +0 -1904
- package/lib/assets/docs/article/practical-database-design/study/study4-5.md +0 -2887
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
# Scala で学ぶ関数型デザイン
|
|
2
|
-
|
|
3
|
-
## はじめに
|
|
4
|
-
|
|
5
|
-
本記事シリーズは、関数型プログラミングにおける設計原則とデザインパターンを Scala を使って実践的に学ぶためのガイドです。Scala のオブジェクト指向と関数型のハイブリッドな特性を活かし、従来のデザインパターンを関数型パラダイムでどのように表現し、活用できるかを探求します。
|
|
6
|
-
|
|
7
|
-
## 記事構成
|
|
8
|
-
|
|
9
|
-
### 第1部: 関数型プログラミングの基礎原則
|
|
10
|
-
|
|
11
|
-
1. [不変性とデータ変換](./01-immutability-and-data-transformation.md)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
- case class と不変データ構造
|
|
15
|
-
- データ変換パイプライン
|
|
16
|
-
- 副作用の分離
|
|
17
|
-
|
|
18
|
-
2. [関数合成と高階関数](./02-function-composition.md)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- andThen と compose による関数合成
|
|
22
|
-
- カリー化と部分適用
|
|
23
|
-
- 高階関数の活用
|
|
24
|
-
|
|
25
|
-
3. [多態性の実現方法](./03-polymorphism.md)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
- sealed trait と代数的データ型
|
|
29
|
-
- トレイトとミックスイン
|
|
30
|
-
- 型クラスによる既存型の拡張
|
|
31
|
-
|
|
32
|
-
### 第2部: 仕様とテスト
|
|
33
|
-
|
|
34
|
-
4. [データ検証](./04-data-validation.md)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
- 型によるバリデーション
|
|
38
|
-
- Either によるエラーハンドリング
|
|
39
|
-
- カスタムバリデータの作成
|
|
40
|
-
|
|
41
|
-
5. [プロパティベーステスト](./05-property-based-testing.md)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
- ScalaCheck の基本
|
|
45
|
-
- ジェネレータの作成
|
|
46
|
-
- プロパティの定義と検証
|
|
47
|
-
|
|
48
|
-
6. [TDD と関数型プログラミング](./06-tdd-functional.md)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
- ScalaTest によるテスト
|
|
52
|
-
- Red-Green-Refactor サイクル
|
|
53
|
-
- テストファーストの関数設計
|
|
54
|
-
|
|
55
|
-
### 第3部: 構造パターン
|
|
56
|
-
|
|
57
|
-
7. [Composite パターン](./07-composite-pattern.md)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
- 再帰的なデータ構造
|
|
61
|
-
- ADT によるツリー構造
|
|
62
|
-
- fold による走査
|
|
63
|
-
|
|
64
|
-
8. [Decorator パターン](./08-decorator-pattern.md)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
- 関数合成によるデコレーション
|
|
68
|
-
- 高階関数でのラッピング
|
|
69
|
-
- 振る舞いの動的追加
|
|
70
|
-
|
|
71
|
-
9. [Adapter パターン](./09-adapter-pattern.md)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
- 関数アダプター
|
|
75
|
-
- プロトコル変換
|
|
76
|
-
- レガシーコードとの統合
|
|
77
|
-
|
|
78
|
-
### 第4部: 振る舞いパターン
|
|
79
|
-
|
|
80
|
-
10. [Strategy パターン](./10-strategy-pattern.md)
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- 第一級関数としての戦略
|
|
84
|
-
- 動的な戦略切り替え
|
|
85
|
-
- 戦略の合成
|
|
86
|
-
|
|
87
|
-
11. [Command パターン](./11-command-pattern.md)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
- 不変コマンドオブジェクト
|
|
91
|
-
- コマンドの履歴と Undo
|
|
92
|
-
- マクロコマンド
|
|
93
|
-
|
|
94
|
-
12. [Visitor パターン](./12-visitor-pattern.md)
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
- パターンマッチによる訪問
|
|
98
|
-
- fold ベースのビジター
|
|
99
|
-
- 拡張可能なビジター
|
|
100
|
-
|
|
101
|
-
### 第5部: 生成パターン
|
|
102
|
-
|
|
103
|
-
13. [Abstract Factory パターン](./13-abstract-factory-pattern.md)
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
- 関数ファクトリー
|
|
107
|
-
- 型クラスベースの生成
|
|
108
|
-
- 依存性注入
|
|
109
|
-
|
|
110
|
-
14. [Abstract Server パターン](./14-abstract-server-pattern.md)
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
- トレイトによる抽象化
|
|
114
|
-
- 実装の差し替え
|
|
115
|
-
- テスタブルな設計
|
|
116
|
-
|
|
117
|
-
### 第6部: ケーススタディ
|
|
118
|
-
|
|
119
|
-
15. [ゴシップ好きなバスの運転手](./15-gossiping-bus-drivers.md)
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
- 不変状態の管理
|
|
123
|
-
- シミュレーションの実装
|
|
124
|
-
- 再帰的な処理
|
|
125
|
-
|
|
126
|
-
16. [給与計算システム](./16-payroll-system.md)
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
- ドメインモデリング
|
|
130
|
-
- 多態的な計算
|
|
131
|
-
- レポート生成
|
|
132
|
-
|
|
133
|
-
17. [レンタルビデオシステム](./17-video-rental-system.md)
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
- 状態遷移の管理
|
|
137
|
-
- イベントソーシング
|
|
138
|
-
- ビジネスルールの実装
|
|
139
|
-
|
|
140
|
-
18. [並行処理システム](./18-concurrency-system.md)
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
- 状態マシン
|
|
144
|
-
- イベントバス
|
|
145
|
-
- AtomicReference による同期
|
|
146
|
-
|
|
147
|
-
19. [Wa-Tor シミュレーション](./19-wator-simulation.md)
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
- セルオートマトン
|
|
151
|
-
- 不変グリッドの更新
|
|
152
|
-
- シミュレーションループ
|
|
153
|
-
|
|
154
|
-
### 第7部: まとめと応用
|
|
155
|
-
|
|
156
|
-
20. [パターン間の相互作用](./20-pattern-interactions.md)
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
- Composite + Decorator
|
|
160
|
-
- Command + Observer
|
|
161
|
-
- パターンの組み合わせ
|
|
162
|
-
|
|
163
|
-
21. [ベストプラクティス](./21-best-practices.md)
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
- データ中心設計
|
|
167
|
-
- IO モナド
|
|
168
|
-
- 関数デコレーター
|
|
169
|
-
- テスタブルな設計
|
|
170
|
-
|
|
171
|
-
22. [OO から FP への移行](./22-oo-to-fp-migration.md)
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
- 移行戦略(Strangler Fig、アダプター)
|
|
175
|
-
- イベントソーシング
|
|
176
|
-
- 段階的な関数抽出
|
|
177
|
-
- ADT による多態性
|
|
178
|
-
|
|
179
|
-
---
|
|
180
|
-
|
|
181
|
-
## 本シリーズの特徴
|
|
182
|
-
|
|
183
|
-
### Scala の特性を活かした実装
|
|
184
|
-
|
|
185
|
-
Scala 3 の新機能(enum、given/using、拡張メソッドなど)を活用し、モダンな関数型プログラミングを学びます。
|
|
186
|
-
|
|
187
|
-
### 実践重視
|
|
188
|
-
|
|
189
|
-
すべてのパターンは ScalaTest による実際に動作するテストコードを含みます。理論だけでなく、実装を通じて理解を深めることを重視しています。
|
|
190
|
-
|
|
191
|
-
### 段階的な学習
|
|
192
|
-
|
|
193
|
-
基礎から応用へと段階的に内容が進行します。各章は独立して読むこともできますが、順番に読むことでより深い理解が得られます。
|
|
194
|
-
|
|
195
|
-
---
|
|
196
|
-
|
|
197
|
-
## 対象読者
|
|
198
|
-
|
|
199
|
-
- 関数型プログラミングに興味がある Scala 開発者
|
|
200
|
-
- Scala を学習中の開発者
|
|
201
|
-
- オブジェクト指向デザインパターンの知識があり、関数型での表現を学びたい開発者
|
|
202
|
-
- Clojure 版と比較して学習したい開発者
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## 前提知識
|
|
207
|
-
|
|
208
|
-
- プログラミングの基礎知識
|
|
209
|
-
- Scala の基本的な文法(case class、trait、パターンマッチングなど)
|
|
210
|
-
- デザインパターンの基本概念(推奨)
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
## 開発環境
|
|
215
|
-
|
|
216
|
-
本シリーズのコードは以下の環境で動作確認しています:
|
|
217
|
-
|
|
218
|
-
- Scala 3.3.1
|
|
219
|
-
- sbt 1.9.7
|
|
220
|
-
- ScalaTest 3.2.17
|
|
221
|
-
- Nix による環境管理
|
|
222
|
-
|
|
223
|
-
### 環境構築
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
# Nix を使用した開発環境の起動
|
|
227
|
-
nix develop .#scala
|
|
228
|
-
|
|
229
|
-
# テストの実行
|
|
230
|
-
cd apps/scala/part1
|
|
231
|
-
sbt test
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
## 参考書籍
|
|
237
|
-
|
|
238
|
-
本シリーズは以下の書籍の内容を参考にしています:
|
|
239
|
-
|
|
240
|
-
- 「Functional Design: Principles, Patterns, and Practices」Robert C. Martin
|
|
241
|
-
- 「Functional Programming in Scala」Paul Chiusano, Rúnar Bjarnason
|
|
242
|
-
- 「Programming in Scala」Martin Odersky, Lex Spoon, Bill Venners
|
|
243
|
-
- 「Scala with Cats」Noel Welsh, Dave Gurnell
|
package/lib/assets/docs/article/getting-start-docker-kubernetes/01-container-and-docker-basics.md
DELETED
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: Article
|
|
3
|
-
title: "第 1 章 コンテナと Docker の基礎"
|
|
4
|
-
description: "現代のアプリケーション開発において、コンテナはもはや欠かせない技術となりました。"
|
|
5
|
-
tags: [article, getting-start-docker-kubernetes]
|
|
6
|
-
status: stable
|
|
7
|
-
generated: { by: human:kakimomokuri, at: 2026-06-26T00:29:42Z }
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# 第 1 章 コンテナと Docker の基礎
|
|
11
|
-
|
|
12
|
-

|
|
13
|
-
|
|
14
|
-
*コンテナはアプリケーションと依存関係を箱にまとめ、Docker イメージから実行環境を再現します。*
|
|
15
|
-
|
|
16
|
-
## はじめに
|
|
17
|
-
|
|
18
|
-
現代のアプリケーション開発において、コンテナはもはや欠かせない技術となりました。「自分の環境では動くのに、本番環境では動かない」という、開発者を長年悩ませてきた問題を、コンテナは根本から解決します。
|
|
19
|
-
|
|
20
|
-
この章では、書籍『Docker/Kubernetes 実践コンテナ開発入門(第 2 版)』の第 1 章に沿って、コンテナとは何か、Docker とは何か、なぜコンテナを使うのか、そしてローカルでコンテナを動かす環境をどう整えるのかを順に学びます。後続の章で扱う実用的なイメージ構築や Kubernetes へつなげるための土台となる、もっとも基礎的な内容です。
|
|
21
|
-
|
|
22
|
-
解説には、実際に動作するサンプルリポジトリのコードを引用します。引用元はその都度リポジトリ名とファイルパスで明示しますので、手元で同じものを確認しながら読み進めてください。
|
|
23
|
-
|
|
24
|
-
## 1.1 コンテナとは
|
|
25
|
-
|
|
26
|
-
コンテナとは、アプリケーションとその実行に必要な依存関係(ライブラリ、ランタイム、設定ファイルなど)を 1 つにまとめ、ホスト OS から隔離された状態で動かす仕組みです。アプリケーションを「箱(コンテナ)」に詰めて持ち運べるようにする、というイメージが名前の由来です。
|
|
27
|
-
|
|
28
|
-
### コンテナと仮想マシンの違い
|
|
29
|
-
|
|
30
|
-
コンテナを理解するうえでもっとも重要なのは、仮想マシン(VM)との違いです。両者はどちらも「隔離された実行環境」を提供しますが、その実現方法が大きく異なります。
|
|
31
|
-
|
|
32
|
-
仮想マシンは、ハイパーバイザーの上にゲスト OS を丸ごと動かします。ゲスト OS のカーネルを各 VM が個別に持つため、隔離は強固ですが、起動が遅く、メモリやディスクの消費も大きくなります。
|
|
33
|
-
|
|
34
|
-
一方コンテナは、ホスト OS のカーネルを共有しながら、プロセスをネームスペースや cgroups といった Linux カーネルの機能で隔離します。ゲスト OS を持たないぶん軽量で、起動はほぼ一瞬、1 台のホスト上に多数のコンテナを密に配置できます。
|
|
35
|
-
|
|
36
|
-
```plantuml
|
|
37
|
-
@startuml
|
|
38
|
-
title 仮想マシンとコンテナの構造の違い
|
|
39
|
-
|
|
40
|
-
rectangle "仮想マシン" {
|
|
41
|
-
rectangle "ハードウェア" as VM_HW
|
|
42
|
-
rectangle "ホスト OS" as VM_HOST
|
|
43
|
-
rectangle "ハイパーバイザー" as HV
|
|
44
|
-
rectangle "ゲスト OS A\n+ アプリ A" as VM_A
|
|
45
|
-
rectangle "ゲスト OS B\n+ アプリ B" as VM_B
|
|
46
|
-
VM_HW -down-> VM_HOST
|
|
47
|
-
VM_HOST -down-> HV
|
|
48
|
-
HV -down-> VM_A
|
|
49
|
-
HV -down-> VM_B
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
rectangle "コンテナ" {
|
|
53
|
-
rectangle "ハードウェア" as C_HW
|
|
54
|
-
rectangle "ホスト OS(カーネル共有)" as C_HOST
|
|
55
|
-
rectangle "コンテナエンジン" as ENGINE
|
|
56
|
-
rectangle "コンテナ A\n(アプリ A)" as C_A
|
|
57
|
-
rectangle "コンテナ B\n(アプリ B)" as C_B
|
|
58
|
-
C_HW -down-> C_HOST
|
|
59
|
-
C_HOST -down-> ENGINE
|
|
60
|
-
ENGINE -down-> C_A
|
|
61
|
-
ENGINE -down-> C_B
|
|
62
|
-
}
|
|
63
|
-
@enduml
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
両者の違いを整理すると次のようになります。
|
|
67
|
-
|
|
68
|
-
| 観点 | 仮想マシン | コンテナ |
|
|
69
|
-
| :--- | :--- | :--- |
|
|
70
|
-
| 隔離の単位 | ゲスト OS ごと | プロセス単位 |
|
|
71
|
-
| OS カーネル | ゲストごとに個別 | ホストと共有 |
|
|
72
|
-
| 起動時間 | 数十秒〜分 | 数百ミリ秒〜秒 |
|
|
73
|
-
| リソース消費 | 大きい | 小さい |
|
|
74
|
-
| 隔離の強度 | 強い | VM より弱い |
|
|
75
|
-
|
|
76
|
-
コンテナは軽量で素早く起動できる反面、ホストのカーネルを共有するという性質上、隔離の強度は仮想マシンに及びません。用途に応じて使い分けることが大切です。
|
|
77
|
-
|
|
78
|
-
### イメージとコンテナの関係
|
|
79
|
-
|
|
80
|
-
コンテナを語るうえで欠かせないのが「イメージ」という概念です。
|
|
81
|
-
|
|
82
|
-
- **イメージ(image)** … アプリケーションと依存関係をまとめた、読み取り専用のテンプレートです。コンテナの設計図にあたります。
|
|
83
|
-
- **コンテナ(container)** … イメージを起動して実行状態にしたものです。同じイメージから複数のコンテナを起動できます。
|
|
84
|
-
|
|
85
|
-
クラスとインスタンスの関係に例えると理解しやすいでしょう。イメージがクラス、コンテナがそのインスタンスにあたります。1 つのイメージから何個でも同じコンテナを生み出せるという点が、コンテナの再現性を支えています。
|
|
86
|
-
|
|
87
|
-
## 1.2 Docker とは
|
|
88
|
-
|
|
89
|
-
Docker は、コンテナを「作る・動かす・配布する」ための代表的なプラットフォームです。コンテナという技術自体は Linux カーネルの機能に基づきますが、それを誰でも扱える形に整え、広く普及させたのが Docker です。
|
|
90
|
-
|
|
91
|
-
### Docker のアーキテクチャ
|
|
92
|
-
|
|
93
|
-
Docker は単一のプログラムではなく、役割の異なる複数のコンポーネントが連携して動作します。
|
|
94
|
-
|
|
95
|
-
- **Docker クライアント(docker CLI)** … 利用者が `docker run` などのコマンドを打ち込む窓口です。
|
|
96
|
-
- **dockerd(Docker デーモン)** … クライアントからの要求を受け取り、イメージやコンテナ、ネットワークなどを管理する常駐プロセスです。
|
|
97
|
-
- **containerd** … コンテナのライフサイクル(生成・開始・停止・削除)を司る高レベルランタイムです。
|
|
98
|
-
- **runc** … OCI(Open Container Initiative)仕様に従い、実際にコンテナのプロセスを生成する低レベルランタイムです。
|
|
99
|
-
|
|
100
|
-
利用者のコマンドは「docker CLI → dockerd → containerd → runc」という流れで処理され、最終的に runc がカーネル機能を使ってコンテナを起動します。
|
|
101
|
-
|
|
102
|
-
```plantuml
|
|
103
|
-
@startuml
|
|
104
|
-
title Docker のアーキテクチャ
|
|
105
|
-
|
|
106
|
-
actor 利用者 as user
|
|
107
|
-
rectangle "docker CLI\n(クライアント)" as cli
|
|
108
|
-
rectangle "dockerd\n(デーモン)" as dockerd
|
|
109
|
-
rectangle "containerd\n(高レベルランタイム)" as containerd
|
|
110
|
-
rectangle "runc\n(低レベルランタイム)" as runc
|
|
111
|
-
rectangle "コンテナ" as container
|
|
112
|
-
|
|
113
|
-
user --> cli : docker run など
|
|
114
|
-
cli --> dockerd : API リクエスト
|
|
115
|
-
dockerd --> containerd : 管理を委譲
|
|
116
|
-
containerd --> runc : プロセス生成
|
|
117
|
-
runc --> container : 起動
|
|
118
|
-
@enduml
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
このように責務が分離されているおかげで、たとえば Kubernetes は dockerd を経由せず containerd を直接利用するといった構成も取れます。コンテナエコシステムの広がりは、この層構造に支えられています。
|
|
122
|
-
|
|
123
|
-
### イメージとレイヤ
|
|
124
|
-
|
|
125
|
-
Docker イメージは、複数の読み取り専用「レイヤ」が積み重なってできています。Dockerfile に書かれた命令(`FROM`、`RUN`、`COPY` など)の 1 つひとつが、おおむね 1 つのレイヤを生成します。
|
|
126
|
-
|
|
127
|
-
レイヤ構造には次の利点があります。
|
|
128
|
-
|
|
129
|
-
- **キャッシュの再利用** … 変更のないレイヤはビルド時に再利用され、ビルドが高速になります。
|
|
130
|
-
- **ストレージの節約** … 同じレイヤを複数のイメージで共有でき、ディスク使用量を抑えられます。
|
|
131
|
-
- **差分配布** … イメージを取得(pull)する際、すでに持っているレイヤはダウンロードを省略できます。
|
|
132
|
-
|
|
133
|
-
コンテナを起動すると、これらの読み取り専用レイヤの上に書き込み可能なレイヤが 1 枚追加されます。コンテナ内での変更はこの書き込みレイヤに記録され、元のイメージは変更されません。これがコンテナの再現性を保つ仕組みです。
|
|
134
|
-
|
|
135
|
-
### Dockerfile を読む
|
|
136
|
-
|
|
137
|
-
イメージのビルド手順を記述するのが Dockerfile です。最小のサンプルとして、`echo` リポジトリの `apps/echo/Dockerfile` を見てみましょう。
|
|
138
|
-
|
|
139
|
-
```dockerfile
|
|
140
|
-
FROM golang:1.21.6
|
|
141
|
-
|
|
142
|
-
LABEL org.opencontainers.image.source=https://github.com/gihyodocker/echo
|
|
143
|
-
|
|
144
|
-
WORKDIR /go/src/github.com/gihyodocker/echo
|
|
145
|
-
COPY main.go .
|
|
146
|
-
RUN go mod init
|
|
147
|
-
|
|
148
|
-
CMD ["go", "run", "main.go"]
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
各命令の意味は次のとおりです。
|
|
152
|
-
|
|
153
|
-
- `FROM golang:1.21.6` … ベースイメージとして Go 1.21.6 の公式イメージを指定します。すべてのイメージは必ず `FROM` から始まります。
|
|
154
|
-
- `LABEL ...` … イメージにメタデータ(ここではソースリポジトリの URL)を付与します。
|
|
155
|
-
- `WORKDIR ...` … 以降の命令を実行する作業ディレクトリを設定します。
|
|
156
|
-
- `COPY main.go .` … ホスト側の `main.go` をイメージ内の作業ディレクトリへコピーします。
|
|
157
|
-
- `RUN go mod init` … ビルド時にコマンドを実行します(ここでは Go モジュールの初期化)。
|
|
158
|
-
- `CMD ["go", "run", "main.go"]` … コンテナ起動時に実行するデフォルトコマンドを指定します。
|
|
159
|
-
|
|
160
|
-
この Dockerfile が動かすアプリケーションは、`apps/echo/main.go` に書かれた、HTTP リクエストに対して文字列を返すだけのシンプルな Web サーバです。
|
|
161
|
-
|
|
162
|
-
```go
|
|
163
|
-
func main() {
|
|
164
|
-
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
|
165
|
-
log.Println("Received request")
|
|
166
|
-
fmt.Fprintf(w, "Hello Container!!")
|
|
167
|
-
})
|
|
168
|
-
|
|
169
|
-
log.Println("Start server")
|
|
170
|
-
server := &http.Server{Addr: ":8080"}
|
|
171
|
-
// ... 中略(シグナルを受けてグレースフルシャットダウンする処理が続く)
|
|
172
|
-
}
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
ポート `8080` で待ち受け、`/` へのアクセスに `Hello Container!!` を返します。なお `apps/echo/README-ja.md` には、このサンプルについて次のような注意書きがあります。
|
|
176
|
-
|
|
177
|
-
> 通常、Go言語のアプリケーションはビルドしてできた実行ファイルをコンテナイメージに含めます。しかし、ここではコンテナイメージのビルド手順をシンプルに読者に伝えるために、実行ファイルを作らずに実行しています。
|
|
178
|
-
|
|
179
|
-
つまり `CMD` で `go run` を使うこの書き方は、学習用に手順を単純化したものです。実用的なビルド方法(実行ファイルを作成して軽量イメージに含める方法)は、第 3 章や第 10 章で扱います。
|
|
180
|
-
|
|
181
|
-
### さまざまなベースイメージ
|
|
182
|
-
|
|
183
|
-
ベースイメージは目的に応じて選びます。`container-kit` リポジトリには、用途の異なる補助コンテナの Dockerfile がまとまっています。たとえばデバッグ用コンテナ `apps/container-kit/containers/debug/Dockerfile` は次のようになっています。
|
|
184
|
-
|
|
185
|
-
```dockerfile
|
|
186
|
-
FROM ubuntu:23.10
|
|
187
|
-
|
|
188
|
-
LABEL org.opencontainers.image.source=https://github.com/gihyodocker/container-kit
|
|
189
|
-
|
|
190
|
-
RUN apt update -y
|
|
191
|
-
RUN apt install -y curl wget git zip telnet vim default-mysql-client iputils-ping net-tools dnsutils
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
これは Ubuntu をベースに、ネットワーク調査やデータベース接続確認に使うツール群をインストールしたものです。コンテナ環境の中に入って調査するための「踏み台」として使います。
|
|
195
|
-
|
|
196
|
-
一方、リバースプロキシ用の `apps/container-kit/containers/simple-nginx-proxy/Dockerfile` は、Nginx の公式イメージをベースにしています。
|
|
197
|
-
|
|
198
|
-
```dockerfile
|
|
199
|
-
FROM nginx:1.25.1
|
|
200
|
-
|
|
201
|
-
LABEL org.opencontainers.image.source=https://github.com/gihyodocker/container-kit
|
|
202
|
-
|
|
203
|
-
COPY ./etc/nginx /etc/nginx
|
|
204
|
-
RUN rm /etc/nginx/conf.d/default.conf
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
ミドルウェアの公式イメージをベースにして、自前の設定ファイルを `COPY` で重ねるという、実務でよく使うパターンです。このように、何を動かしたいかによってベースイメージは大きく変わります。
|
|
208
|
-
|
|
209
|
-
## 1.3 コンテナを利用する意義
|
|
210
|
-
|
|
211
|
-
なぜコンテナを使うのでしょうか。技術的な目新しさではなく、実際の開発・運用で得られる価値の観点から整理します。
|
|
212
|
-
|
|
213
|
-
### 環境の再現性
|
|
214
|
-
|
|
215
|
-
コンテナの最大の価値は、環境の再現性です。アプリケーションと依存関係をイメージにまとめておけば、開発者のマシン、テスト環境、本番環境のどこで動かしても同じように動作します。「自分の環境では動く」という属人的な状態から脱却できます。
|
|
216
|
-
|
|
217
|
-
### ポータビリティ(可搬性)
|
|
218
|
-
|
|
219
|
-
イメージはレジストリ(Docker Hub など)を介して配布できます。ビルドしたイメージをどこへでも持ち運び、同じものを起動できます。OS のバージョンや個々のマシンの設定差に振り回されることが減ります。
|
|
220
|
-
|
|
221
|
-
### 軽量さと起動の速さ
|
|
222
|
-
|
|
223
|
-
仮想マシンと違い、コンテナはホストのカーネルを共有するため軽量で、起動も高速です。これにより、必要なときに素早くコンテナを立ち上げ、不要になれば破棄するという使い捨ての運用がしやすくなります。
|
|
224
|
-
|
|
225
|
-
### スケーラビリティとオーケストレーションへの道
|
|
226
|
-
|
|
227
|
-
同じイメージから複数のコンテナを起動できる性質は、負荷に応じてコンテナ数を増減させる水平スケールと相性が抜群です。多数のコンテナを束ねて管理する仕組みがコンテナオーケストレーションであり、その代表が Kubernetes です。本書の後半(第 5 章以降)で扱う Kubernetes は、まさにこのコンテナの性質を最大限に活かすための基盤です。
|
|
228
|
-
|
|
229
|
-
### 用途を選ばない汎用性
|
|
230
|
-
|
|
231
|
-
コンテナは Web サーバのような常駐型アプリケーションだけのものではありません。一定時間で完了して終了する「ジョブ」もコンテナで表現できます。`apps/container-kit/containers/time-limit-job/Dockerfile` はその一例です。
|
|
232
|
-
|
|
233
|
-
```dockerfile
|
|
234
|
-
FROM ubuntu:23.10
|
|
235
|
-
|
|
236
|
-
LABEL org.opencontainers.image.source=https://github.com/gihyodocker/container-kit
|
|
237
|
-
|
|
238
|
-
ENV EXECUTION_SECONDS 5
|
|
239
|
-
|
|
240
|
-
COPY task.sh /usr/local/bin/
|
|
241
|
-
|
|
242
|
-
CMD ["sh", "-c", "task.sh"]
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
`ENV` で環境変数(実行秒数)を設定し、`task.sh` を実行するコンテナです。常駐サーバから使い捨てのバッチ処理まで、同じ仕組みで扱える汎用性もコンテナの大きな意義です。
|
|
246
|
-
|
|
247
|
-
## 1.4 ローカルコンテナ実行環境の構築
|
|
248
|
-
|
|
249
|
-
コンテナを学ぶには、まず手元の PC で Docker を動かせるようにする必要があります。
|
|
250
|
-
|
|
251
|
-
### ローカル環境構築の選択肢
|
|
252
|
-
|
|
253
|
-
ローカルでコンテナ実行環境を整える代表的な方法には、次のものがあります。
|
|
254
|
-
|
|
255
|
-
- **Docker Desktop** … Windows / macOS 向けの公式デスクトップアプリです。GUI と CLI が一式そろい、もっとも手軽に始められます。なお、一定規模以上の組織での商用利用にはライセンスが必要な点に注意してください。
|
|
256
|
-
- **Rancher Desktop** … オープンソースのデスクトップアプリです。コンテナエンジンとして dockerd(moby)または containerd を選択でき、Kubernetes をローカルで簡単に有効化できます。
|
|
257
|
-
- **Linux ネイティブ** … Linux 上では Docker Engine を直接インストールして利用できます。
|
|
258
|
-
|
|
259
|
-
いずれを選んでも、`docker` コマンドでコンテナを操作するという基本的な使い勝手は共通です。本シリーズでは、WSL2 や Rancher Desktop などを使ったローカル環境構築の詳しい手順を付録 A で扱います。この章では、環境が整ったあとに行う基本的な動作確認の流れだけを示します。
|
|
260
|
-
|
|
261
|
-
### 動作確認の基本コマンド
|
|
262
|
-
|
|
263
|
-
環境構築が済んだら、まず Docker が正しく動いているかを確認します。
|
|
264
|
-
|
|
265
|
-
```bash
|
|
266
|
-
# Docker のバージョンを確認する
|
|
267
|
-
docker version
|
|
268
|
-
|
|
269
|
-
# Docker が動作しているか、簡単なイメージを実行して確認する
|
|
270
|
-
docker run hello-world
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
`docker run hello-world` を実行すると、Docker がイメージをローカルに探し、なければレジストリから取得(pull)したうえでコンテナを起動します。動作確認用のメッセージが表示されれば成功です(出力の具体的な内容は環境や Docker のバージョンによって異なります)。
|
|
274
|
-
|
|
275
|
-
### echo サンプルでイメージのビルドと実行を体験する
|
|
276
|
-
|
|
277
|
-
先ほど見た `echo` サンプルを使って、イメージのビルドからコンテナ実行までの一連の流れを確認しましょう。`apps/echo/Dockerfile` のあるディレクトリで、次のコマンドを順に実行します。
|
|
278
|
-
|
|
279
|
-
```bash
|
|
280
|
-
# Dockerfile からイメージをビルドする(-t でイメージ名を付ける)
|
|
281
|
-
docker build -t example/echo:latest .
|
|
282
|
-
|
|
283
|
-
# ビルドしたイメージの一覧を確認する
|
|
284
|
-
docker images
|
|
285
|
-
|
|
286
|
-
# イメージからコンテナを起動する(ホストの 8080 番をコンテナの 8080 番へ接続)
|
|
287
|
-
docker run -p 8080:8080 example/echo:latest
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
`docker build` の最後の `.`(ドット)は、ビルドコンテキスト(Dockerfile や `COPY` 対象が置かれた場所)として現在のディレクトリを指定するものです。`docker run` の `-p 8080:8080` は、ホスト側のポートとコンテナ側のポートを結びつけるオプションです。
|
|
291
|
-
|
|
292
|
-
コンテナが起動したら、別のターミナルから動作を確認します。
|
|
293
|
-
|
|
294
|
-
```bash
|
|
295
|
-
# 起動中のコンテナへリクエストを送る
|
|
296
|
-
curl http://localhost:8080/
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
`apps/echo/main.go` の実装どおり、`Hello Container!!` という応答が返ってきます。アプリケーションのソースを直接インストールせず、コンテナを起動するだけで動かせたことが、コンテナの再現性とポータビリティを体感できる瞬間です。
|
|
300
|
-
|
|
301
|
-
### よく使う基本コマンド
|
|
302
|
-
|
|
303
|
-
最後に、この先の章でも繰り返し使う基本コマンドをまとめておきます。
|
|
304
|
-
|
|
305
|
-
| コマンド | 役割 |
|
|
306
|
-
| :--- | :--- |
|
|
307
|
-
| `docker build -t 名前 .` | Dockerfile からイメージをビルドする |
|
|
308
|
-
| `docker images` | ローカルのイメージ一覧を表示する |
|
|
309
|
-
| `docker run イメージ` | イメージからコンテナを起動する |
|
|
310
|
-
| `docker ps` | 起動中のコンテナ一覧を表示する |
|
|
311
|
-
| `docker ps -a` | 停止中も含む全コンテナを表示する |
|
|
312
|
-
| `docker stop コンテナ` | コンテナを停止する |
|
|
313
|
-
| `docker rm コンテナ` | コンテナを削除する |
|
|
314
|
-
| `docker rmi イメージ` | イメージを削除する |
|
|
315
|
-
|
|
316
|
-
これらのコマンドの詳しい使い方や、`docker run` の各種オプション、Docker Compose による複数コンテナの扱いについては、次章で本格的に学びます。
|
|
317
|
-
|
|
318
|
-
## まとめ
|
|
319
|
-
|
|
320
|
-
この章では、コンテナと Docker のもっとも基礎的な部分を学びました。要点を整理します。
|
|
321
|
-
|
|
322
|
-
| トピック | キーポイント |
|
|
323
|
-
| :--- | :--- |
|
|
324
|
-
| コンテナとは | アプリと依存関係をまとめて隔離実行する仕組み。VM と違いホストのカーネルを共有し軽量 |
|
|
325
|
-
| イメージとコンテナ | イメージは設計図、コンテナはその実行インスタンス |
|
|
326
|
-
| Docker のアーキテクチャ | docker CLI → dockerd → containerd → runc の層構造 |
|
|
327
|
-
| イメージとレイヤ | 命令ごとにレイヤが積み重なり、キャッシュ・共有・差分配布を実現 |
|
|
328
|
-
| 利用の意義 | 再現性、ポータビリティ、軽量さ、スケーラビリティ、用途の汎用性 |
|
|
329
|
-
| ローカル環境構築 | Docker Desktop / Rancher Desktop などを利用。詳細手順は付録 A |
|
|
330
|
-
|
|
331
|
-
コンテナは「変更を楽に安全に行い、どこでも同じように動かす」という、よいソフトウェアづくりを支える土台です。次章では、`echo` サンプルを題材に、アプリケーションの実行・イメージ作成・コンテナ操作・Docker Compose による複数コンテナの管理を、実際にコマンドを動かしながら掘り下げていきます。
|
|
332
|
-
|
|
333
|
-
---
|
|
334
|
-
|
|
335
|
-
- 次章: [第 2 章 コンテナのデプロイ](02-container-deployment.md)
|
|
336
|
-
- 目次: [記事トップ](index.md)
|
|
337
|
-
|
|
338
|
-
### 参考
|
|
339
|
-
|
|
340
|
-
- 『Docker/Kubernetes 実践コンテナ開発入門(第 2 版)』 — 山田明憲
|
|
341
|
-
- サンプルコード: `apps/echo/`、`apps/container-kit/containers/`(`tmp/` 配下)
|